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