From a9f2061dfba87ffbf64bf856bc3060376ca355ad Mon Sep 17 00:00:00 2001 From: Ricardo Salveti Date: Thu, 11 Aug 2016 04:17:29 -0300 Subject: [PATCH] gpio: stm32: introduce alternative function config STM32F4 requires the alternative function config to be set, so just initialize that as part of the gpio configure call. Change-Id: I33a4a8efec59c5ebe7dc3f3580f0dd2bf7ded7f4 Signed-off-by: Ricardo Salveti Signed-off-by: Amit Kucheria --- arch/arm/soc/st_stm32/stm32f1/soc_gpio.c | 2 +- drivers/gpio/gpio_stm32.c | 2 +- drivers/gpio/gpio_stm32.h | 3 ++- drivers/pinmux/stm32/pinmux_stm32.c | 7 ++++--- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/arch/arm/soc/st_stm32/stm32f1/soc_gpio.c b/arch/arm/soc/st_stm32/stm32f1/soc_gpio.c index 7b7536be44f..303528b9499 100644 --- a/arch/arm/soc/st_stm32/stm32f1/soc_gpio.c +++ b/arch/arm/soc/st_stm32/stm32f1/soc_gpio.c @@ -107,7 +107,7 @@ int stm32_gpio_flags_to_conf(int flags, int *pincfg) return 0; } -int stm32_gpio_configure(uint32_t *base_addr, int pin, int conf) +int stm32_gpio_configure(uint32_t *base_addr, int pin, int conf, int altf) { volatile struct stm32f10x_gpio *gpio = (struct stm32f10x_gpio *)(base_addr); diff --git a/drivers/gpio/gpio_stm32.c b/drivers/gpio/gpio_stm32.c index 8f223a5b617..8af46aba751 100644 --- a/drivers/gpio/gpio_stm32.c +++ b/drivers/gpio/gpio_stm32.c @@ -69,7 +69,7 @@ static int gpio_stm32_config(struct device *dev, int access_op, return map_res; } - if (stm32_gpio_configure(cfg->base, pin, pincfg)) { + if (stm32_gpio_configure(cfg->base, pin, pincfg, 0)) { return -EIO; } diff --git a/drivers/gpio/gpio_stm32.h b/drivers/gpio/gpio_stm32.h index cb577084fd3..51dc847fd7e 100644 --- a/drivers/gpio/gpio_stm32.h +++ b/drivers/gpio/gpio_stm32.h @@ -64,8 +64,9 @@ int stm32_gpio_flags_to_conf(int flags, int *conf); * @param base_addr GPIO port base address * @param pin IO pin * @param func GPIO mode + * @param altf Alternate function */ -int stm32_gpio_configure(uint32_t *base_addr, int pin, int func); +int stm32_gpio_configure(uint32_t *base_addr, int pin, int func, int altf); /** * @brief helper for setting of GPIO pin output diff --git a/drivers/pinmux/stm32/pinmux_stm32.c b/drivers/pinmux/stm32/pinmux_stm32.c index 4936b04da82..9b5760ad31f 100644 --- a/drivers/pinmux/stm32/pinmux_stm32.c +++ b/drivers/pinmux/stm32/pinmux_stm32.c @@ -52,7 +52,7 @@ static int enable_port(uint32_t port, struct device *clk) return clock_control_on(clk, subsys); } -static int stm32_pin_configure(int pin, int func) +static int stm32_pin_configure(int pin, int func, int altf) { /* determine IO port registers location */ uint32_t offset = STM32_PORT(pin) * GPIO_REG_SIZE; @@ -61,7 +61,8 @@ static int stm32_pin_configure(int pin, int func) /* not much here, on STM32F10x the alternate function is * controller by setting up GPIO pins in specific mode. */ - return stm32_gpio_configure((uint32_t *)port_base, STM32_PIN(pin), func); + return stm32_gpio_configure((uint32_t *)port_base, + STM32_PIN(pin), func, altf); } /** @@ -86,7 +87,7 @@ int _pinmux_stm32_set(uint32_t pin, uint32_t func, /* determine config for alternate function */ config = stm32_get_pin_config(pin, func); - return stm32_pin_configure(pin, config); + return stm32_pin_configure(pin, config, func); } /**