diff options
-rw-r--r-- | target/linux/atheros/Makefile | 2 | ||||
-rw-r--r-- | target/linux/atheros/config-2.6.26 | 1 | ||||
-rw-r--r-- | target/linux/atheros/files/arch/mips/atheros/ar5315/board.c | 43 |
3 files changed, 35 insertions, 11 deletions
diff --git a/target/linux/atheros/Makefile b/target/linux/atheros/Makefile index 5f5f9e4465..fa292ac96b 100644 --- a/target/linux/atheros/Makefile +++ b/target/linux/atheros/Makefile @@ -11,7 +11,7 @@ BOARD:=atheros BOARDNAME:=Atheros 231x/5312 FEATURES:=squashfs jffs2 -LINUX_VERSION:=2.6.23.17 +LINUX_VERSION:=2.6.26 include $(INCLUDE_DIR)/target.mk diff --git a/target/linux/atheros/config-2.6.26 b/target/linux/atheros/config-2.6.26 index 3e58d6a11d..158decc26c 100644 --- a/target/linux/atheros/config-2.6.26 +++ b/target/linux/atheros/config-2.6.26 @@ -251,3 +251,4 @@ CONFIG_VIDEO_V4L1=m CONFIG_VIDEO_V4L2=m CONFIG_VIDEO_V4L2_COMMON=m CONFIG_ZONE_DMA_FLAG=0 +CONFIG_LEDS_GPIO=y diff --git a/target/linux/atheros/files/arch/mips/atheros/ar5315/board.c b/target/linux/atheros/files/arch/mips/atheros/ar5315/board.c index eafde33780..96c6f8fef0 100644 --- a/target/linux/atheros/files/arch/mips/atheros/ar5315/board.c +++ b/target/linux/atheros/files/arch/mips/atheros/ar5315/board.c @@ -93,11 +93,9 @@ static struct platform_device ar5315_spiflash = { }; #ifdef CONFIG_LEDS_GPIO -static struct gpio_led ar5315_leds[] = { - { .name = "wlan", .gpio = 0, .active_low = 1, }, -}; +static struct gpio_led ar5315_leds[8]; -static const struct gpio_led_platform_data ar5315_led_data = { +static struct gpio_led_platform_data ar5315_led_data = { .num_leds = ARRAY_SIZE(ar5315_leds), .leds = (void *) ar5315_leds, }; @@ -111,11 +109,8 @@ static struct platform_device ar5315_gpio_leds = { }; #endif - static __initdata struct platform_device *ar5315_devs[5]; - - static void *flash_regs; static inline __u32 spiflash_regread32(int reg) @@ -147,12 +142,12 @@ static __u8 spiflash_probe(void) spiflash_regwrite32(SPI_FLASH_OPCODE, 0xab); reg = (reg & ~SPI_CTL_TX_RX_CNT_MASK) | 4 | - (1 << 4) | SPI_CTL_START; + (1 << 4) | SPI_CTL_START; spiflash_regwrite32(SPI_FLASH_CTL, reg); do { - reg = spiflash_regread32(SPI_FLASH_CTL); + reg = spiflash_regread32(SPI_FLASH_CTL); } while (reg & SPI_CTL_BUSY); reg = (__u32) spiflash_regread32(SPI_FLASH_DATA); @@ -206,6 +201,10 @@ int __init ar5315_init_devices(void) struct ar531x_config *config; struct ar531x_boarddata *bcfg; int dev = 0; +#ifdef CONFIG_LEDS_GPIO + int i; + char *tmp; +#endif if (!is_5315) return 0; @@ -246,7 +245,31 @@ int __init ar5315_init_devices(void) ar5315_devs[dev++] = &ar5315_spiflash; #ifdef CONFIG_LEDS_GPIO - ar5315_leds[0].gpio = bcfg->sysLedGpio; + ar5315_led_data.num_leds = 0; + for(i = 0; i < 8; i++) + { + if((i != AR5315_RESET_GPIO) && (i != bcfg->resetConfigGpio)) + { + if(i == bcfg->sysLedGpio) + { + tmp = kstrdup("wlan", GFP_KERNEL); + } else { + tmp = kmalloc(6, GFP_KERNEL); + if(tmp) + sprintf((char*)tmp, "gpio%d", i); + } + if(tmp) + { + ar5315_leds[ar5315_led_data.num_leds].name = tmp; + ar5315_leds[ar5315_led_data.num_leds].gpio = i; + ar5315_leds[ar5315_led_data.num_leds].active_low = 0; + ar5315_led_data.num_leds++; + } else { + printk("failed to alloc led string\n"); + continue; + } + } + } ar5315_devs[dev++] = &ar5315_gpio_leds; #endif |