driver: interrupt_controller: Add support for stm32f2

Add kconfig and c code for stm32f2 interrupt controller driver

Signed-off-by: qianfan Zhao <qianfanguijin@163.com>
diff --git a/drivers/interrupt_controller/Kconfig.stm32 b/drivers/interrupt_controller/Kconfig.stm32
index 1951858..54b4fd4 100644
--- a/drivers/interrupt_controller/Kconfig.stm32
+++ b/drivers/interrupt_controller/Kconfig.stm32
@@ -93,7 +93,7 @@
 config EXTI_STM32_PVD_IRQ_PRI
 	int "RVD Through IRQ priority"
 	depends on EXTI_STM32
-	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X
+	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32F2X
 	default 0
 	help
 	 IRQ priority of RVD Through interrupt
@@ -101,7 +101,7 @@
 config EXTI_STM32_RTC_ALARM_IRQ_PRI
 	int "RTC Alarm IRQ priority"
 	depends on EXTI_STM32
-	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X
+	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32F2X
 	default 0
 	help
 	 IRQ priority of RTC Alarm interrupt
@@ -109,7 +109,7 @@
 config EXTI_STM32_OTG_FS_WKUP_IRQ_PRI
 	int "USB OTG FS Wake Up IRQ priority"
 	depends on EXTI_STM32
-	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X
+	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32F2X
 	default 0
 	help
 	 IRQ priority of USB OTG FS Wake interrupt
@@ -117,7 +117,7 @@
 config EXTI_STM32_TAMP_STAMP_IRQ_PRI
 	int "Tamper and Timestamp IRQ priority"
 	depends on EXTI_STM32
-	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X
+	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32F2X
 	default 0
 	help
 	 IRQ priority of Tamper and Timestamp interrupt
@@ -125,7 +125,7 @@
 config EXTI_STM32_RTC_WKUP_IRQ_PRI
 	int "RTC Wake Up IRQ priority"
 	depends on EXTI_STM32
-	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X
+	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32F2X
 	default 0
 	help
 	 IRQ priority of RTC Wake Up interrupt
diff --git a/drivers/interrupt_controller/exti_stm32.c b/drivers/interrupt_controller/exti_stm32.c
index 1b3afcd..42dbc18 100644
--- a/drivers/interrupt_controller/exti_stm32.c
+++ b/drivers/interrupt_controller/exti_stm32.c
@@ -27,6 +27,8 @@
 #define EXTI_LINES 32
 #elif CONFIG_SOC_SERIES_STM32F1X
 #define EXTI_LINES 19
+#elif CONFIG_SOC_SERIES_STM32F2X
+#define EXTI_LINES 23
 #elif CONFIG_SOC_STM32F303XC
 #define EXTI_LINES 36
 #elif CONFIG_SOC_STM32F334X8
@@ -122,6 +124,33 @@
 		/* pins 0..4 are mapped to EXTI0.. EXTI4 */
 		irqnum = EXTI0_IRQn + line;
 	}
+#elif CONFIG_SOC_SERIES_STM32F2X
+	if (line >= 5 && line <= 9) {
+		irqnum = EXTI9_5_IRQn;
+	} else if (line >= 10 && line <= 15) {
+		irqnum = EXTI15_10_IRQn;
+	} else if (line >= 0 && line <= 4) {
+		/* pins 0..4 are mapped to EXTI0.. EXTI4 */
+		irqnum = EXTI0_IRQn + line;
+	} else {
+		switch (line) {
+		case 16:
+			irqnum = PVD_IRQn;
+			break;
+		case 17:
+			irqnum = RTC_Alarm_IRQn;
+			break;
+		case 18:
+			irqnum = OTG_FS_WKUP_IRQn;
+			break;
+		case 21:
+			irqnum = TAMP_STAMP_IRQn;
+			break;
+		case 22:
+			irqnum = RTC_WKUP_IRQn;
+			break;
+		}
+	}
 #elif CONFIG_SOC_SERIES_STM32F3X
 	if (line >= 5 && line <= 9) {
 		irqnum = EXTI9_5_IRQn;
@@ -357,7 +386,9 @@
 	__stm32_exti_isr(10, 16, arg);
 }
 
-#if defined(CONFIG_SOC_SERIES_STM32F4X) || defined(CONFIG_SOC_SERIES_STM32F7X)
+#if defined(CONFIG_SOC_SERIES_STM32F4X) || \
+	defined(CONFIG_SOC_SERIES_STM32F7X) || \
+	defined(CONFIG_SOC_SERIES_STM32F2X)
 static inline void __stm32_exti_isr_16(void *arg)
 {
 	__stm32_exti_isr(16, 17, arg);
@@ -382,7 +413,7 @@
 {
 	__stm32_exti_isr(22, 23, arg);
 }
-#endif /* CONFIG_SOC_SERIES_STM32F4X || CONFIG_SOC_SERIES_STM32F7X*/
+#endif /* CONFIG_SOC_SERIES_STM32{F4X F7X, F2X} */
 #ifdef CONFIG_SOC_SERIES_STM32F7X
 static inline void __stm32_exti_isr_23(void *arg)
 {
@@ -481,6 +512,55 @@
 		CONFIG_EXTI_STM32_EXTI15_10_IRQ_PRI,
 		__stm32_exti_isr_15_10, DEVICE_GET(exti_stm32),
 		0);
+#elif CONFIG_SOC_SERIES_STM32F2X
+	IRQ_CONNECT(EXTI0_IRQn,
+		CONFIG_EXTI_STM32_EXTI0_IRQ_PRI,
+		__stm32_exti_isr_0, DEVICE_GET(exti_stm32),
+		0);
+	IRQ_CONNECT(EXTI1_IRQn,
+		CONFIG_EXTI_STM32_EXTI1_IRQ_PRI,
+		__stm32_exti_isr_1, DEVICE_GET(exti_stm32),
+		0);
+	IRQ_CONNECT(EXTI2_IRQn,
+		CONFIG_EXTI_STM32_EXTI2_IRQ_PRI,
+		__stm32_exti_isr_2, DEVICE_GET(exti_stm32),
+		0);
+	IRQ_CONNECT(EXTI3_IRQn,
+		CONFIG_EXTI_STM32_EXTI3_IRQ_PRI,
+		__stm32_exti_isr_3, DEVICE_GET(exti_stm32),
+		0);
+	IRQ_CONNECT(EXTI4_IRQn,
+		CONFIG_EXTI_STM32_EXTI4_IRQ_PRI,
+		__stm32_exti_isr_4, DEVICE_GET(exti_stm32),
+		0);
+	IRQ_CONNECT(EXTI9_5_IRQn,
+		CONFIG_EXTI_STM32_EXTI9_5_IRQ_PRI,
+		__stm32_exti_isr_9_5, DEVICE_GET(exti_stm32),
+		0);
+	IRQ_CONNECT(EXTI15_10_IRQn,
+		CONFIG_EXTI_STM32_EXTI15_10_IRQ_PRI,
+		__stm32_exti_isr_15_10, DEVICE_GET(exti_stm32),
+		0);
+	IRQ_CONNECT(PVD_IRQn,
+		CONFIG_EXTI_STM32_PVD_IRQ_PRI,
+		__stm32_exti_isr_16, DEVICE_GET(exti_stm32),
+		0);
+	IRQ_CONNECT(RTC_Alarm_IRQn,
+		CONFIG_EXTI_STM32_RTC_ALARM_IRQ_PRI,
+		__stm32_exti_isr_17, DEVICE_GET(exti_stm32),
+		0);
+	IRQ_CONNECT(OTG_FS_WKUP_IRQn,
+		CONFIG_EXTI_STM32_OTG_FS_WKUP_IRQ_PRI,
+		__stm32_exti_isr_18, DEVICE_GET(exti_stm32),
+		0);
+	IRQ_CONNECT(TAMP_STAMP_IRQn,
+		CONFIG_EXTI_STM32_TAMP_STAMP_IRQ_PRI,
+		__stm32_exti_isr_21, DEVICE_GET(exti_stm32),
+		0);
+	IRQ_CONNECT(RTC_WKUP_IRQn,
+		CONFIG_EXTI_STM32_RTC_WKUP_IRQ_PRI,
+		__stm32_exti_isr_22, DEVICE_GET(exti_stm32),
+		0);
 #elif CONFIG_SOC_SERIES_STM32F3X
 	IRQ_CONNECT(EXTI0_IRQn,
 		CONFIG_EXTI_STM32_EXTI0_IRQ_PRI,