[ixp4xx] move the latch-led driver into a separated patch
[openwrt.git] / target / linux / ixp4xx / patches-2.6.25 / 301-avila_led.patch
index b7e4940163ae71fe57a438b3b6dd2e72cef55a24..f2732feea5fa83edcd3799bb6a4790c74f9bd0df 100644 (file)
@@ -1,15 +1,3 @@
-Index: linux-2.6.25.4/include/asm-arm/arch-ixp4xx/avila.h
-===================================================================
---- linux-2.6.25.4.orig/include/asm-arm/arch-ixp4xx/avila.h
-+++ linux-2.6.25.4/include/asm-arm/arch-ixp4xx/avila.h
-@@ -36,4 +36,6 @@
- #define AVILA_PCI_INTC_PIN    9
- #define AVILA_PCI_INTD_PIN    8
--
-+/* User LEDs */
-+#define AVILA_GW23XX_LED_USER_GPIO    3
-+#define AVILA_GW23X7_LED_USER_GPIO    4
 Index: linux-2.6.25.4/arch/arm/mach-ixp4xx/avila-setup.c
 ===================================================================
 --- linux-2.6.25.4.orig/arch/arm/mach-ixp4xx/avila-setup.c
@@ -22,11 +10,11 @@ Index: linux-2.6.25.4/arch/arm/mach-ixp4xx/avila-setup.c
  #include <linux/i2c-gpio.h>
  
  #include <asm/types.h>
-@@ -172,6 +173,25 @@ static struct platform_device avila_npec
+@@ -172,6 +173,72 @@ static struct platform_device avila_npec
        .dev.platform_data      = &avila_npec_data,
  };
  
-+static struct gpio_led avila_leds[] = {
++static struct gpio_led avila_gpio_leds[] = {
 +      {
 +              .name           = "user",  /* green led */
 +              .gpio           = AVILA_GW23XX_LED_USER_GPIO,
@@ -34,52 +22,99 @@ Index: linux-2.6.25.4/arch/arm/mach-ixp4xx/avila-setup.c
 +      }
 +};
 +
-+static struct gpio_led_platform_data avila_leds_data = {
++static struct gpio_led_platform_data avila_gpio_leds_data = {
 +      .num_leds               = 1,
-+      .leds                   = avila_leds,
++      .leds                   = avila_gpio_leds,
 +};
 +
-+static struct platform_device avila_leds_device = {
++static struct platform_device avila_gpio_leds_device = {
 +      .name                   = "leds-gpio",
 +      .id                     = -1,
-+      .dev.platform_data      = &avila_leds_data,
++      .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,
-@@ -182,6 +202,8 @@ static void __init avila_gw23xx_setup(vo
+@@ -182,6 +249,8 @@ static void __init avila_gw23xx_setup(vo
  {
        platform_device_register(&avila_npeb_device);
        platform_device_register(&avila_npec_device);
 +
-+      platform_device_register(&avila_leds_device);
++      platform_device_register(&avila_gpio_leds_device);
  }
  
  #ifdef CONFIG_SENSORS_EEPROM
-@@ -189,6 +211,8 @@ static void __init avila_gw2342_setup(vo
+@@ -189,6 +258,8 @@ static void __init avila_gw2342_setup(vo
  {
        platform_device_register(&avila_npeb_device);
        platform_device_register(&avila_npec_device);
 +
-+      platform_device_register(&avila_leds_device);
++      platform_device_register(&avila_gpio_leds_device);
  }
  
  static void __init avila_gw2345_setup(void)
-@@ -199,22 +223,30 @@ static void __init avila_gw2345_setup(vo
+@@ -199,22 +270,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_leds_device);
++      platform_device_register(&avila_gpio_leds_device);
  }
  
  static void __init avila_gw2347_setup(void)
  {
        platform_device_register(&avila_npeb_device);
 +
-+      avila_leds[0].gpio = AVILA_GW23X7_LED_USER_GPIO;
-+      platform_device_register(&avila_leds_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)
@@ -87,30 +122,55 @@ Index: linux-2.6.25.4/arch/arm/mach-ixp4xx/avila-setup.c
        platform_device_register(&avila_npeb_device);
        platform_device_register(&avila_npec_device);
 +
-+      platform_device_register(&avila_leds_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_leds_device);
++      platform_device_register(&avila_gpio_leds_device);
  }
  
  static void __init avila_gw2355_setup(void)
-@@ -225,11 +257,16 @@ static void __init avila_gw2355_setup(vo
+@@ -225,11 +304,29 @@ static void __init avila_gw2355_setup(vo
  
        avila_npec_data.phy = 16;
        platform_device_register(&avila_npec_device);
 +
-+      platform_device_register(&avila_leds_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_leds[0].gpio = AVILA_GW23X7_LED_USER_GPIO;
-+      platform_device_register(&avila_leds_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 = {
+Index: linux-2.6.25.4/include/asm-arm/arch-ixp4xx/avila.h
+===================================================================
+--- linux-2.6.25.4.orig/include/asm-arm/arch-ixp4xx/avila.h
++++ linux-2.6.25.4/include/asm-arm/arch-ixp4xx/avila.h
+@@ -36,4 +36,6 @@
+ #define AVILA_PCI_INTC_PIN    9
+ #define AVILA_PCI_INTD_PIN    8
+-
++/* User LEDs */
++#define AVILA_GW23XX_LED_USER_GPIO    3
++#define AVILA_GW23X7_LED_USER_GPIO    4