mfd: dm355evm_msp: Convert LEDs to GPIO descriptor table
authorLinus Walleij <linus.walleij@linaro.org>
Wed, 26 Aug 2020 20:21:49 +0000 (22:21 +0200)
committerLee Jones <lee.jones@linaro.org>
Wed, 30 Sep 2020 15:25:03 +0000 (16:25 +0100)
This converts the DaVinci DM355EVM LEDs to use GPIO descriptor look-ups.

Cc: Sekhar Nori <nsekhar@ti.com>
Cc: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/mfd/dm355evm_msp.c

index 151c36c..54fb6cb 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/module.h>
 #include <linux/err.h>
 #include <linux/gpio.h>
+#include <linux/gpio/machine.h>
 #include <linux/leds.h>
 #include <linux/i2c.h>
 #include <linux/mfd/dm355evm_msp.h>
@@ -116,6 +117,54 @@ static const u8 msp_gpios[] = {
        MSP_GPIO(4, SDMMC), MSP_GPIO(3, SDMMC), /* mmc1 WP, nCD */
 };
 
+static struct gpio_led evm_leds[] = {
+       { .name = "dm355evm::ds14",
+         .default_trigger = "heartbeat", },
+       { .name = "dm355evm::ds15",
+         .default_trigger = "mmc0", },
+       { .name = "dm355evm::ds16",
+         /* could also be a CE-ATA drive */
+         .default_trigger = "mmc1", },
+       { .name = "dm355evm::ds17",
+         .default_trigger = "nand-disk", },
+       { .name = "dm355evm::ds18", },
+       { .name = "dm355evm::ds19", },
+       { .name = "dm355evm::ds20", },
+       { .name = "dm355evm::ds21", },
+};
+
+static struct gpio_led_platform_data evm_led_data = {
+       .num_leds       = ARRAY_SIZE(evm_leds),
+       .leds           = evm_leds,
+};
+
+static struct gpiod_lookup_table evm_leds_gpio_table = {
+       .dev_id = "leds-gpio",
+       .table = {
+               /*
+                * These GPIOs are on the dm355evm_msp
+                * GPIO chip at index 0..7
+                */
+               GPIO_LOOKUP_IDX("dm355evm_msp", 0, NULL,
+                               0, GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP_IDX("dm355evm_msp", 1, NULL,
+                               1, GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP_IDX("dm355evm_msp", 2, NULL,
+                               2, GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP_IDX("dm355evm_msp", 3, NULL,
+                               3, GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP_IDX("dm355evm_msp", 4, NULL,
+                               4, GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP_IDX("dm355evm_msp", 5, NULL,
+                               5, GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP_IDX("dm355evm_msp", 6, NULL,
+                               6, GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP_IDX("dm355evm_msp", 7, NULL,
+                               7, GPIO_ACTIVE_LOW),
+               { },
+       },
+};
+
 #define MSP_GPIO_REG(offset)   (msp_gpios[(offset)] >> 3)
 #define MSP_GPIO_MASK(offset)  BIT(msp_gpios[(offset)] & 0x07)
 
@@ -260,32 +309,7 @@ static int add_children(struct i2c_client *client)
 
        /* LED output */
        if (msp_has_leds()) {
-#define GPIO_LED(l)    .name = l, .active_low = true
-               static struct gpio_led evm_leds[] = {
-                       { GPIO_LED("dm355evm::ds14"),
-                               .default_trigger = "heartbeat", },
-                       { GPIO_LED("dm355evm::ds15"),
-                               .default_trigger = "mmc0", },
-                       { GPIO_LED("dm355evm::ds16"),
-                               /* could also be a CE-ATA drive */
-                               .default_trigger = "mmc1", },
-                       { GPIO_LED("dm355evm::ds17"),
-                               .default_trigger = "nand-disk", },
-                       { GPIO_LED("dm355evm::ds18"), },
-                       { GPIO_LED("dm355evm::ds19"), },
-                       { GPIO_LED("dm355evm::ds20"), },
-                       { GPIO_LED("dm355evm::ds21"), },
-               };
-#undef GPIO_LED
-
-               struct gpio_led_platform_data evm_led_data = {
-                       .num_leds       = ARRAY_SIZE(evm_leds),
-                       .leds           = evm_leds,
-               };
-
-               for (i = 0; i < ARRAY_SIZE(evm_leds); i++)
-                       evm_leds[i].gpio = i + dm355evm_msp_gpio.base;
-
+               gpiod_add_lookup_table(&evm_leds_gpio_table);
                /* NOTE:  these are the only fully programmable LEDs
                 * on the board, since GPIO-61/ds22 (and many signals
                 * going to DC7) must be used for AEMIF address lines