diff options
author | Álvaro Fernández Rojas <noltari@gmail.com> | 2015-10-08 06:35:54 -0400 |
---|---|---|
committer | Jacek Anaszewski <j.anaszewski@samsung.com> | 2015-11-03 02:59:44 -0500 |
commit | 9f82c778ce17789a038351a411ff65cd41033c7a (patch) | |
tree | a6aaeeb31a26452b9dad9b5290d9aaba069c8312 | |
parent | d8fe1606d1a7181c877d8b1727cdcfb82f76e91c (diff) |
leds-bcm6328: add more init configuration options
This patch adds more init register configuration options:
- Serial LEDs multiplexing.
- Serial LEDs clock signal low/high polarity.
- Serial LEDs data signal low/high polarity.
- Serial LEDs shift direction inverted/normal.
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
-rw-r--r-- | drivers/leds/leds-bcm6328.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/leds/leds-bcm6328.c b/drivers/leds/leds-bcm6328.c index bf063fae4ad0..18de0942c795 100644 --- a/drivers/leds/leds-bcm6328.c +++ b/drivers/leds/leds-bcm6328.c | |||
@@ -41,6 +41,11 @@ | |||
41 | #define BCM6328_SERIAL_LED_SHIFT_DIR BIT(16) | 41 | #define BCM6328_SERIAL_LED_SHIFT_DIR BIT(16) |
42 | #define BCM6328_LED_SHIFT_TEST BIT(30) | 42 | #define BCM6328_LED_SHIFT_TEST BIT(30) |
43 | #define BCM6328_LED_TEST BIT(31) | 43 | #define BCM6328_LED_TEST BIT(31) |
44 | #define BCM6328_INIT_MASK (BCM6328_SERIAL_LED_EN | \ | ||
45 | BCM6328_SERIAL_LED_MUX | \ | ||
46 | BCM6328_SERIAL_LED_CLK_NPOL | \ | ||
47 | BCM6328_SERIAL_LED_DATA_PPOL | \ | ||
48 | BCM6328_SERIAL_LED_SHIFT_DIR) | ||
44 | 49 | ||
45 | #define BCM6328_LED_MODE_MASK 3 | 50 | #define BCM6328_LED_MODE_MASK 3 |
46 | #define BCM6328_LED_MODE_OFF 0 | 51 | #define BCM6328_LED_MODE_OFF 0 |
@@ -366,9 +371,17 @@ static int bcm6328_leds_probe(struct platform_device *pdev) | |||
366 | bcm6328_led_write(mem + BCM6328_REG_LNKACTSEL_LO, 0); | 371 | bcm6328_led_write(mem + BCM6328_REG_LNKACTSEL_LO, 0); |
367 | 372 | ||
368 | val = bcm6328_led_read(mem + BCM6328_REG_INIT); | 373 | val = bcm6328_led_read(mem + BCM6328_REG_INIT); |
369 | val &= ~BCM6328_SERIAL_LED_EN; | 374 | val &= ~(BCM6328_INIT_MASK); |
370 | if (of_property_read_bool(np, "brcm,serial-leds")) | 375 | if (of_property_read_bool(np, "brcm,serial-leds")) |
371 | val |= BCM6328_SERIAL_LED_EN; | 376 | val |= BCM6328_SERIAL_LED_EN; |
377 | if (of_property_read_bool(np, "brcm,serial-mux")) | ||
378 | val |= BCM6328_SERIAL_LED_MUX; | ||
379 | if (of_property_read_bool(np, "brcm,serial-clk-low")) | ||
380 | val |= BCM6328_SERIAL_LED_CLK_NPOL; | ||
381 | if (!of_property_read_bool(np, "brcm,serial-dat-low")) | ||
382 | val |= BCM6328_SERIAL_LED_DATA_PPOL; | ||
383 | if (!of_property_read_bool(np, "brcm,serial-shift-inv")) | ||
384 | val |= BCM6328_SERIAL_LED_SHIFT_DIR; | ||
372 | bcm6328_led_write(mem + BCM6328_REG_INIT, val); | 385 | bcm6328_led_write(mem + BCM6328_REG_INIT, val); |
373 | 386 | ||
374 | for_each_available_child_of_node(np, child) { | 387 | for_each_available_child_of_node(np, child) { |