drivers: gpio: stm32 gpio driver supporting the stm32H7RS
Introduce the stm32h7RS serie to the gpio driver, based on the stm32h7 The SBS controller is used to configure the EXTI line among the different GPIO port. Signed-off-by: Francois Ramu <francois.ramu@st.com>
This commit is contained in:
parent
c0750e9867
commit
bde663f484
2 changed files with 41 additions and 1 deletions
|
|
@ -305,11 +305,16 @@ static inline uint32_t gpio_stm32_pin_to_exti_line(int pin)
|
|||
return ((pin % 4 * 4) << 16) | (pin / 4);
|
||||
#elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32g0_exti)
|
||||
return ((pin & 0x3) << (16 + 3)) | (pin >> 2);
|
||||
#elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32h7rs_exti)
|
||||
/* Gives the LL_SBS_EXTI_LINEn corresponding to the pin */
|
||||
return (((pin % 4 * 4) << LL_SBS_REGISTER_PINPOS_SHFT) | (pin / 4));
|
||||
#else
|
||||
return (0xF << ((pin % 4 * 4) + 16)) | (pin / 4);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/* Set the EXTI line corresponding to the PORT [STM32_PORTA .. ] and pin [0..15] */
|
||||
static void gpio_stm32_set_exti_source(int port, int pin)
|
||||
{
|
||||
uint32_t line = gpio_stm32_pin_to_exti_line(pin);
|
||||
|
|
@ -332,12 +337,15 @@ static void gpio_stm32_set_exti_source(int port, int pin)
|
|||
|
||||
#elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32g0_exti)
|
||||
LL_EXTI_SetEXTISource(port, line);
|
||||
#elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32h7rs_exti)
|
||||
LL_SBS_SetEXTISource(port, line);
|
||||
#else
|
||||
LL_SYSCFG_SetEXTISource(port, line);
|
||||
#endif
|
||||
z_stm32_hsem_unlock(CFG_HW_EXTI_SEMID);
|
||||
}
|
||||
|
||||
/* Gives the PORT [STM32_PORTA .. ] corresponding to the EXTI line of the pin [0..15] */
|
||||
static int gpio_stm32_get_exti_source(int pin)
|
||||
{
|
||||
uint32_t line = gpio_stm32_pin_to_exti_line(pin);
|
||||
|
|
@ -347,6 +355,8 @@ static int gpio_stm32_get_exti_source(int pin)
|
|||
port = LL_GPIO_AF_GetEXTISource(line);
|
||||
#elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32g0_exti)
|
||||
port = LL_EXTI_GetEXTISource(line);
|
||||
#elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32h7rs_exti)
|
||||
port = LL_SBS_GetEXTISource(line);
|
||||
#else
|
||||
port = LL_SYSCFG_GetEXTISource(line);
|
||||
#endif
|
||||
|
|
@ -375,14 +385,18 @@ static int gpio_stm32_enable_int(int port, int pin)
|
|||
defined(CONFIG_SOC_SERIES_STM32F4X) || \
|
||||
defined(CONFIG_SOC_SERIES_STM32F7X) || \
|
||||
defined(CONFIG_SOC_SERIES_STM32H7X) || \
|
||||
defined(CONFIG_SOC_SERIES_STM32H7RSX) || \
|
||||
defined(CONFIG_SOC_SERIES_STM32L1X) || \
|
||||
defined(CONFIG_SOC_SERIES_STM32L4X) || \
|
||||
defined(CONFIG_SOC_SERIES_STM32G4X)
|
||||
const struct device *const clk = DEVICE_DT_GET(STM32_CLOCK_CONTROL_NODE);
|
||||
struct stm32_pclken pclken = {
|
||||
#ifdef CONFIG_SOC_SERIES_STM32H7X
|
||||
#if defined(CONFIG_SOC_SERIES_STM32H7X)
|
||||
.bus = STM32_CLOCK_BUS_APB4,
|
||||
.enr = LL_APB4_GRP1_PERIPH_SYSCFG
|
||||
#elif defined(CONFIG_SOC_SERIES_STM32H7RSX)
|
||||
.bus = STM32_CLOCK_BUS_APB4,
|
||||
.enr = LL_APB4_GRP1_PERIPH_SBS
|
||||
#else
|
||||
.bus = STM32_CLOCK_BUS_APB2,
|
||||
.enr = LL_APB2_GRP1_PERIPH_SYSCFG
|
||||
|
|
@ -828,3 +842,15 @@ GPIO_DEVICE_INIT_STM32(j, J);
|
|||
#if DT_NODE_HAS_STATUS(DT_NODELABEL(gpiok), okay)
|
||||
GPIO_DEVICE_INIT_STM32(k, K);
|
||||
#endif /* DT_NODE_HAS_STATUS(DT_NODELABEL(gpiok), okay) */
|
||||
#if DT_NODE_HAS_STATUS(DT_NODELABEL(gpiom), okay)
|
||||
GPIO_DEVICE_INIT_STM32(m, M);
|
||||
#endif /* DT_NODE_HAS_STATUS(DT_NODELABEL(gpiom), okay) */
|
||||
#if DT_NODE_HAS_STATUS(DT_NODELABEL(gpion), okay)
|
||||
GPIO_DEVICE_INIT_STM32(n, N);
|
||||
#endif /* DT_NODE_HAS_STATUS(DT_NODELABEL(gpion), okay) */
|
||||
#if DT_NODE_HAS_STATUS(DT_NODELABEL(gpioo), okay)
|
||||
GPIO_DEVICE_INIT_STM32(o, O);
|
||||
#endif /* DT_NODE_HAS_STATUS(DT_NODELABEL(gpioo), okay) */
|
||||
#if DT_NODE_HAS_STATUS(DT_NODELABEL(gpiop), okay)
|
||||
GPIO_DEVICE_INIT_STM32(p, P);
|
||||
#endif /* DT_NODE_HAS_STATUS(DT_NODELABEL(gpiop), okay) */
|
||||
|
|
|
|||
|
|
@ -100,6 +100,20 @@
|
|||
#define STM32_PERIPH_GPIOI LL_AHB4_GRP1_PERIPH_GPIOI
|
||||
#define STM32_PERIPH_GPIOJ LL_AHB4_GRP1_PERIPH_GPIOJ
|
||||
#define STM32_PERIPH_GPIOK LL_AHB4_GRP1_PERIPH_GPIOK
|
||||
#elif CONFIG_SOC_SERIES_STM32H7RSX
|
||||
#define STM32_CLOCK_BUS_GPIO STM32_CLOCK_BUS_AHB4
|
||||
#define STM32_PERIPH_GPIOA LL_AHB4_GRP1_PERIPH_GPIOA
|
||||
#define STM32_PERIPH_GPIOB LL_AHB4_GRP1_PERIPH_GPIOB
|
||||
#define STM32_PERIPH_GPIOC LL_AHB4_GRP1_PERIPH_GPIOC
|
||||
#define STM32_PERIPH_GPIOD LL_AHB4_GRP1_PERIPH_GPIOD
|
||||
#define STM32_PERIPH_GPIOE LL_AHB4_GRP1_PERIPH_GPIOE
|
||||
#define STM32_PERIPH_GPIOF LL_AHB4_GRP1_PERIPH_GPIOF
|
||||
#define STM32_PERIPH_GPIOG LL_AHB4_GRP1_PERIPH_GPIOG
|
||||
#define STM32_PERIPH_GPIOH LL_AHB4_GRP1_PERIPH_GPIOH
|
||||
#define STM32_PERIPH_GPIOM LL_AHB4_GRP1_PERIPH_GPIOM
|
||||
#define STM32_PERIPH_GPION LL_AHB4_GRP1_PERIPH_GPION
|
||||
#define STM32_PERIPH_GPIOO LL_AHB4_GRP1_PERIPH_GPIOO
|
||||
#define STM32_PERIPH_GPIOP LL_AHB4_GRP1_PERIPH_GPIOP
|
||||
#elif CONFIG_SOC_SERIES_STM32G0X
|
||||
#define STM32_CLOCK_BUS_GPIO STM32_CLOCK_BUS_IOP
|
||||
#define STM32_PERIPH_GPIOA LL_IOP_GRP1_PERIPH_GPIOA
|
||||
|
|
|
|||
Loading…
Reference in a new issue