xref: /openbmc/linux/arch/mips/bcm47xx/buttons.c (revision fc605b91)
1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
2ef1e3e7aSRafał Miłecki #include "bcm47xx_private.h"
3ef1e3e7aSRafał Miłecki 
4ef1e3e7aSRafał Miłecki #include <linux/input.h>
5ef1e3e7aSRafał Miłecki #include <linux/gpio_keys.h>
6ef1e3e7aSRafał Miłecki #include <linux/interrupt.h>
7ef1e3e7aSRafał Miłecki #include <bcm47xx_board.h>
8ef1e3e7aSRafał Miłecki #include <bcm47xx.h>
9ef1e3e7aSRafał Miłecki 
10ef1e3e7aSRafał Miłecki /**************************************************
11ef1e3e7aSRafał Miłecki  * Database
12ef1e3e7aSRafał Miłecki  **************************************************/
13ef1e3e7aSRafał Miłecki 
143be97255SRafał Miłecki #define BCM47XX_GPIO_KEY(_gpio, _code)					\
153be97255SRafał Miłecki 	{								\
163be97255SRafał Miłecki 		.code		= _code,				\
173be97255SRafał Miłecki 		.gpio		= _gpio,				\
183be97255SRafał Miłecki 		.active_low	= 1,					\
193be97255SRafał Miłecki 	}
203be97255SRafał Miłecki 
21bdfdaf1aSMirko Parthey #define BCM47XX_GPIO_KEY_H(_gpio, _code)				\
22bdfdaf1aSMirko Parthey 	{								\
23bdfdaf1aSMirko Parthey 		.code		= _code,				\
24bdfdaf1aSMirko Parthey 		.gpio		= _gpio,				\
25bdfdaf1aSMirko Parthey 	}
26bdfdaf1aSMirko Parthey 
273be97255SRafał Miłecki /* Asus */
283be97255SRafał Miłecki 
293be97255SRafał Miłecki static const struct gpio_keys_button
30aecf89f2SFlorian Fainelli bcm47xx_buttons_asus_rtn10u[] __initconst = {
31aecf89f2SFlorian Fainelli 	BCM47XX_GPIO_KEY(20, KEY_WPS_BUTTON),
32aecf89f2SFlorian Fainelli 	BCM47XX_GPIO_KEY(21, KEY_RESTART),
33aecf89f2SFlorian Fainelli };
34aecf89f2SFlorian Fainelli 
35aecf89f2SFlorian Fainelli static const struct gpio_keys_button
363be97255SRafał Miłecki bcm47xx_buttons_asus_rtn12[] __initconst = {
373be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
383be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(1, KEY_RESTART),
393be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, BTN_0), /* Router mode */
403be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, BTN_1), /* Repeater mode */
413be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, BTN_2), /* AP mode */
423be97255SRafał Miłecki };
433be97255SRafał Miłecki 
443be97255SRafał Miłecki static const struct gpio_keys_button
453be97255SRafał Miłecki bcm47xx_buttons_asus_rtn16[] __initconst = {
463be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
473be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(8, KEY_RESTART),
483be97255SRafał Miłecki };
493be97255SRafał Miłecki 
503be97255SRafał Miłecki static const struct gpio_keys_button
513be97255SRafał Miłecki bcm47xx_buttons_asus_rtn66u[] __initconst = {
523be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
533be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(9, KEY_RESTART),
543be97255SRafał Miłecki };
553be97255SRafał Miłecki 
563be97255SRafał Miłecki static const struct gpio_keys_button
573be97255SRafał Miłecki bcm47xx_buttons_asus_wl300g[] __initconst = {
583be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
593be97255SRafał Miłecki };
603be97255SRafał Miłecki 
613be97255SRafał Miłecki static const struct gpio_keys_button
623be97255SRafał Miłecki bcm47xx_buttons_asus_wl320ge[] __initconst = {
633be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
643be97255SRafał Miłecki };
653be97255SRafał Miłecki 
663be97255SRafał Miłecki static const struct gpio_keys_button
673be97255SRafał Miłecki bcm47xx_buttons_asus_wl330ge[] __initconst = {
683be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(2, KEY_RESTART),
693be97255SRafał Miłecki };
703be97255SRafał Miłecki 
713be97255SRafał Miłecki static const struct gpio_keys_button
72250dc037SHauke Mehrtens bcm47xx_buttons_asus_wl500g[] __initconst = {
73250dc037SHauke Mehrtens 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
74250dc037SHauke Mehrtens };
75250dc037SHauke Mehrtens 
76250dc037SHauke Mehrtens static const struct gpio_keys_button
773be97255SRafał Miłecki bcm47xx_buttons_asus_wl500gd[] __initconst = {
783be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
793be97255SRafał Miłecki };
803be97255SRafał Miłecki 
813be97255SRafał Miłecki static const struct gpio_keys_button
823be97255SRafał Miłecki bcm47xx_buttons_asus_wl500gpv1[] __initconst = {
833be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_RESTART),
843be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
853be97255SRafał Miłecki };
863be97255SRafał Miłecki 
873be97255SRafał Miłecki static const struct gpio_keys_button
883be97255SRafał Miłecki bcm47xx_buttons_asus_wl500gpv2[] __initconst = {
893be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(2, KEY_RESTART),
903be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(3, KEY_WPS_BUTTON),
913be97255SRafał Miłecki };
923be97255SRafał Miłecki 
933be97255SRafał Miłecki static const struct gpio_keys_button
943be97255SRafał Miłecki bcm47xx_buttons_asus_wl500w[] __initconst = {
95bdfdaf1aSMirko Parthey 	BCM47XX_GPIO_KEY_H(6, KEY_RESTART),
96bdfdaf1aSMirko Parthey 	BCM47XX_GPIO_KEY_H(7, KEY_WPS_BUTTON),
973be97255SRafał Miłecki };
983be97255SRafał Miłecki 
993be97255SRafał Miłecki static const struct gpio_keys_button
1003be97255SRafał Miłecki bcm47xx_buttons_asus_wl520gc[] __initconst = {
1013be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(2, KEY_RESTART),
1023be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(3, KEY_WPS_BUTTON),
1033be97255SRafał Miłecki };
1043be97255SRafał Miłecki 
1053be97255SRafał Miłecki static const struct gpio_keys_button
1063be97255SRafał Miłecki bcm47xx_buttons_asus_wl520gu[] __initconst = {
1073be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(2, KEY_RESTART),
1083be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(3, KEY_WPS_BUTTON),
1093be97255SRafał Miłecki };
1103be97255SRafał Miłecki 
1113be97255SRafał Miłecki static const struct gpio_keys_button
1123be97255SRafał Miłecki bcm47xx_buttons_asus_wl700ge[] __initconst = {
1133be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_POWER), /* Hard disk power switch */
1143be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), /* EZSetup */
1153be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_COPY), /* Copy data from USB to internal disk */
1163be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(7, KEY_RESTART), /* Hard reset */
1173be97255SRafał Miłecki };
1183be97255SRafał Miłecki 
1193be97255SRafał Miłecki static const struct gpio_keys_button
1203be97255SRafał Miłecki bcm47xx_buttons_asus_wlhdd[] __initconst = {
1213be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
1223be97255SRafał Miłecki };
1233be97255SRafał Miłecki 
1243be97255SRafał Miłecki /* Huawei */
1253be97255SRafał Miłecki 
1263be97255SRafał Miłecki static const struct gpio_keys_button
1273be97255SRafał Miłecki bcm47xx_buttons_huawei_e970[] __initconst = {
1283be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
1293be97255SRafał Miłecki };
1303be97255SRafał Miłecki 
1313be97255SRafał Miłecki /* Belkin */
1323be97255SRafał Miłecki 
1333be97255SRafał Miłecki static const struct gpio_keys_button
1343be97255SRafał Miłecki bcm47xx_buttons_belkin_f7d4301[] __initconst = {
1353be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
1363be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(8, KEY_WPS_BUTTON),
1373be97255SRafał Miłecki };
1383be97255SRafał Miłecki 
1393be97255SRafał Miłecki /* Buffalo */
1403be97255SRafał Miłecki 
1413be97255SRafał Miłecki static const struct gpio_keys_button
1423be97255SRafał Miłecki bcm47xx_buttons_buffalo_whr2_a54g54[] __initconst = {
1433be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
1443be97255SRafał Miłecki };
1453be97255SRafał Miłecki 
1463be97255SRafał Miłecki static const struct gpio_keys_button
1473be97255SRafał Miłecki bcm47xx_buttons_buffalo_whr_g125[] __initconst = {
1483be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
1493be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
1503be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, BTN_0), /* Router / AP mode swtich */
1513be97255SRafał Miłecki };
1523be97255SRafał Miłecki 
1533be97255SRafał Miłecki static const struct gpio_keys_button
1543be97255SRafał Miłecki bcm47xx_buttons_buffalo_whr_g54s[] __initconst = {
1553be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
15663f7541cSRafał Miłecki 	BCM47XX_GPIO_KEY_H(4, KEY_RESTART),
1573be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, BTN_0), /* Router / AP mode swtich */
1583be97255SRafał Miłecki };
1593be97255SRafał Miłecki 
1603be97255SRafał Miłecki static const struct gpio_keys_button
1613be97255SRafał Miłecki bcm47xx_buttons_buffalo_whr_hp_g54[] __initconst = {
1623be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
1633be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
1643be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, BTN_0), /* Router / AP mode swtich */
1653be97255SRafał Miłecki };
1663be97255SRafał Miłecki 
1673be97255SRafał Miłecki static const struct gpio_keys_button
1683be97255SRafał Miłecki bcm47xx_buttons_buffalo_wzr_g300n[] __initconst = {
1693be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
1703be97255SRafał Miłecki };
1713be97255SRafał Miłecki 
1723be97255SRafał Miłecki static const struct gpio_keys_button
1733be97255SRafał Miłecki bcm47xx_buttons_buffalo_wzr_rs_g54[] __initconst = {
1743be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
1753be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
1763be97255SRafał Miłecki };
1773be97255SRafał Miłecki 
1783be97255SRafał Miłecki static const struct gpio_keys_button
1793be97255SRafał Miłecki bcm47xx_buttons_buffalo_wzr_rs_g54hp[] __initconst = {
1803be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
1813be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
1823be97255SRafał Miłecki };
1833be97255SRafał Miłecki 
1843be97255SRafał Miłecki /* Dell */
1853be97255SRafał Miłecki 
1863be97255SRafał Miłecki static const struct gpio_keys_button
1873be97255SRafał Miłecki bcm47xx_buttons_dell_tm2300[] __initconst = {
1883be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_RESTART),
1893be97255SRafał Miłecki };
1903be97255SRafał Miłecki 
1913be97255SRafał Miłecki /* D-Link */
1923be97255SRafał Miłecki 
1933be97255SRafał Miłecki static const struct gpio_keys_button
1943be97255SRafał Miłecki bcm47xx_buttons_dlink_dir130[] __initconst = {
1953be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(3, KEY_RESTART),
1963be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(7, KEY_UNKNOWN),
1973be97255SRafał Miłecki };
1983be97255SRafał Miłecki 
1993be97255SRafał Miłecki static const struct gpio_keys_button
2003be97255SRafał Miłecki bcm47xx_buttons_dlink_dir330[] __initconst = {
2013be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(3, KEY_RESTART),
2023be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(7, KEY_UNKNOWN),
2033be97255SRafał Miłecki };
2043be97255SRafał Miłecki 
2053be97255SRafał Miłecki /* Linksys */
2063be97255SRafał Miłecki 
2073be97255SRafał Miłecki static const struct gpio_keys_button
2083be97255SRafał Miłecki bcm47xx_buttons_linksys_e1000v1[] __initconst = {
2093be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, KEY_WPS_BUTTON),
2103be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2113be97255SRafał Miłecki };
2123be97255SRafał Miłecki 
2133be97255SRafał Miłecki static const struct gpio_keys_button
2143be97255SRafał Miłecki bcm47xx_buttons_linksys_e1000v21[] __initconst = {
2153be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(9, KEY_WPS_BUTTON),
2163be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(10, KEY_RESTART),
2173be97255SRafał Miłecki };
2183be97255SRafał Miłecki 
2193be97255SRafał Miłecki static const struct gpio_keys_button
2203be97255SRafał Miłecki bcm47xx_buttons_linksys_e2000v1[] __initconst = {
2213be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, KEY_WPS_BUTTON),
2223be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(8, KEY_RESTART),
2233be97255SRafał Miłecki };
2243be97255SRafał Miłecki 
2253be97255SRafał Miłecki static const struct gpio_keys_button
226*fc605b91SRafał Miłecki bcm47xx_buttons_linksys_e2500v3[] __initconst = {
227*fc605b91SRafał Miłecki 	BCM47XX_GPIO_KEY(9, KEY_WPS_BUTTON),
228*fc605b91SRafał Miłecki 	BCM47XX_GPIO_KEY(10, KEY_RESTART),
229*fc605b91SRafał Miłecki };
230*fc605b91SRafał Miłecki 
231*fc605b91SRafał Miłecki static const struct gpio_keys_button
2323be97255SRafał Miłecki bcm47xx_buttons_linksys_e3000v1[] __initconst = {
2333be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
2343be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2353be97255SRafał Miłecki };
2363be97255SRafał Miłecki 
2373be97255SRafał Miłecki static const struct gpio_keys_button
2383be97255SRafał Miłecki bcm47xx_buttons_linksys_e3200v1[] __initconst = {
2393be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, KEY_RESTART),
2403be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(8, KEY_WPS_BUTTON),
2413be97255SRafał Miłecki };
2423be97255SRafał Miłecki 
2433be97255SRafał Miłecki static const struct gpio_keys_button
2443be97255SRafał Miłecki bcm47xx_buttons_linksys_e4200v1[] __initconst = {
2453be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
2463be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2473be97255SRafał Miłecki };
2483be97255SRafał Miłecki 
2493be97255SRafał Miłecki static const struct gpio_keys_button
2503be97255SRafał Miłecki bcm47xx_buttons_linksys_wrt150nv1[] __initconst = {
2513be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
2523be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2533be97255SRafał Miłecki };
2543be97255SRafał Miłecki 
2553be97255SRafał Miłecki static const struct gpio_keys_button
2563be97255SRafał Miłecki bcm47xx_buttons_linksys_wrt150nv11[] __initconst = {
2573be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
2583be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2593be97255SRafał Miłecki };
2603be97255SRafał Miłecki 
2613be97255SRafał Miłecki static const struct gpio_keys_button
2623be97255SRafał Miłecki bcm47xx_buttons_linksys_wrt160nv1[] __initconst = {
2633be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
2643be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2653be97255SRafał Miłecki };
2663be97255SRafał Miłecki 
2673be97255SRafał Miłecki static const struct gpio_keys_button
2683be97255SRafał Miłecki bcm47xx_buttons_linksys_wrt160nv3[] __initconst = {
2693be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, KEY_WPS_BUTTON),
2703be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2713be97255SRafał Miłecki };
2723be97255SRafał Miłecki 
2733be97255SRafał Miłecki static const struct gpio_keys_button
274160f1431SRafał Miłecki bcm47xx_buttons_linksys_wrt300n_v1[] __initconst = {
275160f1431SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
276160f1431SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
277160f1431SRafał Miłecki };
278160f1431SRafał Miłecki 
279160f1431SRafał Miłecki static const struct gpio_keys_button
2803be97255SRafał Miłecki bcm47xx_buttons_linksys_wrt300nv11[] __initconst = {
2813be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_UNKNOWN),
2823be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2833be97255SRafał Miłecki };
2843be97255SRafał Miłecki 
2853be97255SRafał Miłecki static const struct gpio_keys_button
2863be97255SRafał Miłecki bcm47xx_buttons_linksys_wrt310nv1[] __initconst = {
2873be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2883be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(8, KEY_UNKNOWN),
2893be97255SRafał Miłecki };
2903be97255SRafał Miłecki 
2913be97255SRafał Miłecki static const struct gpio_keys_button
292eea175eeSFlorian Fainelli bcm47xx_buttons_linksys_wrt310n_v2[] __initconst = {
293eea175eeSFlorian Fainelli 	BCM47XX_GPIO_KEY(5, KEY_WPS_BUTTON),
294eea175eeSFlorian Fainelli 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
295eea175eeSFlorian Fainelli };
296eea175eeSFlorian Fainelli 
297eea175eeSFlorian Fainelli static const struct gpio_keys_button
2983829e4f1SFlorian Fainelli bcm47xx_buttons_linksys_wrt320n_v1[] __initconst = {
2993829e4f1SFlorian Fainelli 	BCM47XX_GPIO_KEY(5, KEY_WPS_BUTTON),
3003829e4f1SFlorian Fainelli 	BCM47XX_GPIO_KEY(8, KEY_RESTART),
3013829e4f1SFlorian Fainelli };
3023829e4f1SFlorian Fainelli 
3033829e4f1SFlorian Fainelli static const struct gpio_keys_button
30496c10de3SHauke Mehrtens bcm47xx_buttons_linksys_wrt54g3gv2[] __initconst = {
30596c10de3SHauke Mehrtens 	BCM47XX_GPIO_KEY(5, KEY_WIMAX),
30696c10de3SHauke Mehrtens 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
30796c10de3SHauke Mehrtens };
30896c10de3SHauke Mehrtens 
30996c10de3SHauke Mehrtens static const struct gpio_keys_button
31041a867cbSRafał Miłecki bcm47xx_buttons_linksys_wrt54g_generic[] __initconst = {
31196c10de3SHauke Mehrtens 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
31296c10de3SHauke Mehrtens 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
31396c10de3SHauke Mehrtens };
31496c10de3SHauke Mehrtens 
31596c10de3SHauke Mehrtens static const struct gpio_keys_button
3163be97255SRafał Miłecki bcm47xx_buttons_linksys_wrt610nv1[] __initconst = {
3173be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
3183be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(8, KEY_WPS_BUTTON),
3193be97255SRafał Miłecki };
3203be97255SRafał Miłecki 
3213be97255SRafał Miłecki static const struct gpio_keys_button
3223be97255SRafał Miłecki bcm47xx_buttons_linksys_wrt610nv2[] __initconst = {
3233be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
3243be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
3253be97255SRafał Miłecki };
3263be97255SRafał Miłecki 
32796c10de3SHauke Mehrtens static const struct gpio_keys_button
32896c10de3SHauke Mehrtens bcm47xx_buttons_linksys_wrtsl54gs[] __initconst = {
32996c10de3SHauke Mehrtens 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
33096c10de3SHauke Mehrtens 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
33196c10de3SHauke Mehrtens };
33296c10de3SHauke Mehrtens 
33324f2970fSDan Haab /* Luxul */
33424f2970fSDan Haab 
33524f2970fSDan Haab static const struct gpio_keys_button
336e7093053SDan Haab bcm47xx_buttons_luxul_abr_4400_v1[] = {
337e7093053SDan Haab 	BCM47XX_GPIO_KEY(14, KEY_RESTART),
338e7093053SDan Haab };
339e7093053SDan Haab 
340e7093053SDan Haab static const struct gpio_keys_button
341e7093053SDan Haab bcm47xx_buttons_luxul_xap_310_v1[] = {
342e7093053SDan Haab 	BCM47XX_GPIO_KEY(20, KEY_RESTART),
343e7093053SDan Haab };
344e7093053SDan Haab 
345e7093053SDan Haab static const struct gpio_keys_button
346e7093053SDan Haab bcm47xx_buttons_luxul_xap_1210_v1[] = {
347e7093053SDan Haab 	BCM47XX_GPIO_KEY(8, KEY_RESTART),
348e7093053SDan Haab };
349e7093053SDan Haab 
350e7093053SDan Haab static const struct gpio_keys_button
351e7093053SDan Haab bcm47xx_buttons_luxul_xap_1230_v1[] = {
352e7093053SDan Haab 	BCM47XX_GPIO_KEY(8, KEY_RESTART),
353e7093053SDan Haab };
354e7093053SDan Haab 
355e7093053SDan Haab static const struct gpio_keys_button
356e7093053SDan Haab bcm47xx_buttons_luxul_xap_1240_v1[] = {
357e7093053SDan Haab 	BCM47XX_GPIO_KEY(8, KEY_RESTART),
358e7093053SDan Haab };
359e7093053SDan Haab 
360e7093053SDan Haab static const struct gpio_keys_button
361e7093053SDan Haab bcm47xx_buttons_luxul_xap_1500_v1[] = {
362e7093053SDan Haab 	BCM47XX_GPIO_KEY(14, KEY_RESTART),
363e7093053SDan Haab };
364e7093053SDan Haab 
365e7093053SDan Haab static const struct gpio_keys_button
366e7093053SDan Haab bcm47xx_buttons_luxul_xbr_4400_v1[] = {
367e7093053SDan Haab 	BCM47XX_GPIO_KEY(14, KEY_RESTART),
368e7093053SDan Haab };
369e7093053SDan Haab 
370e7093053SDan Haab static const struct gpio_keys_button
371e7093053SDan Haab bcm47xx_buttons_luxul_xvw_p30_v1[] = {
372e7093053SDan Haab 	BCM47XX_GPIO_KEY(20, KEY_RESTART),
373e7093053SDan Haab };
374e7093053SDan Haab 
375e7093053SDan Haab static const struct gpio_keys_button
376e7093053SDan Haab bcm47xx_buttons_luxul_xwr_600_v1[] = {
377e7093053SDan Haab 	BCM47XX_GPIO_KEY(8, KEY_RESTART),
378e7093053SDan Haab };
379e7093053SDan Haab 
380e7093053SDan Haab static const struct gpio_keys_button
38124f2970fSDan Haab bcm47xx_buttons_luxul_xwr_1750_v1[] = {
382a5075e62SDan Haab 	BCM47XX_GPIO_KEY(14, KEY_RESTART),
38324f2970fSDan Haab };
38424f2970fSDan Haab 
385250dc037SHauke Mehrtens /* Microsoft */
386250dc037SHauke Mehrtens 
387250dc037SHauke Mehrtens static const struct gpio_keys_button
388250dc037SHauke Mehrtens bcm47xx_buttons_microsoft_nm700[] __initconst = {
389250dc037SHauke Mehrtens 	BCM47XX_GPIO_KEY(7, KEY_RESTART),
390250dc037SHauke Mehrtens };
391250dc037SHauke Mehrtens 
3923be97255SRafał Miłecki /* Motorola */
3933be97255SRafał Miłecki 
3943be97255SRafał Miłecki static const struct gpio_keys_button
3953be97255SRafał Miłecki bcm47xx_buttons_motorola_we800g[] __initconst = {
3963be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_RESTART),
3973be97255SRafał Miłecki };
3983be97255SRafał Miłecki 
3993be97255SRafał Miłecki static const struct gpio_keys_button
4003be97255SRafał Miłecki bcm47xx_buttons_motorola_wr850gp[] __initconst = {
4013be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, KEY_RESTART),
4023be97255SRafał Miłecki };
4033be97255SRafał Miłecki 
4043be97255SRafał Miłecki static const struct gpio_keys_button
4053be97255SRafał Miłecki bcm47xx_buttons_motorola_wr850gv2v3[] __initconst = {
4063be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, KEY_RESTART),
4073be97255SRafał Miłecki };
4083be97255SRafał Miłecki 
4093be97255SRafał Miłecki /* Netgear */
4103be97255SRafał Miłecki 
4113be97255SRafał Miłecki static const struct gpio_keys_button
41242374b94SEdward Matijević bcm47xx_buttons_netgear_r6200_v1[] __initconst = {
41342374b94SEdward Matijević 	BCM47XX_GPIO_KEY(2, KEY_RFKILL),
41442374b94SEdward Matijević 	BCM47XX_GPIO_KEY(3, KEY_RESTART),
41542374b94SEdward Matijević 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
41642374b94SEdward Matijević };
41742374b94SEdward Matijević 
41842374b94SEdward Matijević static const struct gpio_keys_button
41915e690afSFlorian Fainelli bcm47xx_buttons_netgear_r6300_v1[] __initconst = {
42015e690afSFlorian Fainelli 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
42115e690afSFlorian Fainelli };
42215e690afSFlorian Fainelli 
42315e690afSFlorian Fainelli static const struct gpio_keys_button
4244da27b6dSFlorian Fainelli bcm47xx_buttons_netgear_wn2500rp_v1[] __initconst = {
4254da27b6dSFlorian Fainelli 	BCM47XX_GPIO_KEY(12, KEY_RESTART),
4264da27b6dSFlorian Fainelli 	BCM47XX_GPIO_KEY(31, KEY_WPS_BUTTON),
4274da27b6dSFlorian Fainelli };
4284da27b6dSFlorian Fainelli 
4294da27b6dSFlorian Fainelli static const struct gpio_keys_button
4303be97255SRafał Miłecki bcm47xx_buttons_netgear_wndr3400v1[] __initconst = {
4313be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
4323be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
4333be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(8, KEY_RFKILL),
4343be97255SRafał Miłecki };
4353be97255SRafał Miłecki 
4363be97255SRafał Miłecki static const struct gpio_keys_button
437160f1431SRafał Miłecki bcm47xx_buttons_netgear_wndr3400_v3[] __initconst = {
438160f1431SRafał Miłecki 	BCM47XX_GPIO_KEY(12, KEY_RESTART),
439160f1431SRafał Miłecki 	BCM47XX_GPIO_KEY(23, KEY_WPS_BUTTON),
440160f1431SRafał Miłecki };
441160f1431SRafał Miłecki 
442160f1431SRafał Miłecki static const struct gpio_keys_button
4433be97255SRafał Miłecki bcm47xx_buttons_netgear_wndr3700v3[] __initconst = {
4443be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(2, KEY_RFKILL),
4453be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(3, KEY_RESTART),
4463be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
4473be97255SRafał Miłecki };
4483be97255SRafał Miłecki 
449ef1e3e7aSRafał Miłecki static const struct gpio_keys_button
450e7277e1dSRafał Miłecki bcm47xx_buttons_netgear_wndr4500v1[] __initconst = {
451e7277e1dSRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
452e7277e1dSRafał Miłecki 	BCM47XX_GPIO_KEY(5, KEY_RFKILL),
453e7277e1dSRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
454ef1e3e7aSRafał Miłecki };
455ef1e3e7aSRafał Miłecki 
4563be97255SRafał Miłecki static const struct gpio_keys_button
457425f1e62SRafał Miłecki bcm47xx_buttons_netgear_wnr1000_v3[] __initconst = {
458425f1e62SRafał Miłecki 	BCM47XX_GPIO_KEY(2, KEY_WPS_BUTTON),
459425f1e62SRafał Miłecki 	BCM47XX_GPIO_KEY(3, KEY_RESTART),
460425f1e62SRafał Miłecki };
461425f1e62SRafał Miłecki 
462425f1e62SRafał Miłecki static const struct gpio_keys_button
4639194b343SRafał Miłecki bcm47xx_buttons_netgear_wnr3500lv1[] __initconst = {
4649194b343SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
4659194b343SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
4669194b343SRafał Miłecki };
4679194b343SRafał Miłecki 
4689194b343SRafał Miłecki static const struct gpio_keys_button
469c022e871SFlorian Fainelli bcm47xx_buttons_netgear_wnr3500lv2[] __initconst = {
470c022e871SFlorian Fainelli 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
471c022e871SFlorian Fainelli 	BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
472c022e871SFlorian Fainelli 	BCM47XX_GPIO_KEY(8, KEY_RFKILL),
473c022e871SFlorian Fainelli };
474c022e871SFlorian Fainelli 
475c022e871SFlorian Fainelli static const struct gpio_keys_button
4763be97255SRafał Miłecki bcm47xx_buttons_netgear_wnr834bv2[] __initconst = {
4773be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
4783be97255SRafał Miłecki };
4793be97255SRafał Miłecki 
4803be97255SRafał Miłecki /* SimpleTech */
4813be97255SRafał Miłecki 
4823be97255SRafał Miłecki static const struct gpio_keys_button
4833be97255SRafał Miłecki bcm47xx_buttons_simpletech_simpleshare[] __initconst = {
4843be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_RESTART),
4853be97255SRafał Miłecki };
4863be97255SRafał Miłecki 
487ef1e3e7aSRafał Miłecki /**************************************************
488ef1e3e7aSRafał Miłecki  * Init
489ef1e3e7aSRafał Miłecki  **************************************************/
490ef1e3e7aSRafał Miłecki 
491ef1e3e7aSRafał Miłecki static struct gpio_keys_platform_data bcm47xx_button_pdata;
492ef1e3e7aSRafał Miłecki 
493ef1e3e7aSRafał Miłecki static struct platform_device bcm47xx_buttons_gpio_keys = {
494ef1e3e7aSRafał Miłecki 	.name = "gpio-keys",
495ef1e3e7aSRafał Miłecki 	.dev = {
496ef1e3e7aSRafał Miłecki 		.platform_data = &bcm47xx_button_pdata,
497ef1e3e7aSRafał Miłecki 	}
498ef1e3e7aSRafał Miłecki };
499ef1e3e7aSRafał Miłecki 
500ef1e3e7aSRafał Miłecki /* Copy data from __initconst */
bcm47xx_buttons_copy(const struct gpio_keys_button * buttons,size_t nbuttons)501ef1e3e7aSRafał Miłecki static int __init bcm47xx_buttons_copy(const struct gpio_keys_button *buttons,
502ef1e3e7aSRafał Miłecki 				       size_t nbuttons)
503ef1e3e7aSRafał Miłecki {
504ef1e3e7aSRafał Miłecki 	size_t size = nbuttons * sizeof(*buttons);
505ef1e3e7aSRafał Miłecki 
506e5dd8f2cSAndrzej Hajda 	bcm47xx_button_pdata.buttons = kmemdup(buttons, size, GFP_KERNEL);
507ef1e3e7aSRafał Miłecki 	if (!bcm47xx_button_pdata.buttons)
508ef1e3e7aSRafał Miłecki 		return -ENOMEM;
509ef1e3e7aSRafał Miłecki 	bcm47xx_button_pdata.nbuttons = nbuttons;
510ef1e3e7aSRafał Miłecki 
511ef1e3e7aSRafał Miłecki 	return 0;
512ef1e3e7aSRafał Miłecki }
513ef1e3e7aSRafał Miłecki 
514ef1e3e7aSRafał Miłecki #define bcm47xx_copy_bdata(dev_buttons)					\
515ef1e3e7aSRafał Miłecki 	bcm47xx_buttons_copy(dev_buttons, ARRAY_SIZE(dev_buttons));
516ef1e3e7aSRafał Miłecki 
bcm47xx_buttons_register(void)517ef1e3e7aSRafał Miłecki int __init bcm47xx_buttons_register(void)
518ef1e3e7aSRafał Miłecki {
519ef1e3e7aSRafał Miłecki 	enum bcm47xx_board board = bcm47xx_board_get();
520ef1e3e7aSRafał Miłecki 	int err;
521ef1e3e7aSRafał Miłecki 
522ef1e3e7aSRafał Miłecki 	switch (board) {
523aecf89f2SFlorian Fainelli 	case BCM47XX_BOARD_ASUS_RTN10U:
524aecf89f2SFlorian Fainelli 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn10u);
525aecf89f2SFlorian Fainelli 		break;
5263be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_RTN12:
5273be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn12);
5283be97255SRafał Miłecki 		break;
5293be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_RTN16:
5303be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn16);
5313be97255SRafał Miłecki 		break;
5323be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_RTN66U:
5333be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn66u);
5343be97255SRafał Miłecki 		break;
5353be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL300G:
5363be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl300g);
5373be97255SRafał Miłecki 		break;
5383be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL320GE:
5393be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl320ge);
5403be97255SRafał Miłecki 		break;
5413be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL330GE:
5423be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl330ge);
5433be97255SRafał Miłecki 		break;
544250dc037SHauke Mehrtens 	case BCM47XX_BOARD_ASUS_WL500G:
545250dc037SHauke Mehrtens 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500g);
546250dc037SHauke Mehrtens 		break;
5473be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL500GD:
5483be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500gd);
5493be97255SRafał Miłecki 		break;
5503be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL500GPV1:
5513be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500gpv1);
5523be97255SRafał Miłecki 		break;
5533be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL500GPV2:
5543be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500gpv2);
5553be97255SRafał Miłecki 		break;
5563be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL500W:
5573be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500w);
5583be97255SRafał Miłecki 		break;
5593be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL520GC:
5603be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl520gc);
5613be97255SRafał Miłecki 		break;
5623be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL520GU:
5633be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl520gu);
5643be97255SRafał Miłecki 		break;
5653be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL700GE:
5663be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl700ge);
5673be97255SRafał Miłecki 		break;
5683be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WLHDD:
5693be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wlhdd);
5703be97255SRafał Miłecki 		break;
5713be97255SRafał Miłecki 
5720dae62edSCody P Schafer 	case BCM47XX_BOARD_BELKIN_F7D3301:
5730dae62edSCody P Schafer 	case BCM47XX_BOARD_BELKIN_F7D3302:
5743be97255SRafał Miłecki 	case BCM47XX_BOARD_BELKIN_F7D4301:
5750dae62edSCody P Schafer 	case BCM47XX_BOARD_BELKIN_F7D4302:
5760dae62edSCody P Schafer 	case BCM47XX_BOARD_BELKIN_F7D4401:
5773be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_belkin_f7d4301);
5783be97255SRafał Miłecki 		break;
5793be97255SRafał Miłecki 
5803be97255SRafał Miłecki 	case BCM47XX_BOARD_BUFFALO_WHR2_A54G54:
5813be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_whr2_a54g54);
5823be97255SRafał Miłecki 		break;
5833be97255SRafał Miłecki 	case BCM47XX_BOARD_BUFFALO_WHR_G125:
5843be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_whr_g125);
5853be97255SRafał Miłecki 		break;
5863be97255SRafał Miłecki 	case BCM47XX_BOARD_BUFFALO_WHR_G54S:
5873be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_whr_g54s);
5883be97255SRafał Miłecki 		break;
5893be97255SRafał Miłecki 	case BCM47XX_BOARD_BUFFALO_WHR_HP_G54:
5903be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_whr_hp_g54);
5913be97255SRafał Miłecki 		break;
5923be97255SRafał Miłecki 	case BCM47XX_BOARD_BUFFALO_WZR_G300N:
5933be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_wzr_g300n);
5943be97255SRafał Miłecki 		break;
5953be97255SRafał Miłecki 	case BCM47XX_BOARD_BUFFALO_WZR_RS_G54:
5963be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_wzr_rs_g54);
5973be97255SRafał Miłecki 		break;
5983be97255SRafał Miłecki 	case BCM47XX_BOARD_BUFFALO_WZR_RS_G54HP:
5993be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_wzr_rs_g54hp);
6003be97255SRafał Miłecki 		break;
6013be97255SRafał Miłecki 
6023be97255SRafał Miłecki 	case BCM47XX_BOARD_DELL_TM2300:
6033be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_dell_tm2300);
6043be97255SRafał Miłecki 		break;
6053be97255SRafał Miłecki 
6063be97255SRafał Miłecki 	case BCM47XX_BOARD_DLINK_DIR130:
6073be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_dlink_dir130);
6083be97255SRafał Miłecki 		break;
6093be97255SRafał Miłecki 	case BCM47XX_BOARD_DLINK_DIR330:
6103be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_dlink_dir330);
6113be97255SRafał Miłecki 		break;
6123be97255SRafał Miłecki 
6133be97255SRafał Miłecki 	case BCM47XX_BOARD_HUAWEI_E970:
6143be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_huawei_e970);
6153be97255SRafał Miłecki 		break;
6163be97255SRafał Miłecki 
6173be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_E1000V1:
6183be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e1000v1);
6193be97255SRafał Miłecki 		break;
6203be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_E1000V21:
6213be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e1000v21);
6223be97255SRafał Miłecki 		break;
6233be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_E2000V1:
6243be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e2000v1);
6253be97255SRafał Miłecki 		break;
626*fc605b91SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_E2500V3:
627*fc605b91SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e2500v3);
628*fc605b91SRafał Miłecki 		break;
6293be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_E3000V1:
6303be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e3000v1);
6313be97255SRafał Miłecki 		break;
6323be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_E3200V1:
6333be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e3200v1);
6343be97255SRafał Miłecki 		break;
6353be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_E4200V1:
6363be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e4200v1);
6373be97255SRafał Miłecki 		break;
6383be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT150NV1:
6393be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt150nv1);
6403be97255SRafał Miłecki 		break;
6413be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT150NV11:
6423be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt150nv11);
6433be97255SRafał Miłecki 		break;
6443be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT160NV1:
6453be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt160nv1);
6463be97255SRafał Miłecki 		break;
6473be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT160NV3:
6483be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt160nv3);
6493be97255SRafał Miłecki 		break;
650160f1431SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT300N_V1:
651160f1431SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt300n_v1);
652160f1431SRafał Miłecki 		break;
6533be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT300NV11:
6543be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt300nv11);
6553be97255SRafał Miłecki 		break;
6563be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT310NV1:
6573be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1);
6583be97255SRafał Miłecki 		break;
659eea175eeSFlorian Fainelli 	case BCM47XX_BOARD_LINKSYS_WRT310NV2:
660eea175eeSFlorian Fainelli 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310n_v2);
661eea175eeSFlorian Fainelli 		break;
6623829e4f1SFlorian Fainelli 	case BCM47XX_BOARD_LINKSYS_WRT320N_V1:
6633829e4f1SFlorian Fainelli 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt320n_v1);
6643829e4f1SFlorian Fainelli 		break;
66596c10de3SHauke Mehrtens 	case BCM47XX_BOARD_LINKSYS_WRT54G3GV2:
66696c10de3SHauke Mehrtens 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54g3gv2);
66796c10de3SHauke Mehrtens 		break;
66841a867cbSRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0101:
66941a867cbSRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0467:
67041a867cbSRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0708:
67141a867cbSRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54g_generic);
67241a867cbSRafał Miłecki 		break;
6733be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT610NV1:
6743be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt610nv1);
6753be97255SRafał Miłecki 		break;
6763be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT610NV2:
6773be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt610nv2);
6783be97255SRafał Miłecki 		break;
67996c10de3SHauke Mehrtens 	case BCM47XX_BOARD_LINKSYS_WRTSL54GS:
68096c10de3SHauke Mehrtens 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrtsl54gs);
68196c10de3SHauke Mehrtens 		break;
6823be97255SRafał Miłecki 
683e7093053SDan Haab 	case BCM47XX_BOARD_LUXUL_ABR_4400_V1:
684e7093053SDan Haab 		err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_abr_4400_v1);
685e7093053SDan Haab 		break;
686e7093053SDan Haab 	case BCM47XX_BOARD_LUXUL_XAP_310_V1:
687e7093053SDan Haab 		err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xap_310_v1);
688e7093053SDan Haab 		break;
689e7093053SDan Haab 	case BCM47XX_BOARD_LUXUL_XAP_1210_V1:
690e7093053SDan Haab 		err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xap_1210_v1);
691e7093053SDan Haab 		break;
692e7093053SDan Haab 	case BCM47XX_BOARD_LUXUL_XAP_1230_V1:
693e7093053SDan Haab 		err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xap_1230_v1);
694e7093053SDan Haab 		break;
695e7093053SDan Haab 	case BCM47XX_BOARD_LUXUL_XAP_1240_V1:
696e7093053SDan Haab 		err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xap_1240_v1);
697e7093053SDan Haab 		break;
698e7093053SDan Haab 	case BCM47XX_BOARD_LUXUL_XAP_1500_V1:
699e7093053SDan Haab 		err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xap_1500_v1);
700e7093053SDan Haab 		break;
701e7093053SDan Haab 	case BCM47XX_BOARD_LUXUL_XBR_4400_V1:
702e7093053SDan Haab 		err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xbr_4400_v1);
703e7093053SDan Haab 		break;
704e7093053SDan Haab 	case BCM47XX_BOARD_LUXUL_XVW_P30_V1:
705e7093053SDan Haab 		err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xvw_p30_v1);
706e7093053SDan Haab 		break;
707e7093053SDan Haab 	case BCM47XX_BOARD_LUXUL_XWR_600_V1:
708e7093053SDan Haab 		err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xwr_600_v1);
709e7093053SDan Haab 		break;
71024f2970fSDan Haab 	case BCM47XX_BOARD_LUXUL_XWR_1750_V1:
71124f2970fSDan Haab 		err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xwr_1750_v1);
71224f2970fSDan Haab 		break;
71324f2970fSDan Haab 
714250dc037SHauke Mehrtens 	case BCM47XX_BOARD_MICROSOFT_MN700:
715250dc037SHauke Mehrtens 		err = bcm47xx_copy_bdata(bcm47xx_buttons_microsoft_nm700);
716250dc037SHauke Mehrtens 		break;
717250dc037SHauke Mehrtens 
7183be97255SRafał Miłecki 	case BCM47XX_BOARD_MOTOROLA_WE800G:
7193be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_we800g);
7203be97255SRafał Miłecki 		break;
7213be97255SRafał Miłecki 	case BCM47XX_BOARD_MOTOROLA_WR850GP:
7223be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_wr850gp);
7233be97255SRafał Miłecki 		break;
7243be97255SRafał Miłecki 	case BCM47XX_BOARD_MOTOROLA_WR850GV2V3:
7253be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_wr850gv2v3);
7263be97255SRafał Miłecki 		break;
7273be97255SRafał Miłecki 
72842374b94SEdward Matijević 	case BCM47XX_BOARD_NETGEAR_R6200_V1:
72942374b94SEdward Matijević 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_r6200_v1);
73042374b94SEdward Matijević 		break;
73115e690afSFlorian Fainelli 	case BCM47XX_BOARD_NETGEAR_R6300_V1:
73215e690afSFlorian Fainelli 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_r6300_v1);
73315e690afSFlorian Fainelli 		break;
7344da27b6dSFlorian Fainelli 	case BCM47XX_BOARD_NETGEAR_WN2500RP_V1:
7354da27b6dSFlorian Fainelli 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wn2500rp_v1);
7364da27b6dSFlorian Fainelli 		break;
7373be97255SRafał Miłecki 	case BCM47XX_BOARD_NETGEAR_WNDR3400V1:
7383be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3400v1);
7393be97255SRafał Miłecki 		break;
740160f1431SRafał Miłecki 	case BCM47XX_BOARD_NETGEAR_WNDR3400_V3:
741160f1431SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3400_v3);
742160f1431SRafał Miłecki 		break;
7433be97255SRafał Miłecki 	case BCM47XX_BOARD_NETGEAR_WNDR3700V3:
7443be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3700v3);
7453be97255SRafał Miłecki 		break;
746ef1e3e7aSRafał Miłecki 	case BCM47XX_BOARD_NETGEAR_WNDR4500V1:
747e7277e1dSRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500v1);
748ef1e3e7aSRafał Miłecki 		break;
749425f1e62SRafał Miłecki 	case BCM47XX_BOARD_NETGEAR_WNR1000_V3:
750425f1e62SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr1000_v3);
751425f1e62SRafał Miłecki 		break;
7529194b343SRafał Miłecki 	case BCM47XX_BOARD_NETGEAR_WNR3500L:
7539194b343SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr3500lv1);
7549194b343SRafał Miłecki 		break;
755c022e871SFlorian Fainelli 	case BCM47XX_BOARD_NETGEAR_WNR3500L_V2:
756c022e871SFlorian Fainelli 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr3500lv2);
757c022e871SFlorian Fainelli 		break;
7583be97255SRafał Miłecki 	case BCM47XX_BOARD_NETGEAR_WNR834BV2:
7593be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr834bv2);
7603be97255SRafał Miłecki 		break;
7613be97255SRafał Miłecki 
7623be97255SRafał Miłecki 	case BCM47XX_BOARD_SIMPLETECH_SIMPLESHARE:
7633be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_simpletech_simpleshare);
7643be97255SRafał Miłecki 		break;
7653be97255SRafał Miłecki 
766ef1e3e7aSRafał Miłecki 	default:
767ef1e3e7aSRafał Miłecki 		pr_debug("No buttons configuration found for this device\n");
768ef1e3e7aSRafał Miłecki 		return -ENOTSUPP;
769ef1e3e7aSRafał Miłecki 	}
770ef1e3e7aSRafał Miłecki 
771ef1e3e7aSRafał Miłecki 	if (err)
772ef1e3e7aSRafał Miłecki 		return -ENOMEM;
773ef1e3e7aSRafał Miłecki 
774ef1e3e7aSRafał Miłecki 	err = platform_device_register(&bcm47xx_buttons_gpio_keys);
775ef1e3e7aSRafał Miłecki 	if (err) {
776ef1e3e7aSRafał Miłecki 		pr_err("Failed to register platform device: %d\n", err);
777ef1e3e7aSRafał Miłecki 		return err;
778ef1e3e7aSRafał Miłecki 	}
779ef1e3e7aSRafał Miłecki 
780ef1e3e7aSRafał Miłecki 	return 0;
781ef1e3e7aSRafał Miłecki }
782