driver: interrupt_controller: Add support for stm32l0x

Add kconfig and c code for stm32l0x interrupt controller driver

Signed-off-by: Endre Karlson <endre.karlson@gmail.com>
This commit is contained in:
Endre Karlson 2018-02-05 13:50:49 +01:00 committed by Kumar Gala
parent ef1d32b8ef
commit 8e401e505e
2 changed files with 38 additions and 6 deletions

View File

@ -16,7 +16,7 @@ config EXTI_STM32
config EXTI_STM32_EXTI1_0_IRQ_PRI
int "EXTI1:0 IRQ priority"
depends on EXTI_STM32
depends on SOC_SERIES_STM32F0X
depends on SOC_SERIES_STM32F0X || SOC_SERIES_STM32L0X
default 0
help
IRQ priority of EXTI1:0 interrupt
@ -24,7 +24,7 @@ config EXTI_STM32_EXTI1_0_IRQ_PRI
config EXTI_STM32_EXTI3_2_IRQ_PRI
int "EXTI3:2 IRQ priority"
depends on EXTI_STM32
depends on SOC_SERIES_STM32F0X
depends on SOC_SERIES_STM32F0X || SOC_SERIES_STM32L0X
default 0
help
IRQ priority of EXTI3:2 interrupt
@ -32,12 +32,12 @@ config EXTI_STM32_EXTI3_2_IRQ_PRI
config EXTI_STM32_EXTI15_4_IRQ_PRI
int "EXTI15:4 IRQ priority"
depends on EXTI_STM32
depends on SOC_SERIES_STM32F0X
depends on SOC_SERIES_STM32F0X || SOC_SERIES_STM32L0X
default 0
help
IRQ priority of EXTI15:4 interrupt
if SOC_SERIES_STM32F0X!=y
if SOC_SERIES_STM32F0X!=y && SOC_SERIES_STM32L0X!=y
config EXTI_STM32_EXTI0_IRQ_PRI
int "EXTI0 IRQ priority"
@ -88,7 +88,7 @@ config EXTI_STM32_EXTI15_10_IRQ_PRI
help
IRQ priority of EXTI15:10 interrupt
endif # SOC_SERIES_STM32F0X!=y
endif # SOC_SERIES_STM32F0X!=y && SOC_SERIES_STM32L0X!=y
config EXTI_STM32_EXTI16_IRQ_PRI
int "EXTI16 IRQ priority"

View File

@ -35,6 +35,8 @@
#define EXTI_LINES 29
#elif CONFIG_SOC_SERIES_STM32F4X
#define EXTI_LINES 23
#elif defined(CONFIG_SOC_SERIES_STM32L0X)
#define EXTI_LINES 30
#elif defined(CONFIG_SOC_SERIES_STM32L4X)
#define EXTI_LINES 40
#endif
@ -154,6 +156,23 @@ void stm32_exti_enable(int line)
break;
}
}
#elif defined(CONFIG_SOC_SERIES_STM32L0X)
if (line >= 4 && line <= 15) {
irqnum = STM32L0_IRQ_EXTI4_15;
} else if (line >= 2 && line <= 3) {
irqnum = STM32L0_IRQ_EXTI2_3;
} else if (line >= 0 && line <= 1) {
irqnum = STM32L0_IRQ_EXTI0_1;
} else {
/* > 15 are not mapped on an IRQ */
/*
* On STM32L0X, this function also support enabling EXTI
* lines that are not connected to an IRQ. This might be used
* by other drivers or boards, to allow the device wakeup on
* some non-GPIO signals.
*/
return;
}
#elif defined(CONFIG_SOC_SERIES_STM32L4X)
if (line >= 5 && line <= 9) {
irqnum = STM32L4_IRQ_EXTI9_5;
@ -254,7 +273,7 @@ static void __stm32_exti_isr(int min, int max, void *arg)
}
}
#ifdef CONFIG_SOC_SERIES_STM32F0X
#if defined(CONFIG_SOC_SERIES_STM32F0X) || defined(CONFIG_SOC_SERIES_STM32L0X)
static inline void __stm32_exti_isr_0_1(void *arg)
{
__stm32_exti_isr(0, 2, arg);
@ -502,6 +521,19 @@ static void __stm32_exti_connect_irqs(struct device *dev)
CONFIG_EXTI_STM32_EXTI22_IRQ_PRI,
__stm32_exti_isr_22, DEVICE_GET(exti_stm32),
0);
#elif defined(CONFIG_SOC_SERIES_STM32L0X)
IRQ_CONNECT(STM32L0_IRQ_EXTI0_1,
CONFIG_EXTI_STM32_EXTI1_0_IRQ_PRI,
__stm32_exti_isr_0_1, DEVICE_GET(exti_stm32),
0);
IRQ_CONNECT(STM32L0_IRQ_EXTI2_3,
CONFIG_EXTI_STM32_EXTI3_2_IRQ_PRI,
__stm32_exti_isr_2_3, DEVICE_GET(exti_stm32),
0);
IRQ_CONNECT(STM32L0_IRQ_EXTI4_15,
CONFIG_EXTI_STM32_EXTI15_4_IRQ_PRI,
__stm32_exti_isr_4_15, DEVICE_GET(exti_stm32),
0);
#elif defined(CONFIG_SOC_SERIES_STM32L4X)
IRQ_CONNECT(STM32L4_IRQ_EXTI0,
CONFIG_EXTI_STM32_EXTI0_IRQ_PRI,