• Andreas Kemnade's avatar
    gpiolib: fix allocation of mixed dynamic/static GPIOs · 7dd3d9bd
    Andreas Kemnade authored
    If static allocation and dynamic allocation GPIOs are present,
    dynamic allocation pollutes the numberspace for static allocation,
    causing static allocation to fail.
    Enforce dynamic allocation above GPIO_DYNAMIC_BASE.
    
    Seen on a GTA04 when omap-gpio (static) and twl-gpio (dynamic)
    raced:
    [some successful registrations of omap_gpio instances]
    [    2.553833] twl4030_gpio twl4030-gpio: gpio (irq 145) chaining IRQs 161..178
    [    2.561401] gpiochip_find_base: found new base at 160
    [    2.564392] gpio gpiochip5: (twl4030): added GPIO chardev (254:5)
    [    2.564544] gpio gpiochip5: registered GPIOs 160 to 177 on twl4030
    [...]
    [    2.692169] omap-gpmc 6e000000.gpmc: GPMC revision 5.0
    [    2.697357] gpmc_mem_init: disabling cs 0 mapped at 0x0-0x1000000
    [    2.703643] gpiochip_find_base: found new base at 178
    [    2.704376] gpio gpiochip6: (omap-gpmc): added GPIO chardev (254:6)
    [    2.704589] gpio gpiochip6: registered GPIOs 178 to 181 on omap-gpmc
    [...]
    [    2.840393] gpio gpiochip7: Static allocation of GPIO base is deprecated, use dynamic allocation.
    [    2.849365] gpio gpiochip7: (gpio-160-191): GPIO integer space overlap, cannot add chip
    [    2.857513] gpiochip_add_data_with_key: GPIOs 160..191 (gpio-160-191) failed to register, -16
    [    2.866149] omap_gpio 48310000.gpio: error -EBUSY: Could not register gpio chip
    
    On that device it is fixed invasively by
    commit 92bf78b3 ("gpio: omap: use dynamic allocation of base")
    but let's also fix that for devices where there is still
    a mixture of static and dynamic allocation.
    
    Fixes: 7b61212f ("gpiolib: Get rid of ARCH_NR_GPIOS")
    Signed-off-by: default avatarAndreas Kemnade <andreas@kemnade.info>
    Reviewed-by: <christophe.leroy@csgroup.eu>
    Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
    Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
    7dd3d9bd
gpiolib.c 124 KB