gpio: sch: Fix Oops on module load on Asus Eee PC 1201
authorColin Pitrat <colin.pitrat@gmail.com>
Sat, 18 Jun 2016 18:05:04 +0000 (19:05 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 4 Jul 2016 14:50:40 +0000 (16:50 +0200)
commit87041a58d3b19455d39baed2a5e5bb43b58fb915
tree12fcc0a782e3b9b90621e599937014fc0a5e1ecc
parenta99cde438de0c4c0cecc1d1af1a55a75b10bfdef
gpio: sch: Fix Oops on module load on Asus Eee PC 1201

This fixes the issue descirbe in bug 117531
(https://bugzilla.kernel.org/show_bug.cgi?id=117531).
It's a regression introduced in linux 4.5 that causes a Oops at load of
gpio_sch and prevents powering off the computer.

The issue is that sch_gpio_reg_set is called in sch_gpio_probe before
gpio_chip data is initialized with the pointer to the sch_gpio struct. As
sch_gpio_reg_set calls gpiochip_get_data, it returns NULL which causes
the Oops.

The patch follows Mika's advice (https://lkml.org/lkml/2016/5/9/61) and
consists in modifying sch_gpio_reg_get and sch_gpio_reg_set to take a
sch_gpio struct directly instead of a gpio_chip, which avoids the call to
gpiochip_get_data.

Thanks Mika for your patience with me :-)

Cc: stable@vger.kernel.org
Signed-off-by: Colin Pitrat <colin.pitrat@gmail.com>
Acked-by: Alexandre Courbot <acourbot@nvidia.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpio-sch.c