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