linux/arch/mips/bcm47xx/buttons.c
<<
>>
Prefs
   1#include "bcm47xx_private.h"
   2
   3#include <linux/input.h>
   4#include <linux/gpio_keys.h>
   5#include <linux/interrupt.h>
   6#include <bcm47xx_board.h>
   7#include <bcm47xx.h>
   8
   9/**************************************************
  10 * Database
  11 **************************************************/
  12
  13#define BCM47XX_GPIO_KEY(_gpio, _code)                                  \
  14        {                                                               \
  15                .code           = _code,                                \
  16                .gpio           = _gpio,                                \
  17                .active_low     = 1,                                    \
  18        }
  19
  20/* Asus */
  21
  22static const struct gpio_keys_button
  23bcm47xx_buttons_asus_rtn12[] __initconst = {
  24        BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
  25        BCM47XX_GPIO_KEY(1, KEY_RESTART),
  26        BCM47XX_GPIO_KEY(4, BTN_0), /* Router mode */
  27        BCM47XX_GPIO_KEY(5, BTN_1), /* Repeater mode */
  28        BCM47XX_GPIO_KEY(6, BTN_2), /* AP mode */
  29};
  30
  31static const struct gpio_keys_button
  32bcm47xx_buttons_asus_rtn16[] __initconst = {
  33        BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
  34        BCM47XX_GPIO_KEY(8, KEY_RESTART),
  35};
  36
  37static const struct gpio_keys_button
  38bcm47xx_buttons_asus_rtn66u[] __initconst = {
  39        BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
  40        BCM47XX_GPIO_KEY(9, KEY_RESTART),
  41};
  42
  43static const struct gpio_keys_button
  44bcm47xx_buttons_asus_wl300g[] __initconst = {
  45        BCM47XX_GPIO_KEY(6, KEY_RESTART),
  46};
  47
  48static const struct gpio_keys_button
  49bcm47xx_buttons_asus_wl320ge[] __initconst = {
  50        BCM47XX_GPIO_KEY(6, KEY_RESTART),
  51};
  52
  53static const struct gpio_keys_button
  54bcm47xx_buttons_asus_wl330ge[] __initconst = {
  55        BCM47XX_GPIO_KEY(2, KEY_RESTART),
  56};
  57
  58static const struct gpio_keys_button
  59bcm47xx_buttons_asus_wl500g[] __initconst = {
  60        BCM47XX_GPIO_KEY(6, KEY_RESTART),
  61};
  62
  63static const struct gpio_keys_button
  64bcm47xx_buttons_asus_wl500gd[] __initconst = {
  65        BCM47XX_GPIO_KEY(6, KEY_RESTART),
  66};
  67
  68static const struct gpio_keys_button
  69bcm47xx_buttons_asus_wl500gpv1[] __initconst = {
  70        BCM47XX_GPIO_KEY(0, KEY_RESTART),
  71        BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
  72};
  73
  74static const struct gpio_keys_button
  75bcm47xx_buttons_asus_wl500gpv2[] __initconst = {
  76        BCM47XX_GPIO_KEY(2, KEY_RESTART),
  77        BCM47XX_GPIO_KEY(3, KEY_WPS_BUTTON),
  78};
  79
  80static const struct gpio_keys_button
  81bcm47xx_buttons_asus_wl500w[] __initconst = {
  82        BCM47XX_GPIO_KEY(6, KEY_RESTART),
  83        BCM47XX_GPIO_KEY(7, KEY_WPS_BUTTON),
  84};
  85
  86static const struct gpio_keys_button
  87bcm47xx_buttons_asus_wl520gc[] __initconst = {
  88        BCM47XX_GPIO_KEY(2, KEY_RESTART),
  89        BCM47XX_GPIO_KEY(3, KEY_WPS_BUTTON),
  90};
  91
  92static const struct gpio_keys_button
  93bcm47xx_buttons_asus_wl520gu[] __initconst = {
  94        BCM47XX_GPIO_KEY(2, KEY_RESTART),
  95        BCM47XX_GPIO_KEY(3, KEY_WPS_BUTTON),
  96};
  97
  98static const struct gpio_keys_button
  99bcm47xx_buttons_asus_wl700ge[] __initconst = {
 100        BCM47XX_GPIO_KEY(0, KEY_POWER), /* Hard disk power switch */
 101        BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), /* EZSetup */
 102        BCM47XX_GPIO_KEY(6, KEY_COPY), /* Copy data from USB to internal disk */
 103        BCM47XX_GPIO_KEY(7, KEY_RESTART), /* Hard reset */
 104};
 105
 106static const struct gpio_keys_button
 107bcm47xx_buttons_asus_wlhdd[] __initconst = {
 108        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 109};
 110
 111/* Huawei */
 112
 113static const struct gpio_keys_button
 114bcm47xx_buttons_huawei_e970[] __initconst = {
 115        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 116};
 117
 118/* Belkin */
 119
 120static const struct gpio_keys_button
 121bcm47xx_buttons_belkin_f7d4301[] __initconst = {
 122        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 123        BCM47XX_GPIO_KEY(8, KEY_WPS_BUTTON),
 124};
 125
 126/* Buffalo */
 127
 128static const struct gpio_keys_button
 129bcm47xx_buttons_buffalo_whr2_a54g54[] __initconst = {
 130        BCM47XX_GPIO_KEY(4, KEY_RESTART),
 131};
 132
 133static const struct gpio_keys_button
 134bcm47xx_buttons_buffalo_whr_g125[] __initconst = {
 135        BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
 136        BCM47XX_GPIO_KEY(4, KEY_RESTART),
 137        BCM47XX_GPIO_KEY(5, BTN_0), /* Router / AP mode swtich */
 138};
 139
 140static const struct gpio_keys_button
 141bcm47xx_buttons_buffalo_whr_g54s[] __initconst = {
 142        BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
 143        BCM47XX_GPIO_KEY(4, KEY_RESTART),
 144        BCM47XX_GPIO_KEY(5, BTN_0), /* Router / AP mode swtich */
 145};
 146
 147static const struct gpio_keys_button
 148bcm47xx_buttons_buffalo_whr_hp_g54[] __initconst = {
 149        BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
 150        BCM47XX_GPIO_KEY(4, KEY_RESTART),
 151        BCM47XX_GPIO_KEY(5, BTN_0), /* Router / AP mode swtich */
 152};
 153
 154static const struct gpio_keys_button
 155bcm47xx_buttons_buffalo_wzr_g300n[] __initconst = {
 156        BCM47XX_GPIO_KEY(4, KEY_RESTART),
 157};
 158
 159static const struct gpio_keys_button
 160bcm47xx_buttons_buffalo_wzr_rs_g54[] __initconst = {
 161        BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
 162        BCM47XX_GPIO_KEY(4, KEY_RESTART),
 163};
 164
 165static const struct gpio_keys_button
 166bcm47xx_buttons_buffalo_wzr_rs_g54hp[] __initconst = {
 167        BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
 168        BCM47XX_GPIO_KEY(4, KEY_RESTART),
 169};
 170
 171/* Dell */
 172
 173static const struct gpio_keys_button
 174bcm47xx_buttons_dell_tm2300[] __initconst = {
 175        BCM47XX_GPIO_KEY(0, KEY_RESTART),
 176};
 177
 178/* D-Link */
 179
 180static const struct gpio_keys_button
 181bcm47xx_buttons_dlink_dir130[] __initconst = {
 182        BCM47XX_GPIO_KEY(3, KEY_RESTART),
 183        BCM47XX_GPIO_KEY(7, KEY_UNKNOWN),
 184};
 185
 186static const struct gpio_keys_button
 187bcm47xx_buttons_dlink_dir330[] __initconst = {
 188        BCM47XX_GPIO_KEY(3, KEY_RESTART),
 189        BCM47XX_GPIO_KEY(7, KEY_UNKNOWN),
 190};
 191
 192/* Linksys */
 193
 194static const struct gpio_keys_button
 195bcm47xx_buttons_linksys_e1000v1[] __initconst = {
 196        BCM47XX_GPIO_KEY(5, KEY_WPS_BUTTON),
 197        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 198};
 199
 200static const struct gpio_keys_button
 201bcm47xx_buttons_linksys_e1000v21[] __initconst = {
 202        BCM47XX_GPIO_KEY(9, KEY_WPS_BUTTON),
 203        BCM47XX_GPIO_KEY(10, KEY_RESTART),
 204};
 205
 206static const struct gpio_keys_button
 207bcm47xx_buttons_linksys_e2000v1[] __initconst = {
 208        BCM47XX_GPIO_KEY(5, KEY_WPS_BUTTON),
 209        BCM47XX_GPIO_KEY(8, KEY_RESTART),
 210};
 211
 212static const struct gpio_keys_button
 213bcm47xx_buttons_linksys_e3000v1[] __initconst = {
 214        BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
 215        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 216};
 217
 218static const struct gpio_keys_button
 219bcm47xx_buttons_linksys_e3200v1[] __initconst = {
 220        BCM47XX_GPIO_KEY(5, KEY_RESTART),
 221        BCM47XX_GPIO_KEY(8, KEY_WPS_BUTTON),
 222};
 223
 224static const struct gpio_keys_button
 225bcm47xx_buttons_linksys_e4200v1[] __initconst = {
 226        BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
 227        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 228};
 229
 230static const struct gpio_keys_button
 231bcm47xx_buttons_linksys_wrt150nv1[] __initconst = {
 232        BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
 233        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 234};
 235
 236static const struct gpio_keys_button
 237bcm47xx_buttons_linksys_wrt150nv11[] __initconst = {
 238        BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
 239        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 240};
 241
 242static const struct gpio_keys_button
 243bcm47xx_buttons_linksys_wrt160nv1[] __initconst = {
 244        BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
 245        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 246};
 247
 248static const struct gpio_keys_button
 249bcm47xx_buttons_linksys_wrt160nv3[] __initconst = {
 250        BCM47XX_GPIO_KEY(5, KEY_WPS_BUTTON),
 251        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 252};
 253
 254static const struct gpio_keys_button
 255bcm47xx_buttons_linksys_wrt300n_v1[] __initconst = {
 256        BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
 257        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 258};
 259
 260static const struct gpio_keys_button
 261bcm47xx_buttons_linksys_wrt300nv11[] __initconst = {
 262        BCM47XX_GPIO_KEY(4, KEY_UNKNOWN),
 263        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 264};
 265
 266static const struct gpio_keys_button
 267bcm47xx_buttons_linksys_wrt310nv1[] __initconst = {
 268        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 269        BCM47XX_GPIO_KEY(8, KEY_UNKNOWN),
 270};
 271
 272static const struct gpio_keys_button
 273bcm47xx_buttons_linksys_wrt54g3gv2[] __initconst = {
 274        BCM47XX_GPIO_KEY(5, KEY_WIMAX),
 275        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 276};
 277
 278static const struct gpio_keys_button
 279bcm47xx_buttons_linksys_wrt54g_generic[] __initconst = {
 280        BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
 281        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 282};
 283
 284static const struct gpio_keys_button
 285bcm47xx_buttons_linksys_wrt610nv1[] __initconst = {
 286        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 287        BCM47XX_GPIO_KEY(8, KEY_WPS_BUTTON),
 288};
 289
 290static const struct gpio_keys_button
 291bcm47xx_buttons_linksys_wrt610nv2[] __initconst = {
 292        BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
 293        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 294};
 295
 296static const struct gpio_keys_button
 297bcm47xx_buttons_linksys_wrtsl54gs[] __initconst = {
 298        BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
 299        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 300};
 301
 302/* Luxul */
 303
 304static const struct gpio_keys_button
 305bcm47xx_buttons_luxul_xwr_1750_v1[] = {
 306        BCM47XX_GPIO_KEY(14, BTN_TASK),
 307};
 308
 309/* Microsoft */
 310
 311static const struct gpio_keys_button
 312bcm47xx_buttons_microsoft_nm700[] __initconst = {
 313        BCM47XX_GPIO_KEY(7, KEY_RESTART),
 314};
 315
 316/* Motorola */
 317
 318static const struct gpio_keys_button
 319bcm47xx_buttons_motorola_we800g[] __initconst = {
 320        BCM47XX_GPIO_KEY(0, KEY_RESTART),
 321};
 322
 323static const struct gpio_keys_button
 324bcm47xx_buttons_motorola_wr850gp[] __initconst = {
 325        BCM47XX_GPIO_KEY(5, KEY_RESTART),
 326};
 327
 328static const struct gpio_keys_button
 329bcm47xx_buttons_motorola_wr850gv2v3[] __initconst = {
 330        BCM47XX_GPIO_KEY(5, KEY_RESTART),
 331};
 332
 333/* Netgear */
 334
 335static const struct gpio_keys_button
 336bcm47xx_buttons_netgear_wndr3400v1[] __initconst = {
 337        BCM47XX_GPIO_KEY(4, KEY_RESTART),
 338        BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
 339        BCM47XX_GPIO_KEY(8, KEY_RFKILL),
 340};
 341
 342static const struct gpio_keys_button
 343bcm47xx_buttons_netgear_wndr3400_v3[] __initconst = {
 344        BCM47XX_GPIO_KEY(12, KEY_RESTART),
 345        BCM47XX_GPIO_KEY(23, KEY_WPS_BUTTON),
 346};
 347
 348static const struct gpio_keys_button
 349bcm47xx_buttons_netgear_wndr3700v3[] __initconst = {
 350        BCM47XX_GPIO_KEY(2, KEY_RFKILL),
 351        BCM47XX_GPIO_KEY(3, KEY_RESTART),
 352        BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
 353};
 354
 355static const struct gpio_keys_button
 356bcm47xx_buttons_netgear_wndr4500v1[] __initconst = {
 357        BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
 358        BCM47XX_GPIO_KEY(5, KEY_RFKILL),
 359        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 360};
 361
 362static const struct gpio_keys_button
 363bcm47xx_buttons_netgear_wnr3500lv1[] __initconst = {
 364        BCM47XX_GPIO_KEY(4, KEY_RESTART),
 365        BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
 366};
 367
 368static const struct gpio_keys_button
 369bcm47xx_buttons_netgear_wnr834bv2[] __initconst = {
 370        BCM47XX_GPIO_KEY(6, KEY_RESTART),
 371};
 372
 373/* SimpleTech */
 374
 375static const struct gpio_keys_button
 376bcm47xx_buttons_simpletech_simpleshare[] __initconst = {
 377        BCM47XX_GPIO_KEY(0, KEY_RESTART),
 378};
 379
 380/**************************************************
 381 * Init
 382 **************************************************/
 383
 384static struct gpio_keys_platform_data bcm47xx_button_pdata;
 385
 386static struct platform_device bcm47xx_buttons_gpio_keys = {
 387        .name = "gpio-keys",
 388        .dev = {
 389                .platform_data = &bcm47xx_button_pdata,
 390        }
 391};
 392
 393/* Copy data from __initconst */
 394static int __init bcm47xx_buttons_copy(const struct gpio_keys_button *buttons,
 395                                       size_t nbuttons)
 396{
 397        size_t size = nbuttons * sizeof(*buttons);
 398
 399        bcm47xx_button_pdata.buttons = kmemdup(buttons, size, GFP_KERNEL);
 400        if (!bcm47xx_button_pdata.buttons)
 401                return -ENOMEM;
 402        bcm47xx_button_pdata.nbuttons = nbuttons;
 403
 404        return 0;
 405}
 406
 407#define bcm47xx_copy_bdata(dev_buttons)                                 \
 408        bcm47xx_buttons_copy(dev_buttons, ARRAY_SIZE(dev_buttons));
 409
 410int __init bcm47xx_buttons_register(void)
 411{
 412        enum bcm47xx_board board = bcm47xx_board_get();
 413        int err;
 414
 415        switch (board) {
 416        case BCM47XX_BOARD_ASUS_RTN12:
 417                err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn12);
 418                break;
 419        case BCM47XX_BOARD_ASUS_RTN16:
 420                err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn16);
 421                break;
 422        case BCM47XX_BOARD_ASUS_RTN66U:
 423                err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn66u);
 424                break;
 425        case BCM47XX_BOARD_ASUS_WL300G:
 426                err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl300g);
 427                break;
 428        case BCM47XX_BOARD_ASUS_WL320GE:
 429                err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl320ge);
 430                break;
 431        case BCM47XX_BOARD_ASUS_WL330GE:
 432                err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl330ge);
 433                break;
 434        case BCM47XX_BOARD_ASUS_WL500G:
 435                err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500g);
 436                break;
 437        case BCM47XX_BOARD_ASUS_WL500GD:
 438                err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500gd);
 439                break;
 440        case BCM47XX_BOARD_ASUS_WL500GPV1:
 441                err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500gpv1);
 442                break;
 443        case BCM47XX_BOARD_ASUS_WL500GPV2:
 444                err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500gpv2);
 445                break;
 446        case BCM47XX_BOARD_ASUS_WL500W:
 447                err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500w);
 448                break;
 449        case BCM47XX_BOARD_ASUS_WL520GC:
 450                err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl520gc);
 451                break;
 452        case BCM47XX_BOARD_ASUS_WL520GU:
 453                err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl520gu);
 454                break;
 455        case BCM47XX_BOARD_ASUS_WL700GE:
 456                err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl700ge);
 457                break;
 458        case BCM47XX_BOARD_ASUS_WLHDD:
 459                err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wlhdd);
 460                break;
 461
 462        case BCM47XX_BOARD_BELKIN_F7D3301:
 463        case BCM47XX_BOARD_BELKIN_F7D3302:
 464        case BCM47XX_BOARD_BELKIN_F7D4301:
 465        case BCM47XX_BOARD_BELKIN_F7D4302:
 466        case BCM47XX_BOARD_BELKIN_F7D4401:
 467                err = bcm47xx_copy_bdata(bcm47xx_buttons_belkin_f7d4301);
 468                break;
 469
 470        case BCM47XX_BOARD_BUFFALO_WHR2_A54G54:
 471                err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_whr2_a54g54);
 472                break;
 473        case BCM47XX_BOARD_BUFFALO_WHR_G125:
 474                err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_whr_g125);
 475                break;
 476        case BCM47XX_BOARD_BUFFALO_WHR_G54S:
 477                err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_whr_g54s);
 478                break;
 479        case BCM47XX_BOARD_BUFFALO_WHR_HP_G54:
 480                err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_whr_hp_g54);
 481                break;
 482        case BCM47XX_BOARD_BUFFALO_WZR_G300N:
 483                err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_wzr_g300n);
 484                break;
 485        case BCM47XX_BOARD_BUFFALO_WZR_RS_G54:
 486                err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_wzr_rs_g54);
 487                break;
 488        case BCM47XX_BOARD_BUFFALO_WZR_RS_G54HP:
 489                err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_wzr_rs_g54hp);
 490                break;
 491
 492        case BCM47XX_BOARD_DELL_TM2300:
 493                err = bcm47xx_copy_bdata(bcm47xx_buttons_dell_tm2300);
 494                break;
 495
 496        case BCM47XX_BOARD_DLINK_DIR130:
 497                err = bcm47xx_copy_bdata(bcm47xx_buttons_dlink_dir130);
 498                break;
 499        case BCM47XX_BOARD_DLINK_DIR330:
 500                err = bcm47xx_copy_bdata(bcm47xx_buttons_dlink_dir330);
 501                break;
 502
 503        case BCM47XX_BOARD_HUAWEI_E970:
 504                err = bcm47xx_copy_bdata(bcm47xx_buttons_huawei_e970);
 505                break;
 506
 507        case BCM47XX_BOARD_LINKSYS_E1000V1:
 508                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e1000v1);
 509                break;
 510        case BCM47XX_BOARD_LINKSYS_E1000V21:
 511                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e1000v21);
 512                break;
 513        case BCM47XX_BOARD_LINKSYS_E2000V1:
 514                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e2000v1);
 515                break;
 516        case BCM47XX_BOARD_LINKSYS_E3000V1:
 517                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e3000v1);
 518                break;
 519        case BCM47XX_BOARD_LINKSYS_E3200V1:
 520                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e3200v1);
 521                break;
 522        case BCM47XX_BOARD_LINKSYS_E4200V1:
 523                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e4200v1);
 524                break;
 525        case BCM47XX_BOARD_LINKSYS_WRT150NV1:
 526                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt150nv1);
 527                break;
 528        case BCM47XX_BOARD_LINKSYS_WRT150NV11:
 529                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt150nv11);
 530                break;
 531        case BCM47XX_BOARD_LINKSYS_WRT160NV1:
 532                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt160nv1);
 533                break;
 534        case BCM47XX_BOARD_LINKSYS_WRT160NV3:
 535                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt160nv3);
 536                break;
 537        case BCM47XX_BOARD_LINKSYS_WRT300N_V1:
 538                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt300n_v1);
 539                break;
 540        case BCM47XX_BOARD_LINKSYS_WRT300NV11:
 541                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt300nv11);
 542                break;
 543        case BCM47XX_BOARD_LINKSYS_WRT310NV1:
 544                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1);
 545                break;
 546        case BCM47XX_BOARD_LINKSYS_WRT54G3GV2:
 547                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54g3gv2);
 548                break;
 549        case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0101:
 550        case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0467:
 551        case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0708:
 552                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54g_generic);
 553                break;
 554        case BCM47XX_BOARD_LINKSYS_WRT610NV1:
 555                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt610nv1);
 556                break;
 557        case BCM47XX_BOARD_LINKSYS_WRT610NV2:
 558                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt610nv2);
 559                break;
 560        case BCM47XX_BOARD_LINKSYS_WRTSL54GS:
 561                err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrtsl54gs);
 562                break;
 563
 564        case BCM47XX_BOARD_LUXUL_XWR_1750_V1:
 565                err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xwr_1750_v1);
 566                break;
 567
 568        case BCM47XX_BOARD_MICROSOFT_MN700:
 569                err = bcm47xx_copy_bdata(bcm47xx_buttons_microsoft_nm700);
 570                break;
 571
 572        case BCM47XX_BOARD_MOTOROLA_WE800G:
 573                err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_we800g);
 574                break;
 575        case BCM47XX_BOARD_MOTOROLA_WR850GP:
 576                err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_wr850gp);
 577                break;
 578        case BCM47XX_BOARD_MOTOROLA_WR850GV2V3:
 579                err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_wr850gv2v3);
 580                break;
 581
 582        case BCM47XX_BOARD_NETGEAR_WNDR3400V1:
 583                err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3400v1);
 584                break;
 585        case BCM47XX_BOARD_NETGEAR_WNDR3400_V3:
 586                err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3400_v3);
 587                break;
 588        case BCM47XX_BOARD_NETGEAR_WNDR3700V3:
 589                err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3700v3);
 590                break;
 591        case BCM47XX_BOARD_NETGEAR_WNDR4500V1:
 592                err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500v1);
 593                break;
 594        case BCM47XX_BOARD_NETGEAR_WNR3500L:
 595                err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr3500lv1);
 596                break;
 597        case BCM47XX_BOARD_NETGEAR_WNR834BV2:
 598                err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr834bv2);
 599                break;
 600
 601        case BCM47XX_BOARD_SIMPLETECH_SIMPLESHARE:
 602                err = bcm47xx_copy_bdata(bcm47xx_buttons_simpletech_simpleshare);
 603                break;
 604
 605        default:
 606                pr_debug("No buttons configuration found for this device\n");
 607                return -ENOTSUPP;
 608        }
 609
 610        if (err)
 611                return -ENOMEM;
 612
 613        err = platform_device_register(&bcm47xx_buttons_gpio_keys);
 614        if (err) {
 615                pr_err("Failed to register platform device: %d\n", err);
 616                return err;
 617        }
 618
 619        return 0;
 620}
 621