From: Andrea della Porta <andrea.porta@suse.com>
To: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Cc: Andrea della Porta <andrea.porta@suse.com>,
Ulf Hansson <ulf.hansson@linaro.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Conor Dooley <conor+dt@kernel.org>,
Florian Fainelli <florian.fainelli@broadcom.com>,
Broadcom internal kernel review list
<bcm-kernel-feedback-list@broadcom.com>,
Linus Walleij <linus.walleij@linaro.org>,
Adrian Hunter <adrian.hunter@intel.com>,
Kamal Dasu <kamal.dasu@broadcom.com>,
Al Cooper <alcooperx@gmail.com>,
linux-mmc@vger.kernel.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org,
Jonathan Bell <jonathan@raspberrypi.com>,
Phil Elwell <phil@raspberrypi.com>
Subject: Re: [PATCH 4/6] pinctrl: bcm: Add pinconf/pinmux controller driver for BCM2712
Date: Sat, 27 Apr 2024 13:04:29 +0200 [thread overview]
Message-ID: <ZizbvU8IraOYXUfu@apocalypse> (raw)
In-Reply-To: <66b11910-c6e2-401c-a293-441f6d85bb90@wanadoo.fr>
On 09:19 Sun 14 Apr , Christophe JAILLET wrote:
> Le 14/04/2024 à 00:14, Andrea della Porta a écrit :
> > Add a pincontrol driver for BCM2712. BCM2712 allows muxing GPIOs
> > and setting configuration on pads.
> >
> > Originally-by: Jonathan Bell <jonathan@raspberrypi.com>
> > Originally-by: Phil Elwell <phil@raspberrypi.com>
> > Signed-off-by: Andrea della Porta <andrea.porta@suse.com>
> > ---
> > drivers/pinctrl/bcm/Kconfig | 9 +
> > drivers/pinctrl/bcm/Makefile | 1 +
> > drivers/pinctrl/bcm/pinctrl-bcm2712.c | 1247 +++++++++++++++++++++++++
> > 3 files changed, 1257 insertions(+)
> > create mode 100644 drivers/pinctrl/bcm/pinctrl-bcm2712.c
>
> ...
>
> > +static int bcm2712_pmx_get_function_groups(struct pinctrl_dev *pctldev,
> > + unsigned selector,
> > + const char * const **groups,
> > + unsigned * const num_groups)
> > +{
> > + struct bcm2712_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
>
> Missing empty new line.
>
> > + /* every pin can do every function */
> > + *groups = pc->gpio_groups;
> > + *num_groups = pc->pctl_desc.npins;
> > +
> > + return 0;
> > +}
>
> ...
>
> > +static int bcm2712_pinconf_get(struct pinctrl_dev *pctldev,
> > + unsigned pin, unsigned long *config)
> > +{
> > + struct bcm2712_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
> > + enum pin_config_param param = pinconf_to_config_param(*config);
> > + u32 arg;
> > +
> > + switch (param) {
> > + case PIN_CONFIG_BIAS_DISABLE:
> > + arg = (bcm2712_pull_config_get(pc, pin) == BCM2712_PULL_NONE);
> > + break;
> > + case PIN_CONFIG_BIAS_PULL_DOWN:
> > + arg = (bcm2712_pull_config_get(pc, pin) == BCM2712_PULL_DOWN);
> > + break;
> > + case PIN_CONFIG_BIAS_PULL_UP:
> > + arg = (bcm2712_pull_config_get(pc, pin) == BCM2712_PULL_UP);
> > + break;
> > + default:
> > + return -ENOTSUPP;
> > + }
> > +
> > + *config = pinconf_to_config_packed(param, arg);
> > +
> > + return -ENOTSUPP;
>
> Strange.
>
> return 0;
> ?
>
> > +}
> > +
> > +static int bcm2712_pinconf_set(struct pinctrl_dev *pctldev,
> > + unsigned int pin, unsigned long *configs,
> > + unsigned int num_configs)
> > +{
> > + struct bcm2712_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
> > + u32 param, arg;
> > + int i;
> > +
> > + for (i = 0; i < num_configs; i++) {
> > + param = pinconf_to_config_param(configs[i]);
> > + arg = pinconf_to_config_argument(configs[i]);
> > +
> > + switch (param) {
> > + case PIN_CONFIG_BIAS_DISABLE:
> > + bcm2712_pull_config_set(pc, pin, BCM2712_PULL_NONE);
> > + break;
> > + case PIN_CONFIG_BIAS_PULL_DOWN:
> > + bcm2712_pull_config_set(pc, pin, BCM2712_PULL_DOWN);
> > + break;
> > + case PIN_CONFIG_BIAS_PULL_UP:
> > + bcm2712_pull_config_set(pc, pin, BCM2712_PULL_UP);
> > + break;
> > + default:
> > + return -ENOTSUPP;
> > + }
> > + } /* for each config */
>
> This comment is not really usefull, IMHO.
Agreed. Dropped in V2.
>
> > +
> > + return 0;
> > +}
>
> ...
>
> > +static int bcm2712_pinctrl_probe(struct platform_device *pdev)
> > +{
> > + struct device *dev = &pdev->dev;
> > + //struct device_node *np = dev->of_node;
> > + const struct bcm_plat_data *pdata;
> > + //const struct of_device_id *match;
> > + struct bcm2712_pinctrl *pc;
> > + const char **names;
> > + int num_pins, i;
> > +
> > + pdata = device_get_match_data(&pdev->dev);
> > + if (!pdata)
> > + return -EINVAL;
> > +
> > + pc = devm_kzalloc(dev, sizeof(*pc), GFP_KERNEL);
> > + if (!pc)
> > + return -ENOMEM;
> > +
> > + platform_set_drvdata(pdev, pc);
> > + pc->dev = dev;
> > + spin_lock_init(&pc->lock);
> > +
> > + //pc->base = devm_of_iomap(dev, np, 0, NULL);
>
> Any use for this commented code? (and variable declarations above)
No, I just forgot to drop the comment. Removed in V2.
Many thanks,
Andrea
>
> CJ
>
> > + pc->base = devm_platform_ioremap_resource(pdev, 0);
> > + if (WARN_ON(IS_ERR(pc->base))) {
> > + //dev_err(dev, "could not get IO memory\n");
> > + return PTR_ERR(pc->base);
> > + }
> > +
> > + pc->pctl_desc = *pdata->pctl_desc;
> > + num_pins = pc->pctl_desc.npins;
> > + names = devm_kmalloc_array(dev, num_pins, sizeof(const char *),
> > + GFP_KERNEL);
> > + if (!names)
> > + return -ENOMEM;
> > + for (i = 0; i < num_pins; i++)
> > + names[i] = pc->pctl_desc.pins[i].name;
> > + pc->gpio_groups = names;
> > + pc->pin_regs = pdata->pin_regs;
> > + pc->pin_funcs = pdata->pin_funcs;
> > + pc->pctl_dev = devm_pinctrl_register(dev, &pc->pctl_desc, pc);
> > + if (IS_ERR(pc->pctl_dev))
> > + return PTR_ERR(pc->pctl_dev);
> > +
> > + pc->gpio_range = *pdata->gpio_range;
> > + pinctrl_add_gpio_range(pc->pctl_dev, &pc->gpio_range);
> > +
> > + return 0;
> > +}
>
> ...
>
WARNING: multiple messages have this Message-ID (diff)
From: Andrea della Porta <andrea.porta@suse.com>
To: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Cc: Andrea della Porta <andrea.porta@suse.com>,
Ulf Hansson <ulf.hansson@linaro.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Conor Dooley <conor+dt@kernel.org>,
Florian Fainelli <florian.fainelli@broadcom.com>,
Broadcom internal kernel review list
<bcm-kernel-feedback-list@broadcom.com>,
Linus Walleij <linus.walleij@linaro.org>,
Adrian Hunter <adrian.hunter@intel.com>,
Kamal Dasu <kamal.dasu@broadcom.com>,
Al Cooper <alcooperx@gmail.com>,
linux-mmc@vger.kernel.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org,
Jonathan Bell <jonathan@raspberrypi.com>,
Phil Elwell <phil@raspberrypi.com>
Subject: Re: [PATCH 4/6] pinctrl: bcm: Add pinconf/pinmux controller driver for BCM2712
Date: Sat, 27 Apr 2024 13:04:29 +0200 [thread overview]
Message-ID: <ZizbvU8IraOYXUfu@apocalypse> (raw)
In-Reply-To: <66b11910-c6e2-401c-a293-441f6d85bb90@wanadoo.fr>
On 09:19 Sun 14 Apr , Christophe JAILLET wrote:
> Le 14/04/2024 à 00:14, Andrea della Porta a écrit :
> > Add a pincontrol driver for BCM2712. BCM2712 allows muxing GPIOs
> > and setting configuration on pads.
> >
> > Originally-by: Jonathan Bell <jonathan@raspberrypi.com>
> > Originally-by: Phil Elwell <phil@raspberrypi.com>
> > Signed-off-by: Andrea della Porta <andrea.porta@suse.com>
> > ---
> > drivers/pinctrl/bcm/Kconfig | 9 +
> > drivers/pinctrl/bcm/Makefile | 1 +
> > drivers/pinctrl/bcm/pinctrl-bcm2712.c | 1247 +++++++++++++++++++++++++
> > 3 files changed, 1257 insertions(+)
> > create mode 100644 drivers/pinctrl/bcm/pinctrl-bcm2712.c
>
> ...
>
> > +static int bcm2712_pmx_get_function_groups(struct pinctrl_dev *pctldev,
> > + unsigned selector,
> > + const char * const **groups,
> > + unsigned * const num_groups)
> > +{
> > + struct bcm2712_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
>
> Missing empty new line.
>
> > + /* every pin can do every function */
> > + *groups = pc->gpio_groups;
> > + *num_groups = pc->pctl_desc.npins;
> > +
> > + return 0;
> > +}
>
> ...
>
> > +static int bcm2712_pinconf_get(struct pinctrl_dev *pctldev,
> > + unsigned pin, unsigned long *config)
> > +{
> > + struct bcm2712_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
> > + enum pin_config_param param = pinconf_to_config_param(*config);
> > + u32 arg;
> > +
> > + switch (param) {
> > + case PIN_CONFIG_BIAS_DISABLE:
> > + arg = (bcm2712_pull_config_get(pc, pin) == BCM2712_PULL_NONE);
> > + break;
> > + case PIN_CONFIG_BIAS_PULL_DOWN:
> > + arg = (bcm2712_pull_config_get(pc, pin) == BCM2712_PULL_DOWN);
> > + break;
> > + case PIN_CONFIG_BIAS_PULL_UP:
> > + arg = (bcm2712_pull_config_get(pc, pin) == BCM2712_PULL_UP);
> > + break;
> > + default:
> > + return -ENOTSUPP;
> > + }
> > +
> > + *config = pinconf_to_config_packed(param, arg);
> > +
> > + return -ENOTSUPP;
>
> Strange.
>
> return 0;
> ?
>
> > +}
> > +
> > +static int bcm2712_pinconf_set(struct pinctrl_dev *pctldev,
> > + unsigned int pin, unsigned long *configs,
> > + unsigned int num_configs)
> > +{
> > + struct bcm2712_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
> > + u32 param, arg;
> > + int i;
> > +
> > + for (i = 0; i < num_configs; i++) {
> > + param = pinconf_to_config_param(configs[i]);
> > + arg = pinconf_to_config_argument(configs[i]);
> > +
> > + switch (param) {
> > + case PIN_CONFIG_BIAS_DISABLE:
> > + bcm2712_pull_config_set(pc, pin, BCM2712_PULL_NONE);
> > + break;
> > + case PIN_CONFIG_BIAS_PULL_DOWN:
> > + bcm2712_pull_config_set(pc, pin, BCM2712_PULL_DOWN);
> > + break;
> > + case PIN_CONFIG_BIAS_PULL_UP:
> > + bcm2712_pull_config_set(pc, pin, BCM2712_PULL_UP);
> > + break;
> > + default:
> > + return -ENOTSUPP;
> > + }
> > + } /* for each config */
>
> This comment is not really usefull, IMHO.
Agreed. Dropped in V2.
>
> > +
> > + return 0;
> > +}
>
> ...
>
> > +static int bcm2712_pinctrl_probe(struct platform_device *pdev)
> > +{
> > + struct device *dev = &pdev->dev;
> > + //struct device_node *np = dev->of_node;
> > + const struct bcm_plat_data *pdata;
> > + //const struct of_device_id *match;
> > + struct bcm2712_pinctrl *pc;
> > + const char **names;
> > + int num_pins, i;
> > +
> > + pdata = device_get_match_data(&pdev->dev);
> > + if (!pdata)
> > + return -EINVAL;
> > +
> > + pc = devm_kzalloc(dev, sizeof(*pc), GFP_KERNEL);
> > + if (!pc)
> > + return -ENOMEM;
> > +
> > + platform_set_drvdata(pdev, pc);
> > + pc->dev = dev;
> > + spin_lock_init(&pc->lock);
> > +
> > + //pc->base = devm_of_iomap(dev, np, 0, NULL);
>
> Any use for this commented code? (and variable declarations above)
No, I just forgot to drop the comment. Removed in V2.
Many thanks,
Andrea
>
> CJ
>
> > + pc->base = devm_platform_ioremap_resource(pdev, 0);
> > + if (WARN_ON(IS_ERR(pc->base))) {
> > + //dev_err(dev, "could not get IO memory\n");
> > + return PTR_ERR(pc->base);
> > + }
> > +
> > + pc->pctl_desc = *pdata->pctl_desc;
> > + num_pins = pc->pctl_desc.npins;
> > + names = devm_kmalloc_array(dev, num_pins, sizeof(const char *),
> > + GFP_KERNEL);
> > + if (!names)
> > + return -ENOMEM;
> > + for (i = 0; i < num_pins; i++)
> > + names[i] = pc->pctl_desc.pins[i].name;
> > + pc->gpio_groups = names;
> > + pc->pin_regs = pdata->pin_regs;
> > + pc->pin_funcs = pdata->pin_funcs;
> > + pc->pctl_dev = devm_pinctrl_register(dev, &pc->pctl_desc, pc);
> > + if (IS_ERR(pc->pctl_dev))
> > + return PTR_ERR(pc->pctl_dev);
> > +
> > + pc->gpio_range = *pdata->gpio_range;
> > + pinctrl_add_gpio_range(pc->pctl_dev, &pc->gpio_range);
> > +
> > + return 0;
> > +}
>
> ...
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2024-04-27 11:04 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-13 22:14 [PATCH 0/6] Add support for BCM2712 SD card controller Andrea della Porta
2024-04-13 22:14 ` Andrea della Porta
2024-04-13 22:14 ` [PATCH 1/6] dt-bindings: pinctrl: Add support for BCM2712 pin controller Andrea della Porta
2024-04-13 22:14 ` Andrea della Porta
2024-04-13 23:22 ` Rob Herring
2024-04-13 23:22 ` Rob Herring
2024-04-14 6:09 ` Krzysztof Kozlowski
2024-04-14 6:09 ` Krzysztof Kozlowski
2024-04-14 15:45 ` Florian Fainelli
2024-04-14 15:45 ` Florian Fainelli
2024-04-16 12:59 ` Linus Walleij
2024-04-16 12:59 ` Linus Walleij
2024-04-27 10:55 ` Andrea della Porta
2024-04-27 10:55 ` Andrea della Porta
2024-04-13 22:14 ` [PATCH 2/6] dt-bindings: mmc: Add support for BCM2712 SD host controller Andrea della Porta
2024-04-13 22:14 ` Andrea della Porta
2024-04-13 23:22 ` Rob Herring
2024-04-13 23:22 ` Rob Herring
2024-04-14 6:11 ` Krzysztof Kozlowski
2024-04-14 6:11 ` Krzysztof Kozlowski
2024-04-14 15:55 ` Florian Fainelli
2024-04-14 15:55 ` Florian Fainelli
2024-04-13 22:14 ` [PATCH 3/6] arm64: dts: broadcom: Add support for BCM2712 Andrea della Porta
2024-04-13 22:14 ` Andrea della Porta
2024-04-14 6:22 ` Krzysztof Kozlowski
2024-04-14 6:22 ` Krzysztof Kozlowski
2024-04-14 16:01 ` Florian Fainelli
2024-04-14 16:01 ` Florian Fainelli
2024-04-27 11:02 ` Andrea della Porta
2024-04-27 11:02 ` Andrea della Porta
2024-04-15 8:20 ` Stefan Wahren
2024-04-15 8:20 ` Stefan Wahren
2024-04-15 8:52 ` Phil Elwell
2024-04-15 8:52 ` Phil Elwell
2024-04-15 9:06 ` Stefan Wahren
2024-04-15 9:06 ` Stefan Wahren
2024-04-15 10:43 ` Phil Elwell
2024-04-15 10:43 ` Phil Elwell
2024-04-13 22:14 ` [PATCH 4/6] pinctrl: bcm: Add pinconf/pinmux controller driver " Andrea della Porta
2024-04-13 22:14 ` Andrea della Porta
2024-04-14 7:19 ` Christophe JAILLET
2024-04-14 7:19 ` Christophe JAILLET
2024-04-27 11:04 ` Andrea della Porta [this message]
2024-04-27 11:04 ` Andrea della Porta
2024-04-14 16:00 ` Florian Fainelli
2024-04-14 16:00 ` Florian Fainelli
2024-04-27 11:06 ` Andrea della Porta
2024-04-27 11:06 ` Andrea della Porta
2024-04-16 13:07 ` Linus Walleij
2024-04-16 13:07 ` Linus Walleij
2024-04-27 11:13 ` Andrea della Porta
2024-04-27 11:13 ` Andrea della Porta
2024-04-13 22:14 ` [PATCH 5/6] mmc: sdhci-brcmstb: Add BCM2712 support Andrea della Porta
2024-04-13 22:14 ` Andrea della Porta
2024-04-14 6:25 ` Krzysztof Kozlowski
2024-04-14 6:25 ` Krzysztof Kozlowski
2024-04-14 7:28 ` Christophe JAILLET
2024-04-14 7:28 ` Christophe JAILLET
2024-04-14 15:53 ` Florian Fainelli
2024-04-14 15:53 ` Florian Fainelli
2024-04-13 22:14 ` [PATCH 6/6] mmc: sdhci-brcmstb: Add BCM2712 SD Express support Andrea della Porta
2024-04-13 22:14 ` Andrea della Porta
2024-04-14 7:34 ` Christophe JAILLET
2024-04-14 7:34 ` Christophe JAILLET
2024-04-27 11:16 ` Andrea della Porta
2024-04-27 11:16 ` Andrea della Porta
2024-04-14 15:55 ` Florian Fainelli
2024-04-14 15:55 ` Florian Fainelli
2024-04-27 11:21 ` Andrea della Porta
2024-04-27 11:21 ` Andrea della Porta
2024-04-14 10:07 ` [PATCH 0/6] Add support for BCM2712 SD card controller Stefan Wahren
2024-04-14 10:07 ` Stefan Wahren
2024-05-02 9:12 ` Andrea della Porta
2024-05-02 9:12 ` Andrea della Porta
2024-04-14 15:54 ` Florian Fainelli
2024-04-14 15:54 ` Florian Fainelli
2024-04-15 18:47 ` Rob Herring
2024-04-15 18:47 ` Rob Herring
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZizbvU8IraOYXUfu@apocalypse \
--to=andrea.porta@suse.com \
--cc=adrian.hunter@intel.com \
--cc=alcooperx@gmail.com \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=christophe.jaillet@wanadoo.fr \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=florian.fainelli@broadcom.com \
--cc=jonathan@raspberrypi.com \
--cc=kamal.dasu@broadcom.com \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=phil@raspberrypi.com \
--cc=robh@kernel.org \
--cc=ulf.hansson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.