From: Chester Lin <clin@suse.com>
To: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: "Linus Walleij" <linus.walleij@linaro.org>,
"NXP S32 Linux Team" <s32@nxp.com>,
linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
"Ghennadi Procopciuc" <Ghennadi.Procopciuc@oss.nxp.com>,
"Andrei Stefanescu" <andrei.stefanescu@nxp.com>,
"Radu Pirea" <radu-nicolae.pirea@nxp.com>,
"Andreas Färber" <afaerber@suse.de>,
"Matthias Brugger" <mbrugger@suse.com>
Subject: Re: [PATCH v4 5/5] pinctrl: s32: separate const device data from struct s32_pinctrl_soc_info
Date: Sat, 25 Mar 2023 11:02:59 +0800 [thread overview]
Message-ID: <ZB5kY9iBqi68nafl@linux-8mug> (raw)
In-Reply-To: <CAHp75VdLd9UCNcMcCiQfR2OTepA+Z1fYQr6aWUuTP=wnNdCpVw@mail.gmail.com>
On Fri, Mar 24, 2023 at 04:57:01PM +0200, Andy Shevchenko wrote:
> On Fri, Mar 24, 2023 at 4:38 PM Chester Lin <clin@suse.com> wrote:
> >
> > The .data field in struct of_device_id is used as a const member so it's
> > inappropriate to attach struct s32_pinctrl_soc_info with of_device_id
> > because some members in s32_pinctrl_soc_info need to be filled by
> > pinctrl-s32cc at runtime.
> >
> > For this reason, struct s32_pinctrl_soc_info must be allocated in
> > pinctrl-s32cc and then create a new struct s32_pinctrl_soc_data in order
> > to represent const .data in of_device_id. To combine these two structures,
> > a s32_pinctrl_soc_data pointer is introduced in s32_pinctrl_soc_info.
> >
> > Besides, use of_device_get_match_data() instead of of_match_device() since
> > the driver only needs to retrieve the .data from of_device_id.
>
> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> (casting question is minor and can be addressed in v5, if can be done,
> or when applying)
>
Thanks for reviewing this patch!
I will prepare v5 next Monday for solving this question.
Regards,
Chester
> > Suggested-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> > Signed-off-by: Chester Lin <clin@suse.com>
> > ---
> > Changes in v4:
> > - Retrieve the matched device data by calling of_device_get_match_data()
> > and remove unnecessary type casting. (Merged from the previous v3 series
> > [PATCH v3 1/6])
> >
> > drivers/pinctrl/nxp/pinctrl-s32.h | 14 +++++++++-----
> > drivers/pinctrl/nxp/pinctrl-s32cc.c | 30 +++++++++++++++++------------
> > drivers/pinctrl/nxp/pinctrl-s32g2.c | 13 +++++--------
> > 3 files changed, 32 insertions(+), 25 deletions(-)
> >
> > diff --git a/drivers/pinctrl/nxp/pinctrl-s32.h b/drivers/pinctrl/nxp/pinctrl-s32.h
> > index 2f7aecd462e4..add3c77ddfed 100644
> > --- a/drivers/pinctrl/nxp/pinctrl-s32.h
> > +++ b/drivers/pinctrl/nxp/pinctrl-s32.h
> > @@ -34,24 +34,28 @@ struct s32_pin_range {
> > unsigned int end;
> > };
> >
> > -struct s32_pinctrl_soc_info {
> > - struct device *dev;
> > +struct s32_pinctrl_soc_data {
> > const struct pinctrl_pin_desc *pins;
> > unsigned int npins;
> > + const struct s32_pin_range *mem_pin_ranges;
> > + unsigned int mem_regions;
> > +};
> > +
> > +struct s32_pinctrl_soc_info {
> > + struct device *dev;
> > + const struct s32_pinctrl_soc_data *soc_data;
> > struct s32_pin_group *groups;
> > unsigned int ngroups;
> > struct pinfunction *functions;
> > unsigned int nfunctions;
> > unsigned int grp_index;
> > - const struct s32_pin_range *mem_pin_ranges;
> > - unsigned int mem_regions;
> > };
> >
> > #define S32_PINCTRL_PIN(pin) PINCTRL_PIN(pin, #pin)
> > #define S32_PIN_RANGE(_start, _end) { .start = _start, .end = _end }
> >
> > int s32_pinctrl_probe(struct platform_device *pdev,
> > - struct s32_pinctrl_soc_info *info);
> > + const struct s32_pinctrl_soc_data *soc_data);
> > int s32_pinctrl_resume(struct device *dev);
> > int s32_pinctrl_suspend(struct device *dev);
> > #endif /* __DRIVERS_PINCTRL_S32_H */
> > diff --git a/drivers/pinctrl/nxp/pinctrl-s32cc.c b/drivers/pinctrl/nxp/pinctrl-s32cc.c
> > index 8373468719b6..41e024160f36 100644
> > --- a/drivers/pinctrl/nxp/pinctrl-s32cc.c
> > +++ b/drivers/pinctrl/nxp/pinctrl-s32cc.c
> > @@ -106,7 +106,7 @@ s32_get_region(struct pinctrl_dev *pctldev, unsigned int pin)
> > {
> > struct s32_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
> > const struct s32_pin_range *pin_range;
> > - unsigned int mem_regions = ipctl->info->mem_regions;
> > + unsigned int mem_regions = ipctl->info->soc_data->mem_regions;
> > unsigned int i;
> >
> > for (i = 0; i < mem_regions; i++) {
> > @@ -688,8 +688,8 @@ int s32_pinctrl_suspend(struct device *dev)
> > int ret;
> > unsigned int config;
> >
> > - for (i = 0; i < info->npins; i++) {
> > - pin = &info->pins[i];
> > + for (i = 0; i < info->soc_data->npins; i++) {
> > + pin = &info->soc_data->pins[i];
> >
> > if (!s32_pinctrl_should_save(ipctl, pin->number))
> > continue;
> > @@ -713,8 +713,8 @@ int s32_pinctrl_resume(struct device *dev)
> > struct s32_pinctrl_context *saved_context = &ipctl->saved_context;
> > int ret, i;
> >
> > - for (i = 0; i < info->npins; i++) {
> > - pin = &info->pins[i];
> > + for (i = 0; i < info->soc_data->npins; i++) {
> > + pin = &info->soc_data->pins[i];
> >
> > if (!s32_pinctrl_should_save(ipctl, pin->number))
> > continue;
> > @@ -831,7 +831,7 @@ static int s32_pinctrl_probe_dt(struct platform_device *pdev,
> > struct resource *res;
> > struct regmap *map;
> > void __iomem *base;
> > - int mem_regions = info->mem_regions;
> > + unsigned int mem_regions = info->soc_data->mem_regions;
> > int ret;
> > u32 nfuncs = 0;
> > u32 i = 0;
> > @@ -869,7 +869,7 @@ static int s32_pinctrl_probe_dt(struct platform_device *pdev,
> > }
> >
> > ipctl->regions[i].map = map;
> > - ipctl->regions[i].pin_range = &info->mem_pin_ranges[i];
> > + ipctl->regions[i].pin_range = &info->soc_data->mem_pin_ranges[i];
> > }
> >
> > nfuncs = of_get_child_count(np);
> > @@ -904,20 +904,26 @@ static int s32_pinctrl_probe_dt(struct platform_device *pdev,
> > }
> >
> > int s32_pinctrl_probe(struct platform_device *pdev,
> > - struct s32_pinctrl_soc_info *info)
> > + const struct s32_pinctrl_soc_data *soc_data)
> > {
> > struct s32_pinctrl *ipctl;
> > int ret;
> > struct pinctrl_desc *s32_pinctrl_desc;
> > + struct s32_pinctrl_soc_info *info;
> > #ifdef CONFIG_PM_SLEEP
> > struct s32_pinctrl_context *saved_context;
> > #endif
> >
> > - if (!info || !info->pins || !info->npins) {
> > + if (!soc_data || !soc_data->pins || !soc_data->npins) {
> > dev_err(&pdev->dev, "wrong pinctrl info\n");
> > return -EINVAL;
> > }
> >
> > + info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
> > + if (!info)
> > + return -ENOMEM;
> > +
> > + info->soc_data = soc_data;
> > info->dev = &pdev->dev;
> >
> > /* Create state holders etc for this driver */
> > @@ -938,8 +944,8 @@ int s32_pinctrl_probe(struct platform_device *pdev,
> > return -ENOMEM;
> >
> > s32_pinctrl_desc->name = dev_name(&pdev->dev);
> > - s32_pinctrl_desc->pins = info->pins;
> > - s32_pinctrl_desc->npins = info->npins;
> > + s32_pinctrl_desc->pins = info->soc_data->pins;
> > + s32_pinctrl_desc->npins = info->soc_data->npins;
> > s32_pinctrl_desc->pctlops = &s32_pctrl_ops;
> > s32_pinctrl_desc->pmxops = &s32_pmx_ops;
> > s32_pinctrl_desc->confops = &s32_pinconf_ops;
> > @@ -960,7 +966,7 @@ int s32_pinctrl_probe(struct platform_device *pdev,
> > #ifdef CONFIG_PM_SLEEP
> > saved_context = &ipctl->saved_context;
> > saved_context->pads =
> > - devm_kcalloc(&pdev->dev, info->npins,
> > + devm_kcalloc(&pdev->dev, info->soc_data->npins,
> > sizeof(*saved_context->pads),
> > GFP_KERNEL);
> > if (!saved_context->pads)
> > diff --git a/drivers/pinctrl/nxp/pinctrl-s32g2.c b/drivers/pinctrl/nxp/pinctrl-s32g2.c
> > index d9f3ff6794ea..e0944c071c8c 100644
> > --- a/drivers/pinctrl/nxp/pinctrl-s32g2.c
> > +++ b/drivers/pinctrl/nxp/pinctrl-s32g2.c
> > @@ -721,7 +721,7 @@ static const struct s32_pin_range s32_pin_ranges_siul2[] = {
> > S32_PIN_RANGE(942, 1007),
> > };
> >
> > -static struct s32_pinctrl_soc_info s32_pinctrl_info = {
> > +static struct s32_pinctrl_soc_data s32_pinctrl_data = {
> > .pins = s32_pinctrl_pads_siul2,
> > .npins = ARRAY_SIZE(s32_pinctrl_pads_siul2),
> > .mem_pin_ranges = s32_pin_ranges_siul2,
> > @@ -732,7 +732,7 @@ static const struct of_device_id s32_pinctrl_of_match[] = {
> > {
> >
> > .compatible = "nxp,s32g2-siul2-pinctrl",
> > - .data = (void *) &s32_pinctrl_info,
> > + .data = (void *) &s32_pinctrl_data,
> > },
> > { /* sentinel */ }
> > };
> > @@ -740,14 +740,11 @@ MODULE_DEVICE_TABLE(of, s32_pinctrl_of_match);
> >
> > static int s32g_pinctrl_probe(struct platform_device *pdev)
> > {
> > - const struct of_device_id *of_id =
> > - of_match_device(s32_pinctrl_of_match, &pdev->dev);
> > + const struct s32_pinctrl_soc_data *soc_data;
> >
> > - if (!of_id)
> > - return -ENODEV;
> > + soc_data = of_device_get_match_data(&pdev->dev);
> >
> > - return s32_pinctrl_probe
> > - (pdev, (struct s32_pinctrl_soc_info *) of_id->data);
> > + return s32_pinctrl_probe(pdev, soc_data);
> > }
> >
> > static const struct dev_pm_ops s32g_pinctrl_pm_ops = {
> > --
> > 2.37.3
> >
>
>
> --
> With Best Regards,
> Andy Shevchenko
WARNING: multiple messages have this Message-ID (diff)
From: Chester Lin <clin@suse.com>
To: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: "Linus Walleij" <linus.walleij@linaro.org>,
"NXP S32 Linux Team" <s32@nxp.com>,
linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
"Ghennadi Procopciuc" <Ghennadi.Procopciuc@oss.nxp.com>,
"Andrei Stefanescu" <andrei.stefanescu@nxp.com>,
"Radu Pirea" <radu-nicolae.pirea@nxp.com>,
"Andreas Färber" <afaerber@suse.de>,
"Matthias Brugger" <mbrugger@suse.com>
Subject: Re: [PATCH v4 5/5] pinctrl: s32: separate const device data from struct s32_pinctrl_soc_info
Date: Sat, 25 Mar 2023 11:02:59 +0800 [thread overview]
Message-ID: <ZB5kY9iBqi68nafl@linux-8mug> (raw)
In-Reply-To: <CAHp75VdLd9UCNcMcCiQfR2OTepA+Z1fYQr6aWUuTP=wnNdCpVw@mail.gmail.com>
On Fri, Mar 24, 2023 at 04:57:01PM +0200, Andy Shevchenko wrote:
> On Fri, Mar 24, 2023 at 4:38 PM Chester Lin <clin@suse.com> wrote:
> >
> > The .data field in struct of_device_id is used as a const member so it's
> > inappropriate to attach struct s32_pinctrl_soc_info with of_device_id
> > because some members in s32_pinctrl_soc_info need to be filled by
> > pinctrl-s32cc at runtime.
> >
> > For this reason, struct s32_pinctrl_soc_info must be allocated in
> > pinctrl-s32cc and then create a new struct s32_pinctrl_soc_data in order
> > to represent const .data in of_device_id. To combine these two structures,
> > a s32_pinctrl_soc_data pointer is introduced in s32_pinctrl_soc_info.
> >
> > Besides, use of_device_get_match_data() instead of of_match_device() since
> > the driver only needs to retrieve the .data from of_device_id.
>
> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> (casting question is minor and can be addressed in v5, if can be done,
> or when applying)
>
Thanks for reviewing this patch!
I will prepare v5 next Monday for solving this question.
Regards,
Chester
> > Suggested-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> > Signed-off-by: Chester Lin <clin@suse.com>
> > ---
> > Changes in v4:
> > - Retrieve the matched device data by calling of_device_get_match_data()
> > and remove unnecessary type casting. (Merged from the previous v3 series
> > [PATCH v3 1/6])
> >
> > drivers/pinctrl/nxp/pinctrl-s32.h | 14 +++++++++-----
> > drivers/pinctrl/nxp/pinctrl-s32cc.c | 30 +++++++++++++++++------------
> > drivers/pinctrl/nxp/pinctrl-s32g2.c | 13 +++++--------
> > 3 files changed, 32 insertions(+), 25 deletions(-)
> >
> > diff --git a/drivers/pinctrl/nxp/pinctrl-s32.h b/drivers/pinctrl/nxp/pinctrl-s32.h
> > index 2f7aecd462e4..add3c77ddfed 100644
> > --- a/drivers/pinctrl/nxp/pinctrl-s32.h
> > +++ b/drivers/pinctrl/nxp/pinctrl-s32.h
> > @@ -34,24 +34,28 @@ struct s32_pin_range {
> > unsigned int end;
> > };
> >
> > -struct s32_pinctrl_soc_info {
> > - struct device *dev;
> > +struct s32_pinctrl_soc_data {
> > const struct pinctrl_pin_desc *pins;
> > unsigned int npins;
> > + const struct s32_pin_range *mem_pin_ranges;
> > + unsigned int mem_regions;
> > +};
> > +
> > +struct s32_pinctrl_soc_info {
> > + struct device *dev;
> > + const struct s32_pinctrl_soc_data *soc_data;
> > struct s32_pin_group *groups;
> > unsigned int ngroups;
> > struct pinfunction *functions;
> > unsigned int nfunctions;
> > unsigned int grp_index;
> > - const struct s32_pin_range *mem_pin_ranges;
> > - unsigned int mem_regions;
> > };
> >
> > #define S32_PINCTRL_PIN(pin) PINCTRL_PIN(pin, #pin)
> > #define S32_PIN_RANGE(_start, _end) { .start = _start, .end = _end }
> >
> > int s32_pinctrl_probe(struct platform_device *pdev,
> > - struct s32_pinctrl_soc_info *info);
> > + const struct s32_pinctrl_soc_data *soc_data);
> > int s32_pinctrl_resume(struct device *dev);
> > int s32_pinctrl_suspend(struct device *dev);
> > #endif /* __DRIVERS_PINCTRL_S32_H */
> > diff --git a/drivers/pinctrl/nxp/pinctrl-s32cc.c b/drivers/pinctrl/nxp/pinctrl-s32cc.c
> > index 8373468719b6..41e024160f36 100644
> > --- a/drivers/pinctrl/nxp/pinctrl-s32cc.c
> > +++ b/drivers/pinctrl/nxp/pinctrl-s32cc.c
> > @@ -106,7 +106,7 @@ s32_get_region(struct pinctrl_dev *pctldev, unsigned int pin)
> > {
> > struct s32_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
> > const struct s32_pin_range *pin_range;
> > - unsigned int mem_regions = ipctl->info->mem_regions;
> > + unsigned int mem_regions = ipctl->info->soc_data->mem_regions;
> > unsigned int i;
> >
> > for (i = 0; i < mem_regions; i++) {
> > @@ -688,8 +688,8 @@ int s32_pinctrl_suspend(struct device *dev)
> > int ret;
> > unsigned int config;
> >
> > - for (i = 0; i < info->npins; i++) {
> > - pin = &info->pins[i];
> > + for (i = 0; i < info->soc_data->npins; i++) {
> > + pin = &info->soc_data->pins[i];
> >
> > if (!s32_pinctrl_should_save(ipctl, pin->number))
> > continue;
> > @@ -713,8 +713,8 @@ int s32_pinctrl_resume(struct device *dev)
> > struct s32_pinctrl_context *saved_context = &ipctl->saved_context;
> > int ret, i;
> >
> > - for (i = 0; i < info->npins; i++) {
> > - pin = &info->pins[i];
> > + for (i = 0; i < info->soc_data->npins; i++) {
> > + pin = &info->soc_data->pins[i];
> >
> > if (!s32_pinctrl_should_save(ipctl, pin->number))
> > continue;
> > @@ -831,7 +831,7 @@ static int s32_pinctrl_probe_dt(struct platform_device *pdev,
> > struct resource *res;
> > struct regmap *map;
> > void __iomem *base;
> > - int mem_regions = info->mem_regions;
> > + unsigned int mem_regions = info->soc_data->mem_regions;
> > int ret;
> > u32 nfuncs = 0;
> > u32 i = 0;
> > @@ -869,7 +869,7 @@ static int s32_pinctrl_probe_dt(struct platform_device *pdev,
> > }
> >
> > ipctl->regions[i].map = map;
> > - ipctl->regions[i].pin_range = &info->mem_pin_ranges[i];
> > + ipctl->regions[i].pin_range = &info->soc_data->mem_pin_ranges[i];
> > }
> >
> > nfuncs = of_get_child_count(np);
> > @@ -904,20 +904,26 @@ static int s32_pinctrl_probe_dt(struct platform_device *pdev,
> > }
> >
> > int s32_pinctrl_probe(struct platform_device *pdev,
> > - struct s32_pinctrl_soc_info *info)
> > + const struct s32_pinctrl_soc_data *soc_data)
> > {
> > struct s32_pinctrl *ipctl;
> > int ret;
> > struct pinctrl_desc *s32_pinctrl_desc;
> > + struct s32_pinctrl_soc_info *info;
> > #ifdef CONFIG_PM_SLEEP
> > struct s32_pinctrl_context *saved_context;
> > #endif
> >
> > - if (!info || !info->pins || !info->npins) {
> > + if (!soc_data || !soc_data->pins || !soc_data->npins) {
> > dev_err(&pdev->dev, "wrong pinctrl info\n");
> > return -EINVAL;
> > }
> >
> > + info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
> > + if (!info)
> > + return -ENOMEM;
> > +
> > + info->soc_data = soc_data;
> > info->dev = &pdev->dev;
> >
> > /* Create state holders etc for this driver */
> > @@ -938,8 +944,8 @@ int s32_pinctrl_probe(struct platform_device *pdev,
> > return -ENOMEM;
> >
> > s32_pinctrl_desc->name = dev_name(&pdev->dev);
> > - s32_pinctrl_desc->pins = info->pins;
> > - s32_pinctrl_desc->npins = info->npins;
> > + s32_pinctrl_desc->pins = info->soc_data->pins;
> > + s32_pinctrl_desc->npins = info->soc_data->npins;
> > s32_pinctrl_desc->pctlops = &s32_pctrl_ops;
> > s32_pinctrl_desc->pmxops = &s32_pmx_ops;
> > s32_pinctrl_desc->confops = &s32_pinconf_ops;
> > @@ -960,7 +966,7 @@ int s32_pinctrl_probe(struct platform_device *pdev,
> > #ifdef CONFIG_PM_SLEEP
> > saved_context = &ipctl->saved_context;
> > saved_context->pads =
> > - devm_kcalloc(&pdev->dev, info->npins,
> > + devm_kcalloc(&pdev->dev, info->soc_data->npins,
> > sizeof(*saved_context->pads),
> > GFP_KERNEL);
> > if (!saved_context->pads)
> > diff --git a/drivers/pinctrl/nxp/pinctrl-s32g2.c b/drivers/pinctrl/nxp/pinctrl-s32g2.c
> > index d9f3ff6794ea..e0944c071c8c 100644
> > --- a/drivers/pinctrl/nxp/pinctrl-s32g2.c
> > +++ b/drivers/pinctrl/nxp/pinctrl-s32g2.c
> > @@ -721,7 +721,7 @@ static const struct s32_pin_range s32_pin_ranges_siul2[] = {
> > S32_PIN_RANGE(942, 1007),
> > };
> >
> > -static struct s32_pinctrl_soc_info s32_pinctrl_info = {
> > +static struct s32_pinctrl_soc_data s32_pinctrl_data = {
> > .pins = s32_pinctrl_pads_siul2,
> > .npins = ARRAY_SIZE(s32_pinctrl_pads_siul2),
> > .mem_pin_ranges = s32_pin_ranges_siul2,
> > @@ -732,7 +732,7 @@ static const struct of_device_id s32_pinctrl_of_match[] = {
> > {
> >
> > .compatible = "nxp,s32g2-siul2-pinctrl",
> > - .data = (void *) &s32_pinctrl_info,
> > + .data = (void *) &s32_pinctrl_data,
> > },
> > { /* sentinel */ }
> > };
> > @@ -740,14 +740,11 @@ MODULE_DEVICE_TABLE(of, s32_pinctrl_of_match);
> >
> > static int s32g_pinctrl_probe(struct platform_device *pdev)
> > {
> > - const struct of_device_id *of_id =
> > - of_match_device(s32_pinctrl_of_match, &pdev->dev);
> > + const struct s32_pinctrl_soc_data *soc_data;
> >
> > - if (!of_id)
> > - return -ENODEV;
> > + soc_data = of_device_get_match_data(&pdev->dev);
> >
> > - return s32_pinctrl_probe
> > - (pdev, (struct s32_pinctrl_soc_info *) of_id->data);
> > + return s32_pinctrl_probe(pdev, soc_data);
> > }
> >
> > static const struct dev_pm_ops s32g_pinctrl_pm_ops = {
> > --
> > 2.37.3
> >
>
>
> --
> With Best Regards,
> Andy Shevchenko
_______________________________________________
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:[~2023-03-25 3:03 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-24 14:36 [PATCH v4 0/5] pinctrl: s32: driver improvements and generic struct use Chester Lin
2023-03-24 14:36 ` Chester Lin
2023-03-24 14:36 ` [PATCH v4 1/5] pinctrl: s32: refine error/return/config checks and simplify driver codes Chester Lin
2023-03-24 14:36 ` Chester Lin
2023-03-24 14:36 ` [PATCH v4 2/5] pinctrl: s32cc: refactor pin config parsing Chester Lin
2023-03-24 14:36 ` Chester Lin
2023-03-24 14:36 ` [PATCH v4 3/5] pinctrl: s32cc: embed generic struct pingroup Chester Lin
2023-03-24 14:36 ` Chester Lin
2023-03-24 14:36 ` [PATCH v4 4/5] pinctrl: s32cc: Use generic struct data to describe pin function Chester Lin
2023-03-24 14:36 ` Chester Lin
2023-03-24 14:36 ` [PATCH v4 5/5] pinctrl: s32: separate const device data from struct s32_pinctrl_soc_info Chester Lin
2023-03-24 14:36 ` Chester Lin
2023-03-24 14:55 ` Andy Shevchenko
2023-03-24 14:55 ` Andy Shevchenko
2023-03-24 14:57 ` Andy Shevchenko
2023-03-24 14:57 ` Andy Shevchenko
2023-03-25 3:02 ` Chester Lin [this message]
2023-03-25 3:02 ` Chester Lin
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=ZB5kY9iBqi68nafl@linux-8mug \
--to=clin@suse.com \
--cc=Ghennadi.Procopciuc@oss.nxp.com \
--cc=afaerber@suse.de \
--cc=andrei.stefanescu@nxp.com \
--cc=andy.shevchenko@gmail.com \
--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=mbrugger@suse.com \
--cc=radu-nicolae.pirea@nxp.com \
--cc=s32@nxp.com \
/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.