18
18
#include <zephyr/drivers/gpio.h>
19
19
#include <zephyr/drivers/clock_control/stm32_clock_control.h>
20
20
#include <zephyr/sys/util.h>
21
- #include <zephyr/drivers/interrupt_controller/gpio_intc_stm32 .h>
21
+ #include <zephyr/drivers/interrupt_controller/intc_exti_stm32 .h>
22
22
#include <zephyr/pm/device.h>
23
23
#include <zephyr/pm/device_runtime.h>
24
24
#include <zephyr/drivers/misc/stm32_wkup_pins/stm32_wkup_pins.h>
@@ -224,11 +224,11 @@ static inline void gpio_stm32_disable_pin_irqs(uint32_t port, gpio_pin_t pin)
224
224
return ;
225
225
}
226
226
#endif
227
- stm32_gpio_irq_line_t irq_line = stm32_gpio_intc_get_pin_irq_line ( port , pin );
228
-
229
- stm32_gpio_intc_disable_line ( irq_line );
230
- stm32_gpio_intc_remove_irq_callback ( irq_line );
231
- stm32_gpio_intc_select_line_trigger ( irq_line , STM32_GPIO_IRQ_TRIG_NONE );
227
+ /**
228
+ * GPIO pins are connected to EXTI lines 0 to 15 and directly represent EXTI
229
+ * line number
230
+ */
231
+ stm32_exti_disable ( pin );
232
232
}
233
233
234
234
/**
@@ -585,16 +585,15 @@ static int gpio_stm32_pin_interrupt_configure(const struct device *dev,
585
585
{
586
586
const struct gpio_stm32_config * cfg = dev -> config ;
587
587
struct gpio_stm32_data * data = dev -> data ;
588
- const stm32_gpio_irq_line_t irq_line = stm32_gpio_intc_get_pin_irq_line (cfg -> port , pin );
589
588
uint32_t irq_trigger = 0 ;
590
589
int err = 0 ;
591
590
592
591
#ifdef CONFIG_GPIO_ENABLE_DISABLE_INTERRUPT
593
592
if (mode == GPIO_INT_MODE_DISABLE_ONLY ) {
594
- stm32_gpio_intc_disable_line ( irq_line );
593
+ stm32_exti_disable_irq ( pin );
595
594
goto exit ;
596
595
} else if (mode == GPIO_INT_MODE_ENABLE_ONLY ) {
597
- stm32_gpio_intc_enable_line ( irq_line );
596
+ stm32_exti_enable_irq ( pin );
598
597
goto exit ;
599
598
}
600
599
#endif /* CONFIG_GPIO_ENABLE_DISABLE_INTERRUPT */
@@ -612,10 +611,10 @@ static int gpio_stm32_pin_interrupt_configure(const struct device *dev,
612
611
} else {
613
612
switch (trig ) {
614
613
case GPIO_INT_TRIG_LOW :
615
- irq_trigger = STM32_GPIO_IRQ_TRIG_LOW_LEVEL ;
614
+ irq_trigger = STM32_EXTI_TRIG_LOW_LEVEL ;
616
615
break ;
617
616
case GPIO_INT_TRIG_HIGH :
618
- irq_trigger = STM32_GPIO_IRQ_TRIG_HIGH_LEVEL ;
617
+ irq_trigger = STM32_EXTI_TRIG_HIGH_LEVEL ;
619
618
break ;
620
619
default :
621
620
err = - EINVAL ;
@@ -625,32 +624,29 @@ static int gpio_stm32_pin_interrupt_configure(const struct device *dev,
625
624
} else {
626
625
switch (trig ) {
627
626
case GPIO_INT_TRIG_LOW :
628
- irq_trigger = STM32_GPIO_IRQ_TRIG_FALLING ;
627
+ irq_trigger = STM32_EXTI_TRIG_FALLING ;
629
628
break ;
630
629
case GPIO_INT_TRIG_HIGH :
631
- irq_trigger = STM32_GPIO_IRQ_TRIG_RISING ;
630
+ irq_trigger = STM32_EXTI_TRIG_RISING ;
632
631
break ;
633
632
case GPIO_INT_TRIG_BOTH :
634
- irq_trigger = STM32_GPIO_IRQ_TRIG_BOTH ;
633
+ irq_trigger = STM32_EXTI_TRIG_BOTH ;
635
634
break ;
636
635
default :
637
636
err = - EINVAL ;
638
637
goto exit ;
639
638
}
640
639
}
641
640
642
- if (stm32_gpio_intc_set_irq_callback (irq_line , gpio_stm32_isr , data ) != 0 ) {
643
- err = - EBUSY ;
644
- goto exit ;
645
- }
646
-
647
641
#if defined(CONFIG_EXTI_STM32 )
648
642
stm32_exti_set_line_src_port (pin , cfg -> port );
649
643
#endif
650
644
651
- stm32_gpio_intc_select_line_trigger (irq_line , irq_trigger );
652
-
653
- stm32_gpio_intc_enable_line (irq_line );
645
+ err = stm32_exti_enable (pin , irq_trigger , STM32_EXTI_MODE_IT , gpio_stm32_isr ,
646
+ data );
647
+ if (err != 0 ) {
648
+ err = - EBUSY ;
649
+ }
654
650
655
651
exit :
656
652
return err ;
0 commit comments