From: Jonathan Cameron <jic23@kernel.org>
To: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Cc: <lee@kernel.org>, <ukleinek@kernel.org>,
<alexandre.torgue@foss.st.com>, <krzk+dt@kernel.org>,
<conor+dt@kernel.org>, <daniel.lezcano@linaro.org>,
<tglx@linutronix.de>, <robh@kernel.org>,
<catalin.marinas@arm.com>, <will@kernel.org>,
<devicetree@vger.kernel.org>, <wbg@kernel.org>,
<linux-stm32@st-md-mailman.stormreply.com>,
<linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <linux-iio@vger.kernel.org>,
<linux-pwm@vger.kernel.org>, <olivier.moysan@foss.st.com>
Subject: Re: [PATCH v4 3/8] iio: trigger: stm32-lptimer: add support for stm32mp25
Date: Mon, 31 Mar 2025 11:04:35 +0100 [thread overview]
Message-ID: <20250331110435.26157ebe@jic23-huawei> (raw)
In-Reply-To: <30d13179-66fc-4856-ac70-af051ec5fe8f@foss.st.com>
On Thu, 27 Mar 2025 17:36:00 +0100
Fabrice Gasnier <fabrice.gasnier@foss.st.com> wrote:
> On 3/15/25 13:56, Jonathan Cameron wrote:
> > On Fri, 14 Mar 2025 18:14:46 +0100
> > Fabrice Gasnier <fabrice.gasnier@foss.st.com> wrote:
> >
> >> From: Olivier Moysan <olivier.moysan@foss.st.com>
> >>
> >> Add support for STM32MP25 SoC. Use newly introduced compatible to handle
> >> this new HW variant. Add new trigger definitions that can be used by the
> >> stm32 analog-to-digital converter. Use compatible data to identify them.
> >>
> >> Signed-off-by: Olivier Moysan <olivier.moysan@foss.st.com>
> >> Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
> >
> > How do you want this to merge? If it's going through mfd because
> > of dependencies, then
> > Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> >
> > I haven't checked if there are any dependencies so shout if I should
> > pick this up directly for next cycle.
>
> Hi Jonathan, Lee,
>
> There's no build dependency, but the dt-bindings that adds the
> compatible string.
>
> Perhaps Lee can pick it up along with the mfd bindings and driver ?
>
> I'm not sure what the most suitable option is.
We don't normally worry if bindings and driver end up going through different
trees. Applied this patch to the testing branch of iio.git. I'll rebase
on rc1 once available and push out as normal togreg branch.
Thanks,
Jonathan
>
> Best Regards,
> Fabrice
> >
> > Thanks,
> >
> > Jonathan
> >
> >
> >> ---
> >> Changes in v4:
> >> - Jonathan's comment: simplify infrastructure by keeping
> >> devm_iio_trigger_register. Don't need to cast compatible data.
> >> ---
> >> drivers/iio/trigger/stm32-lptimer-trigger.c | 75 ++++++++++++++-----
> >> include/linux/iio/timer/stm32-lptim-trigger.h | 9 +++
> >> 2 files changed, 67 insertions(+), 17 deletions(-)
> >>
> >> diff --git a/drivers/iio/trigger/stm32-lptimer-trigger.c b/drivers/iio/trigger/stm32-lptimer-trigger.c
> >> index f1e18913236a..3dcc8d2fe093 100644
> >> --- a/drivers/iio/trigger/stm32-lptimer-trigger.c
> >> +++ b/drivers/iio/trigger/stm32-lptimer-trigger.c
> >> @@ -16,16 +16,43 @@
> >> #include <linux/platform_device.h>
> >> #include <linux/property.h>
> >>
> >> -/* List Low-Power Timer triggers */
> >> -static const char * const stm32_lptim_triggers[] = {
> >> - LPTIM1_OUT,
> >> - LPTIM2_OUT,
> >> - LPTIM3_OUT,
> >> +/* Maximum triggers + one trailing null entry to indicate the end of array */
> >> +#define MAX_TRIGGERS 3
> >> +
> >> +struct stm32_lptim_cfg {
> >> + const char * const (*triggers)[MAX_TRIGGERS];
> >> + unsigned int nb_triggers;
> >> +};
> >> +
> >> +/* List Low-Power Timer triggers for H7, MP13, MP15 */
> >> +static const char * const stm32_lptim_triggers[][MAX_TRIGGERS] = {
> >> + { LPTIM1_OUT,},
> >> + { LPTIM2_OUT,},
> >> + { LPTIM3_OUT,},
> >> +};
> >> +
> >> +/* List Low-Power Timer triggers for STM32MP25 */
> >> +static const char * const stm32mp25_lptim_triggers[][MAX_TRIGGERS] = {
> >> + { LPTIM1_CH1, LPTIM1_CH2, },
> >> + { LPTIM2_CH1, LPTIM2_CH2, },
> >> + { LPTIM3_CH1,},
> >> + { LPTIM4_CH1,},
> >> + { LPTIM5_OUT,},
> >> +};
> >> +
> >> +static const struct stm32_lptim_cfg stm32mp15_lptim_cfg = {
> >> + .triggers = stm32_lptim_triggers,
> >> + .nb_triggers = ARRAY_SIZE(stm32_lptim_triggers),
> >> +};
> >> +
> >> +static const struct stm32_lptim_cfg stm32mp25_lptim_cfg = {
> >> + .triggers = stm32mp25_lptim_triggers,
> >> + .nb_triggers = ARRAY_SIZE(stm32mp25_lptim_triggers),
> >> };
> >>
> >> struct stm32_lptim_trigger {
> >> struct device *dev;
> >> - const char *trg;
> >> + const char * const *triggers;
> >> };
> >>
> >> static int stm32_lptim_validate_device(struct iio_trigger *trig,
> >> @@ -56,22 +83,33 @@ EXPORT_SYMBOL(is_stm32_lptim_trigger);
> >>
> >> static int stm32_lptim_setup_trig(struct stm32_lptim_trigger *priv)
> >> {
> >> - struct iio_trigger *trig;
> >> + const char * const *cur = priv->triggers;
> >> + int ret;
> >>
> >> - trig = devm_iio_trigger_alloc(priv->dev, "%s", priv->trg);
> >> - if (!trig)
> >> - return -ENOMEM;
> >> + while (cur && *cur) {
> >> + struct iio_trigger *trig;
> >>
> >> - trig->dev.parent = priv->dev->parent;
> >> - trig->ops = &stm32_lptim_trigger_ops;
> >> - iio_trigger_set_drvdata(trig, priv);
> >> + trig = devm_iio_trigger_alloc(priv->dev, "%s", *cur);
> >> + if (!trig)
> >> + return -ENOMEM;
> >>
> >> - return devm_iio_trigger_register(priv->dev, trig);
> >> + trig->dev.parent = priv->dev->parent;
> >> + trig->ops = &stm32_lptim_trigger_ops;
> >> + iio_trigger_set_drvdata(trig, priv);
> >> +
> >> + ret = devm_iio_trigger_register(priv->dev, trig);
> >> + if (ret)
> >> + return ret;
> >> + cur++;
> >> + }
> >> +
> >> + return 0;
> >> }
> >>
> >> static int stm32_lptim_trigger_probe(struct platform_device *pdev)
> >> {
> >> struct stm32_lptim_trigger *priv;
> >> + struct stm32_lptim_cfg const *lptim_cfg;
> >> u32 index;
> >>
> >> priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
> >> @@ -81,17 +119,20 @@ static int stm32_lptim_trigger_probe(struct platform_device *pdev)
> >> if (device_property_read_u32(&pdev->dev, "reg", &index))
> >> return -EINVAL;
> >>
> >> - if (index >= ARRAY_SIZE(stm32_lptim_triggers))
> >> + lptim_cfg = device_get_match_data(&pdev->dev);
> >> +
> >> + if (index >= lptim_cfg->nb_triggers)
> >> return -EINVAL;
> >>
> >> priv->dev = &pdev->dev;
> >> - priv->trg = stm32_lptim_triggers[index];
> >> + priv->triggers = lptim_cfg->triggers[index];
> >>
> >> return stm32_lptim_setup_trig(priv);
> >> }
> >>
> >> static const struct of_device_id stm32_lptim_trig_of_match[] = {
> >> - { .compatible = "st,stm32-lptimer-trigger", },
> >> + { .compatible = "st,stm32-lptimer-trigger", .data = &stm32mp15_lptim_cfg },
> >> + { .compatible = "st,stm32mp25-lptimer-trigger", .data = &stm32mp25_lptim_cfg},
> >> {},
> >> };
> >> MODULE_DEVICE_TABLE(of, stm32_lptim_trig_of_match);
> >> diff --git a/include/linux/iio/timer/stm32-lptim-trigger.h b/include/linux/iio/timer/stm32-lptim-trigger.h
> >> index a34dcf6a6001..ce3cf0addb2e 100644
> >> --- a/include/linux/iio/timer/stm32-lptim-trigger.h
> >> +++ b/include/linux/iio/timer/stm32-lptim-trigger.h
> >> @@ -14,6 +14,15 @@
> >> #define LPTIM1_OUT "lptim1_out"
> >> #define LPTIM2_OUT "lptim2_out"
> >> #define LPTIM3_OUT "lptim3_out"
> >> +#define LPTIM4_OUT "lptim4_out"
> >> +#define LPTIM5_OUT "lptim5_out"
> >> +
> >> +#define LPTIM1_CH1 "lptim1_ch1"
> >> +#define LPTIM1_CH2 "lptim1_ch2"
> >> +#define LPTIM2_CH1 "lptim2_ch1"
> >> +#define LPTIM2_CH2 "lptim2_ch2"
> >> +#define LPTIM3_CH1 "lptim3_ch1"
> >> +#define LPTIM4_CH1 "lptim4_ch1"
> >>
> >> #if IS_REACHABLE(CONFIG_IIO_STM32_LPTIMER_TRIGGER)
> >> bool is_stm32_lptim_trigger(struct iio_trigger *trig);
> >
next prev parent reply other threads:[~2025-03-31 10:04 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-14 17:14 [PATCH v4 0/8] Add STM32MP25 LPTIM support: MFD, PWM, IIO, counter, clocksource Fabrice Gasnier
2025-03-14 17:14 ` [PATCH v4 1/8] dt-bindings: mfd: stm32-lptimer: add support for stm32mp25 Fabrice Gasnier
2025-03-14 17:14 ` [PATCH v4 2/8] " Fabrice Gasnier
2025-04-04 14:40 ` Lee Jones
2025-04-24 13:01 ` Lee Jones
2025-04-25 12:50 ` Fabrice Gasnier
2025-03-14 17:14 ` [PATCH v4 3/8] iio: trigger: " Fabrice Gasnier
2025-03-15 12:56 ` Jonathan Cameron
2025-03-27 16:36 ` Fabrice Gasnier
2025-03-31 10:04 ` Jonathan Cameron [this message]
2025-03-14 17:14 ` [PATCH v4 4/8] clocksource: " Fabrice Gasnier
2025-04-08 14:48 ` Fabrice Gasnier
2025-03-14 17:14 ` [PATCH v4 5/8] pwm: stm32-lp: " Fabrice Gasnier
2025-04-04 15:07 ` Uwe Kleine-König
2025-03-14 17:14 ` [PATCH v4 6/8] arm64: defconfig: enable STM32 LP timer clockevent driver Fabrice Gasnier
2025-03-14 17:14 ` [PATCH v4 7/8] arm64: dts: st: add low-power timer nodes on stm32mp251 Fabrice Gasnier
2025-03-14 17:14 ` [PATCH v4 8/8] arm64: dts: st: use lptimer3 as tick broadcast source on stm32mp257f-ev1 Fabrice Gasnier
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=20250331110435.26157ebe@jic23-huawei \
--to=jic23@kernel.org \
--cc=alexandre.torgue@foss.st.com \
--cc=catalin.marinas@arm.com \
--cc=conor+dt@kernel.org \
--cc=daniel.lezcano@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=fabrice.gasnier@foss.st.com \
--cc=krzk+dt@kernel.org \
--cc=lee@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pwm@vger.kernel.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=olivier.moysan@foss.st.com \
--cc=robh@kernel.org \
--cc=tglx@linutronix.de \
--cc=ukleinek@kernel.org \
--cc=wbg@kernel.org \
--cc=will@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox