1 /* 2 * Driver for keys on GPIO lines capable of generating interrupts. 3 * 4 * Copyright 2005 Phil Blundell 5 * Copyright 2010, 2011 David Jander <david@protonic.nl> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as 9 * published by the Free Software Foundation. 10 */ 11 12 #include <linux/module.h> 13 14 #include <linux/init.h> 15 #include <linux/fs.h> 16 #include <linux/interrupt.h> 17 #include <linux/irq.h> 18 #include <linux/sched.h> 19 #include <linux/pm.h> 20 #include <linux/slab.h> 21 #include <linux/sysctl.h> 22 #include <linux/proc_fs.h> 23 #include <linux/delay.h> 24 #include <linux/platform_device.h> 25 #include <linux/input.h> 26 #include <linux/gpio_keys.h> 27 #include <linux/workqueue.h> 28 #include <linux/gpio.h> 29 #include <linux/of.h> 30 #include <linux/of_platform.h> 31 #include <linux/of_gpio.h> 32 #include <linux/of_irq.h> 33 #include <linux/spinlock.h> 34 35 struct gpio_button_data { 36 const struct gpio_keys_button *button; 37 struct input_dev *input; 38 39 struct timer_list release_timer; 40 unsigned int release_delay; /* in msecs, for IRQ-only buttons */ 41 42 struct delayed_work work; 43 unsigned int software_debounce; /* in msecs, for GPIO-driven buttons */ 44 45 unsigned int irq; 46 spinlock_t lock; 47 bool disabled; 48 bool key_pressed; 49 }; 50 51 struct gpio_keys_drvdata { 52 const struct gpio_keys_platform_data *pdata; 53 struct input_dev *input; 54 struct mutex disable_lock; 55 struct gpio_button_data data[0]; 56 }; 57 58 /* 59 * SYSFS interface for enabling/disabling keys and switches: 60 * 61 * There are 4 attributes under /sys/devices/platform/gpio-keys/ 62 * keys [ro] - bitmap of keys (EV_KEY) which can be 63 * disabled 64 * switches [ro] - bitmap of switches (EV_SW) which can be 65 * disabled 66 * disabled_keys [rw] - bitmap of keys currently disabled 67 * disabled_switches [rw] - bitmap of switches currently disabled 68 * 69 * Userland can change these values and hence disable event generation 70 * for each key (or switch). Disabling a key means its interrupt line 71 * is disabled. 72 * 73 * For example, if we have following switches set up as gpio-keys: 74 * SW_DOCK = 5 75 * SW_CAMERA_LENS_COVER = 9 76 * SW_KEYPAD_SLIDE = 10 77 * SW_FRONT_PROXIMITY = 11 78 * This is read from switches: 79 * 11-9,5 80 * Next we want to disable proximity (11) and dock (5), we write: 81 * 11,5 82 * to file disabled_switches. Now proximity and dock IRQs are disabled. 83 * This can be verified by reading the file disabled_switches: 84 * 11,5 85 * If we now want to enable proximity (11) switch we write: 86 * 5 87 * to disabled_switches. 88 * 89 * We can disable only those keys which don't allow sharing the irq. 90 */ 91 92 /** 93 * get_n_events_by_type() - returns maximum number of events per @type 94 * @type: type of button (%EV_KEY, %EV_SW) 95 * 96 * Return value of this function can be used to allocate bitmap 97 * large enough to hold all bits for given type. 98 */ 99 static inline int get_n_events_by_type(int type) 100 { 101 BUG_ON(type != EV_SW && type != EV_KEY); 102 103 return (type == EV_KEY) ? KEY_CNT : SW_CNT; 104 } 105 106 /** 107 * gpio_keys_disable_button() - disables given GPIO button 108 * @bdata: button data for button to be disabled 109 * 110 * Disables button pointed by @bdata. This is done by masking 111 * IRQ line. After this function is called, button won't generate 112 * input events anymore. Note that one can only disable buttons 113 * that don't share IRQs. 114 * 115 * Make sure that @bdata->disable_lock is locked when entering 116 * this function to avoid races when concurrent threads are 117 * disabling buttons at the same time. 118 */ 119 static void gpio_keys_disable_button(struct gpio_button_data *bdata) 120 { 121 if (!bdata->disabled) { 122 /* 123 * Disable IRQ and associated timer/work structure. 124 */ 125 disable_irq(bdata->irq); 126 127 if (gpio_is_valid(bdata->button->gpio)) 128 cancel_delayed_work_sync(&bdata->work); 129 else 130 del_timer_sync(&bdata->release_timer); 131 132 bdata->disabled = true; 133 } 134 } 135 136 /** 137 * gpio_keys_enable_button() - enables given GPIO button 138 * @bdata: button data for button to be disabled 139 * 140 * Enables given button pointed by @bdata. 141 * 142 * Make sure that @bdata->disable_lock is locked when entering 143 * this function to avoid races with concurrent threads trying 144 * to enable the same button at the same time. 145 */ 146 static void gpio_keys_enable_button(struct gpio_button_data *bdata) 147 { 148 if (bdata->disabled) { 149 enable_irq(bdata->irq); 150 bdata->disabled = false; 151 } 152 } 153 154 /** 155 * gpio_keys_attr_show_helper() - fill in stringified bitmap of buttons 156 * @ddata: pointer to drvdata 157 * @buf: buffer where stringified bitmap is written 158 * @type: button type (%EV_KEY, %EV_SW) 159 * @only_disabled: does caller want only those buttons that are 160 * currently disabled or all buttons that can be 161 * disabled 162 * 163 * This function writes buttons that can be disabled to @buf. If 164 * @only_disabled is true, then @buf contains only those buttons 165 * that are currently disabled. Returns 0 on success or negative 166 * errno on failure. 167 */ 168 static ssize_t gpio_keys_attr_show_helper(struct gpio_keys_drvdata *ddata, 169 char *buf, unsigned int type, 170 bool only_disabled) 171 { 172 int n_events = get_n_events_by_type(type); 173 unsigned long *bits; 174 ssize_t ret; 175 int i; 176 177 bits = kcalloc(BITS_TO_LONGS(n_events), sizeof(*bits), GFP_KERNEL); 178 if (!bits) 179 return -ENOMEM; 180 181 for (i = 0; i < ddata->pdata->nbuttons; i++) { 182 struct gpio_button_data *bdata = &ddata->data[i]; 183 184 if (bdata->button->type != type) 185 continue; 186 187 if (only_disabled && !bdata->disabled) 188 continue; 189 190 __set_bit(bdata->button->code, bits); 191 } 192 193 ret = scnprintf(buf, PAGE_SIZE - 1, "%*pbl", n_events, bits); 194 buf[ret++] = '\n'; 195 buf[ret] = '\0'; 196 197 kfree(bits); 198 199 return ret; 200 } 201 202 /** 203 * gpio_keys_attr_store_helper() - enable/disable buttons based on given bitmap 204 * @ddata: pointer to drvdata 205 * @buf: buffer from userspace that contains stringified bitmap 206 * @type: button type (%EV_KEY, %EV_SW) 207 * 208 * This function parses stringified bitmap from @buf and disables/enables 209 * GPIO buttons accordingly. Returns 0 on success and negative error 210 * on failure. 211 */ 212 static ssize_t gpio_keys_attr_store_helper(struct gpio_keys_drvdata *ddata, 213 const char *buf, unsigned int type) 214 { 215 int n_events = get_n_events_by_type(type); 216 unsigned long *bits; 217 ssize_t error; 218 int i; 219 220 bits = kcalloc(BITS_TO_LONGS(n_events), sizeof(*bits), GFP_KERNEL); 221 if (!bits) 222 return -ENOMEM; 223 224 error = bitmap_parselist(buf, bits, n_events); 225 if (error) 226 goto out; 227 228 /* First validate */ 229 for (i = 0; i < ddata->pdata->nbuttons; i++) { 230 struct gpio_button_data *bdata = &ddata->data[i]; 231 232 if (bdata->button->type != type) 233 continue; 234 235 if (test_bit(bdata->button->code, bits) && 236 !bdata->button->can_disable) { 237 error = -EINVAL; 238 goto out; 239 } 240 } 241 242 if (i == ddata->pdata->nbuttons) { 243 error = -EINVAL; 244 goto out; 245 } 246 247 mutex_lock(&ddata->disable_lock); 248 249 for (i = 0; i < ddata->pdata->nbuttons; i++) { 250 struct gpio_button_data *bdata = &ddata->data[i]; 251 252 if (bdata->button->type != type) 253 continue; 254 255 if (test_bit(bdata->button->code, bits)) 256 gpio_keys_disable_button(bdata); 257 else 258 gpio_keys_enable_button(bdata); 259 } 260 261 mutex_unlock(&ddata->disable_lock); 262 263 out: 264 kfree(bits); 265 return error; 266 } 267 268 #define ATTR_SHOW_FN(name, type, only_disabled) \ 269 static ssize_t gpio_keys_show_##name(struct device *dev, \ 270 struct device_attribute *attr, \ 271 char *buf) \ 272 { \ 273 struct platform_device *pdev = to_platform_device(dev); \ 274 struct gpio_keys_drvdata *ddata = platform_get_drvdata(pdev); \ 275 \ 276 return gpio_keys_attr_show_helper(ddata, buf, \ 277 type, only_disabled); \ 278 } 279 280 ATTR_SHOW_FN(keys, EV_KEY, false); 281 ATTR_SHOW_FN(switches, EV_SW, false); 282 ATTR_SHOW_FN(disabled_keys, EV_KEY, true); 283 ATTR_SHOW_FN(disabled_switches, EV_SW, true); 284 285 /* 286 * ATTRIBUTES: 287 * 288 * /sys/devices/platform/gpio-keys/keys [ro] 289 * /sys/devices/platform/gpio-keys/switches [ro] 290 */ 291 static DEVICE_ATTR(keys, S_IRUGO, gpio_keys_show_keys, NULL); 292 static DEVICE_ATTR(switches, S_IRUGO, gpio_keys_show_switches, NULL); 293 294 #define ATTR_STORE_FN(name, type) \ 295 static ssize_t gpio_keys_store_##name(struct device *dev, \ 296 struct device_attribute *attr, \ 297 const char *buf, \ 298 size_t count) \ 299 { \ 300 struct platform_device *pdev = to_platform_device(dev); \ 301 struct gpio_keys_drvdata *ddata = platform_get_drvdata(pdev); \ 302 ssize_t error; \ 303 \ 304 error = gpio_keys_attr_store_helper(ddata, buf, type); \ 305 if (error) \ 306 return error; \ 307 \ 308 return count; \ 309 } 310 311 ATTR_STORE_FN(disabled_keys, EV_KEY); 312 ATTR_STORE_FN(disabled_switches, EV_SW); 313 314 /* 315 * ATTRIBUTES: 316 * 317 * /sys/devices/platform/gpio-keys/disabled_keys [rw] 318 * /sys/devices/platform/gpio-keys/disables_switches [rw] 319 */ 320 static DEVICE_ATTR(disabled_keys, S_IWUSR | S_IRUGO, 321 gpio_keys_show_disabled_keys, 322 gpio_keys_store_disabled_keys); 323 static DEVICE_ATTR(disabled_switches, S_IWUSR | S_IRUGO, 324 gpio_keys_show_disabled_switches, 325 gpio_keys_store_disabled_switches); 326 327 static struct attribute *gpio_keys_attrs[] = { 328 &dev_attr_keys.attr, 329 &dev_attr_switches.attr, 330 &dev_attr_disabled_keys.attr, 331 &dev_attr_disabled_switches.attr, 332 NULL, 333 }; 334 335 static struct attribute_group gpio_keys_attr_group = { 336 .attrs = gpio_keys_attrs, 337 }; 338 339 static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata) 340 { 341 const struct gpio_keys_button *button = bdata->button; 342 struct input_dev *input = bdata->input; 343 unsigned int type = button->type ?: EV_KEY; 344 int state = gpio_get_value_cansleep(button->gpio); 345 346 if (state < 0) { 347 dev_err(input->dev.parent, "failed to get gpio state\n"); 348 return; 349 } 350 351 state = (state ? 1 : 0) ^ button->active_low; 352 if (type == EV_ABS) { 353 if (state) 354 input_event(input, type, button->code, button->value); 355 } else { 356 input_event(input, type, button->code, !!state); 357 } 358 input_sync(input); 359 } 360 361 static void gpio_keys_gpio_work_func(struct work_struct *work) 362 { 363 struct gpio_button_data *bdata = 364 container_of(work, struct gpio_button_data, work.work); 365 366 gpio_keys_gpio_report_event(bdata); 367 368 if (bdata->button->wakeup) 369 pm_relax(bdata->input->dev.parent); 370 } 371 372 static irqreturn_t gpio_keys_gpio_isr(int irq, void *dev_id) 373 { 374 struct gpio_button_data *bdata = dev_id; 375 376 BUG_ON(irq != bdata->irq); 377 378 if (bdata->button->wakeup) 379 pm_stay_awake(bdata->input->dev.parent); 380 381 mod_delayed_work(system_wq, 382 &bdata->work, 383 msecs_to_jiffies(bdata->software_debounce)); 384 385 return IRQ_HANDLED; 386 } 387 388 static void gpio_keys_irq_timer(unsigned long _data) 389 { 390 struct gpio_button_data *bdata = (struct gpio_button_data *)_data; 391 struct input_dev *input = bdata->input; 392 unsigned long flags; 393 394 spin_lock_irqsave(&bdata->lock, flags); 395 if (bdata->key_pressed) { 396 input_event(input, EV_KEY, bdata->button->code, 0); 397 input_sync(input); 398 bdata->key_pressed = false; 399 } 400 spin_unlock_irqrestore(&bdata->lock, flags); 401 } 402 403 static irqreturn_t gpio_keys_irq_isr(int irq, void *dev_id) 404 { 405 struct gpio_button_data *bdata = dev_id; 406 const struct gpio_keys_button *button = bdata->button; 407 struct input_dev *input = bdata->input; 408 unsigned long flags; 409 410 BUG_ON(irq != bdata->irq); 411 412 spin_lock_irqsave(&bdata->lock, flags); 413 414 if (!bdata->key_pressed) { 415 if (bdata->button->wakeup) 416 pm_wakeup_event(bdata->input->dev.parent, 0); 417 418 input_event(input, EV_KEY, button->code, 1); 419 input_sync(input); 420 421 if (!bdata->release_delay) { 422 input_event(input, EV_KEY, button->code, 0); 423 input_sync(input); 424 goto out; 425 } 426 427 bdata->key_pressed = true; 428 } 429 430 if (bdata->release_delay) 431 mod_timer(&bdata->release_timer, 432 jiffies + msecs_to_jiffies(bdata->release_delay)); 433 out: 434 spin_unlock_irqrestore(&bdata->lock, flags); 435 return IRQ_HANDLED; 436 } 437 438 static void gpio_keys_quiesce_key(void *data) 439 { 440 struct gpio_button_data *bdata = data; 441 442 if (gpio_is_valid(bdata->button->gpio)) 443 cancel_delayed_work_sync(&bdata->work); 444 else 445 del_timer_sync(&bdata->release_timer); 446 } 447 448 static int gpio_keys_setup_key(struct platform_device *pdev, 449 struct input_dev *input, 450 struct gpio_button_data *bdata, 451 const struct gpio_keys_button *button) 452 { 453 const char *desc = button->desc ? button->desc : "gpio_keys"; 454 struct device *dev = &pdev->dev; 455 irq_handler_t isr; 456 unsigned long irqflags; 457 int irq; 458 int error; 459 460 bdata->input = input; 461 bdata->button = button; 462 spin_lock_init(&bdata->lock); 463 464 if (gpio_is_valid(button->gpio)) { 465 466 error = devm_gpio_request_one(&pdev->dev, button->gpio, 467 GPIOF_IN, desc); 468 if (error < 0) { 469 dev_err(dev, "Failed to request GPIO %d, error %d\n", 470 button->gpio, error); 471 return error; 472 } 473 474 if (button->debounce_interval) { 475 error = gpio_set_debounce(button->gpio, 476 button->debounce_interval * 1000); 477 /* use timer if gpiolib doesn't provide debounce */ 478 if (error < 0) 479 bdata->software_debounce = 480 button->debounce_interval; 481 } 482 483 if (button->irq) { 484 bdata->irq = button->irq; 485 } else { 486 irq = gpio_to_irq(button->gpio); 487 if (irq < 0) { 488 error = irq; 489 dev_err(dev, 490 "Unable to get irq number for GPIO %d, error %d\n", 491 button->gpio, error); 492 return error; 493 } 494 bdata->irq = irq; 495 } 496 497 INIT_DELAYED_WORK(&bdata->work, gpio_keys_gpio_work_func); 498 499 isr = gpio_keys_gpio_isr; 500 irqflags = IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING; 501 502 } else { 503 if (!button->irq) { 504 dev_err(dev, "No IRQ specified\n"); 505 return -EINVAL; 506 } 507 bdata->irq = button->irq; 508 509 if (button->type && button->type != EV_KEY) { 510 dev_err(dev, "Only EV_KEY allowed for IRQ buttons.\n"); 511 return -EINVAL; 512 } 513 514 bdata->release_delay = button->debounce_interval; 515 setup_timer(&bdata->release_timer, 516 gpio_keys_irq_timer, (unsigned long)bdata); 517 518 isr = gpio_keys_irq_isr; 519 irqflags = 0; 520 } 521 522 input_set_capability(input, button->type ?: EV_KEY, button->code); 523 524 /* 525 * Install custom action to cancel release timer and 526 * workqueue item. 527 */ 528 error = devm_add_action(&pdev->dev, gpio_keys_quiesce_key, bdata); 529 if (error) { 530 dev_err(&pdev->dev, 531 "failed to register quiesce action, error: %d\n", 532 error); 533 return error; 534 } 535 536 /* 537 * If platform has specified that the button can be disabled, 538 * we don't want it to share the interrupt line. 539 */ 540 if (!button->can_disable) 541 irqflags |= IRQF_SHARED; 542 543 error = devm_request_any_context_irq(&pdev->dev, bdata->irq, 544 isr, irqflags, desc, bdata); 545 if (error < 0) { 546 dev_err(dev, "Unable to claim irq %d; error %d\n", 547 bdata->irq, error); 548 return error; 549 } 550 551 return 0; 552 } 553 554 static void gpio_keys_report_state(struct gpio_keys_drvdata *ddata) 555 { 556 struct input_dev *input = ddata->input; 557 int i; 558 559 for (i = 0; i < ddata->pdata->nbuttons; i++) { 560 struct gpio_button_data *bdata = &ddata->data[i]; 561 if (gpio_is_valid(bdata->button->gpio)) 562 gpio_keys_gpio_report_event(bdata); 563 } 564 input_sync(input); 565 } 566 567 static int gpio_keys_open(struct input_dev *input) 568 { 569 struct gpio_keys_drvdata *ddata = input_get_drvdata(input); 570 const struct gpio_keys_platform_data *pdata = ddata->pdata; 571 int error; 572 573 if (pdata->enable) { 574 error = pdata->enable(input->dev.parent); 575 if (error) 576 return error; 577 } 578 579 /* Report current state of buttons that are connected to GPIOs */ 580 gpio_keys_report_state(ddata); 581 582 return 0; 583 } 584 585 static void gpio_keys_close(struct input_dev *input) 586 { 587 struct gpio_keys_drvdata *ddata = input_get_drvdata(input); 588 const struct gpio_keys_platform_data *pdata = ddata->pdata; 589 590 if (pdata->disable) 591 pdata->disable(input->dev.parent); 592 } 593 594 /* 595 * Handlers for alternative sources of platform_data 596 */ 597 598 #ifdef CONFIG_OF 599 /* 600 * Translate OpenFirmware node properties into platform_data 601 */ 602 static struct gpio_keys_platform_data * 603 gpio_keys_get_devtree_pdata(struct device *dev) 604 { 605 struct device_node *node, *pp; 606 struct gpio_keys_platform_data *pdata; 607 struct gpio_keys_button *button; 608 int error; 609 int nbuttons; 610 int i; 611 612 node = dev->of_node; 613 if (!node) 614 return ERR_PTR(-ENODEV); 615 616 nbuttons = of_get_child_count(node); 617 if (nbuttons == 0) 618 return ERR_PTR(-ENODEV); 619 620 pdata = devm_kzalloc(dev, 621 sizeof(*pdata) + nbuttons * sizeof(*button), 622 GFP_KERNEL); 623 if (!pdata) 624 return ERR_PTR(-ENOMEM); 625 626 pdata->buttons = (struct gpio_keys_button *)(pdata + 1); 627 pdata->nbuttons = nbuttons; 628 629 pdata->rep = !!of_get_property(node, "autorepeat", NULL); 630 631 i = 0; 632 for_each_child_of_node(node, pp) { 633 enum of_gpio_flags flags; 634 635 button = &pdata->buttons[i++]; 636 637 button->gpio = of_get_gpio_flags(pp, 0, &flags); 638 if (button->gpio < 0) { 639 error = button->gpio; 640 if (error != -ENOENT) { 641 if (error != -EPROBE_DEFER) 642 dev_err(dev, 643 "Failed to get gpio flags, error: %d\n", 644 error); 645 return ERR_PTR(error); 646 } 647 } else { 648 button->active_low = flags & OF_GPIO_ACTIVE_LOW; 649 } 650 651 button->irq = irq_of_parse_and_map(pp, 0); 652 653 if (!gpio_is_valid(button->gpio) && !button->irq) { 654 dev_err(dev, "Found button without gpios or irqs\n"); 655 return ERR_PTR(-EINVAL); 656 } 657 658 if (of_property_read_u32(pp, "linux,code", &button->code)) { 659 dev_err(dev, "Button without keycode: 0x%x\n", 660 button->gpio); 661 return ERR_PTR(-EINVAL); 662 } 663 664 button->desc = of_get_property(pp, "label", NULL); 665 666 if (of_property_read_u32(pp, "linux,input-type", &button->type)) 667 button->type = EV_KEY; 668 669 button->wakeup = of_property_read_bool(pp, "wakeup-source") || 670 /* legacy name */ 671 of_property_read_bool(pp, "gpio-key,wakeup"); 672 673 button->can_disable = !!of_get_property(pp, "linux,can-disable", NULL); 674 675 if (of_property_read_u32(pp, "debounce-interval", 676 &button->debounce_interval)) 677 button->debounce_interval = 5; 678 } 679 680 if (pdata->nbuttons == 0) 681 return ERR_PTR(-EINVAL); 682 683 return pdata; 684 } 685 686 static const struct of_device_id gpio_keys_of_match[] = { 687 { .compatible = "gpio-keys", }, 688 { }, 689 }; 690 MODULE_DEVICE_TABLE(of, gpio_keys_of_match); 691 692 #else 693 694 static inline struct gpio_keys_platform_data * 695 gpio_keys_get_devtree_pdata(struct device *dev) 696 { 697 return ERR_PTR(-ENODEV); 698 } 699 700 #endif 701 702 static int gpio_keys_probe(struct platform_device *pdev) 703 { 704 struct device *dev = &pdev->dev; 705 const struct gpio_keys_platform_data *pdata = dev_get_platdata(dev); 706 struct gpio_keys_drvdata *ddata; 707 struct input_dev *input; 708 size_t size; 709 int i, error; 710 int wakeup = 0; 711 712 if (!pdata) { 713 pdata = gpio_keys_get_devtree_pdata(dev); 714 if (IS_ERR(pdata)) 715 return PTR_ERR(pdata); 716 } 717 718 size = sizeof(struct gpio_keys_drvdata) + 719 pdata->nbuttons * sizeof(struct gpio_button_data); 720 ddata = devm_kzalloc(dev, size, GFP_KERNEL); 721 if (!ddata) { 722 dev_err(dev, "failed to allocate state\n"); 723 return -ENOMEM; 724 } 725 726 input = devm_input_allocate_device(dev); 727 if (!input) { 728 dev_err(dev, "failed to allocate input device\n"); 729 return -ENOMEM; 730 } 731 732 ddata->pdata = pdata; 733 ddata->input = input; 734 mutex_init(&ddata->disable_lock); 735 736 platform_set_drvdata(pdev, ddata); 737 input_set_drvdata(input, ddata); 738 739 input->name = pdata->name ? : pdev->name; 740 input->phys = "gpio-keys/input0"; 741 input->dev.parent = &pdev->dev; 742 input->open = gpio_keys_open; 743 input->close = gpio_keys_close; 744 745 input->id.bustype = BUS_HOST; 746 input->id.vendor = 0x0001; 747 input->id.product = 0x0001; 748 input->id.version = 0x0100; 749 750 /* Enable auto repeat feature of Linux input subsystem */ 751 if (pdata->rep) 752 __set_bit(EV_REP, input->evbit); 753 754 for (i = 0; i < pdata->nbuttons; i++) { 755 const struct gpio_keys_button *button = &pdata->buttons[i]; 756 struct gpio_button_data *bdata = &ddata->data[i]; 757 758 error = gpio_keys_setup_key(pdev, input, bdata, button); 759 if (error) 760 return error; 761 762 if (button->wakeup) 763 wakeup = 1; 764 } 765 766 error = sysfs_create_group(&pdev->dev.kobj, &gpio_keys_attr_group); 767 if (error) { 768 dev_err(dev, "Unable to export keys/switches, error: %d\n", 769 error); 770 return error; 771 } 772 773 error = input_register_device(input); 774 if (error) { 775 dev_err(dev, "Unable to register input device, error: %d\n", 776 error); 777 goto err_remove_group; 778 } 779 780 device_init_wakeup(&pdev->dev, wakeup); 781 782 return 0; 783 784 err_remove_group: 785 sysfs_remove_group(&pdev->dev.kobj, &gpio_keys_attr_group); 786 return error; 787 } 788 789 static int gpio_keys_remove(struct platform_device *pdev) 790 { 791 sysfs_remove_group(&pdev->dev.kobj, &gpio_keys_attr_group); 792 793 device_init_wakeup(&pdev->dev, 0); 794 795 return 0; 796 } 797 798 #ifdef CONFIG_PM_SLEEP 799 static int gpio_keys_suspend(struct device *dev) 800 { 801 struct gpio_keys_drvdata *ddata = dev_get_drvdata(dev); 802 struct input_dev *input = ddata->input; 803 int i; 804 805 if (device_may_wakeup(dev)) { 806 for (i = 0; i < ddata->pdata->nbuttons; i++) { 807 struct gpio_button_data *bdata = &ddata->data[i]; 808 if (bdata->button->wakeup) 809 enable_irq_wake(bdata->irq); 810 } 811 } else { 812 mutex_lock(&input->mutex); 813 if (input->users) 814 gpio_keys_close(input); 815 mutex_unlock(&input->mutex); 816 } 817 818 return 0; 819 } 820 821 static int gpio_keys_resume(struct device *dev) 822 { 823 struct gpio_keys_drvdata *ddata = dev_get_drvdata(dev); 824 struct input_dev *input = ddata->input; 825 int error = 0; 826 int i; 827 828 if (device_may_wakeup(dev)) { 829 for (i = 0; i < ddata->pdata->nbuttons; i++) { 830 struct gpio_button_data *bdata = &ddata->data[i]; 831 if (bdata->button->wakeup) 832 disable_irq_wake(bdata->irq); 833 } 834 } else { 835 mutex_lock(&input->mutex); 836 if (input->users) 837 error = gpio_keys_open(input); 838 mutex_unlock(&input->mutex); 839 } 840 841 if (error) 842 return error; 843 844 gpio_keys_report_state(ddata); 845 return 0; 846 } 847 #endif 848 849 static SIMPLE_DEV_PM_OPS(gpio_keys_pm_ops, gpio_keys_suspend, gpio_keys_resume); 850 851 static struct platform_driver gpio_keys_device_driver = { 852 .probe = gpio_keys_probe, 853 .remove = gpio_keys_remove, 854 .driver = { 855 .name = "gpio-keys", 856 .pm = &gpio_keys_pm_ops, 857 .of_match_table = of_match_ptr(gpio_keys_of_match), 858 } 859 }; 860 861 static int __init gpio_keys_init(void) 862 { 863 return platform_driver_register(&gpio_keys_device_driver); 864 } 865 866 static void __exit gpio_keys_exit(void) 867 { 868 platform_driver_unregister(&gpio_keys_device_driver); 869 } 870 871 late_initcall(gpio_keys_init); 872 module_exit(gpio_keys_exit); 873 874 MODULE_LICENSE("GPL"); 875 MODULE_AUTHOR("Phil Blundell <pb@handhelds.org>"); 876 MODULE_DESCRIPTION("Keyboard driver for GPIOs"); 877 MODULE_ALIAS("platform:gpio-keys"); 878