|
@@ -262,6 +262,77 @@ static struct omap2_hsmmc_info mmc[] = {
|
|
|
{} /* Terminator */
|
|
|
};
|
|
|
|
|
|
+#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
|
|
|
+#include <linux/leds.h>
|
|
|
+
|
|
|
+static struct gpio_led igep2_gpio_leds[] = {
|
|
|
+ [0] = {
|
|
|
+ .name = "gpio-led:red:d0",
|
|
|
+ .gpio = IGEP2_GPIO_LED0_RED,
|
|
|
+ .default_trigger = "default-off"
|
|
|
+ },
|
|
|
+ [1] = {
|
|
|
+ .name = "gpio-led:green:d0",
|
|
|
+ .gpio = IGEP2_GPIO_LED0_GREEN,
|
|
|
+ .default_trigger = "default-off",
|
|
|
+ },
|
|
|
+ [2] = {
|
|
|
+ .name = "gpio-led:red:d1",
|
|
|
+ .gpio = IGEP2_GPIO_LED1_RED,
|
|
|
+ .default_trigger = "default-off",
|
|
|
+ },
|
|
|
+ [3] = {
|
|
|
+ .name = "gpio-led:green:d1",
|
|
|
+ .default_trigger = "heartbeat",
|
|
|
+ .gpio = -EINVAL, /* gets replaced */
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct gpio_led_platform_data igep2_led_pdata = {
|
|
|
+ .leds = igep2_gpio_leds,
|
|
|
+ .num_leds = ARRAY_SIZE(igep2_gpio_leds),
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device igep2_led_device = {
|
|
|
+ .name = "leds-gpio",
|
|
|
+ .id = -1,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &igep2_led_pdata,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static void __init igep2_leds_init(void)
|
|
|
+{
|
|
|
+ platform_device_register(&igep2_led_device);
|
|
|
+}
|
|
|
+
|
|
|
+#else
|
|
|
+static inline void igep2_leds_init(void)
|
|
|
+{
|
|
|
+ if ((gpio_request(IGEP2_GPIO_LED0_RED, "gpio-led:red:d0") == 0) &&
|
|
|
+ (gpio_direction_output(IGEP2_GPIO_LED0_RED, 1) == 0)) {
|
|
|
+ gpio_export(IGEP2_GPIO_LED0_RED, 0);
|
|
|
+ gpio_set_value(IGEP2_GPIO_LED0_RED, 0);
|
|
|
+ } else
|
|
|
+ pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_RED\n");
|
|
|
+
|
|
|
+ if ((gpio_request(IGEP2_GPIO_LED0_GREEN, "gpio-led:green:d0") == 0) &&
|
|
|
+ (gpio_direction_output(IGEP2_GPIO_LED0_GREEN, 1) == 0)) {
|
|
|
+ gpio_export(IGEP2_GPIO_LED0_GREEN, 0);
|
|
|
+ gpio_set_value(IGEP2_GPIO_LED0_GREEN, 0);
|
|
|
+ } else
|
|
|
+ pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_GREEN\n");
|
|
|
+
|
|
|
+ if ((gpio_request(IGEP2_GPIO_LED1_RED, "gpio-led:red:d1") == 0) &&
|
|
|
+ (gpio_direction_output(IGEP2_GPIO_LED1_RED, 1) == 0)) {
|
|
|
+ gpio_export(IGEP2_GPIO_LED1_RED, 0);
|
|
|
+ gpio_set_value(IGEP2_GPIO_LED1_RED, 0);
|
|
|
+ } else
|
|
|
+ pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_RED\n");
|
|
|
+
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
static int igep2_twl_gpio_setup(struct device *dev,
|
|
|
unsigned gpio, unsigned ngpio)
|
|
|
{
|
|
@@ -291,14 +362,26 @@ static int igep2_twl_gpio_setup(struct device *dev,
|
|
|
(gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0) < 0))
|
|
|
pr_err("IGEP2: Could not obtain gpio for USBH_CPEN");
|
|
|
|
|
|
+ /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
|
|
|
+#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
|
|
|
+ if ((gpio_request(gpio+TWL4030_GPIO_MAX+1, "gpio-led:green:d1") == 0)
|
|
|
+ && (gpio_direction_output(gpio + TWL4030_GPIO_MAX + 1, 1) == 0)) {
|
|
|
+ gpio_export(gpio + TWL4030_GPIO_MAX + 1, 0);
|
|
|
+ gpio_set_value(gpio + TWL4030_GPIO_MAX + 1, 0);
|
|
|
+ } else
|
|
|
+ pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_GREEN\n");
|
|
|
+#else
|
|
|
+ igep2_gpio_leds[3].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
|
|
+#endif
|
|
|
+
|
|
|
return 0;
|
|
|
};
|
|
|
|
|
|
-static struct twl4030_gpio_platform_data igep2_gpio_data = {
|
|
|
+static struct twl4030_gpio_platform_data igep2_twl4030_gpio_pdata = {
|
|
|
.gpio_base = OMAP_MAX_GPIO_LINES,
|
|
|
.irq_base = TWL4030_GPIO_IRQ_BASE,
|
|
|
.irq_end = TWL4030_GPIO_IRQ_END,
|
|
|
- .use_leds = false,
|
|
|
+ .use_leds = true,
|
|
|
.setup = igep2_twl_gpio_setup,
|
|
|
};
|
|
|
|
|
@@ -372,47 +455,6 @@ static void __init igep2_display_init(void)
|
|
|
pr_err("IGEP v2: Could not obtain gpio GPIO_DVI_PUP\n");
|
|
|
}
|
|
|
|
|
|
-#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
|
|
|
-#include <linux/leds.h>
|
|
|
-
|
|
|
-static struct gpio_led igep2_gpio_leds[] = {
|
|
|
- {
|
|
|
- .name = "led0:red",
|
|
|
- .gpio = IGEP2_GPIO_LED0_RED,
|
|
|
- },
|
|
|
- {
|
|
|
- .name = "led0:green",
|
|
|
- .default_trigger = "heartbeat",
|
|
|
- .gpio = IGEP2_GPIO_LED0_GREEN,
|
|
|
- },
|
|
|
- {
|
|
|
- .name = "led1:red",
|
|
|
- .gpio = IGEP2_GPIO_LED1_RED,
|
|
|
- },
|
|
|
-};
|
|
|
-
|
|
|
-static struct gpio_led_platform_data igep2_led_pdata = {
|
|
|
- .leds = igep2_gpio_leds,
|
|
|
- .num_leds = ARRAY_SIZE(igep2_gpio_leds),
|
|
|
-};
|
|
|
-
|
|
|
-static struct platform_device igep2_led_device = {
|
|
|
- .name = "leds-gpio",
|
|
|
- .id = -1,
|
|
|
- .dev = {
|
|
|
- .platform_data = &igep2_led_pdata,
|
|
|
- },
|
|
|
-};
|
|
|
-
|
|
|
-static void __init igep2_init_led(void)
|
|
|
-{
|
|
|
- platform_device_register(&igep2_led_device);
|
|
|
-}
|
|
|
-
|
|
|
-#else
|
|
|
-static inline void igep2_init_led(void) {}
|
|
|
-#endif
|
|
|
-
|
|
|
static struct platform_device *igep2_devices[] __initdata = {
|
|
|
&igep2_dss_device,
|
|
|
};
|
|
@@ -442,7 +484,7 @@ static struct twl4030_platform_data igep2_twldata = {
|
|
|
/* platform_data for children goes here */
|
|
|
.usb = &igep2_usb_data,
|
|
|
.codec = &igep2_codec_data,
|
|
|
- .gpio = &igep2_gpio_data,
|
|
|
+ .gpio = &igep2_twl4030_gpio_pdata,
|
|
|
.vmmc1 = &igep2_vmmc1,
|
|
|
.vmmc2 = &igep2_vmmc2,
|
|
|
.vpll2 = &igep2_vpll2,
|
|
@@ -503,34 +545,10 @@ static void __init igep2_init(void)
|
|
|
usb_ehci_init(&ehci_pdata);
|
|
|
|
|
|
igep2_flash_init();
|
|
|
- igep2_init_led();
|
|
|
+ igep2_leds_init();
|
|
|
igep2_display_init();
|
|
|
igep2_init_smsc911x();
|
|
|
|
|
|
- /* GPIO userspace leds */
|
|
|
-#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
|
|
|
- if ((gpio_request(IGEP2_GPIO_LED0_RED, "led0:red") == 0) &&
|
|
|
- (gpio_direction_output(IGEP2_GPIO_LED0_RED, 1) == 0)) {
|
|
|
- gpio_export(IGEP2_GPIO_LED0_RED, 0);
|
|
|
- gpio_set_value(IGEP2_GPIO_LED0_RED, 0);
|
|
|
- } else
|
|
|
- pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_RED\n");
|
|
|
-
|
|
|
- if ((gpio_request(IGEP2_GPIO_LED0_GREEN, "led0:green") == 0) &&
|
|
|
- (gpio_direction_output(IGEP2_GPIO_LED0_GREEN, 1) == 0)) {
|
|
|
- gpio_export(IGEP2_GPIO_LED0_GREEN, 0);
|
|
|
- gpio_set_value(IGEP2_GPIO_LED0_GREEN, 0);
|
|
|
- } else
|
|
|
- pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_GREEN\n");
|
|
|
-
|
|
|
- if ((gpio_request(IGEP2_GPIO_LED1_RED, "led1:red") == 0) &&
|
|
|
- (gpio_direction_output(IGEP2_GPIO_LED1_RED, 1) == 0)) {
|
|
|
- gpio_export(IGEP2_GPIO_LED1_RED, 0);
|
|
|
- gpio_set_value(IGEP2_GPIO_LED1_RED, 0);
|
|
|
- } else
|
|
|
- pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_RED\n");
|
|
|
-#endif
|
|
|
-
|
|
|
/* GPIO W-LAN + Bluetooth combo module */
|
|
|
if ((gpio_request(IGEP2_GPIO_WIFI_NPD, "GPIO_WIFI_NPD") == 0) &&
|
|
|
(gpio_direction_output(IGEP2_GPIO_WIFI_NPD, 1) == 0)) {
|