ixp4xx: add kernel 2.6.34 preliminary support
[openwrt/staging/chunkeey.git] / target / linux / ixp4xx / patches-2.6.34 / 301-avila_led.patch
diff --git a/target/linux/ixp4xx/patches-2.6.34/301-avila_led.patch b/target/linux/ixp4xx/patches-2.6.34/301-avila_led.patch
new file mode 100644 (file)
index 0000000..9acf3fd
--- /dev/null
@@ -0,0 +1,161 @@
+--- a/arch/arm/mach-ixp4xx/avila-setup.c
++++ b/arch/arm/mach-ixp4xx/avila-setup.c
+@@ -22,6 +22,7 @@
+ #include <linux/serial_8250.h>
+ #include <linux/i2c.h>
+ #include <linux/i2c/at24.h>
++#include <linux/leds.h>
+ #include <linux/i2c-gpio.h>
+ #include <asm/types.h>
+ #include <asm/setup.h>
+@@ -170,6 +171,72 @@ static struct platform_device avila_npec
+       .dev.platform_data      = &avila_npec_data,
+ };
++static struct gpio_led avila_gpio_leds[] = {
++      {
++              .name           = "user",  /* green led */
++              .gpio           = AVILA_GW23XX_LED_USER_GPIO,
++              .active_low     = 1,
++      }
++};
++
++static struct gpio_led_platform_data avila_gpio_leds_data = {
++      .num_leds               = 1,
++      .leds                   = avila_gpio_leds,
++};
++
++static struct platform_device avila_gpio_leds_device = {
++      .name                   = "leds-gpio",
++      .id                     = -1,
++      .dev.platform_data      = &avila_gpio_leds_data,
++};
++
++static struct latch_led avila_latch_leds[] = {
++      {
++              .name   = "led0",  /* green led */
++              .bit    = 0,
++      },
++      {
++              .name   = "led1",  /* green led */
++              .bit    = 1,
++      },
++      {
++              .name   = "led2",  /* green led */
++              .bit    = 2,
++      },
++      {
++              .name   = "led3",  /* green led */
++              .bit    = 3,
++      },
++      {
++              .name   = "led4",  /* green led */
++              .bit    = 4,
++      },
++      {
++              .name   = "led5",  /* green led */
++              .bit    = 5,
++      },
++      {
++              .name   = "led6",  /* green led */
++              .bit    = 6,
++      },
++      {
++              .name   = "led7",  /* green led */
++              .bit    = 7,
++      }
++};
++
++static struct latch_led_platform_data avila_latch_leds_data = {
++      .num_leds       = 8,
++      .leds           = avila_latch_leds,
++      .mem            = 0x51000000,
++};
++
++static struct platform_device avila_latch_leds_device = {
++      .name                   = "leds-latch",
++      .id                     = -1,
++      .dev.platform_data      = &avila_latch_leds_data,
++};
++
+ static struct platform_device *avila_devices[] __initdata = {
+       &avila_i2c_gpio,
+       &avila_flash,
+@@ -180,12 +247,16 @@ static void __init avila_gw23xx_setup(vo
+ {
+       platform_device_register(&avila_npeb_device);
+       platform_device_register(&avila_npec_device);
++
++      platform_device_register(&avila_gpio_leds_device);
+ }
+ static void __init avila_gw2342_setup(void)
+ {
+       platform_device_register(&avila_npeb_device);
+       platform_device_register(&avila_npec_device);
++
++      platform_device_register(&avila_gpio_leds_device);
+ }
+ static void __init avila_gw2345_setup(void)
+@@ -196,22 +267,30 @@ static void __init avila_gw2345_setup(vo
+       avila_npec_data.phy = 5; /* port 5 of the KS8995 switch */
+       platform_device_register(&avila_npec_device);
++
++      platform_device_register(&avila_gpio_leds_device);
+ }
+ static void __init avila_gw2347_setup(void)
+ {
+       platform_device_register(&avila_npeb_device);
++
++      avila_gpio_leds[0].gpio = AVILA_GW23X7_LED_USER_GPIO;
++      platform_device_register(&avila_gpio_leds_device);
+ }
+ static void __init avila_gw2348_setup(void)
+ {
+       platform_device_register(&avila_npeb_device);
+       platform_device_register(&avila_npec_device);
++
++      platform_device_register(&avila_gpio_leds_device);
+ }
+ static void __init avila_gw2353_setup(void)
+ {
+       platform_device_register(&avila_npeb_device);
++      platform_device_register(&avila_gpio_leds_device);
+ }
+ static void __init avila_gw2355_setup(void)
+@@ -222,11 +301,29 @@ static void __init avila_gw2355_setup(vo
+       avila_npec_data.phy = 16;
+       platform_device_register(&avila_npec_device);
++
++      platform_device_register(&avila_gpio_leds_device);
++
++      *IXP4XX_EXP_CS4 |= 0xbfff3c03;
++      avila_latch_leds[0].name = "RXD";
++      avila_latch_leds[1].name = "TXD";
++      avila_latch_leds[2].name = "POL";
++      avila_latch_leds[3].name = "LNK";
++      avila_latch_leds[4].name = "ERR";
++      avila_latch_leds_data.num_leds = 5;
++      avila_latch_leds_data.mem = 0x54000000;
++      platform_device_register(&avila_latch_leds_device);
+ }
+ static void __init avila_gw2357_setup(void)
+ {
+       platform_device_register(&avila_npeb_device);
++
++      avila_gpio_leds[0].gpio = AVILA_GW23X7_LED_USER_GPIO;
++      platform_device_register(&avila_gpio_leds_device);
++
++      *IXP4XX_EXP_CS1 |= 0xbfff3c03;
++      platform_device_register(&avila_latch_leds_device);
+ }
+ static struct avila_board_info avila_boards[] __initdata = {