mfd: madera: Register pinctrl early and add custom states
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Wed, 28 Feb 2018 10:49:40 +0000 (10:49 +0000)
committer강신형 <s47.kang@samsung.com>
Tue, 19 Jun 2018 07:59:07 +0000 (16:59 +0900)
commitd15fa31d2505c72cb3b69acf4a9190c2091bfc8e
tree0e28d5252e002cbd7e3d8258b500e3e71440f6b1
parent122cef3b48f919afb917e032e2ddeb0be4372e99
mfd: madera: Register pinctrl early and add custom states

The pinctrl subsystem tries to bind all referenced pinctrl
settings in a driver's devicetree node before probing it.
If any of the pins don't exist the entire configuration will
be ignored.

Our pinctrl driver is a child of the mfd so will never exist
at this point, so the pinctrl setup will be abandoned. This
means any external pinctrl dependencies, such as the GPIO
controlling reset, won't be applied before the mfd starts probe.

This can be avoided by registering the pinctrl driver early
and then calling pinctrl_get() to cause another evaluation
of pinctrl bindings for this driver. For this to work we
cannot use the "default" pinctrl state because that will be
applied before we have probed the codec sufficiently to
actually apply any settings. Instead there are two new
explicit pinctrl states:

"probe" - external dependencies needed to probe the codec but
excluding the configuration of our own GPIOs. More
generically this excludes pinctrl settings that cannot
be applied until after mfd has probed.

"active" - applied after the probe is completed, includes
all the primary dependencies in "probe" plus any
configuration of our own pinctrl.

Change-Id: I5eab97aa73b9d25edaf6aec3b6922fdcfc3a60a7
Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Documentation/devicetree/bindings/mfd/madera.txt
drivers/mfd/madera-core.c