Commit b6d213fb authored by Linus Walleij's avatar Linus Walleij Committed by Lee Jones
Browse files

mfd: dm355evm_msp: Convert LEDs to GPIO descriptor table



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: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent 0f1b1b89
Loading
Loading
Loading
Loading
+50 −26
Original line number Diff line number Diff line
@@ -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