Linux Audio

Check our new training course

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