aboutsummaryrefslogtreecommitdiffstats
path: root/target
diff options
context:
space:
mode:
authorSven Wegener <sven.wegener@stealer.net>2021-06-12 21:56:22 +0200
committerDaniel Golle <daniel@makrotopia.org>2022-09-11 20:26:42 +0100
commit013a956f086dc5d88f6e9cbd852ed4d900d436e0 (patch)
treed42d755daff2b210d29f15ecf72e9ecb2d332faa /target
parent84e4bbf5f049cdb862eb25c446bd6973ed4238aa (diff)
downloadupstream-013a956f086dc5d88f6e9cbd852ed4d900d436e0.tar.gz
upstream-013a956f086dc5d88f6e9cbd852ed4d900d436e0.tar.bz2
upstream-013a956f086dc5d88f6e9cbd852ed4d900d436e0.zip
mediatek: add initialization after reset
During GPIO initialization the pin state flips and triggers a reset of the ledbar MCU. It needs to be moved through an initialization sequence before working correctly. Signed-off-by: Sven Wegener <sven.wegener@stealer.net>
Diffstat (limited to 'target')
-rw-r--r--target/linux/mediatek/files/drivers/leds/leds-ubnt-ledbar.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/target/linux/mediatek/files/drivers/leds/leds-ubnt-ledbar.c b/target/linux/mediatek/files/drivers/leds/leds-ubnt-ledbar.c
index 1d687b7686..10d240d2be 100644
--- a/target/linux/mediatek/files/drivers/leds/leds-ubnt-ledbar.c
+++ b/target/linux/mediatek/files/drivers/leds/leds-ubnt-ledbar.c
@@ -99,6 +99,12 @@ out_gpio:
static void ubnt_ledbar_reset(struct ubnt_ledbar *ledbar)
{
+ static const char init_msg[16] = {0x02, 0x81, 0xfd, 0x7e,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00};
+ char init_response[4];
+
if (!ledbar->reset_gpio)
return;
@@ -108,6 +114,14 @@ static void ubnt_ledbar_reset(struct ubnt_ledbar *ledbar)
msleep(10);
gpiod_set_value(ledbar->reset_gpio, 0);
+ msleep(10);
+
+ gpiod_set_value(ledbar->enable_gpio, 1);
+ msleep(10);
+ ubnt_ledbar_perform_transaction(ledbar, init_msg, sizeof(init_msg), init_response, sizeof(init_response));
+ msleep(10);
+ gpiod_set_value(ledbar->enable_gpio, 0);
+
mutex_unlock(&ledbar->lock);
}