diff options
Diffstat (limited to 'target/linux/atheros/files')
-rw-r--r-- | target/linux/atheros/files/arch/mips/atheros/ar5315/board.c | 43 |
1 files changed, 33 insertions, 10 deletions
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 eafde3378..96c6f8fef 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 |