xref: /openbmc/linux/arch/mips/bcm47xx/buttons.c (revision e5dd8f2c)
1ef1e3e7aSRafał Miłecki #include "bcm47xx_private.h"
2ef1e3e7aSRafał Miłecki 
3ef1e3e7aSRafał Miłecki #include <linux/input.h>
4ef1e3e7aSRafał Miłecki #include <linux/gpio_keys.h>
5ef1e3e7aSRafał Miłecki #include <linux/interrupt.h>
6ef1e3e7aSRafał Miłecki #include <bcm47xx_board.h>
7ef1e3e7aSRafał Miłecki #include <bcm47xx.h>
8ef1e3e7aSRafał Miłecki 
9ef1e3e7aSRafał Miłecki /**************************************************
10ef1e3e7aSRafał Miłecki  * Database
11ef1e3e7aSRafał Miłecki  **************************************************/
12ef1e3e7aSRafał Miłecki 
133be97255SRafał Miłecki #define BCM47XX_GPIO_KEY(_gpio, _code)					\
143be97255SRafał Miłecki 	{								\
153be97255SRafał Miłecki 		.code		= _code,				\
163be97255SRafał Miłecki 		.gpio		= _gpio,				\
173be97255SRafał Miłecki 		.active_low	= 1,					\
183be97255SRafał Miłecki 	}
193be97255SRafał Miłecki 
203be97255SRafał Miłecki /* Asus */
213be97255SRafał Miłecki 
223be97255SRafał Miłecki static const struct gpio_keys_button
233be97255SRafał Miłecki bcm47xx_buttons_asus_rtn12[] __initconst = {
243be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
253be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(1, KEY_RESTART),
263be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, BTN_0), /* Router mode */
273be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, BTN_1), /* Repeater mode */
283be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, BTN_2), /* AP mode */
293be97255SRafał Miłecki };
303be97255SRafał Miłecki 
313be97255SRafał Miłecki static const struct gpio_keys_button
323be97255SRafał Miłecki bcm47xx_buttons_asus_rtn16[] __initconst = {
333be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
343be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(8, KEY_RESTART),
353be97255SRafał Miłecki };
363be97255SRafał Miłecki 
373be97255SRafał Miłecki static const struct gpio_keys_button
383be97255SRafał Miłecki bcm47xx_buttons_asus_rtn66u[] __initconst = {
393be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
403be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(9, KEY_RESTART),
413be97255SRafał Miłecki };
423be97255SRafał Miłecki 
433be97255SRafał Miłecki static const struct gpio_keys_button
443be97255SRafał Miłecki bcm47xx_buttons_asus_wl300g[] __initconst = {
453be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
463be97255SRafał Miłecki };
473be97255SRafał Miłecki 
483be97255SRafał Miłecki static const struct gpio_keys_button
493be97255SRafał Miłecki bcm47xx_buttons_asus_wl320ge[] __initconst = {
503be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
513be97255SRafał Miłecki };
523be97255SRafał Miłecki 
533be97255SRafał Miłecki static const struct gpio_keys_button
543be97255SRafał Miłecki bcm47xx_buttons_asus_wl330ge[] __initconst = {
553be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(2, KEY_RESTART),
563be97255SRafał Miłecki };
573be97255SRafał Miłecki 
583be97255SRafał Miłecki static const struct gpio_keys_button
59250dc037SHauke Mehrtens bcm47xx_buttons_asus_wl500g[] __initconst = {
60250dc037SHauke Mehrtens 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
61250dc037SHauke Mehrtens };
62250dc037SHauke Mehrtens 
63250dc037SHauke Mehrtens static const struct gpio_keys_button
643be97255SRafał Miłecki bcm47xx_buttons_asus_wl500gd[] __initconst = {
653be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
663be97255SRafał Miłecki };
673be97255SRafał Miłecki 
683be97255SRafał Miłecki static const struct gpio_keys_button
693be97255SRafał Miłecki bcm47xx_buttons_asus_wl500gpv1[] __initconst = {
703be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_RESTART),
713be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
723be97255SRafał Miłecki };
733be97255SRafał Miłecki 
743be97255SRafał Miłecki static const struct gpio_keys_button
753be97255SRafał Miłecki bcm47xx_buttons_asus_wl500gpv2[] __initconst = {
763be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(2, KEY_RESTART),
773be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(3, KEY_WPS_BUTTON),
783be97255SRafał Miłecki };
793be97255SRafał Miłecki 
803be97255SRafał Miłecki static const struct gpio_keys_button
813be97255SRafał Miłecki bcm47xx_buttons_asus_wl500w[] __initconst = {
823be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
833be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(7, KEY_WPS_BUTTON),
843be97255SRafał Miłecki };
853be97255SRafał Miłecki 
863be97255SRafał Miłecki static const struct gpio_keys_button
873be97255SRafał Miłecki bcm47xx_buttons_asus_wl520gc[] __initconst = {
883be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(2, KEY_RESTART),
893be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(3, KEY_WPS_BUTTON),
903be97255SRafał Miłecki };
913be97255SRafał Miłecki 
923be97255SRafał Miłecki static const struct gpio_keys_button
933be97255SRafał Miłecki bcm47xx_buttons_asus_wl520gu[] __initconst = {
943be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(2, KEY_RESTART),
953be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(3, KEY_WPS_BUTTON),
963be97255SRafał Miłecki };
973be97255SRafał Miłecki 
983be97255SRafał Miłecki static const struct gpio_keys_button
993be97255SRafał Miłecki bcm47xx_buttons_asus_wl700ge[] __initconst = {
1003be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_POWER), /* Hard disk power switch */
1013be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), /* EZSetup */
1023be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_COPY), /* Copy data from USB to internal disk */
1033be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(7, KEY_RESTART), /* Hard reset */
1043be97255SRafał Miłecki };
1053be97255SRafał Miłecki 
1063be97255SRafał Miłecki static const struct gpio_keys_button
1073be97255SRafał Miłecki bcm47xx_buttons_asus_wlhdd[] __initconst = {
1083be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
1093be97255SRafał Miłecki };
1103be97255SRafał Miłecki 
1113be97255SRafał Miłecki /* Huawei */
1123be97255SRafał Miłecki 
1133be97255SRafał Miłecki static const struct gpio_keys_button
1143be97255SRafał Miłecki bcm47xx_buttons_huawei_e970[] __initconst = {
1153be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
1163be97255SRafał Miłecki };
1173be97255SRafał Miłecki 
1183be97255SRafał Miłecki /* Belkin */
1193be97255SRafał Miłecki 
1203be97255SRafał Miłecki static const struct gpio_keys_button
1213be97255SRafał Miłecki bcm47xx_buttons_belkin_f7d4301[] __initconst = {
1223be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
1233be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(8, KEY_WPS_BUTTON),
1243be97255SRafał Miłecki };
1253be97255SRafał Miłecki 
1263be97255SRafał Miłecki /* Buffalo */
1273be97255SRafał Miłecki 
1283be97255SRafał Miłecki static const struct gpio_keys_button
1293be97255SRafał Miłecki bcm47xx_buttons_buffalo_whr2_a54g54[] __initconst = {
1303be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
1313be97255SRafał Miłecki };
1323be97255SRafał Miłecki 
1333be97255SRafał Miłecki static const struct gpio_keys_button
1343be97255SRafał Miłecki bcm47xx_buttons_buffalo_whr_g125[] __initconst = {
1353be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
1363be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
1373be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, BTN_0), /* Router / AP mode swtich */
1383be97255SRafał Miłecki };
1393be97255SRafał Miłecki 
1403be97255SRafał Miłecki static const struct gpio_keys_button
1413be97255SRafał Miłecki bcm47xx_buttons_buffalo_whr_g54s[] __initconst = {
1423be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
1433be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
1443be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, BTN_0), /* Router / AP mode swtich */
1453be97255SRafał Miłecki };
1463be97255SRafał Miłecki 
1473be97255SRafał Miłecki static const struct gpio_keys_button
1483be97255SRafał Miłecki bcm47xx_buttons_buffalo_whr_hp_g54[] __initconst = {
1493be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
1503be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
1513be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, BTN_0), /* Router / AP mode swtich */
1523be97255SRafał Miłecki };
1533be97255SRafał Miłecki 
1543be97255SRafał Miłecki static const struct gpio_keys_button
1553be97255SRafał Miłecki bcm47xx_buttons_buffalo_wzr_g300n[] __initconst = {
1563be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
1573be97255SRafał Miłecki };
1583be97255SRafał Miłecki 
1593be97255SRafał Miłecki static const struct gpio_keys_button
1603be97255SRafał Miłecki bcm47xx_buttons_buffalo_wzr_rs_g54[] __initconst = {
1613be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
1623be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
1633be97255SRafał Miłecki };
1643be97255SRafał Miłecki 
1653be97255SRafał Miłecki static const struct gpio_keys_button
1663be97255SRafał Miłecki bcm47xx_buttons_buffalo_wzr_rs_g54hp[] __initconst = {
1673be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
1683be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
1693be97255SRafał Miłecki };
1703be97255SRafał Miłecki 
1713be97255SRafał Miłecki /* Dell */
1723be97255SRafał Miłecki 
1733be97255SRafał Miłecki static const struct gpio_keys_button
1743be97255SRafał Miłecki bcm47xx_buttons_dell_tm2300[] __initconst = {
1753be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_RESTART),
1763be97255SRafał Miłecki };
1773be97255SRafał Miłecki 
1783be97255SRafał Miłecki /* D-Link */
1793be97255SRafał Miłecki 
1803be97255SRafał Miłecki static const struct gpio_keys_button
1813be97255SRafał Miłecki bcm47xx_buttons_dlink_dir130[] __initconst = {
1823be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(3, KEY_RESTART),
1833be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(7, KEY_UNKNOWN),
1843be97255SRafał Miłecki };
1853be97255SRafał Miłecki 
1863be97255SRafał Miłecki static const struct gpio_keys_button
1873be97255SRafał Miłecki bcm47xx_buttons_dlink_dir330[] __initconst = {
1883be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(3, KEY_RESTART),
1893be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(7, KEY_UNKNOWN),
1903be97255SRafał Miłecki };
1913be97255SRafał Miłecki 
1923be97255SRafał Miłecki /* Linksys */
1933be97255SRafał Miłecki 
1943be97255SRafał Miłecki static const struct gpio_keys_button
1953be97255SRafał Miłecki bcm47xx_buttons_linksys_e1000v1[] __initconst = {
1963be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, KEY_WPS_BUTTON),
1973be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
1983be97255SRafał Miłecki };
1993be97255SRafał Miłecki 
2003be97255SRafał Miłecki static const struct gpio_keys_button
2013be97255SRafał Miłecki bcm47xx_buttons_linksys_e1000v21[] __initconst = {
2023be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(9, KEY_WPS_BUTTON),
2033be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(10, KEY_RESTART),
2043be97255SRafał Miłecki };
2053be97255SRafał Miłecki 
2063be97255SRafał Miłecki static const struct gpio_keys_button
2073be97255SRafał Miłecki bcm47xx_buttons_linksys_e2000v1[] __initconst = {
2083be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, KEY_WPS_BUTTON),
2093be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(8, KEY_RESTART),
2103be97255SRafał Miłecki };
2113be97255SRafał Miłecki 
2123be97255SRafał Miłecki static const struct gpio_keys_button
2133be97255SRafał Miłecki bcm47xx_buttons_linksys_e3000v1[] __initconst = {
2143be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
2153be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2163be97255SRafał Miłecki };
2173be97255SRafał Miłecki 
2183be97255SRafał Miłecki static const struct gpio_keys_button
2193be97255SRafał Miłecki bcm47xx_buttons_linksys_e3200v1[] __initconst = {
2203be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, KEY_RESTART),
2213be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(8, KEY_WPS_BUTTON),
2223be97255SRafał Miłecki };
2233be97255SRafał Miłecki 
2243be97255SRafał Miłecki static const struct gpio_keys_button
2253be97255SRafał Miłecki bcm47xx_buttons_linksys_e4200v1[] __initconst = {
2263be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
2273be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2283be97255SRafał Miłecki };
2293be97255SRafał Miłecki 
2303be97255SRafał Miłecki static const struct gpio_keys_button
2313be97255SRafał Miłecki bcm47xx_buttons_linksys_wrt150nv1[] __initconst = {
2323be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
2333be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2343be97255SRafał Miłecki };
2353be97255SRafał Miłecki 
2363be97255SRafał Miłecki static const struct gpio_keys_button
2373be97255SRafał Miłecki bcm47xx_buttons_linksys_wrt150nv11[] __initconst = {
2383be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
2393be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2403be97255SRafał Miłecki };
2413be97255SRafał Miłecki 
2423be97255SRafał Miłecki static const struct gpio_keys_button
2433be97255SRafał Miłecki bcm47xx_buttons_linksys_wrt160nv1[] __initconst = {
2443be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
2453be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2463be97255SRafał Miłecki };
2473be97255SRafał Miłecki 
2483be97255SRafał Miłecki static const struct gpio_keys_button
2493be97255SRafał Miłecki bcm47xx_buttons_linksys_wrt160nv3[] __initconst = {
2503be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, KEY_WPS_BUTTON),
2513be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2523be97255SRafał Miłecki };
2533be97255SRafał Miłecki 
2543be97255SRafał Miłecki static const struct gpio_keys_button
255160f1431SRafał Miłecki bcm47xx_buttons_linksys_wrt300n_v1[] __initconst = {
256160f1431SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
257160f1431SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
258160f1431SRafał Miłecki };
259160f1431SRafał Miłecki 
260160f1431SRafał Miłecki static const struct gpio_keys_button
2613be97255SRafał Miłecki bcm47xx_buttons_linksys_wrt300nv11[] __initconst = {
2623be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_UNKNOWN),
2633be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2643be97255SRafał Miłecki };
2653be97255SRafał Miłecki 
2663be97255SRafał Miłecki static const struct gpio_keys_button
2673be97255SRafał Miłecki bcm47xx_buttons_linksys_wrt310nv1[] __initconst = {
2683be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2693be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(8, KEY_UNKNOWN),
2703be97255SRafał Miłecki };
2713be97255SRafał Miłecki 
2723be97255SRafał Miłecki static const struct gpio_keys_button
27396c10de3SHauke Mehrtens bcm47xx_buttons_linksys_wrt54g3gv2[] __initconst = {
27496c10de3SHauke Mehrtens 	BCM47XX_GPIO_KEY(5, KEY_WIMAX),
27596c10de3SHauke Mehrtens 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
27696c10de3SHauke Mehrtens };
27796c10de3SHauke Mehrtens 
27896c10de3SHauke Mehrtens static const struct gpio_keys_button
27941a867cbSRafał Miłecki bcm47xx_buttons_linksys_wrt54g_generic[] __initconst = {
28096c10de3SHauke Mehrtens 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
28196c10de3SHauke Mehrtens 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
28296c10de3SHauke Mehrtens };
28396c10de3SHauke Mehrtens 
28496c10de3SHauke Mehrtens static const struct gpio_keys_button
2853be97255SRafał Miłecki bcm47xx_buttons_linksys_wrt610nv1[] __initconst = {
2863be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2873be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(8, KEY_WPS_BUTTON),
2883be97255SRafał Miłecki };
2893be97255SRafał Miłecki 
2903be97255SRafał Miłecki static const struct gpio_keys_button
2913be97255SRafał Miłecki bcm47xx_buttons_linksys_wrt610nv2[] __initconst = {
2923be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
2933be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
2943be97255SRafał Miłecki };
2953be97255SRafał Miłecki 
29696c10de3SHauke Mehrtens static const struct gpio_keys_button
29796c10de3SHauke Mehrtens bcm47xx_buttons_linksys_wrtsl54gs[] __initconst = {
29896c10de3SHauke Mehrtens 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
29996c10de3SHauke Mehrtens 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
30096c10de3SHauke Mehrtens };
30196c10de3SHauke Mehrtens 
30224f2970fSDan Haab /* Luxul */
30324f2970fSDan Haab 
30424f2970fSDan Haab static const struct gpio_keys_button
30524f2970fSDan Haab bcm47xx_buttons_luxul_xwr_1750_v1[] = {
30624f2970fSDan Haab 	BCM47XX_GPIO_KEY(14, BTN_TASK),
30724f2970fSDan Haab };
30824f2970fSDan Haab 
309250dc037SHauke Mehrtens /* Microsoft */
310250dc037SHauke Mehrtens 
311250dc037SHauke Mehrtens static const struct gpio_keys_button
312250dc037SHauke Mehrtens bcm47xx_buttons_microsoft_nm700[] __initconst = {
313250dc037SHauke Mehrtens 	BCM47XX_GPIO_KEY(7, KEY_RESTART),
314250dc037SHauke Mehrtens };
315250dc037SHauke Mehrtens 
3163be97255SRafał Miłecki /* Motorola */
3173be97255SRafał Miłecki 
3183be97255SRafał Miłecki static const struct gpio_keys_button
3193be97255SRafał Miłecki bcm47xx_buttons_motorola_we800g[] __initconst = {
3203be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_RESTART),
3213be97255SRafał Miłecki };
3223be97255SRafał Miłecki 
3233be97255SRafał Miłecki static const struct gpio_keys_button
3243be97255SRafał Miłecki bcm47xx_buttons_motorola_wr850gp[] __initconst = {
3253be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, KEY_RESTART),
3263be97255SRafał Miłecki };
3273be97255SRafał Miłecki 
3283be97255SRafał Miłecki static const struct gpio_keys_button
3293be97255SRafał Miłecki bcm47xx_buttons_motorola_wr850gv2v3[] __initconst = {
3303be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(5, KEY_RESTART),
3313be97255SRafał Miłecki };
3323be97255SRafał Miłecki 
3333be97255SRafał Miłecki /* Netgear */
3343be97255SRafał Miłecki 
3353be97255SRafał Miłecki static const struct gpio_keys_button
3363be97255SRafał Miłecki bcm47xx_buttons_netgear_wndr3400v1[] __initconst = {
3373be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
3383be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
3393be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(8, KEY_RFKILL),
3403be97255SRafał Miłecki };
3413be97255SRafał Miłecki 
3423be97255SRafał Miłecki static const struct gpio_keys_button
343160f1431SRafał Miłecki bcm47xx_buttons_netgear_wndr3400_v3[] __initconst = {
344160f1431SRafał Miłecki 	BCM47XX_GPIO_KEY(12, KEY_RESTART),
345160f1431SRafał Miłecki 	BCM47XX_GPIO_KEY(23, KEY_WPS_BUTTON),
346160f1431SRafał Miłecki };
347160f1431SRafał Miłecki 
348160f1431SRafał Miłecki static const struct gpio_keys_button
3493be97255SRafał Miłecki bcm47xx_buttons_netgear_wndr3700v3[] __initconst = {
3503be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(2, KEY_RFKILL),
3513be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(3, KEY_RESTART),
3523be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
3533be97255SRafał Miłecki };
3543be97255SRafał Miłecki 
355ef1e3e7aSRafał Miłecki static const struct gpio_keys_button
356e7277e1dSRafał Miłecki bcm47xx_buttons_netgear_wndr4500v1[] __initconst = {
357e7277e1dSRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
358e7277e1dSRafał Miłecki 	BCM47XX_GPIO_KEY(5, KEY_RFKILL),
359e7277e1dSRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
360ef1e3e7aSRafał Miłecki };
361ef1e3e7aSRafał Miłecki 
3623be97255SRafał Miłecki static const struct gpio_keys_button
3639194b343SRafał Miłecki bcm47xx_buttons_netgear_wnr3500lv1[] __initconst = {
3649194b343SRafał Miłecki 	BCM47XX_GPIO_KEY(4, KEY_RESTART),
3659194b343SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
3669194b343SRafał Miłecki };
3679194b343SRafał Miłecki 
3689194b343SRafał Miłecki static const struct gpio_keys_button
3693be97255SRafał Miłecki bcm47xx_buttons_netgear_wnr834bv2[] __initconst = {
3703be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(6, KEY_RESTART),
3713be97255SRafał Miłecki };
3723be97255SRafał Miłecki 
3733be97255SRafał Miłecki /* SimpleTech */
3743be97255SRafał Miłecki 
3753be97255SRafał Miłecki static const struct gpio_keys_button
3763be97255SRafał Miłecki bcm47xx_buttons_simpletech_simpleshare[] __initconst = {
3773be97255SRafał Miłecki 	BCM47XX_GPIO_KEY(0, KEY_RESTART),
3783be97255SRafał Miłecki };
3793be97255SRafał Miłecki 
380ef1e3e7aSRafał Miłecki /**************************************************
381ef1e3e7aSRafał Miłecki  * Init
382ef1e3e7aSRafał Miłecki  **************************************************/
383ef1e3e7aSRafał Miłecki 
384ef1e3e7aSRafał Miłecki static struct gpio_keys_platform_data bcm47xx_button_pdata;
385ef1e3e7aSRafał Miłecki 
386ef1e3e7aSRafał Miłecki static struct platform_device bcm47xx_buttons_gpio_keys = {
387ef1e3e7aSRafał Miłecki 	.name = "gpio-keys",
388ef1e3e7aSRafał Miłecki 	.dev = {
389ef1e3e7aSRafał Miłecki 		.platform_data = &bcm47xx_button_pdata,
390ef1e3e7aSRafał Miłecki 	}
391ef1e3e7aSRafał Miłecki };
392ef1e3e7aSRafał Miłecki 
393ef1e3e7aSRafał Miłecki /* Copy data from __initconst */
394ef1e3e7aSRafał Miłecki static int __init bcm47xx_buttons_copy(const struct gpio_keys_button *buttons,
395ef1e3e7aSRafał Miłecki 				       size_t nbuttons)
396ef1e3e7aSRafał Miłecki {
397ef1e3e7aSRafał Miłecki 	size_t size = nbuttons * sizeof(*buttons);
398ef1e3e7aSRafał Miłecki 
399e5dd8f2cSAndrzej Hajda 	bcm47xx_button_pdata.buttons = kmemdup(buttons, size, GFP_KERNEL);
400ef1e3e7aSRafał Miłecki 	if (!bcm47xx_button_pdata.buttons)
401ef1e3e7aSRafał Miłecki 		return -ENOMEM;
402ef1e3e7aSRafał Miłecki 	bcm47xx_button_pdata.nbuttons = nbuttons;
403ef1e3e7aSRafał Miłecki 
404ef1e3e7aSRafał Miłecki 	return 0;
405ef1e3e7aSRafał Miłecki }
406ef1e3e7aSRafał Miłecki 
407ef1e3e7aSRafał Miłecki #define bcm47xx_copy_bdata(dev_buttons)					\
408ef1e3e7aSRafał Miłecki 	bcm47xx_buttons_copy(dev_buttons, ARRAY_SIZE(dev_buttons));
409ef1e3e7aSRafał Miłecki 
410ef1e3e7aSRafał Miłecki int __init bcm47xx_buttons_register(void)
411ef1e3e7aSRafał Miłecki {
412ef1e3e7aSRafał Miłecki 	enum bcm47xx_board board = bcm47xx_board_get();
413ef1e3e7aSRafał Miłecki 	int err;
414ef1e3e7aSRafał Miłecki 
415ef1e3e7aSRafał Miłecki 	switch (board) {
4163be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_RTN12:
4173be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn12);
4183be97255SRafał Miłecki 		break;
4193be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_RTN16:
4203be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn16);
4213be97255SRafał Miłecki 		break;
4223be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_RTN66U:
4233be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn66u);
4243be97255SRafał Miłecki 		break;
4253be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL300G:
4263be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl300g);
4273be97255SRafał Miłecki 		break;
4283be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL320GE:
4293be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl320ge);
4303be97255SRafał Miłecki 		break;
4313be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL330GE:
4323be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl330ge);
4333be97255SRafał Miłecki 		break;
434250dc037SHauke Mehrtens 	case BCM47XX_BOARD_ASUS_WL500G:
435250dc037SHauke Mehrtens 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500g);
436250dc037SHauke Mehrtens 		break;
4373be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL500GD:
4383be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500gd);
4393be97255SRafał Miłecki 		break;
4403be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL500GPV1:
4413be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500gpv1);
4423be97255SRafał Miłecki 		break;
4433be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL500GPV2:
4443be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500gpv2);
4453be97255SRafał Miłecki 		break;
4463be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL500W:
4473be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500w);
4483be97255SRafał Miłecki 		break;
4493be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL520GC:
4503be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl520gc);
4513be97255SRafał Miłecki 		break;
4523be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL520GU:
4533be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl520gu);
4543be97255SRafał Miłecki 		break;
4553be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WL700GE:
4563be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl700ge);
4573be97255SRafał Miłecki 		break;
4583be97255SRafał Miłecki 	case BCM47XX_BOARD_ASUS_WLHDD:
4593be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wlhdd);
4603be97255SRafał Miłecki 		break;
4613be97255SRafał Miłecki 
4620dae62edSCody P Schafer 	case BCM47XX_BOARD_BELKIN_F7D3301:
4630dae62edSCody P Schafer 	case BCM47XX_BOARD_BELKIN_F7D3302:
4643be97255SRafał Miłecki 	case BCM47XX_BOARD_BELKIN_F7D4301:
4650dae62edSCody P Schafer 	case BCM47XX_BOARD_BELKIN_F7D4302:
4660dae62edSCody P Schafer 	case BCM47XX_BOARD_BELKIN_F7D4401:
4673be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_belkin_f7d4301);
4683be97255SRafał Miłecki 		break;
4693be97255SRafał Miłecki 
4703be97255SRafał Miłecki 	case BCM47XX_BOARD_BUFFALO_WHR2_A54G54:
4713be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_whr2_a54g54);
4723be97255SRafał Miłecki 		break;
4733be97255SRafał Miłecki 	case BCM47XX_BOARD_BUFFALO_WHR_G125:
4743be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_whr_g125);
4753be97255SRafał Miłecki 		break;
4763be97255SRafał Miłecki 	case BCM47XX_BOARD_BUFFALO_WHR_G54S:
4773be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_whr_g54s);
4783be97255SRafał Miłecki 		break;
4793be97255SRafał Miłecki 	case BCM47XX_BOARD_BUFFALO_WHR_HP_G54:
4803be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_whr_hp_g54);
4813be97255SRafał Miłecki 		break;
4823be97255SRafał Miłecki 	case BCM47XX_BOARD_BUFFALO_WZR_G300N:
4833be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_wzr_g300n);
4843be97255SRafał Miłecki 		break;
4853be97255SRafał Miłecki 	case BCM47XX_BOARD_BUFFALO_WZR_RS_G54:
4863be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_wzr_rs_g54);
4873be97255SRafał Miłecki 		break;
4883be97255SRafał Miłecki 	case BCM47XX_BOARD_BUFFALO_WZR_RS_G54HP:
4893be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_wzr_rs_g54hp);
4903be97255SRafał Miłecki 		break;
4913be97255SRafał Miłecki 
4923be97255SRafał Miłecki 	case BCM47XX_BOARD_DELL_TM2300:
4933be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_dell_tm2300);
4943be97255SRafał Miłecki 		break;
4953be97255SRafał Miłecki 
4963be97255SRafał Miłecki 	case BCM47XX_BOARD_DLINK_DIR130:
4973be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_dlink_dir130);
4983be97255SRafał Miłecki 		break;
4993be97255SRafał Miłecki 	case BCM47XX_BOARD_DLINK_DIR330:
5003be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_dlink_dir330);
5013be97255SRafał Miłecki 		break;
5023be97255SRafał Miłecki 
5033be97255SRafał Miłecki 	case BCM47XX_BOARD_HUAWEI_E970:
5043be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_huawei_e970);
5053be97255SRafał Miłecki 		break;
5063be97255SRafał Miłecki 
5073be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_E1000V1:
5083be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e1000v1);
5093be97255SRafał Miłecki 		break;
5103be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_E1000V21:
5113be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e1000v21);
5123be97255SRafał Miłecki 		break;
5133be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_E2000V1:
5143be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e2000v1);
5153be97255SRafał Miłecki 		break;
5163be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_E3000V1:
5173be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e3000v1);
5183be97255SRafał Miłecki 		break;
5193be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_E3200V1:
5203be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e3200v1);
5213be97255SRafał Miłecki 		break;
5223be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_E4200V1:
5233be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e4200v1);
5243be97255SRafał Miłecki 		break;
5253be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT150NV1:
5263be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt150nv1);
5273be97255SRafał Miłecki 		break;
5283be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT150NV11:
5293be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt150nv11);
5303be97255SRafał Miłecki 		break;
5313be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT160NV1:
5323be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt160nv1);
5333be97255SRafał Miłecki 		break;
5343be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT160NV3:
5353be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt160nv3);
5363be97255SRafał Miłecki 		break;
537160f1431SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT300N_V1:
538160f1431SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt300n_v1);
539160f1431SRafał Miłecki 		break;
5403be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT300NV11:
5413be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt300nv11);
5423be97255SRafał Miłecki 		break;
5433be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT310NV1:
5443be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1);
5453be97255SRafał Miłecki 		break;
54696c10de3SHauke Mehrtens 	case BCM47XX_BOARD_LINKSYS_WRT54G3GV2:
54796c10de3SHauke Mehrtens 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54g3gv2);
54896c10de3SHauke Mehrtens 		break;
54941a867cbSRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0101:
55041a867cbSRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0467:
55141a867cbSRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0708:
55241a867cbSRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54g_generic);
55341a867cbSRafał Miłecki 		break;
5543be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT610NV1:
5553be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt610nv1);
5563be97255SRafał Miłecki 		break;
5573be97255SRafał Miłecki 	case BCM47XX_BOARD_LINKSYS_WRT610NV2:
5583be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt610nv2);
5593be97255SRafał Miłecki 		break;
56096c10de3SHauke Mehrtens 	case BCM47XX_BOARD_LINKSYS_WRTSL54GS:
56196c10de3SHauke Mehrtens 		err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrtsl54gs);
56296c10de3SHauke Mehrtens 		break;
5633be97255SRafał Miłecki 
56424f2970fSDan Haab 	case BCM47XX_BOARD_LUXUL_XWR_1750_V1:
56524f2970fSDan Haab 		err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xwr_1750_v1);
56624f2970fSDan Haab 		break;
56724f2970fSDan Haab 
568250dc037SHauke Mehrtens 	case BCM47XX_BOARD_MICROSOFT_MN700:
569250dc037SHauke Mehrtens 		err = bcm47xx_copy_bdata(bcm47xx_buttons_microsoft_nm700);
570250dc037SHauke Mehrtens 		break;
571250dc037SHauke Mehrtens 
5723be97255SRafał Miłecki 	case BCM47XX_BOARD_MOTOROLA_WE800G:
5733be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_we800g);
5743be97255SRafał Miłecki 		break;
5753be97255SRafał Miłecki 	case BCM47XX_BOARD_MOTOROLA_WR850GP:
5763be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_wr850gp);
5773be97255SRafał Miłecki 		break;
5783be97255SRafał Miłecki 	case BCM47XX_BOARD_MOTOROLA_WR850GV2V3:
5793be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_wr850gv2v3);
5803be97255SRafał Miłecki 		break;
5813be97255SRafał Miłecki 
5823be97255SRafał Miłecki 	case BCM47XX_BOARD_NETGEAR_WNDR3400V1:
5833be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3400v1);
5843be97255SRafał Miłecki 		break;
585160f1431SRafał Miłecki 	case BCM47XX_BOARD_NETGEAR_WNDR3400_V3:
586160f1431SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3400_v3);
587160f1431SRafał Miłecki 		break;
5883be97255SRafał Miłecki 	case BCM47XX_BOARD_NETGEAR_WNDR3700V3:
5893be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3700v3);
5903be97255SRafał Miłecki 		break;
591ef1e3e7aSRafał Miłecki 	case BCM47XX_BOARD_NETGEAR_WNDR4500V1:
592e7277e1dSRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500v1);
593ef1e3e7aSRafał Miłecki 		break;
5949194b343SRafał Miłecki 	case BCM47XX_BOARD_NETGEAR_WNR3500L:
5959194b343SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr3500lv1);
5969194b343SRafał Miłecki 		break;
5973be97255SRafał Miłecki 	case BCM47XX_BOARD_NETGEAR_WNR834BV2:
5983be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr834bv2);
5993be97255SRafał Miłecki 		break;
6003be97255SRafał Miłecki 
6013be97255SRafał Miłecki 	case BCM47XX_BOARD_SIMPLETECH_SIMPLESHARE:
6023be97255SRafał Miłecki 		err = bcm47xx_copy_bdata(bcm47xx_buttons_simpletech_simpleshare);
6033be97255SRafał Miłecki 		break;
6043be97255SRafał Miłecki 
605ef1e3e7aSRafał Miłecki 	default:
606ef1e3e7aSRafał Miłecki 		pr_debug("No buttons configuration found for this device\n");
607ef1e3e7aSRafał Miłecki 		return -ENOTSUPP;
608ef1e3e7aSRafał Miłecki 	}
609ef1e3e7aSRafał Miłecki 
610ef1e3e7aSRafał Miłecki 	if (err)
611ef1e3e7aSRafał Miłecki 		return -ENOMEM;
612ef1e3e7aSRafał Miłecki 
613ef1e3e7aSRafał Miłecki 	err = platform_device_register(&bcm47xx_buttons_gpio_keys);
614ef1e3e7aSRafał Miłecki 	if (err) {
615ef1e3e7aSRafał Miłecki 		pr_err("Failed to register platform device: %d\n", err);
616ef1e3e7aSRafał Miłecki 		return err;
617ef1e3e7aSRafał Miłecki 	}
618ef1e3e7aSRafał Miłecki 
619ef1e3e7aSRafał Miłecki 	return 0;
620ef1e3e7aSRafał Miłecki }
621