[PATCH v1 1/2] pinctrl: single: Parse gpio details from dt
Simon Glass
sjg at chromium.org
Thu Sep 30 06:09:00 CEST 2021
Hi Bharat,
On Tue, 24 Aug 2021 at 04:16, Bharat Kumar Reddy Gooty
<bharat.gooty at broadcom.com> wrote:
>
> From: Bharat Gooty <bharat.gooty at broadcom.com>
>
> Parse different gpio properties from dt as part of probe
> function. This detail is required to enable pinctrl pad
> later when gpio lines are requested.
>
> Signed-off-by: Rayagonda Kokatanur <rayagonda.kokatanur at broadcom.com>
> Signed-off-by: Bharat Gooty <bharat.gooty at broadcom.com>
> ---
> drivers/pinctrl/pinctrl-single.c | 52 ++++++++++++++++++++++++++++++++
> 1 file changed, 52 insertions(+)
Looks OK but please update the pinctrl.c test. Also please see below.
>
> diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
> index cf9ad3670f..0f96cd5870 100644
> --- a/drivers/pinctrl/pinctrl-single.c
> +++ b/drivers/pinctrl/pinctrl-single.c
> @@ -8,6 +8,7 @@
> #include <dm.h>
> #include <dm/device_compat.h>
> #include <dm/devres.h>
> +#include <dm/of_access.h>
> #include <dm/pinctrl.h>
> #include <linux/libfdt.h>
> #include <linux/list.h>
> @@ -44,11 +45,27 @@ struct single_func {
> unsigned int *pins;
> };
>
> +/**
> + * struct single_gpiofunc_range - pin ranges with same mux value of gpio fun
fun?
> + * @offset: offset base of pins
> + * @npins: number pins with the same mux value of gpio function
> + * @gpiofunc: mux value of gpio function
> + * @node: list node
> + */
> +struct single_gpiofunc_range {
> + u32 offset;
> + u32 npins;
> + u32 gpiofunc;
> + struct list_head node;
> +};
> +
> /**
> * struct single_priv - private data
> * @bits_per_pin: number of bits per pin
> * @npins: number of selectable pins
> * @pin_name: temporary buffer to store the pin name
> + * @functions: list pin functions
> + * @gpiofuncs: list gpio functions
> */
> struct single_priv {
> #if (IS_ENABLED(CONFIG_SANDBOX))
> @@ -58,6 +75,7 @@ struct single_priv {
> unsigned int npins;
> char pin_name[PINNAME_SIZE];
> struct list_head functions;
> + struct list_head gpiofuncs;
> };
>
> /**
> @@ -454,6 +472,36 @@ static int single_get_pins_count(struct udevice *dev)
> return priv->npins;
> }
>
> +static int single_add_gpio_func(struct udevice *dev)
> +{
> + struct single_priv *priv = dev_get_priv(dev);
> + const char *propname = "pinctrl-single,gpio-range";
Can you please add the binding for this to U-Boot?
> + const char *cellname = "#pinctrl-single,gpio-range-cells";
> + struct single_gpiofunc_range *range;
> + struct ofnode_phandle_args gpiospec;
> + int ret, i;
> +
> + for (i = 0; ; i++) {
> + ret = ofnode_parse_phandle_with_args(dev_ofnode(dev), propname,
> + cellname, 0, i, &gpiospec);
> + /* Do not treat it as error. Only treat it as end condition. */
> + if (ret) {
> + ret = 0;
> + break;
> + }
> + range = devm_kzalloc(dev, sizeof(*range), GFP_KERNEL);
> + if (!range) {
> + ret = -ENOMEM;
> + break;
> + }
> + range->offset = gpiospec.args[0];
> + range->npins = gpiospec.args[1];
> + range->gpiofunc = gpiospec.args[2];
> + list_add_tail(&range->node, &priv->gpiofuncs);
> + }
> + return ret;
> +}
> +
> static int single_probe(struct udevice *dev)
> {
> struct single_pdata *pdata = dev_get_plat(dev);
> @@ -461,6 +509,7 @@ static int single_probe(struct udevice *dev)
> u32 size;
>
> INIT_LIST_HEAD(&priv->functions);
> + INIT_LIST_HEAD(&priv->gpiofuncs);
>
> size = pdata->offset + pdata->width / BITS_PER_BYTE;
> #if (CONFIG_IS_ENABLED(SANDBOX))
> @@ -483,6 +532,9 @@ static int single_probe(struct udevice *dev)
> priv->npins *= (pdata->width / priv->bits_per_pin);
> }
>
> + if (single_add_gpio_func(dev))
> + dev_dbg(dev, "gpio functions are not added\n");
return the error here
> +
> dev_dbg(dev, "%d pins\n", priv->npins);
> return 0;
> }
> --
> 2.17.1
>
>
> --
> This electronic communication and the information and any files transmitted
> with it, or attached to it, are confidential and are intended solely for
> the use of the individual or entity to whom it is addressed and may contain
> information that is confidential, legally privileged, protected by privacy
> laws, or otherwise restricted from disclosure to anyone else. If you are
> not the intended recipient or the person responsible for delivering the
> e-mail to the intended recipient, you are hereby notified that any use,
> copying, distributing, dissemination, forwarding, printing, or copying of
> this e-mail is strictly prohibited. If you received this e-mail in error,
> please return the e-mail to the sender, delete it from your computer, and
> destroy any printed copy of it.
Plesew drop this
Regards,
Simon
More information about the U-Boot
mailing list