brcm47xx: add Luxul XAP-1500 and XWR-1750 WiFi LEDs
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
This commit is contained in:
parent
ac593d895a
commit
16efb0c1c6
4 changed files with 176 additions and 4 deletions
|
@ -0,0 +1,86 @@
|
|||
From 272641206100e89656038180da12eff4f03d79d1 Mon Sep 17 00:00:00 2001
|
||||
From: Dan Haab <dan.haab@luxul.com>
|
||||
Date: Tue, 27 Mar 2018 11:24:34 -0600
|
||||
Subject: [PATCH] MIPS: BCM47XX: Add Luxul XAP1500/XWR1750 WiFi LEDs
|
||||
|
||||
Some Luxul devices use PCIe connected GPIO LEDs that are not available
|
||||
until the PCI subsytem and its drivers load. Using the same array for
|
||||
these LEDs would block registering any LEDs until all GPIOs become
|
||||
available. This may be undesired behavior as some LEDs should be
|
||||
available as early as possible (e.g. system status LED). This patch will
|
||||
allow registering available LEDs while deferring these PCIe GPIO
|
||||
connected 'extra' LEDs until they become available.
|
||||
|
||||
Signed-off-by: Dan Haab <dan.haab@luxul.com>
|
||||
Cc: Ralf Baechle <ralf@linux-mips.org>
|
||||
Cc: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
Cc: linux-mips@linux-mips.org
|
||||
Patchwork: https://patchwork.linux-mips.org/patch/18952/
|
||||
Signed-off-by: James Hogan <jhogan@kernel.org>
|
||||
---
|
||||
arch/mips/bcm47xx/leds.c | 21 +++++++++++++++++++++
|
||||
1 file changed, 21 insertions(+)
|
||||
|
||||
--- a/arch/mips/bcm47xx/leds.c
|
||||
+++ b/arch/mips/bcm47xx/leds.c
|
||||
@@ -408,6 +408,12 @@ bcm47xx_leds_luxul_xap_1500_v1[] __initc
|
||||
};
|
||||
|
||||
static const struct gpio_led
|
||||
+bcm47xx_leds_luxul_xap1500_v1_extra[] __initconst = {
|
||||
+ BCM47XX_GPIO_LED(44, "green", "5ghz", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+ BCM47XX_GPIO_LED(76, "green", "2ghz", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_led
|
||||
bcm47xx_leds_luxul_xbr_4400_v1[] __initconst = {
|
||||
BCM47XX_GPIO_LED(12, "green", "usb", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
BCM47XX_GPIO_LED_TRIGGER(15, "green", "status", 0, "timer"),
|
||||
@@ -434,6 +440,11 @@ bcm47xx_leds_luxul_xwr_1750_v1[] __initc
|
||||
BCM47XX_GPIO_LED(15, "green", "wps", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
};
|
||||
|
||||
+static const struct gpio_led
|
||||
+bcm47xx_leds_luxul_xwr1750_v1_extra[] __initconst = {
|
||||
+ BCM47XX_GPIO_LED(76, "green", "2ghz", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+};
|
||||
+
|
||||
/* Microsoft */
|
||||
|
||||
static const struct gpio_led
|
||||
@@ -527,6 +538,12 @@ static struct gpio_led_platform_data bcm
|
||||
bcm47xx_leds_pdata.num_leds = ARRAY_SIZE(dev_leds); \
|
||||
} while (0)
|
||||
|
||||
+static struct gpio_led_platform_data bcm47xx_leds_pdata_extra __initdata = {};
|
||||
+#define bcm47xx_set_pdata_extra(dev_leds) do { \
|
||||
+ bcm47xx_leds_pdata_extra.leds = dev_leds; \
|
||||
+ bcm47xx_leds_pdata_extra.num_leds = ARRAY_SIZE(dev_leds); \
|
||||
+} while (0)
|
||||
+
|
||||
void __init bcm47xx_leds_register(void)
|
||||
{
|
||||
enum bcm47xx_board board = bcm47xx_board_get();
|
||||
@@ -704,6 +721,7 @@ void __init bcm47xx_leds_register(void)
|
||||
break;
|
||||
case BCM47XX_BOARD_LUXUL_XAP_1500_V1:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_luxul_xap_1500_v1);
|
||||
+ bcm47xx_set_pdata_extra(bcm47xx_leds_luxul_xap1500_v1_extra);
|
||||
break;
|
||||
case BCM47XX_BOARD_LUXUL_XBR_4400_V1:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_luxul_xbr_4400_v1);
|
||||
@@ -716,6 +734,7 @@ void __init bcm47xx_leds_register(void)
|
||||
break;
|
||||
case BCM47XX_BOARD_LUXUL_XWR_1750_V1:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_luxul_xwr_1750_v1);
|
||||
+ bcm47xx_set_pdata_extra(bcm47xx_leds_luxul_xwr1750_v1_extra);
|
||||
break;
|
||||
|
||||
case BCM47XX_BOARD_MICROSOFT_MN700:
|
||||
@@ -759,4 +778,6 @@ void __init bcm47xx_leds_register(void)
|
||||
}
|
||||
|
||||
gpio_led_register_device(-1, &bcm47xx_leds_pdata);
|
||||
+ if (bcm47xx_leds_pdata_extra.num_leds)
|
||||
+ gpio_led_register_device(0, &bcm47xx_leds_pdata_extra);
|
||||
}
|
|
@ -201,7 +201,7 @@
|
|||
bcm47xx_leds_linksys_wrt54g_generic[] __initconst = {
|
||||
BCM47XX_GPIO_LED(0, "unk", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF),
|
||||
BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON),
|
||||
@@ -532,6 +547,9 @@ void __init bcm47xx_leds_register(void)
|
||||
@@ -549,6 +564,9 @@ void __init bcm47xx_leds_register(void)
|
||||
enum bcm47xx_board board = bcm47xx_board_get();
|
||||
|
||||
switch (board) {
|
||||
|
@ -211,7 +211,7 @@
|
|||
case BCM47XX_BOARD_ASUS_RTN12:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_asus_rtn12);
|
||||
break;
|
||||
@@ -665,6 +683,9 @@ void __init bcm47xx_leds_register(void)
|
||||
@@ -682,6 +700,9 @@ void __init bcm47xx_leds_register(void)
|
||||
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt310nv1);
|
||||
break;
|
||||
|
|
|
@ -0,0 +1,86 @@
|
|||
From 272641206100e89656038180da12eff4f03d79d1 Mon Sep 17 00:00:00 2001
|
||||
From: Dan Haab <dan.haab@luxul.com>
|
||||
Date: Tue, 27 Mar 2018 11:24:34 -0600
|
||||
Subject: [PATCH] MIPS: BCM47XX: Add Luxul XAP1500/XWR1750 WiFi LEDs
|
||||
|
||||
Some Luxul devices use PCIe connected GPIO LEDs that are not available
|
||||
until the PCI subsytem and its drivers load. Using the same array for
|
||||
these LEDs would block registering any LEDs until all GPIOs become
|
||||
available. This may be undesired behavior as some LEDs should be
|
||||
available as early as possible (e.g. system status LED). This patch will
|
||||
allow registering available LEDs while deferring these PCIe GPIO
|
||||
connected 'extra' LEDs until they become available.
|
||||
|
||||
Signed-off-by: Dan Haab <dan.haab@luxul.com>
|
||||
Cc: Ralf Baechle <ralf@linux-mips.org>
|
||||
Cc: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
Cc: linux-mips@linux-mips.org
|
||||
Patchwork: https://patchwork.linux-mips.org/patch/18952/
|
||||
Signed-off-by: James Hogan <jhogan@kernel.org>
|
||||
---
|
||||
arch/mips/bcm47xx/leds.c | 21 +++++++++++++++++++++
|
||||
1 file changed, 21 insertions(+)
|
||||
|
||||
--- a/arch/mips/bcm47xx/leds.c
|
||||
+++ b/arch/mips/bcm47xx/leds.c
|
||||
@@ -408,6 +408,12 @@ bcm47xx_leds_luxul_xap_1500_v1[] __initc
|
||||
};
|
||||
|
||||
static const struct gpio_led
|
||||
+bcm47xx_leds_luxul_xap1500_v1_extra[] __initconst = {
|
||||
+ BCM47XX_GPIO_LED(44, "green", "5ghz", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+ BCM47XX_GPIO_LED(76, "green", "2ghz", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_led
|
||||
bcm47xx_leds_luxul_xbr_4400_v1[] __initconst = {
|
||||
BCM47XX_GPIO_LED(12, "green", "usb", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
BCM47XX_GPIO_LED_TRIGGER(15, "green", "status", 0, "timer"),
|
||||
@@ -434,6 +440,11 @@ bcm47xx_leds_luxul_xwr_1750_v1[] __initc
|
||||
BCM47XX_GPIO_LED(15, "green", "wps", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
};
|
||||
|
||||
+static const struct gpio_led
|
||||
+bcm47xx_leds_luxul_xwr1750_v1_extra[] __initconst = {
|
||||
+ BCM47XX_GPIO_LED(76, "green", "2ghz", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+};
|
||||
+
|
||||
/* Microsoft */
|
||||
|
||||
static const struct gpio_led
|
||||
@@ -527,6 +538,12 @@ static struct gpio_led_platform_data bcm
|
||||
bcm47xx_leds_pdata.num_leds = ARRAY_SIZE(dev_leds); \
|
||||
} while (0)
|
||||
|
||||
+static struct gpio_led_platform_data bcm47xx_leds_pdata_extra __initdata = {};
|
||||
+#define bcm47xx_set_pdata_extra(dev_leds) do { \
|
||||
+ bcm47xx_leds_pdata_extra.leds = dev_leds; \
|
||||
+ bcm47xx_leds_pdata_extra.num_leds = ARRAY_SIZE(dev_leds); \
|
||||
+} while (0)
|
||||
+
|
||||
void __init bcm47xx_leds_register(void)
|
||||
{
|
||||
enum bcm47xx_board board = bcm47xx_board_get();
|
||||
@@ -704,6 +721,7 @@ void __init bcm47xx_leds_register(void)
|
||||
break;
|
||||
case BCM47XX_BOARD_LUXUL_XAP_1500_V1:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_luxul_xap_1500_v1);
|
||||
+ bcm47xx_set_pdata_extra(bcm47xx_leds_luxul_xap1500_v1_extra);
|
||||
break;
|
||||
case BCM47XX_BOARD_LUXUL_XBR_4400_V1:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_luxul_xbr_4400_v1);
|
||||
@@ -716,6 +734,7 @@ void __init bcm47xx_leds_register(void)
|
||||
break;
|
||||
case BCM47XX_BOARD_LUXUL_XWR_1750_V1:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_luxul_xwr_1750_v1);
|
||||
+ bcm47xx_set_pdata_extra(bcm47xx_leds_luxul_xwr1750_v1_extra);
|
||||
break;
|
||||
|
||||
case BCM47XX_BOARD_MICROSOFT_MN700:
|
||||
@@ -759,4 +778,6 @@ void __init bcm47xx_leds_register(void)
|
||||
}
|
||||
|
||||
gpio_led_register_device(-1, &bcm47xx_leds_pdata);
|
||||
+ if (bcm47xx_leds_pdata_extra.num_leds)
|
||||
+ gpio_led_register_device(0, &bcm47xx_leds_pdata_extra);
|
||||
}
|
|
@ -201,7 +201,7 @@
|
|||
bcm47xx_leds_linksys_wrt54g_generic[] __initconst = {
|
||||
BCM47XX_GPIO_LED(0, "unk", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF),
|
||||
BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON),
|
||||
@@ -532,6 +547,9 @@ void __init bcm47xx_leds_register(void)
|
||||
@@ -549,6 +564,9 @@ void __init bcm47xx_leds_register(void)
|
||||
enum bcm47xx_board board = bcm47xx_board_get();
|
||||
|
||||
switch (board) {
|
||||
|
@ -211,7 +211,7 @@
|
|||
case BCM47XX_BOARD_ASUS_RTN12:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_asus_rtn12);
|
||||
break;
|
||||
@@ -665,6 +683,9 @@ void __init bcm47xx_leds_register(void)
|
||||
@@ -682,6 +700,9 @@ void __init bcm47xx_leds_register(void)
|
||||
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt310nv1);
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue