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/gpio/consumer.h> 30 #include <linux/of.h> 31 #include <linux/of_irq.h> 32 #include <linux/spinlock.h> 33 #include <dt-bindings/input/gpio-keys.h> 34 35 struct gpio_button_data { 36 const struct gpio_keys_button *button; 37 struct input_dev *input; 38 struct gpio_desc *gpiod; 39 40 unsigned short *code; 41 42 struct timer_list release_timer; 43 unsigned int release_delay; /* in msecs, for IRQ-only buttons */ 44 45 struct delayed_work work; 46 unsigned int software_debounce; /* in msecs, for GPIO-driven buttons */ 47 48 unsigned int irq; 49 unsigned int wakeup_trigger_type; 50 spinlock_t lock; 51 bool disabled; 52 bool key_pressed; 53 bool suspended; 54 }; 55 56 struct gpio_keys_drvdata { 57 const struct gpio_keys_platform_data *pdata; 58 struct input_dev *input; 59 struct mutex disable_lock; 60 unsigned short *keymap; 61 struct gpio_button_data data[0]; 62 }; 63 64 /* 65 * SYSFS interface for enabling/disabling keys and switches: 66 * 67 * There are 4 attributes under /sys/devices/platform/gpio-keys/ 68 * keys [ro] - bitmap of keys (EV_KEY) which can be 69 * disabled 70 * switches [ro] - bitmap of switches (EV_SW) which can be 71 * disabled 72 * disabled_keys [rw] - bitmap of keys currently disabled 73 * disabled_switches [rw] - bitmap of switches currently disabled 74 * 75 * Userland can change these values and hence disable event generation 76 * for each key (or switch). Disabling a key means its interrupt line 77 * is disabled. 78 * 79 * For example, if we have following switches set up as gpio-keys: 80 * SW_DOCK = 5 81 * SW_CAMERA_LENS_COVER = 9 82 * SW_KEYPAD_SLIDE = 10 83 * SW_FRONT_PROXIMITY = 11 84 * This is read from switches: 85 * 11-9,5 86 * Next we want to disable proximity (11) and dock (5), we write: 87 * 11,5 88 * to file disabled_switches. Now proximity and dock IRQs are disabled. 89 * This can be verified by reading the file disabled_switches: 90 * 11,5 91 * If we now want to enable proximity (11) switch we write: 92 * 5 93 * to disabled_switches. 94 * 95 * We can disable only those keys which don't allow sharing the irq. 96 */ 97 98 /** 99 * get_n_events_by_type() - returns maximum number of events per @type 100 * @type: type of button (%EV_KEY, %EV_SW) 101 * 102 * Return value of this function can be used to allocate bitmap 103 * large enough to hold all bits for given type. 104 */ 105 static int get_n_events_by_type(int type) 106 { 107 BUG_ON(type != EV_SW && type != EV_KEY); 108 109 return (type == EV_KEY) ? KEY_CNT : SW_CNT; 110 } 111 112 /** 113 * get_bm_events_by_type() - returns bitmap of supported events per @type 114 * @input: input device from which bitmap is retrieved 115 * @type: type of button (%EV_KEY, %EV_SW) 116 * 117 * Return value of this function can be used to allocate bitmap 118 * large enough to hold all bits for given type. 119 */ 120 static const unsigned long *get_bm_events_by_type(struct input_dev *dev, 121 int type) 122 { 123 BUG_ON(type != EV_SW && type != EV_KEY); 124 125 return (type == EV_KEY) ? dev->keybit : dev->swbit; 126 } 127 128 /** 129 * gpio_keys_disable_button() - disables given GPIO button 130 * @bdata: button data for button to be disabled 131 * 132 * Disables button pointed by @bdata. This is done by masking 133 * IRQ line. After this function is called, button won't generate 134 * input events anymore. Note that one can only disable buttons 135 * that don't share IRQs. 136 * 137 * Make sure that @bdata->disable_lock is locked when entering 138 * this function to avoid races when concurrent threads are 139 * disabling buttons at the same time. 140 */ 141 static void gpio_keys_disable_button(struct gpio_button_data *bdata) 142 { 143 if (!bdata->disabled) { 144 /* 145 * Disable IRQ and associated timer/work structure. 146 */ 147 disable_irq(bdata->irq); 148 149 if (bdata->gpiod) 150 cancel_delayed_work_sync(&bdata->work); 151 else 152 del_timer_sync(&bdata->release_timer); 153 154 bdata->disabled = true; 155 } 156 } 157 158 /** 159 * gpio_keys_enable_button() - enables given GPIO button 160 * @bdata: button data for button to be disabled 161 * 162 * Enables given button pointed by @bdata. 163 * 164 * Make sure that @bdata->disable_lock is locked when entering 165 * this function to avoid races with concurrent threads trying 166 * to enable the same button at the same time. 167 */ 168 static void gpio_keys_enable_button(struct gpio_button_data *bdata) 169 { 170 if (bdata->disabled) { 171 enable_irq(bdata->irq); 172 bdata->disabled = false; 173 } 174 } 175 176 /** 177 * gpio_keys_attr_show_helper() - fill in stringified bitmap of buttons 178 * @ddata: pointer to drvdata 179 * @buf: buffer where stringified bitmap is written 180 * @type: button type (%EV_KEY, %EV_SW) 181 * @only_disabled: does caller want only those buttons that are 182 * currently disabled or all buttons that can be 183 * disabled 184 * 185 * This function writes buttons that can be disabled to @buf. If 186 * @only_disabled is true, then @buf contains only those buttons 187 * that are currently disabled. Returns 0 on success or negative 188 * errno on failure. 189 */ 190 static ssize_t gpio_keys_attr_show_helper(struct gpio_keys_drvdata *ddata, 191 char *buf, unsigned int type, 192 bool only_disabled) 193 { 194 int n_events = get_n_events_by_type(type); 195 unsigned long *bits; 196 ssize_t ret; 197 int i; 198 199 bits = kcalloc(BITS_TO_LONGS(n_events), sizeof(*bits), GFP_KERNEL); 200 if (!bits) 201 return -ENOMEM; 202 203 for (i = 0; i < ddata->pdata->nbuttons; i++) { 204 struct gpio_button_data *bdata = &ddata->data[i]; 205 206 if (bdata->button->type != type) 207 continue; 208 209 if (only_disabled && !bdata->disabled) 210 continue; 211 212 __set_bit(*bdata->code, bits); 213 } 214 215 ret = scnprintf(buf, PAGE_SIZE - 1, "%*pbl", n_events, bits); 216 buf[ret++] = '\n'; 217 buf[ret] = '\0'; 218 219 kfree(bits); 220 221 return ret; 222 } 223 224 /** 225 * gpio_keys_attr_store_helper() - enable/disable buttons based on given bitmap 226 * @ddata: pointer to drvdata 227 * @buf: buffer from userspace that contains stringified bitmap 228 * @type: button type (%EV_KEY, %EV_SW) 229 * 230 * This function parses stringified bitmap from @buf and disables/enables 231 * GPIO buttons accordingly. Returns 0 on success and negative error 232 * on failure. 233 */ 234 static ssize_t gpio_keys_attr_store_helper(struct gpio_keys_drvdata *ddata, 235 const char *buf, unsigned int type) 236 { 237 int n_events = get_n_events_by_type(type); 238 const unsigned long *bitmap = get_bm_events_by_type(ddata->input, type); 239 unsigned long *bits; 240 ssize_t error; 241 int i; 242 243 bits = kcalloc(BITS_TO_LONGS(n_events), sizeof(*bits), GFP_KERNEL); 244 if (!bits) 245 return -ENOMEM; 246 247 error = bitmap_parselist(buf, bits, n_events); 248 if (error) 249 goto out; 250 251 /* First validate */ 252 if (!bitmap_subset(bits, bitmap, n_events)) { 253 error = -EINVAL; 254 goto out; 255 } 256 257 for (i = 0; i < ddata->pdata->nbuttons; i++) { 258 struct gpio_button_data *bdata = &ddata->data[i]; 259 260 if (bdata->button->type != type) 261 continue; 262 263 if (test_bit(*bdata->code, bits) && 264 !bdata->button->can_disable) { 265 error = -EINVAL; 266 goto out; 267 } 268 } 269 270 mutex_lock(&ddata->disable_lock); 271 272 for (i = 0; i < ddata->pdata->nbuttons; i++) { 273 struct gpio_button_data *bdata = &ddata->data[i]; 274 275 if (bdata->button->type != type) 276 continue; 277 278 if (test_bit(*bdata->code, bits)) 279 gpio_keys_disable_button(bdata); 280 else 281 gpio_keys_enable_button(bdata); 282 } 283 284 mutex_unlock(&ddata->disable_lock); 285 286 out: 287 kfree(bits); 288 return error; 289 } 290 291 #define ATTR_SHOW_FN(name, type, only_disabled) \ 292 static ssize_t gpio_keys_show_##name(struct device *dev, \ 293 struct device_attribute *attr, \ 294 char *buf) \ 295 { \ 296 struct platform_device *pdev = to_platform_device(dev); \ 297 struct gpio_keys_drvdata *ddata = platform_get_drvdata(pdev); \ 298 \ 299 return gpio_keys_attr_show_helper(ddata, buf, \ 300 type, only_disabled); \ 301 } 302 303 ATTR_SHOW_FN(keys, EV_KEY, false); 304 ATTR_SHOW_FN(switches, EV_SW, false); 305 ATTR_SHOW_FN(disabled_keys, EV_KEY, true); 306 ATTR_SHOW_FN(disabled_switches, EV_SW, true); 307 308 /* 309 * ATTRIBUTES: 310 * 311 * /sys/devices/platform/gpio-keys/keys [ro] 312 * /sys/devices/platform/gpio-keys/switches [ro] 313 */ 314 static DEVICE_ATTR(keys, S_IRUGO, gpio_keys_show_keys, NULL); 315 static DEVICE_ATTR(switches, S_IRUGO, gpio_keys_show_switches, NULL); 316 317 #define ATTR_STORE_FN(name, type) \ 318 static ssize_t gpio_keys_store_##name(struct device *dev, \ 319 struct device_attribute *attr, \ 320 const char *buf, \ 321 size_t count) \ 322 { \ 323 struct platform_device *pdev = to_platform_device(dev); \ 324 struct gpio_keys_drvdata *ddata = platform_get_drvdata(pdev); \ 325 ssize_t error; \ 326 \ 327 error = gpio_keys_attr_store_helper(ddata, buf, type); \ 328 if (error) \ 329 return error; \ 330 \ 331 return count; \ 332 } 333 334 ATTR_STORE_FN(disabled_keys, EV_KEY); 335 ATTR_STORE_FN(disabled_switches, EV_SW); 336 337 /* 338 * ATTRIBUTES: 339 * 340 * /sys/devices/platform/gpio-keys/disabled_keys [rw] 341 * /sys/devices/platform/gpio-keys/disables_switches [rw] 342 */ 343 static DEVICE_ATTR(disabled_keys, S_IWUSR | S_IRUGO, 344 gpio_keys_show_disabled_keys, 345 gpio_keys_store_disabled_keys); 346 static DEVICE_ATTR(disabled_switches, S_IWUSR | S_IRUGO, 347 gpio_keys_show_disabled_switches, 348 gpio_keys_store_disabled_switches); 349 350 static struct attribute *gpio_keys_attrs[] = { 351 &dev_attr_keys.attr, 352 &dev_attr_switches.attr, 353 &dev_attr_disabled_keys.attr, 354 &dev_attr_disabled_switches.attr, 355 NULL, 356 }; 357 358 static const struct attribute_group gpio_keys_attr_group = { 359 .attrs = gpio_keys_attrs, 360 }; 361 362 static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata) 363 { 364 const struct gpio_keys_button *button = bdata->button; 365 struct input_dev *input = bdata->input; 366 unsigned int type = button->type ?: EV_KEY; 367 int state; 368 369 state = gpiod_get_value_cansleep(bdata->gpiod); 370 if (state < 0) { 371 dev_err(input->dev.parent, 372 "failed to get gpio state: %d\n", state); 373 return; 374 } 375 376 if (type == EV_ABS) { 377 if (state) 378 input_event(input, type, button->code, button->value); 379 } else { 380 input_event(input, type, *bdata->code, state); 381 } 382 input_sync(input); 383 } 384 385 static void gpio_keys_gpio_work_func(struct work_struct *work) 386 { 387 struct gpio_button_data *bdata = 388 container_of(work, struct gpio_button_data, work.work); 389 390 gpio_keys_gpio_report_event(bdata); 391 392 if (bdata->button->wakeup) 393 pm_relax(bdata->input->dev.parent); 394 } 395 396 static irqreturn_t gpio_keys_gpio_isr(int irq, void *dev_id) 397 { 398 struct gpio_button_data *bdata = dev_id; 399 400 BUG_ON(irq != bdata->irq); 401 402 if (bdata->button->wakeup) { 403 const struct gpio_keys_button *button = bdata->button; 404 405 pm_stay_awake(bdata->input->dev.parent); 406 if (bdata->suspended && 407 (button->type == 0 || button->type == EV_KEY)) { 408 /* 409 * Simulate wakeup key press in case the key has 410 * already released by the time we got interrupt 411 * handler to run. 412 */ 413 input_report_key(bdata->input, button->code, 1); 414 } 415 } 416 417 mod_delayed_work(system_wq, 418 &bdata->work, 419 msecs_to_jiffies(bdata->software_debounce)); 420 421 return IRQ_HANDLED; 422 } 423 424 static void gpio_keys_irq_timer(struct timer_list *t) 425 { 426 struct gpio_button_data *bdata = from_timer(bdata, t, release_timer); 427 struct input_dev *input = bdata->input; 428 unsigned long flags; 429 430 spin_lock_irqsave(&bdata->lock, flags); 431 if (bdata->key_pressed) { 432 input_event(input, EV_KEY, *bdata->code, 0); 433 input_sync(input); 434 bdata->key_pressed = false; 435 } 436 spin_unlock_irqrestore(&bdata->lock, flags); 437 } 438 439 static irqreturn_t gpio_keys_irq_isr(int irq, void *dev_id) 440 { 441 struct gpio_button_data *bdata = dev_id; 442 struct input_dev *input = bdata->input; 443 unsigned long flags; 444 445 BUG_ON(irq != bdata->irq); 446 447 spin_lock_irqsave(&bdata->lock, flags); 448 449 if (!bdata->key_pressed) { 450 if (bdata->button->wakeup) 451 pm_wakeup_event(bdata->input->dev.parent, 0); 452 453 input_event(input, EV_KEY, *bdata->code, 1); 454 input_sync(input); 455 456 if (!bdata->release_delay) { 457 input_event(input, EV_KEY, *bdata->code, 0); 458 input_sync(input); 459 goto out; 460 } 461 462 bdata->key_pressed = true; 463 } 464 465 if (bdata->release_delay) 466 mod_timer(&bdata->release_timer, 467 jiffies + msecs_to_jiffies(bdata->release_delay)); 468 out: 469 spin_unlock_irqrestore(&bdata->lock, flags); 470 return IRQ_HANDLED; 471 } 472 473 static void gpio_keys_quiesce_key(void *data) 474 { 475 struct gpio_button_data *bdata = data; 476 477 if (bdata->gpiod) 478 cancel_delayed_work_sync(&bdata->work); 479 else 480 del_timer_sync(&bdata->release_timer); 481 } 482 483 static int gpio_keys_setup_key(struct platform_device *pdev, 484 struct input_dev *input, 485 struct gpio_keys_drvdata *ddata, 486 const struct gpio_keys_button *button, 487 int idx, 488 struct fwnode_handle *child) 489 { 490 const char *desc = button->desc ? button->desc : "gpio_keys"; 491 struct device *dev = &pdev->dev; 492 struct gpio_button_data *bdata = &ddata->data[idx]; 493 irq_handler_t isr; 494 unsigned long irqflags; 495 int irq; 496 int error; 497 498 bdata->input = input; 499 bdata->button = button; 500 spin_lock_init(&bdata->lock); 501 502 if (child) { 503 bdata->gpiod = devm_fwnode_get_gpiod_from_child(dev, NULL, 504 child, 505 GPIOD_IN, 506 desc); 507 if (IS_ERR(bdata->gpiod)) { 508 error = PTR_ERR(bdata->gpiod); 509 if (error == -ENOENT) { 510 /* 511 * GPIO is optional, we may be dealing with 512 * purely interrupt-driven setup. 513 */ 514 bdata->gpiod = NULL; 515 } else { 516 if (error != -EPROBE_DEFER) 517 dev_err(dev, "failed to get gpio: %d\n", 518 error); 519 return error; 520 } 521 } 522 } else if (gpio_is_valid(button->gpio)) { 523 /* 524 * Legacy GPIO number, so request the GPIO here and 525 * convert it to descriptor. 526 */ 527 unsigned flags = GPIOF_IN; 528 529 if (button->active_low) 530 flags |= GPIOF_ACTIVE_LOW; 531 532 error = devm_gpio_request_one(dev, button->gpio, flags, desc); 533 if (error < 0) { 534 dev_err(dev, "Failed to request GPIO %d, error %d\n", 535 button->gpio, error); 536 return error; 537 } 538 539 bdata->gpiod = gpio_to_desc(button->gpio); 540 if (!bdata->gpiod) 541 return -EINVAL; 542 } 543 544 if (bdata->gpiod) { 545 bool active_low = gpiod_is_active_low(bdata->gpiod); 546 547 if (button->debounce_interval) { 548 error = gpiod_set_debounce(bdata->gpiod, 549 button->debounce_interval * 1000); 550 /* use timer if gpiolib doesn't provide debounce */ 551 if (error < 0) 552 bdata->software_debounce = 553 button->debounce_interval; 554 } 555 556 if (button->irq) { 557 bdata->irq = button->irq; 558 } else { 559 irq = gpiod_to_irq(bdata->gpiod); 560 if (irq < 0) { 561 error = irq; 562 dev_err(dev, 563 "Unable to get irq number for GPIO %d, error %d\n", 564 button->gpio, error); 565 return error; 566 } 567 bdata->irq = irq; 568 } 569 570 INIT_DELAYED_WORK(&bdata->work, gpio_keys_gpio_work_func); 571 572 isr = gpio_keys_gpio_isr; 573 irqflags = IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING; 574 575 switch (button->wakeup_event_action) { 576 case EV_ACT_ASSERTED: 577 bdata->wakeup_trigger_type = active_low ? 578 IRQ_TYPE_EDGE_FALLING : IRQ_TYPE_EDGE_RISING; 579 break; 580 case EV_ACT_DEASSERTED: 581 bdata->wakeup_trigger_type = active_low ? 582 IRQ_TYPE_EDGE_RISING : IRQ_TYPE_EDGE_FALLING; 583 break; 584 case EV_ACT_ANY: 585 /* fall through */ 586 default: 587 /* 588 * For other cases, we are OK letting suspend/resume 589 * not reconfigure the trigger type. 590 */ 591 break; 592 } 593 } else { 594 if (!button->irq) { 595 dev_err(dev, "Found button without gpio or irq\n"); 596 return -EINVAL; 597 } 598 599 bdata->irq = button->irq; 600 601 if (button->type && button->type != EV_KEY) { 602 dev_err(dev, "Only EV_KEY allowed for IRQ buttons.\n"); 603 return -EINVAL; 604 } 605 606 bdata->release_delay = button->debounce_interval; 607 timer_setup(&bdata->release_timer, gpio_keys_irq_timer, 0); 608 609 isr = gpio_keys_irq_isr; 610 irqflags = 0; 611 612 /* 613 * For IRQ buttons, there is no interrupt for release. 614 * So we don't need to reconfigure the trigger type for wakeup. 615 */ 616 } 617 618 bdata->code = &ddata->keymap[idx]; 619 *bdata->code = button->code; 620 input_set_capability(input, button->type ?: EV_KEY, *bdata->code); 621 622 /* 623 * Install custom action to cancel release timer and 624 * workqueue item. 625 */ 626 error = devm_add_action(dev, gpio_keys_quiesce_key, bdata); 627 if (error) { 628 dev_err(dev, "failed to register quiesce action, error: %d\n", 629 error); 630 return error; 631 } 632 633 /* 634 * If platform has specified that the button can be disabled, 635 * we don't want it to share the interrupt line. 636 */ 637 if (!button->can_disable) 638 irqflags |= IRQF_SHARED; 639 640 error = devm_request_any_context_irq(dev, bdata->irq, isr, irqflags, 641 desc, bdata); 642 if (error < 0) { 643 dev_err(dev, "Unable to claim irq %d; error %d\n", 644 bdata->irq, error); 645 return error; 646 } 647 648 return 0; 649 } 650 651 static void gpio_keys_report_state(struct gpio_keys_drvdata *ddata) 652 { 653 struct input_dev *input = ddata->input; 654 int i; 655 656 for (i = 0; i < ddata->pdata->nbuttons; i++) { 657 struct gpio_button_data *bdata = &ddata->data[i]; 658 if (bdata->gpiod) 659 gpio_keys_gpio_report_event(bdata); 660 } 661 input_sync(input); 662 } 663 664 static int gpio_keys_open(struct input_dev *input) 665 { 666 struct gpio_keys_drvdata *ddata = input_get_drvdata(input); 667 const struct gpio_keys_platform_data *pdata = ddata->pdata; 668 int error; 669 670 if (pdata->enable) { 671 error = pdata->enable(input->dev.parent); 672 if (error) 673 return error; 674 } 675 676 /* Report current state of buttons that are connected to GPIOs */ 677 gpio_keys_report_state(ddata); 678 679 return 0; 680 } 681 682 static void gpio_keys_close(struct input_dev *input) 683 { 684 struct gpio_keys_drvdata *ddata = input_get_drvdata(input); 685 const struct gpio_keys_platform_data *pdata = ddata->pdata; 686 687 if (pdata->disable) 688 pdata->disable(input->dev.parent); 689 } 690 691 /* 692 * Handlers for alternative sources of platform_data 693 */ 694 695 /* 696 * Translate properties into platform_data 697 */ 698 static struct gpio_keys_platform_data * 699 gpio_keys_get_devtree_pdata(struct device *dev) 700 { 701 struct gpio_keys_platform_data *pdata; 702 struct gpio_keys_button *button; 703 struct fwnode_handle *child; 704 int nbuttons; 705 706 nbuttons = device_get_child_node_count(dev); 707 if (nbuttons == 0) 708 return ERR_PTR(-ENODEV); 709 710 pdata = devm_kzalloc(dev, 711 sizeof(*pdata) + nbuttons * sizeof(*button), 712 GFP_KERNEL); 713 if (!pdata) 714 return ERR_PTR(-ENOMEM); 715 716 button = (struct gpio_keys_button *)(pdata + 1); 717 718 pdata->buttons = button; 719 pdata->nbuttons = nbuttons; 720 721 pdata->rep = device_property_read_bool(dev, "autorepeat"); 722 723 device_property_read_string(dev, "label", &pdata->name); 724 725 device_for_each_child_node(dev, child) { 726 if (is_of_node(child)) 727 button->irq = 728 irq_of_parse_and_map(to_of_node(child), 0); 729 730 if (fwnode_property_read_u32(child, "linux,code", 731 &button->code)) { 732 dev_err(dev, "Button without keycode\n"); 733 fwnode_handle_put(child); 734 return ERR_PTR(-EINVAL); 735 } 736 737 fwnode_property_read_string(child, "label", &button->desc); 738 739 if (fwnode_property_read_u32(child, "linux,input-type", 740 &button->type)) 741 button->type = EV_KEY; 742 743 button->wakeup = 744 fwnode_property_read_bool(child, "wakeup-source") || 745 /* legacy name */ 746 fwnode_property_read_bool(child, "gpio-key,wakeup"); 747 748 fwnode_property_read_u32(child, "wakeup-event-action", 749 &button->wakeup_event_action); 750 751 button->can_disable = 752 fwnode_property_read_bool(child, "linux,can-disable"); 753 754 if (fwnode_property_read_u32(child, "debounce-interval", 755 &button->debounce_interval)) 756 button->debounce_interval = 5; 757 758 button++; 759 } 760 761 return pdata; 762 } 763 764 static const struct of_device_id gpio_keys_of_match[] = { 765 { .compatible = "gpio-keys", }, 766 { }, 767 }; 768 MODULE_DEVICE_TABLE(of, gpio_keys_of_match); 769 770 static int gpio_keys_probe(struct platform_device *pdev) 771 { 772 struct device *dev = &pdev->dev; 773 const struct gpio_keys_platform_data *pdata = dev_get_platdata(dev); 774 struct fwnode_handle *child = NULL; 775 struct gpio_keys_drvdata *ddata; 776 struct input_dev *input; 777 size_t size; 778 int i, error; 779 int wakeup = 0; 780 781 if (!pdata) { 782 pdata = gpio_keys_get_devtree_pdata(dev); 783 if (IS_ERR(pdata)) 784 return PTR_ERR(pdata); 785 } 786 787 size = sizeof(struct gpio_keys_drvdata) + 788 pdata->nbuttons * sizeof(struct gpio_button_data); 789 ddata = devm_kzalloc(dev, size, GFP_KERNEL); 790 if (!ddata) { 791 dev_err(dev, "failed to allocate state\n"); 792 return -ENOMEM; 793 } 794 795 ddata->keymap = devm_kcalloc(dev, 796 pdata->nbuttons, sizeof(ddata->keymap[0]), 797 GFP_KERNEL); 798 if (!ddata->keymap) 799 return -ENOMEM; 800 801 input = devm_input_allocate_device(dev); 802 if (!input) { 803 dev_err(dev, "failed to allocate input device\n"); 804 return -ENOMEM; 805 } 806 807 ddata->pdata = pdata; 808 ddata->input = input; 809 mutex_init(&ddata->disable_lock); 810 811 platform_set_drvdata(pdev, ddata); 812 input_set_drvdata(input, ddata); 813 814 input->name = pdata->name ? : pdev->name; 815 input->phys = "gpio-keys/input0"; 816 input->dev.parent = dev; 817 input->open = gpio_keys_open; 818 input->close = gpio_keys_close; 819 820 input->id.bustype = BUS_HOST; 821 input->id.vendor = 0x0001; 822 input->id.product = 0x0001; 823 input->id.version = 0x0100; 824 825 input->keycode = ddata->keymap; 826 input->keycodesize = sizeof(ddata->keymap[0]); 827 input->keycodemax = pdata->nbuttons; 828 829 /* Enable auto repeat feature of Linux input subsystem */ 830 if (pdata->rep) 831 __set_bit(EV_REP, input->evbit); 832 833 for (i = 0; i < pdata->nbuttons; i++) { 834 const struct gpio_keys_button *button = &pdata->buttons[i]; 835 836 if (!dev_get_platdata(dev)) { 837 child = device_get_next_child_node(dev, child); 838 if (!child) { 839 dev_err(dev, 840 "missing child device node for entry %d\n", 841 i); 842 return -EINVAL; 843 } 844 } 845 846 error = gpio_keys_setup_key(pdev, input, ddata, 847 button, i, child); 848 if (error) { 849 fwnode_handle_put(child); 850 return error; 851 } 852 853 if (button->wakeup) 854 wakeup = 1; 855 } 856 857 fwnode_handle_put(child); 858 859 error = devm_device_add_group(dev, &gpio_keys_attr_group); 860 if (error) { 861 dev_err(dev, "Unable to export keys/switches, error: %d\n", 862 error); 863 return error; 864 } 865 866 error = input_register_device(input); 867 if (error) { 868 dev_err(dev, "Unable to register input device, error: %d\n", 869 error); 870 return error; 871 } 872 873 device_init_wakeup(dev, wakeup); 874 875 return 0; 876 } 877 878 static int __maybe_unused 879 gpio_keys_button_enable_wakeup(struct gpio_button_data *bdata) 880 { 881 int error; 882 883 error = enable_irq_wake(bdata->irq); 884 if (error) { 885 dev_err(bdata->input->dev.parent, 886 "failed to configure IRQ %d as wakeup source: %d\n", 887 bdata->irq, error); 888 return error; 889 } 890 891 if (bdata->wakeup_trigger_type) { 892 error = irq_set_irq_type(bdata->irq, 893 bdata->wakeup_trigger_type); 894 if (error) { 895 dev_err(bdata->input->dev.parent, 896 "failed to set wakeup trigger %08x for IRQ %d: %d\n", 897 bdata->wakeup_trigger_type, bdata->irq, error); 898 disable_irq_wake(bdata->irq); 899 return error; 900 } 901 } 902 903 return 0; 904 } 905 906 static void __maybe_unused 907 gpio_keys_button_disable_wakeup(struct gpio_button_data *bdata) 908 { 909 int error; 910 911 /* 912 * The trigger type is always both edges for gpio-based keys and we do 913 * not support changing wakeup trigger for interrupt-based keys. 914 */ 915 if (bdata->wakeup_trigger_type) { 916 error = irq_set_irq_type(bdata->irq, IRQ_TYPE_EDGE_BOTH); 917 if (error) 918 dev_warn(bdata->input->dev.parent, 919 "failed to restore interrupt trigger for IRQ %d: %d\n", 920 bdata->irq, error); 921 } 922 923 error = disable_irq_wake(bdata->irq); 924 if (error) 925 dev_warn(bdata->input->dev.parent, 926 "failed to disable IRQ %d as wake source: %d\n", 927 bdata->irq, error); 928 } 929 930 static int __maybe_unused 931 gpio_keys_enable_wakeup(struct gpio_keys_drvdata *ddata) 932 { 933 struct gpio_button_data *bdata; 934 int error; 935 int i; 936 937 for (i = 0; i < ddata->pdata->nbuttons; i++) { 938 bdata = &ddata->data[i]; 939 if (bdata->button->wakeup) { 940 error = gpio_keys_button_enable_wakeup(bdata); 941 if (error) 942 goto err_out; 943 } 944 bdata->suspended = true; 945 } 946 947 return 0; 948 949 err_out: 950 while (i--) { 951 bdata = &ddata->data[i]; 952 if (bdata->button->wakeup) 953 gpio_keys_button_disable_wakeup(bdata); 954 bdata->suspended = false; 955 } 956 957 return error; 958 } 959 960 static void __maybe_unused 961 gpio_keys_disable_wakeup(struct gpio_keys_drvdata *ddata) 962 { 963 struct gpio_button_data *bdata; 964 int i; 965 966 for (i = 0; i < ddata->pdata->nbuttons; i++) { 967 bdata = &ddata->data[i]; 968 bdata->suspended = false; 969 if (irqd_is_wakeup_set(irq_get_irq_data(bdata->irq))) 970 gpio_keys_button_disable_wakeup(bdata); 971 } 972 } 973 974 static int __maybe_unused gpio_keys_suspend(struct device *dev) 975 { 976 struct gpio_keys_drvdata *ddata = dev_get_drvdata(dev); 977 struct input_dev *input = ddata->input; 978 int error; 979 980 if (device_may_wakeup(dev)) { 981 error = gpio_keys_enable_wakeup(ddata); 982 if (error) 983 return error; 984 } else { 985 mutex_lock(&input->mutex); 986 if (input->users) 987 gpio_keys_close(input); 988 mutex_unlock(&input->mutex); 989 } 990 991 return 0; 992 } 993 994 static int __maybe_unused gpio_keys_resume(struct device *dev) 995 { 996 struct gpio_keys_drvdata *ddata = dev_get_drvdata(dev); 997 struct input_dev *input = ddata->input; 998 int error = 0; 999 1000 if (device_may_wakeup(dev)) { 1001 gpio_keys_disable_wakeup(ddata); 1002 } else { 1003 mutex_lock(&input->mutex); 1004 if (input->users) 1005 error = gpio_keys_open(input); 1006 mutex_unlock(&input->mutex); 1007 } 1008 1009 if (error) 1010 return error; 1011 1012 gpio_keys_report_state(ddata); 1013 return 0; 1014 } 1015 1016 static SIMPLE_DEV_PM_OPS(gpio_keys_pm_ops, gpio_keys_suspend, gpio_keys_resume); 1017 1018 static struct platform_driver gpio_keys_device_driver = { 1019 .probe = gpio_keys_probe, 1020 .driver = { 1021 .name = "gpio-keys", 1022 .pm = &gpio_keys_pm_ops, 1023 .of_match_table = gpio_keys_of_match, 1024 } 1025 }; 1026 1027 static int __init gpio_keys_init(void) 1028 { 1029 return platform_driver_register(&gpio_keys_device_driver); 1030 } 1031 1032 static void __exit gpio_keys_exit(void) 1033 { 1034 platform_driver_unregister(&gpio_keys_device_driver); 1035 } 1036 1037 late_initcall(gpio_keys_init); 1038 module_exit(gpio_keys_exit); 1039 1040 MODULE_LICENSE("GPL"); 1041 MODULE_AUTHOR("Phil Blundell <pb@handhelds.org>"); 1042 MODULE_DESCRIPTION("Keyboard driver for GPIOs"); 1043 MODULE_ALIAS("platform:gpio-keys"); 1044