diff options
author | Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 2019-10-09 17:34:44 +0300 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2019-10-15 02:18:46 +0300 |
commit | 9411e3aaa6342eb730daa55cf3377463a37d2aa7 (patch) | |
tree | 0fd5450050bc17c4b1282918cf378df6a8a1679b /include/linux/gpio | |
parent | 6658f87f219427ee776c498e07c878eb5cad1be2 (diff) | |
download | linux-9411e3aaa6342eb730daa55cf3377463a37d2aa7.tar.xz |
gpiolib: Initialize the hardware with a callback
After changing the drivers to use GPIO core to add an IRQ chip
it appears that some of them requires a hardware initialization
before adding the IRQ chip.
Add an optional callback ->init_hw() to allow that drivers
to initialize hardware if needed.
This change is a part of the fix NULL pointer dereference
brought to the several drivers recently.
Cc: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'include/linux/gpio')
-rw-r--r-- | include/linux/gpio/driver.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h index f8245d67f070..5dd9c982e2cb 100644 --- a/include/linux/gpio/driver.h +++ b/include/linux/gpio/driver.h @@ -202,6 +202,14 @@ struct gpio_irq_chip { bool threaded; /** + * @init_hw: optional routine to initialize hardware before + * an IRQ chip will be added. This is quite useful when + * a particular driver wants to clear IRQ related registers + * in order to avoid undesired events. + */ + int (*init_hw)(struct gpio_chip *chip); + + /** * @init_valid_mask: optional routine to initialize @valid_mask, to be * used if not all GPIO lines are valid interrupts. Sometimes some * lines just cannot fire interrupts, and this routine, when defined, |