[openwrt/openwrt] mediatek: add initialization after reset

LEDE Commits lede-commits at lists.infradead.org
Sun Sep 11 12:28:13 PDT 2022


dangole pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/013a956f086dc5d88f6e9cbd852ed4d900d436e0

commit 013a956f086dc5d88f6e9cbd852ed4d900d436e0
Author: Sven Wegener <sven.wegener at stealer.net>
AuthorDate: Sat Jun 12 21:56:22 2021 +0200

    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 at stealer.net>
---
 .../linux/mediatek/files/drivers/leds/leds-ubnt-ledbar.c   | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

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);
 }
 




More information about the lede-commits mailing list