gpio: sch: Fix Oops on module load on Asus Eee PC 1201
authorColin Pitrat <[email protected]>
Sat, 18 Jun 2016 18:05:04 +0000 (19:05 +0100)
committerLinus Walleij <[email protected]>
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: [email protected]
Signed-off-by: Colin Pitrat <[email protected]>
Acked-by: Alexandre Courbot <[email protected]>
Acked-by: Mika Westerberg <[email protected]>
Signed-off-by: Linus Walleij <[email protected]>
drivers/gpio/gpio-sch.c