Linux Audio

Check our new training course

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