lkml.org 
[lkml]   [2020]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 069/477] gpio: dwapb: Call acpi_gpiochip_free_interrupts() on GPIO chip de-registration
    Date
    From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

    [ Upstream commit 494a94e38dcf62543a32a4424d646ff80b4b28bd ]

    Add missed acpi_gpiochip_free_interrupts() call when unregistering ports.

    While at it, drop extra check to call acpi_gpiochip_request_interrupts().
    There is no need to have an additional check to call
    acpi_gpiochip_request_interrupts(). Even without any interrupts available
    the registered ACPI Event handlers can be useful for debugging purposes.

    Fixes: e6cb3486f5a1 ("gpio: dwapb: add gpio-signaled acpi event support")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Tested-by: Serge Semin <fancer.lancer@gmail.com>
    Acked-by: Serge Semin <fancer.lancer@gmail.com>
    Link: https://lore.kernel.org/r/20200519131233.59032-1-andriy.shevchenko@linux.intel.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpio/gpio-dwapb.c | 25 ++++++++++++++++---------
    1 file changed, 16 insertions(+), 9 deletions(-)

    diff --git a/drivers/gpio/gpio-dwapb.c b/drivers/gpio/gpio-dwapb.c
    index 92e127e748134..02cf4c43a4c4c 100644
    --- a/drivers/gpio/gpio-dwapb.c
    +++ b/drivers/gpio/gpio-dwapb.c
    @@ -533,26 +533,33 @@ static int dwapb_gpio_add_port(struct dwapb_gpio *gpio,
    dwapb_configure_irqs(gpio, port, pp);

    err = gpiochip_add_data(&port->gc, port);
    - if (err)
    + if (err) {
    dev_err(gpio->dev, "failed to register gpiochip for port%d\n",
    port->idx);
    - else
    - port->is_registered = true;
    + return err;
    + }

    /* Add GPIO-signaled ACPI event support */
    - if (pp->has_irq)
    - acpi_gpiochip_request_interrupts(&port->gc);
    + acpi_gpiochip_request_interrupts(&port->gc);

    - return err;
    + port->is_registered = true;
    +
    + return 0;
    }

    static void dwapb_gpio_unregister(struct dwapb_gpio *gpio)
    {
    unsigned int m;

    - for (m = 0; m < gpio->nr_ports; ++m)
    - if (gpio->ports[m].is_registered)
    - gpiochip_remove(&gpio->ports[m].gc);
    + for (m = 0; m < gpio->nr_ports; ++m) {
    + struct dwapb_gpio_port *port = &gpio->ports[m];
    +
    + if (!port->is_registered)
    + continue;
    +
    + acpi_gpiochip_free_interrupts(&port->gc);
    + gpiochip_remove(&port->gc);
    + }
    }

    static struct dwapb_platform_data *
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-23 23:43    [W:4.288 / U:0.636 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site