mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-02 03:56:49 +00:00
mediatek: add led count
The LEDs connected to the MCU are so-called smart LEDs and their signal is
daisy-chained. Because of this, the MCU needs to be told how many LEDs are
connected. It also means the LEDs could be individually controlled, if the MCU
has a command for this.
Signed-off-by: Sven Wegener <sven.wegener@stealer.net>
(cherry picked from commit 76198e8f09
)
This commit is contained in:
parent
40610c5322
commit
420a86436f
@ -31,9 +31,11 @@
|
|||||||
#define UBNT_LEDBAR_TRANSACTION_BLUE_IDX 2
|
#define UBNT_LEDBAR_TRANSACTION_BLUE_IDX 2
|
||||||
#define UBNT_LEDBAR_TRANSACTION_GREEN_IDX 3
|
#define UBNT_LEDBAR_TRANSACTION_GREEN_IDX 3
|
||||||
#define UBNT_LEDBAR_TRANSACTION_RED_IDX 4
|
#define UBNT_LEDBAR_TRANSACTION_RED_IDX 4
|
||||||
|
#define UBNT_LEDBAR_TRANSACTION_LED_COUNT_IDX 6
|
||||||
|
|
||||||
struct ubnt_ledbar {
|
struct ubnt_ledbar {
|
||||||
struct mutex lock;
|
struct mutex lock;
|
||||||
|
u32 led_count;
|
||||||
struct i2c_client *client;
|
struct i2c_client *client;
|
||||||
struct led_classdev led_red;
|
struct led_classdev led_red;
|
||||||
struct led_classdev led_green;
|
struct led_classdev led_green;
|
||||||
@ -60,7 +62,7 @@ static int ubnt_ledbar_apply_state(struct ubnt_ledbar *ledbar)
|
|||||||
char setup_msg[UBNT_LEDBAR_TRANSACTION_LENGTH] = {0x40, 0x10, 0x00, 0x00,
|
char setup_msg[UBNT_LEDBAR_TRANSACTION_LENGTH] = {0x40, 0x10, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x11};
|
0x00, 0x00, 0x00, 0x11};
|
||||||
char led_msg[UBNT_LEDBAR_TRANSACTION_LENGTH] = {0x40, 0x00, 0x00, 0x00,
|
char led_msg[UBNT_LEDBAR_TRANSACTION_LENGTH] = {0x40, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x01, 0x00};
|
0x00, 0x00, 0x00, 0x00};
|
||||||
char i2c_response;
|
char i2c_response;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
@ -69,6 +71,7 @@ static int ubnt_ledbar_apply_state(struct ubnt_ledbar *ledbar)
|
|||||||
led_msg[UBNT_LEDBAR_TRANSACTION_BLUE_IDX] = ledbar->led_blue.brightness;
|
led_msg[UBNT_LEDBAR_TRANSACTION_BLUE_IDX] = ledbar->led_blue.brightness;
|
||||||
led_msg[UBNT_LEDBAR_TRANSACTION_GREEN_IDX] = ledbar->led_green.brightness;
|
led_msg[UBNT_LEDBAR_TRANSACTION_GREEN_IDX] = ledbar->led_green.brightness;
|
||||||
led_msg[UBNT_LEDBAR_TRANSACTION_RED_IDX] = ledbar->led_red.brightness;
|
led_msg[UBNT_LEDBAR_TRANSACTION_RED_IDX] = ledbar->led_red.brightness;
|
||||||
|
led_msg[UBNT_LEDBAR_TRANSACTION_LED_COUNT_IDX] = ledbar->led_count;
|
||||||
|
|
||||||
gpiod_set_value(ledbar->enable_gpio, 1);
|
gpiod_set_value(ledbar->enable_gpio, 1);
|
||||||
|
|
||||||
@ -191,6 +194,9 @@ static int ubnt_ledbar_probe(struct i2c_client *client,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ledbar->led_count = 1;
|
||||||
|
of_property_read_u32(np, "led-count", &ledbar->led_count);
|
||||||
|
|
||||||
ledbar->client = client;
|
ledbar->client = client;
|
||||||
|
|
||||||
mutex_init(&ledbar->lock);
|
mutex_init(&ledbar->lock);
|
||||||
|
Loading…
Reference in New Issue
Block a user