diff options
author | NeilBrown <neilb@suse.de> | 2013-10-31 22:41:20 -0400 |
---|---|---|
committer | Bryan Wu <cooloney@gmail.com> | 2014-01-27 20:28:46 -0500 |
commit | 10ead6e59934be76b6ce255d6b842a432b207b7f (patch) | |
tree | aab76e123d6cda1cc9b3a484a3bdbf039e639c2c /drivers/leds | |
parent | 9334129e8e956edfd51da37d5e5278478235c7b2 (diff) |
LEDS: tca6507: add device-tree support for GPIO configuration.
The 7 lines driven by the TCA6507 can either drive LEDs or act as output-only
GPIOs.
To make this distinction in devicetree we use the "compatible" property.
If the device attached to a line is "compatible" with "gpio", we treat it
like a GPIO. If it is "compatible" with "led" (or if no "compatible" value
is set) we treat it like an LED.
(cooloney@gmail.com: fix typo in the subject)
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Bryan Wu <cooloney@gmail.com>
Diffstat (limited to 'drivers/leds')
-rw-r--r-- | drivers/leds/leds-tca6507.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/leds/leds-tca6507.c b/drivers/leds/leds-tca6507.c index f5063f447463..93a2b1759054 100644 --- a/drivers/leds/leds-tca6507.c +++ b/drivers/leds/leds-tca6507.c | |||
@@ -638,6 +638,9 @@ static int tca6507_probe_gpios(struct i2c_client *client, | |||
638 | tca->gpio.direction_output = tca6507_gpio_direction_output; | 638 | tca->gpio.direction_output = tca6507_gpio_direction_output; |
639 | tca->gpio.set = tca6507_gpio_set_value; | 639 | tca->gpio.set = tca6507_gpio_set_value; |
640 | tca->gpio.dev = &client->dev; | 640 | tca->gpio.dev = &client->dev; |
641 | #ifdef CONFIG_OF_GPIO | ||
642 | tca->gpio.of_node = of_node_get(client->dev.of_node); | ||
643 | #endif | ||
641 | err = gpiochip_add(&tca->gpio); | 644 | err = gpiochip_add(&tca->gpio); |
642 | if (err) { | 645 | if (err) { |
643 | tca->gpio.ngpio = 0; | 646 | tca->gpio.ngpio = 0; |
@@ -696,6 +699,8 @@ tca6507_led_dt_init(struct i2c_client *client) | |||
696 | led.default_trigger = | 699 | led.default_trigger = |
697 | of_get_property(child, "linux,default-trigger", NULL); | 700 | of_get_property(child, "linux,default-trigger", NULL); |
698 | led.flags = 0; | 701 | led.flags = 0; |
702 | if (of_property_match_string(child, "compatible", "gpio") >= 0) | ||
703 | led.flags |= TCA6507_MAKE_GPIO; | ||
699 | ret = of_property_read_u32(child, "reg", ®); | 704 | ret = of_property_read_u32(child, "reg", ®); |
700 | if (ret != 0 || reg < 0 || reg >= NUM_LEDS) | 705 | if (ret != 0 || reg < 0 || reg >= NUM_LEDS) |
701 | continue; | 706 | continue; |
@@ -709,6 +714,7 @@ tca6507_led_dt_init(struct i2c_client *client) | |||
709 | 714 | ||
710 | pdata->leds.leds = tca_leds; | 715 | pdata->leds.leds = tca_leds; |
711 | pdata->leds.num_leds = NUM_LEDS; | 716 | pdata->leds.num_leds = NUM_LEDS; |
717 | pdata->gpio_base = -1; | ||
712 | 718 | ||
713 | return pdata; | 719 | return pdata; |
714 | } | 720 | } |