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