[LEDE-DEV] [PATCH] ar71xx: mach-rbspi: simplify reset button registration

Gabor Juhos juhosg at freemail.hu
Mon Jan 15 11:50:43 PST 2018


The setup code defines four individual structures for the
Reset buttons of the supported boards. The only difference
between the definitions is the GPIO number used for the
button.

Replace the different structures with one generic variant,
and add a helper function to simplify the button registration.

Signed-off-by: Gabor Juhos <juhosg at freemail.hu>
---
 .../ar71xx/files/arch/mips/ath79/mach-rbspi.c      | 94 +++++++---------------
 1 file changed, 30 insertions(+), 64 deletions(-)

diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-rbspi.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-rbspi.c
index 8d8dd40e8a..0c827ed566 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-rbspi.c
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-rbspi.c
@@ -137,40 +137,17 @@ static struct flash_platform_data rbspi_spi_flash_data = {
 	.nr_parts = ARRAY_SIZE(rbspi_spi_partitions),
 };
 
-/* Several boards only have a single reset button, wired to GPIO 1, 16 or 20 */
-#define RBSPI_GPIO_BTN_RESET01	1
-#define RBSPI_GPIO_BTN_RESET16	16
-#define RBSPI_GPIO_BTN_RESET20	20
-
-static struct gpio_keys_button rbspi_gpio_keys_reset01[] __initdata = {
-	{
-		.desc = "Reset button",
-		.type = EV_KEY,
-		.code = KEY_RESTART,
-		.debounce_interval = RBSPI_KEYS_DEBOUNCE_INTERVAL,
-		.gpio = RBSPI_GPIO_BTN_RESET01,
-		.active_low = 1,
-	},
-};
-
-static struct gpio_keys_button rbspi_gpio_keys_reset16[] __initdata = {
-	{
-		.desc = "Reset button",
-		.type = EV_KEY,
-		.code = KEY_RESTART,
-		.debounce_interval = RBSPI_KEYS_DEBOUNCE_INTERVAL,
-		.gpio = RBSPI_GPIO_BTN_RESET16,
-		.active_low = 1,
-	},
-};
-
-static struct gpio_keys_button rbspi_gpio_keys_reset20[] __initdata = {
+/*
+ * Several boards only have a single reset button, use a common
+ * structure for that.
+ */
+static struct gpio_keys_button rbspi_gpio_keys_reset[] __initdata = {
 	{
 		.desc = "Reset button",
 		.type = EV_KEY,
 		.code = KEY_RESTART,
 		.debounce_interval = RBSPI_KEYS_DEBOUNCE_INTERVAL,
-		.gpio = RBSPI_GPIO_BTN_RESET20,
+		.gpio = -ENOENT, /* filled dynamically */
 		.active_low = 1,
 	},
 };
@@ -180,6 +157,7 @@ static struct gpio_keys_button rbspi_gpio_keys_reset20[] __initdata = {
 #define RBMAPL_GPIO_LED_USER	14
 #define RBMAPL_GPIO_LED_ETH	4
 #define RBMAPL_GPIO_LED_WLAN	11
+#define RBMAPL_GPIO_BTN_RESET	16
 
 static struct gpio_led rbmapl_leds[] __initdata = {
 	{
@@ -204,6 +182,8 @@ static struct gpio_led rbmapl_leds[] __initdata = {
 
 /* RB 941L-2nD gpios */
 #define RBHAPL_GPIO_LED_USER   14
+#define RBHAPL_GPIO_BTN_RESET	16
+
 static struct gpio_led rbhapl_leds[] __initdata = {
 	{
 		.name = "rb:green:user",
@@ -228,6 +208,7 @@ static struct gpio_led rbhapl_leds[] __initdata = {
 #define RB952_GPIO_LED_USER	4
 #define RB952_GPIO_POE_POWER	14
 #define RB952_GPIO_POE_STATUS	12
+#define RB952_GPIO_BTN_RESET	16
 #define RB952_GPIO_USB_POWER	RBSPI_SSR_GPIO(RB952_SSR_BIT_USB_POWER)
 #define RB952_GPIO_LED_LAN1	RBSPI_SSR_GPIO(RB952_SSR_BIT_LED_LAN1)
 #define RB952_GPIO_LED_LAN2	RBSPI_SSR_GPIO(RB952_SSR_BIT_LED_LAN2)
@@ -274,6 +255,7 @@ static struct gpio_led rb952_leds[] __initdata = {
 #define RB962_GPIO_POE_POWER	3
 #define RB962_GPIO_LED_USER	12
 #define RB962_GPIO_USB_POWER	13
+#define RB962_GPIO_BTN_RESET	20
 
 static struct gpio_led rb962_leds_gpio[] __initdata = {
 	{
@@ -348,6 +330,7 @@ static struct mdio_board_info rb962_mdio0_info[] = {
 /* RB wAP-2nD gpios */
 #define RBWAP_GPIO_LED_USER	14
 #define RBWAP_GPIO_LED_WLAN	11
+#define RBWAP_GPIO_BTN_RESET	16
 
 static struct gpio_led rbwap_leds[] __initdata = {
 	{
@@ -396,6 +379,7 @@ static struct gpio_led rbcap_leds[] __initdata = {
 #define RBMAP_SSR_BIT_LED_WLAN	4
 #define RBMAP_SSR_BIT_USB_POWER	5
 #define RBMAP_SSR_BIT_LED_APCAP	6
+#define RBMAP_GPIO_BTN_RESET	16
 #define RBMAP_GPIO_SSR_CS	11
 #define RBMAP_GPIO_LED_POWER	4
 #define RBMAP_GPIO_POE_POWER	14
@@ -489,22 +473,12 @@ static struct gpio_led rblhg_leds[] __initdata = {
 	},
 };
 
-static struct gpio_keys_button rblhg_gpio_keys[] __initdata = {
-	{
-		.desc = "Reset button",
-		.type = EV_KEY,
-		.code = KEY_RESTART,
-		.debounce_interval = RBSPI_KEYS_DEBOUNCE_INTERVAL,
-		.gpio = RBLHG_GPIO_BTN_RESET,
-		.active_low = 1,
-	},
-};
-
 /* RB w APG-5HacT2HnD (wAP AC) gpios*/
 #define RBWAPGSC_LED1		1
 #define RBWAPGSC_LED2		8
 #define RBWAPGSC_LED3		9
 #define RBWAPGSC_POWERLED		16
+#define RBWAPGSC_GPIO_BTN_RESET		1
 #define RBWAPGSC_GPIO_MDIO_MDC		12
 #define RBWAPGSC_GPIO_MDIO_DATA		11
 #define RBWAPGSC_MDIO_PHYADDR		0
@@ -690,6 +664,14 @@ static void __init rbspi_network_setup(u32 flags, int gmac1_offset,
 		rbspi_wlan_init(1, wmac1_offset);
 }
 
+static __init void rbspi_register_reset_button(int gpio)
+{
+	rbspi_gpio_keys_reset[0].gpio = gpio;
+	ath79_register_gpio_keys_polled(-1, RBSPI_KEYS_POLL_INTERVAL,
+					ARRAY_SIZE(rbspi_gpio_keys_reset),
+					rbspi_gpio_keys_reset);
+}
+
 /*
  * Init the mAP lite hardware (QCA953x).
  * The mAP L-2nD (mAP lite) has a single ethernet port, connected to PHY0.
@@ -712,9 +694,7 @@ static void __init rbmapl_setup(void)
 	ath79_register_leds_gpio(-1, ARRAY_SIZE(rbmapl_leds), rbmapl_leds);
 
 	/* mAP lite has a single reset button as gpio 16 */
-	ath79_register_gpio_keys_polled(-1, RBSPI_KEYS_POLL_INTERVAL,
-					ARRAY_SIZE(rbspi_gpio_keys_reset16),
-					rbspi_gpio_keys_reset16);
+	rbspi_register_reset_button(RBMAPL_GPIO_BTN_RESET);
 
 	/* clear internal multiplexing */
 	ath79_gpio_output_select(RBMAPL_GPIO_LED_ETH, AR934X_GPIO_OUT_GPIO);
@@ -743,9 +723,7 @@ static void __init rbhapl_setup(void)
 	ath79_register_leds_gpio(-1, ARRAY_SIZE(rbhapl_leds), rbhapl_leds);
 
 	/* hAP lite has a single reset button as gpio 16 */
-	ath79_register_gpio_keys_polled(-1, RBSPI_KEYS_POLL_INTERVAL,
-					ARRAY_SIZE(rbspi_gpio_keys_reset16),
-					rbspi_gpio_keys_reset16);
+	rbspi_register_reset_button(RBHAPL_GPIO_BTN_RESET);
 }
 
 /*
@@ -777,9 +755,7 @@ static void __init rbspi_952_750r2_setup(u32 flags)
 	ath79_register_leds_gpio(-1, ARRAY_SIZE(rb952_leds), rb952_leds);
 
 	/* These devices have a single reset button as gpio 16 */
-	ath79_register_gpio_keys_polled(-1, RBSPI_KEYS_POLL_INTERVAL,
-					ARRAY_SIZE(rbspi_gpio_keys_reset16),
-					rbspi_gpio_keys_reset16);
+	rbspi_register_reset_button(RB952_GPIO_BTN_RESET);
 }
 
 /*
@@ -892,9 +868,7 @@ static void __init rb962_setup(void)
 				rb962_leds_gpio);
 
 	/* This device has a single reset button as gpio 20 */
-	ath79_register_gpio_keys_polled(-1, RBSPI_KEYS_POLL_INTERVAL,
-					ARRAY_SIZE(rbspi_gpio_keys_reset20),
-					rbspi_gpio_keys_reset20);
+	rbspi_register_reset_button(RB962_GPIO_BTN_RESET);
 }
 
 /*
@@ -916,9 +890,7 @@ static void __init rblhg_setup(void)
 
 	ath79_register_leds_gpio(-1, ARRAY_SIZE(rblhg_leds), rblhg_leds);
 
-	ath79_register_gpio_keys_polled(-1, RBSPI_KEYS_POLL_INTERVAL,
-					ARRAY_SIZE(rblhg_gpio_keys),
-					rblhg_gpio_keys);
+	rbspi_register_reset_button(RBLHG_GPIO_BTN_RESET);
 }
 
 /*
@@ -940,9 +912,7 @@ static void __init rbwap_setup(void)
 	ath79_register_leds_gpio(-1, ARRAY_SIZE(rbwap_leds), rbwap_leds);
 
 	/* wAP has a single reset button as GPIO 16 */
-	ath79_register_gpio_keys_polled(-1, RBSPI_KEYS_POLL_INTERVAL,
-					ARRAY_SIZE(rbspi_gpio_keys_reset16),
-					rbspi_gpio_keys_reset16);
+	rbspi_register_reset_button(RBWAP_GPIO_BTN_RESET);
 }
 
 /*
@@ -1002,9 +972,7 @@ static void __init rbmap_setup(void)
 	ath79_register_leds_gpio(-1, ARRAY_SIZE(rbmap_leds), rbmap_leds);
 
 	/* mAP 2nD has a single reset button as gpio 16 */
-	ath79_register_gpio_keys_polled(-1, RBSPI_KEYS_POLL_INTERVAL,
-					ARRAY_SIZE(rbspi_gpio_keys_reset16),
-					rbspi_gpio_keys_reset16);
+	rbspi_register_reset_button(RBMAP_GPIO_BTN_RESET);
 }
 
 /*
@@ -1037,9 +1005,7 @@ static void __init rbwapgsc_setup(void)
 
 	rbspi_wlan_init(1, 2);
 
-	ath79_register_gpio_keys_polled(-1, RBSPI_KEYS_POLL_INTERVAL,
-		ARRAY_SIZE(rbspi_gpio_keys_reset01),
-		rbspi_gpio_keys_reset01);
+	rbspi_register_reset_button(RBWAPGSC_GPIO_BTN_RESET);
 
 	ath79_gpio_function_enable(QCA955X_GPIO_FUNC_JTAG_DISABLE|
 				QCA955X_GPIO_REG_OUT_FUNC4|
-- 
2.14.3



More information about the Lede-dev mailing list