[PATCH v2 03/14] iio: adc: stm32-adc: core: configurable number of interrupts
Fabrice Gasnier
fabrice.gasnier at foss.st.com
Wed Sep 23 08:39:06 PDT 2026
Make the number of interrupts configurable to prepare stm32mp2
support. Read from the SoC compatible data, and add it to
private data struct.
No functional change intended.
Co-developed-by: Cheick Traore <cheick.traore-ext at st.com>
Signed-off-by: Cheick Traore <cheick.traore-ext at st.com>
Co-developed-by: Olivier Moysan <olivier.moysan at foss.st.com>
Signed-off-by: Olivier Moysan <olivier.moysan at foss.st.com>
Signed-off-by: Fabrice Gasnier <fabrice.gasnier at foss.st.com>
---
Changes in v2:
- new precursor patch as advised by Andy and Jonathan to render
num_irqs configurable
---
drivers/iio/adc/stm32-adc-core.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/iio/adc/stm32-adc-core.c b/drivers/iio/adc/stm32-adc-core.c
index 14ed50bb3ab5..5845173e288c 100644
--- a/drivers/iio/adc/stm32-adc-core.c
+++ b/drivers/iio/adc/stm32-adc-core.c
@@ -94,6 +94,7 @@ struct stm32_adc_priv_cfg {
* struct stm32_adc_priv - stm32 ADC core private data
* @irq: irq(s) for ADC block
* @nb_adc_max: actual maximum number of instance per ADC block
+ * @nb_irqs: number of IRQs in the ADC block
* @domain: irq domain reference
* @aclk: clock reference for the analog circuitry
* @bclk: bus clock common for all ADCs, depends on part used
@@ -112,6 +113,7 @@ struct stm32_adc_priv_cfg {
struct stm32_adc_priv {
int irq[STM32_ADC_MAX_ADCS];
unsigned int nb_adc_max;
+ unsigned int nb_irqs;
struct irq_domain *domain;
struct clk *aclk;
struct clk *bclk;
@@ -424,7 +426,7 @@ static int stm32_adc_irq_probe(struct platform_device *pdev,
* - stm32f4/h7 shares a common interrupt line.
* - stm32mp1, has one line per ADC
*/
- for (i = 0; i < priv->cfg->num_irqs; i++) {
+ for (i = 0; i < priv->nb_irqs; i++) {
priv->irq[i] = platform_get_irq(pdev, i);
if (priv->irq[i] < 0)
return priv->irq[i];
@@ -439,7 +441,7 @@ static int stm32_adc_irq_probe(struct platform_device *pdev,
return -ENOMEM;
}
- for (i = 0; i < priv->cfg->num_irqs; i++)
+ for (i = 0; i < priv->nb_irqs; i++)
irq_set_chained_handler_and_data(priv->irq[i],
stm32_adc_irq_handler, priv);
@@ -456,7 +458,7 @@ static void stm32_adc_irq_remove(struct platform_device *pdev,
irq_dispose_mapping(irq_find_mapping(priv->domain, hwirq));
irq_domain_remove(priv->domain);
- for (i = 0; i < priv->cfg->num_irqs; i++)
+ for (i = 0; i < priv->nb_irqs; i++)
irq_set_chained_handler(priv->irq[i], NULL);
}
@@ -730,6 +732,7 @@ static int stm32_adc_probe(struct platform_device *pdev)
priv->cfg = device_get_match_data(dev);
priv->nb_adc_max = priv->cfg->num_adcs;
+ priv->nb_irqs = priv->cfg->num_irqs;
spin_lock_init(&priv->common.lock);
priv->common.base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
--
2.43.0
More information about the linux-arm-kernel
mailing list