• Marc Zyngier's avatar
    gpio: tegra186: Fix chip_data type confusion · d1e972ac
    Marc Zyngier authored
    The tegra186 GPIO driver makes the assumption that the pointer
    returned by irq_data_get_irq_chip_data() is a pointer to a
    tegra_gpio structure. Unfortunately, it is actually a pointer
    to the inner gpio_chip structure, as mandated by the gpiolib
    infrastructure. Nice try.
    
    The saving grace is that the gpio_chip is the first member of
    tegra_gpio, so the bug has gone undetected since... forever.
    
    Fix it by performing a container_of() on the pointer. This results
    in no additional code, and makes it possible to understand how
    the whole thing works.
    
    Fixes: 5b2b135a ("gpio: Add Tegra186 support")
    Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
    Cc: Thierry Reding <treding@nvidia.com>
    Cc: Linus Walleij <linus.walleij@linaro.org>
    Cc: Bartosz Golaszewski <bgolaszewski@baylibre.com>
    Link: https://lore.kernel.org/r/20220211093904.1112679-1-maz@kernel.orgSigned-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    d1e972ac
gpio-tegra186.c 30.7 KB