aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2021-01-21 13:57:13 -0700
committerSimon Glass <sjg@chromium.org>2021-01-30 14:25:42 -0700
commit017d421828971f6adbfa6a1305b80da7d620c596 (patch)
tree0947a706794dbe4cd063cf048b038d83312db9c5
parent0dc2bf2b6e6e7581e3307f3aa65d0ce310375511 (diff)
downloadu-boot-017d421828971f6adbfa6a1305b80da7d620c596.zip
u-boot-017d421828971f6adbfa6a1305b80da7d620c596.tar.gz
u-boot-017d421828971f6adbfa6a1305b80da7d620c596.tar.bz2
dm: core: Add a comment about pinctrl_select_state()
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>
-rw-r--r--drivers/core/device.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/core/device.c b/drivers/core/device.c
index aeab383..8629df8 100644
--- a/drivers/core/device.c
+++ b/drivers/core/device.c
@@ -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");