Message ID | 20241218090153.742869-4-fabrice.gasnier@foss.st.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Add STM32MP25 timers support: MFD, PWM, IIO and counter drivers | expand |
On Wed, 18 Dec 2024 10:01:47 +0100 Fabrice Gasnier <fabrice.gasnier@foss.st.com> wrote: > Add support for STM32MP25 SoC. Use newly introduced compatible to handle > this new HW variant. Add TIM20 trigger definitions that can be used by > the stm32 analog-to-digital converter. Use compatible data to identify > it. > As the counter framework is now superseding the deprecated IIO counter > interface (IIO_COUNT), don't support it. Only register IIO trigger > devices for ADC usage. So, make the valids_table a cfg option. > > Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com> Looks good to me. Looks like I can just pick this up for IIO? Or is thOre a dependency I'm missing? Just in case it goes another route. Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Jonathan > --- > drivers/iio/trigger/stm32-timer-trigger.c | 21 +++++++++++++++++-- > include/linux/iio/timer/stm32-timer-trigger.h | 6 ++++++ > 2 files changed, 25 insertions(+), 2 deletions(-) > > diff --git a/drivers/iio/trigger/stm32-timer-trigger.c b/drivers/iio/trigger/stm32-timer-trigger.c > index bb60b2d7b2ec..8aaf3abf044e 100644 > --- a/drivers/iio/trigger/stm32-timer-trigger.c > +++ b/drivers/iio/trigger/stm32-timer-trigger.c > @@ -38,6 +38,9 @@ static const void *triggers_table[][MAX_TRIGGERS] = { > { TIM15_TRGO,}, > { TIM16_OC1,}, > { TIM17_OC1,}, > + { }, /* timer 18 */ > + { }, /* timer 19 */ > + { TIM20_TRGO, TIM20_TRGO2, TIM20_OC1, TIM20_OC2, TIM20_OC3, }, > }; > > /* List the triggers accepted by each timer */ > @@ -781,7 +784,7 @@ static int stm32_timer_trigger_probe(struct platform_device *pdev) > return -EINVAL; > > /* Create an IIO device only if we have triggers to be validated */ > - if (*cfg->valids_table[index]) > + if (cfg->valids_table && *cfg->valids_table[index]) > priv = stm32_setup_counter_device(dev); > else > priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); > @@ -794,7 +797,8 @@ static int stm32_timer_trigger_probe(struct platform_device *pdev) > priv->clk = ddata->clk; > priv->max_arr = ddata->max_arr; > priv->triggers = triggers_table[index]; > - priv->valids = cfg->valids_table[index]; > + if (cfg->valids_table && *cfg->valids_table[index]) > + priv->valids = cfg->valids_table[index]; > stm32_timer_detect_trgo2(priv); > mutex_init(&priv->lock); > > @@ -886,6 +890,16 @@ static const struct stm32_timer_trigger_cfg stm32h7_timer_trg_cfg = { > .num_valids_table = ARRAY_SIZE(stm32h7_valids_table), > }; > > +static const struct stm32_timer_trigger_cfg stm32mp25_timer_trg_cfg = { > + /* > + * valids_table not used: counter framework is now superseding the deprecated IIO > + * counter interface (IIO_COUNT), so don't support it. num_valids_table is only > + * kept here to register the IIO HW triggers. valids_table should be moved at some > + * point to the stm32-timer-cnt driver instead. > + */ > + .num_valids_table = ARRAY_SIZE(triggers_table), > +}; > + > static const struct of_device_id stm32_trig_of_match[] = { > { > .compatible = "st,stm32-timer-trigger", > @@ -893,6 +907,9 @@ static const struct of_device_id stm32_trig_of_match[] = { > }, { > .compatible = "st,stm32h7-timer-trigger", > .data = (void *)&stm32h7_timer_trg_cfg, > + }, { > + .compatible = "st,stm32mp25-timer-trigger", > + .data = (void *)&stm32mp25_timer_trg_cfg, > }, > { /* end node */ }, > }; > diff --git a/include/linux/iio/timer/stm32-timer-trigger.h b/include/linux/iio/timer/stm32-timer-trigger.h > index 37572e4dc73a..1ee237b56183 100644 > --- a/include/linux/iio/timer/stm32-timer-trigger.h > +++ b/include/linux/iio/timer/stm32-timer-trigger.h > @@ -72,6 +72,12 @@ > > #define TIM17_OC1 "tim17_oc1" > > +#define TIM20_OC1 "tim20_oc1" > +#define TIM20_OC2 "tim20_oc2" > +#define TIM20_OC3 "tim20_oc3" > +#define TIM20_TRGO "tim20_trgo" > +#define TIM20_TRGO2 "tim20_trgo2" > + > #if IS_REACHABLE(CONFIG_IIO_STM32_TIMER_TRIGGER) > bool is_stm32_timer_trigger(struct iio_trigger *trig); > #else
diff --git a/drivers/iio/trigger/stm32-timer-trigger.c b/drivers/iio/trigger/stm32-timer-trigger.c index bb60b2d7b2ec..8aaf3abf044e 100644 --- a/drivers/iio/trigger/stm32-timer-trigger.c +++ b/drivers/iio/trigger/stm32-timer-trigger.c @@ -38,6 +38,9 @@ static const void *triggers_table[][MAX_TRIGGERS] = { { TIM15_TRGO,}, { TIM16_OC1,}, { TIM17_OC1,}, + { }, /* timer 18 */ + { }, /* timer 19 */ + { TIM20_TRGO, TIM20_TRGO2, TIM20_OC1, TIM20_OC2, TIM20_OC3, }, }; /* List the triggers accepted by each timer */ @@ -781,7 +784,7 @@ static int stm32_timer_trigger_probe(struct platform_device *pdev) return -EINVAL; /* Create an IIO device only if we have triggers to be validated */ - if (*cfg->valids_table[index]) + if (cfg->valids_table && *cfg->valids_table[index]) priv = stm32_setup_counter_device(dev); else priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); @@ -794,7 +797,8 @@ static int stm32_timer_trigger_probe(struct platform_device *pdev) priv->clk = ddata->clk; priv->max_arr = ddata->max_arr; priv->triggers = triggers_table[index]; - priv->valids = cfg->valids_table[index]; + if (cfg->valids_table && *cfg->valids_table[index]) + priv->valids = cfg->valids_table[index]; stm32_timer_detect_trgo2(priv); mutex_init(&priv->lock); @@ -886,6 +890,16 @@ static const struct stm32_timer_trigger_cfg stm32h7_timer_trg_cfg = { .num_valids_table = ARRAY_SIZE(stm32h7_valids_table), }; +static const struct stm32_timer_trigger_cfg stm32mp25_timer_trg_cfg = { + /* + * valids_table not used: counter framework is now superseding the deprecated IIO + * counter interface (IIO_COUNT), so don't support it. num_valids_table is only + * kept here to register the IIO HW triggers. valids_table should be moved at some + * point to the stm32-timer-cnt driver instead. + */ + .num_valids_table = ARRAY_SIZE(triggers_table), +}; + static const struct of_device_id stm32_trig_of_match[] = { { .compatible = "st,stm32-timer-trigger", @@ -893,6 +907,9 @@ static const struct of_device_id stm32_trig_of_match[] = { }, { .compatible = "st,stm32h7-timer-trigger", .data = (void *)&stm32h7_timer_trg_cfg, + }, { + .compatible = "st,stm32mp25-timer-trigger", + .data = (void *)&stm32mp25_timer_trg_cfg, }, { /* end node */ }, }; diff --git a/include/linux/iio/timer/stm32-timer-trigger.h b/include/linux/iio/timer/stm32-timer-trigger.h index 37572e4dc73a..1ee237b56183 100644 --- a/include/linux/iio/timer/stm32-timer-trigger.h +++ b/include/linux/iio/timer/stm32-timer-trigger.h @@ -72,6 +72,12 @@ #define TIM17_OC1 "tim17_oc1" +#define TIM20_OC1 "tim20_oc1" +#define TIM20_OC2 "tim20_oc2" +#define TIM20_OC3 "tim20_oc3" +#define TIM20_TRGO "tim20_trgo" +#define TIM20_TRGO2 "tim20_trgo2" + #if IS_REACHABLE(CONFIG_IIO_STM32_TIMER_TRIGGER) bool is_stm32_timer_trigger(struct iio_trigger *trig); #else
Add support for STM32MP25 SoC. Use newly introduced compatible to handle this new HW variant. Add TIM20 trigger definitions that can be used by the stm32 analog-to-digital converter. Use compatible data to identify it. As the counter framework is now superseding the deprecated IIO counter interface (IIO_COUNT), don't support it. Only register IIO trigger devices for ADC usage. So, make the valids_table a cfg option. Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com> --- drivers/iio/trigger/stm32-timer-trigger.c | 21 +++++++++++++++++-- include/linux/iio/timer/stm32-timer-trigger.h | 6 ++++++ 2 files changed, 25 insertions(+), 2 deletions(-)