diff mbox series

[U-Boot,v1,2/2] dm: pinctrl: Skip gpio-controller node in pinconfig_post_bind()

Message ID 1550241059-4544-3-git-send-email-patrice.chotard@st.com
State Superseded
Delegated to: Tom Rini
Headers show
Series Update pinctrl-uclass | expand

Commit Message

Patrice CHOTARD Feb. 15, 2019, 2:30 p.m. UTC
From: Patrick Delaunay <patrick.delaunay@st.com>

Some binding define child node gpio-controller without compatible property.
This patch avoid to bind the pinconfig uclass to these node.

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
---

 drivers/pinctrl/pinctrl-uclass.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Simon Glass Feb. 15, 2019, 5:11 p.m. UTC | #1
On Fri, 15 Feb 2019 at 15:31, Patrice Chotard <patrice.chotard@st.com> wrote:
>
> From: Patrick Delaunay <patrick.delaunay@st.com>
>
> Some binding define child node gpio-controller without compatible property.
> This patch avoid to bind the pinconfig uclass to these node.

Some bindings define a child node gpio-controller without a compatible property.
Avoid binding the pinconfig uclass to these node since ...(add explanation here)

>
> Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
> Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
> ---
>
>  drivers/pinctrl/pinctrl-uclass.c | 3 +++
>  1 file changed, 3 insertions(+)

Reviewed-by: Simon Glass <sjg@chromium.org>


>
> diff --git a/drivers/pinctrl/pinctrl-uclass.c b/drivers/pinctrl/pinctrl-uclass.c
> index abb622cfe79e..9df06a262cd5 100644
> --- a/drivers/pinctrl/pinctrl-uclass.c
> +++ b/drivers/pinctrl/pinctrl-uclass.c
> @@ -149,6 +149,9 @@ static int pinconfig_post_bind(struct udevice *dev)
>                 ofnode_get_property(node, "compatible", &ret);
>                 if (ret >= 0)
>                         continue;
> +               /* If this node has "gpio-controller" property, skip */
> +               if (ofnode_read_bool(node, "gpio-controller"))
> +                       continue;
>
>                 if (ret != -FDT_ERR_NOTFOUND)
>                         return ret;
> --
> 1.9.1
>
Patrick DELAUNAY Feb. 18, 2019, 12:41 p.m. UTC | #2
Hi,

> From: Simon Glass <sjg@chromium.org>
> Sent: vendredi 15 février 2019 18:12
> 
> On Fri, 15 Feb 2019 at 15:31, Patrice Chotard <patrice.chotard@st.com> wrote:
> >
> > From: Patrick Delaunay <patrick.delaunay@st.com>
> >
> > Some binding define child node gpio-controller without compatible property.
> > This patch avoid to bind the pinconfig uclass to these node.
> 
> Some bindings define a child node gpio-controller without a compatible property.
> Avoid binding the pinconfig uclass to these node since ...(add explanation here)

Ok , we will add more explanation in v2.

For example, the binding for st,stm32-pinctrl  (./device-tree-bindings/pinctrl/st,stm32-pinctrl.txt)
defines the GPIO controller/bank node as sub-node of pincontrol (for example st,stm32f429-pinctrl)
but without compatible (as it is not mandatory).

Without the added check, the gpio node with " gpio-controller" parameter is bounded as pinconfig.
This patch remove the need to add a compatible in u-boot device tree.

As example ./arch/arm/dts/stm32f429-disco-u-boot.dtsi

&gpioa {
	compatible = "st,stm32-gpio";
	u-boot,dm-pre-reloc;
};

&gpiob {
	compatible = "st,stm32-gpio";
	u-boot,dm-pre-reloc;
};
....

&gpiok {
	compatible = "st,stm32-gpio";
	u-boot,dm-pre-reloc;
};


PS: today "st,stm32-gpio" is still needing to bind the driver drivers/gpio/stm32f7_gpio.c
      To gpio-controller node...
       But we are expecting to remove this modification of kernel device tree by directly 
       bind sub-node to UCLASS_GPIO "gpio_stm32" in pincontrol driver.


static int stm32_pinctrl_bind(struct udevice *dev)
{
	const void *blob = gd->fdt_blob;
	int offset = dev_of_offset(dev);
	const char *name;
	int ret;

	for (offset = fdt_first_subnode(blob, offset);
	     offset > 0;
	     offset = fdt_next_subnode(blob, offset)) {
		fdt_get_property(blob, offset, "gpio-controller", &ret);
		if (ret < 0)
			continue;
		/* Get the name of each gpio node */
		name = fdt_get_name(blob, offset, NULL);
		if (!name)
			return -EINVAL;

		/* Bind each gpio node */
		ret = device_bind_driver_to_node(dev, "stm32mp-gpio",
						 name, offset, NULL);
		if (ret)
			return ret;

		debug("%s: bind %s\n", __func__, name);
	}

	return 0;
}

> >
> > Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
> > Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
> > ---
> >
> >  drivers/pinctrl/pinctrl-uclass.c | 3 +++
> >  1 file changed, 3 insertions(+)
> 
> Reviewed-by: Simon Glass <sjg@chromium.org>
> 
> 
> >
> > diff --git a/drivers/pinctrl/pinctrl-uclass.c b/drivers/pinctrl/pinctrl-uclass.c
> > index abb622cfe79e..9df06a262cd5 100644
> > --- a/drivers/pinctrl/pinctrl-uclass.c
> > +++ b/drivers/pinctrl/pinctrl-uclass.c
> > @@ -149,6 +149,9 @@ static int pinconfig_post_bind(struct udevice *dev)
> >                 ofnode_get_property(node, "compatible", &ret);
> >                 if (ret >= 0)
> >                         continue;
> > +               /* If this node has "gpio-controller" property, skip */
> > +               if (ofnode_read_bool(node, "gpio-controller"))
> > +                       continue;
> >
> >                 if (ret != -FDT_ERR_NOTFOUND)
> >                         return ret;
> > --
> > 1.9.1
> >

Patrick
diff mbox series

Patch

diff --git a/drivers/pinctrl/pinctrl-uclass.c b/drivers/pinctrl/pinctrl-uclass.c
index abb622cfe79e..9df06a262cd5 100644
--- a/drivers/pinctrl/pinctrl-uclass.c
+++ b/drivers/pinctrl/pinctrl-uclass.c
@@ -149,6 +149,9 @@  static int pinconfig_post_bind(struct udevice *dev)
 		ofnode_get_property(node, "compatible", &ret);
 		if (ret >= 0)
 			continue;
+		/* If this node has "gpio-controller" property, skip */
+		if (ofnode_read_bool(node, "gpio-controller"))
+			continue;
 
 		if (ret != -FDT_ERR_NOTFOUND)
 			return ret;