dm: core: Add a comment about pinctrl_select_state()
authorSimon Glass <sjg@chromium.org>
Thu, 21 Jan 2021 20:57:13 +0000 (13:57 -0700)
committerSimon Glass <sjg@chromium.org>
Sat, 30 Jan 2021 21:25:42 +0000 (14:25 -0700)
The use of pinctrl in the core of driver model is useful but can provoke
some strange behaviour. Add a comment to aid debugging.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/core/device.c

index aeab3836ed768a8a5b53dc4ac24a57334f0a569b..8629df8defb88327fdcaa1028d5cb4d856304c4e 100644 (file)
@@ -462,6 +462,15 @@ int device_probe(struct udevice *dev)
         * continue regardless of the result of pinctrl. Don't process pinctrl
         * settings for pinctrl devices since the device may not yet be
         * probed.
+        *
+        * This call can produce some non-intuitive results. For example, on an
+        * x86 device where dev is the main PCI bus, the pinctrl device may be
+        * child or grandchild of that bus, meaning that the child will be
+        * probed here. If the child happens to be the P2SB and the pinctrl
+        * device is a child of that, then both the pinctrl and P2SB will be
+        * probed by this call. This works because the DM_FLAG_ACTIVATED flag
+        * is set just above. However, the PCI bus' probe() method and
+        * associated uclass methods have not yet been called.
         */
        if (dev->parent && device_get_uclass_id(dev) != UCLASS_PINCTRL)
                pinctrl_select_state(dev, "default");