cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

gpio_keys.c (26879B)


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