pinctrl: samsung: Register pinctrl before GPIO
authorCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
Wed, 22 Mar 2017 17:15:34 +0000 (17:15 +0000)
committerKrzysztof Kozlowski <krzk@kernel.org>
Thu, 23 Mar 2017 19:13:19 +0000 (21:13 +0200)
commit1abd18d1a51a95bf90c10459f1ed5c692660408e
tree46db95b97313cf1d3b347e3822959bb712eba7de
parente1d7eb0c8fc9c33ef60ac31172fb0fbb78c24271
pinctrl: samsung: Register pinctrl before GPIO

If we request a GPIO hog, then gpiochip_add_data will attempt
to request some of its own GPIOs. The driver also uses
gpiochip_generic_request which means that for any GPIO request to
succeed the pinctrl needs to be registered. Currently however the
driver registers the GPIO and then the pinctrl meaning all GPIO hog
requests will fail, which then in turn causes the whole driver to fail
probe.

Fix this up by ensuring we register the pinctrl first. This
does require us to manually set the GPIO base for the
pinctrl. Fortunately the driver already assigns a fixed GPIO base, in
samsung_gpiolib_register, and uses the same calculation it does for
the pin_base. Meaning the two will always be the same and allowing us
to reuse the pinbase and avoid the issue.

Although currently there are no users of GPIO hogs in mainline
there are plenty of Samsung based boards that are widely used for
development purposes of other hardware. Indeed we hit this issue
whilst attaching some additional hardware to an Arndale system.

Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
drivers/pinctrl/samsung/pinctrl-samsung.c