Skip to content
Snippets Groups Projects
Commit 14cec061 authored by Vikas Manocha's avatar Vikas Manocha Committed by Tom Rini
Browse files

gpio: stm32_gpio: move clock config from driver to board


This patch removes the gpio clock enable from gpio driver & move it in the
board code, making it possible to use the gpio driver with other socs.

Signed-off-by: default avatarVikas Manocha <vikas.manocha@st.com>
parent 52dd704b
No related branches found
No related tags found
No related merge requests found
...@@ -22,6 +22,17 @@ enum periph_id { ...@@ -22,6 +22,17 @@ enum periph_id {
enum periph_clock { enum periph_clock {
USART1_CLOCK_CFG = 0, USART1_CLOCK_CFG = 0,
USART2_CLOCK_CFG, USART2_CLOCK_CFG,
GPIO_A_CLOCK_CFG,
GPIO_B_CLOCK_CFG,
GPIO_C_CLOCK_CFG,
GPIO_D_CLOCK_CFG,
GPIO_E_CLOCK_CFG,
GPIO_F_CLOCK_CFG,
GPIO_G_CLOCK_CFG,
GPIO_H_CLOCK_CFG,
GPIO_I_CLOCK_CFG,
GPIO_J_CLOCK_CFG,
GPIO_K_CLOCK_CFG,
}; };
#endif /* __ASM_ARM_ARCH_PERIPH_H */ #endif /* __ASM_ARM_ARCH_PERIPH_H */
...@@ -71,6 +71,21 @@ ...@@ -71,6 +71,21 @@
#define FLASH_ACR_ICEN (1 << 9) #define FLASH_ACR_ICEN (1 << 9)
#define FLASH_ACR_DCEN (1 << 10) #define FLASH_ACR_DCEN (1 << 10)
/*
* RCC GPIO specific definitions
*/
#define RCC_ENR_GPIO_A_EN (1 << 0)
#define RCC_ENR_GPIO_B_EN (1 << 1)
#define RCC_ENR_GPIO_C_EN (1 << 2)
#define RCC_ENR_GPIO_D_EN (1 << 3)
#define RCC_ENR_GPIO_E_EN (1 << 4)
#define RCC_ENR_GPIO_F_EN (1 << 5)
#define RCC_ENR_GPIO_G_EN (1 << 6)
#define RCC_ENR_GPIO_H_EN (1 << 7)
#define RCC_ENR_GPIO_I_EN (1 << 8)
#define RCC_ENR_GPIO_J_EN (1 << 9)
#define RCC_ENR_GPIO_K_EN (1 << 10)
struct pll_psc { struct pll_psc {
u8 pll_m; u8 pll_m;
u16 pll_n; u16 pll_n;
...@@ -237,6 +252,39 @@ void clock_setup(int peripheral) ...@@ -237,6 +252,39 @@ void clock_setup(int peripheral)
case USART1_CLOCK_CFG: case USART1_CLOCK_CFG:
setbits_le32(&STM32_RCC->apb2enr, RCC_ENR_USART1EN); setbits_le32(&STM32_RCC->apb2enr, RCC_ENR_USART1EN);
break; break;
case GPIO_A_CLOCK_CFG:
setbits_le32(&STM32_RCC->ahb1enr, RCC_ENR_GPIO_A_EN);
break;
case GPIO_B_CLOCK_CFG:
setbits_le32(&STM32_RCC->ahb1enr, RCC_ENR_GPIO_B_EN);
break;
case GPIO_C_CLOCK_CFG:
setbits_le32(&STM32_RCC->ahb1enr, RCC_ENR_GPIO_C_EN);
break;
case GPIO_D_CLOCK_CFG:
setbits_le32(&STM32_RCC->ahb1enr, RCC_ENR_GPIO_D_EN);
break;
case GPIO_E_CLOCK_CFG:
setbits_le32(&STM32_RCC->ahb1enr, RCC_ENR_GPIO_E_EN);
break;
case GPIO_F_CLOCK_CFG:
setbits_le32(&STM32_RCC->ahb1enr, RCC_ENR_GPIO_F_EN);
break;
case GPIO_G_CLOCK_CFG:
setbits_le32(&STM32_RCC->ahb1enr, RCC_ENR_GPIO_G_EN);
break;
case GPIO_H_CLOCK_CFG:
setbits_le32(&STM32_RCC->ahb1enr, RCC_ENR_GPIO_H_EN);
break;
case GPIO_I_CLOCK_CFG:
setbits_le32(&STM32_RCC->ahb1enr, RCC_ENR_GPIO_I_EN);
break;
case GPIO_J_CLOCK_CFG:
setbits_le32(&STM32_RCC->ahb1enr, RCC_ENR_GPIO_J_EN);
break;
case GPIO_K_CLOCK_CFG:
setbits_le32(&STM32_RCC->ahb1enr, RCC_ENR_GPIO_K_EN);
break;
default: default:
break; break;
} }
......
...@@ -50,6 +50,7 @@ int uart_setup_gpio(void) ...@@ -50,6 +50,7 @@ int uart_setup_gpio(void)
int i; int i;
int rv = 0; int rv = 0;
clock_setup(GPIO_A_CLOCK_CFG);
for (i = 0; i < ARRAY_SIZE(usart_gpio); i++) { for (i = 0; i < ARRAY_SIZE(usart_gpio); i++) {
rv = stm32_gpio_config(&usart_gpio[i], &gpio_ctl_usart); rv = stm32_gpio_config(&usart_gpio[i], &gpio_ctl_usart);
if (rv) if (rv)
...@@ -115,6 +116,13 @@ static int fmc_setup_gpio(void) ...@@ -115,6 +116,13 @@ static int fmc_setup_gpio(void)
int rv = 0; int rv = 0;
int i; int i;
clock_setup(GPIO_B_CLOCK_CFG);
clock_setup(GPIO_C_CLOCK_CFG);
clock_setup(GPIO_D_CLOCK_CFG);
clock_setup(GPIO_E_CLOCK_CFG);
clock_setup(GPIO_F_CLOCK_CFG);
clock_setup(GPIO_G_CLOCK_CFG);
for (i = 0; i < ARRAY_SIZE(ext_ram_fmc_gpio); i++) { for (i = 0; i < ARRAY_SIZE(ext_ram_fmc_gpio); i++) {
rv = stm32_gpio_config(&ext_ram_fmc_gpio[i], rv = stm32_gpio_config(&ext_ram_fmc_gpio[i],
&gpio_ctl_fmc); &gpio_ctl_fmc);
......
...@@ -70,8 +70,6 @@ int stm32_gpio_config(const struct stm32_gpio_dsc *dsc, ...@@ -70,8 +70,6 @@ int stm32_gpio_config(const struct stm32_gpio_dsc *dsc,
gpio_regs = (struct stm32_gpio_regs *)io_base[dsc->port]; gpio_regs = (struct stm32_gpio_regs *)io_base[dsc->port];
setbits_le32(&STM32_RCC->ahb1enr, 1 << dsc->port);
i = (dsc->pin & 0x07) * 4; i = (dsc->pin & 0x07) * 4;
clrsetbits_le32(&gpio_regs->afr[dsc->pin >> 3], 0xF << i, ctl->af << i); clrsetbits_le32(&gpio_regs->afr[dsc->pin >> 3], 0xF << i, ctl->af << i);
...@@ -141,9 +139,6 @@ int stm32_gpio_config(const struct stm32_gpio_dsc *dsc, ...@@ -141,9 +139,6 @@ int stm32_gpio_config(const struct stm32_gpio_dsc *dsc,
gpio_regs = (struct stm32_gpio_regs *)io_base[dsc->port]; gpio_regs = (struct stm32_gpio_regs *)io_base[dsc->port];
/* Enable clock for GPIO port */
setbits_le32(&STM32_RCC->apb2enr, 0x04 << dsc->port);
if (p < 8) { if (p < 8) {
cr = &gpio_regs->crl; cr = &gpio_regs->crl;
crp = p; crp = p;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment