Ignore:
Timestamp:
Apr 14, 2017, 9:41:36 PM (6 weeks ago)
Author:
brainslayer
Message:

kernel update

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/linux/universal/linux-4.9/drivers/input/keyboard/gpio_keys.c

    r31574 r31859  
    2727#include <linux/workqueue.h>
    2828#include <linux/gpio.h>
     29#include <linux/gpio/consumer.h>
    2930#include <linux/of.h>
    3031#include <linux/of_platform.h>
     
    3637        const struct gpio_keys_button *button;
    3738        struct input_dev *input;
     39        struct gpio_desc *gpiod;
    3840
    3941        struct timer_list release_timer;
     
    141143                disable_irq(bdata->irq);
    142144
    143                 if (gpio_is_valid(bdata->button->gpio))
     145                if (bdata->gpiod)
    144146                        cancel_delayed_work_sync(&bdata->work);
    145147                else
     
    359361        struct input_dev *input = bdata->input;
    360362        unsigned int type = button->type ?: EV_KEY;
    361         int state = gpio_get_value_cansleep(button->gpio);
    362 
     363        int state;
     364
     365        state = gpiod_get_value_cansleep(bdata->gpiod);
    363366        if (state < 0) {
    364                 dev_err(input->dev.parent, "failed to get gpio state\n");
     367                dev_err(input->dev.parent,
     368                        "failed to get gpio state: %d\n", state);
    365369                return;
    366370        }
    367371
    368         state = (state ? 1 : 0) ^ button->active_low;
    369372        if (type == EV_ABS) {
    370373                if (state)
    371374                        input_event(input, type, button->code, button->value);
    372375        } else {
    373                 input_event(input, type, button->code, !!state);
     376                input_event(input, type, button->code, state);
    374377        }
    375378        input_sync(input);
     
    457460        struct gpio_button_data *bdata = data;
    458461
    459         if (gpio_is_valid(bdata->button->gpio))
     462        if (bdata->gpiod)
    460463                cancel_delayed_work_sync(&bdata->work);
    461464        else
     
    479482        spin_lock_init(&bdata->lock);
    480483
     484        /*
     485         * Legacy GPIO number, so request the GPIO here and
     486         * convert it to descriptor.
     487         */
    481488        if (gpio_is_valid(button->gpio)) {
    482 
    483                 error = devm_gpio_request_one(&pdev->dev, button->gpio,
    484                                               GPIOF_IN, desc);
     489                unsigned flags = GPIOF_IN;
     490
     491                if (button->active_low)
     492                        flags |= GPIOF_ACTIVE_LOW;
     493
     494                error = devm_gpio_request_one(&pdev->dev, button->gpio, flags,
     495                                              desc);
    485496                if (error < 0) {
    486497                        dev_err(dev, "Failed to request GPIO %d, error %d\n",
     
    489500                }
    490501
     502                bdata->gpiod = gpio_to_desc(button->gpio);
     503                if (!bdata->gpiod)
     504                        return -EINVAL;
     505
    491506                if (button->debounce_interval) {
    492                         error = gpio_set_debounce(button->gpio,
     507                        error = gpiod_set_debounce(bdata->gpiod,
    493508                                        button->debounce_interval * 1000);
    494509                        /* use timer if gpiolib doesn't provide debounce */
     
    501516                        bdata->irq = button->irq;
    502517                } else {
    503                         irq = gpio_to_irq(button->gpio);
     518                        irq = gpiod_to_irq(bdata->gpiod);
    504519                        if (irq < 0) {
    505520                                error = irq;
     
    576591        for (i = 0; i < ddata->pdata->nbuttons; i++) {
    577592                struct gpio_button_data *bdata = &ddata->data[i];
    578                 if (gpio_is_valid(bdata->button->gpio))
     593                if (bdata->gpiod)
    579594                        gpio_keys_gpio_report_event(bdata);
    580595        }
Note: See TracChangeset for help on using the changeset viewer.