diff options
author | Sam Ravnborg <sam@ravnborg.org> | 2022-06-28 22:38:42 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2022-06-30 14:18:55 +0200 |
commit | 9f95ffe1604332438254f435da4ba82f4587a883 (patch) | |
tree | 5fb49d4ad59fb5ec90aea553db9d2b3969d121ac /arch/arm/mach-at91/include | |
parent | 1915da14b857443361aa5edadc7ba469b8264aea (diff) | |
download | barebox-9f95ffe1604332438254f435da4ba82f4587a883.tar.gz barebox-9f95ffe1604332438254f435da4ba82f4587a883.tar.xz |
ARM: at91: Provide at91_mux_pio_pin for use in lowlevel
Lowlevel init code may wish the ability to configure pins, e.g. for low
level debug UART. The pinctrl-at91 driver already exports an
at91_mux_pin function, but that one is only usable after driver
probe. Instead, provide an at91_mux_pio_pin function, which can be used
at all times.
This is similar to the already existing at91_mux_pio3_pin function
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Reviewed-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
Link: https://lore.barebox.org/20220628203849.2785611-5-sam@ravnborg.org
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-at91/include')
-rw-r--r-- | arch/arm/mach-at91/include/mach/gpio.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/arch/arm/mach-at91/include/mach/gpio.h b/arch/arm/mach-at91/include/mach/gpio.h index ddd6971e37..7f84f41e5b 100644 --- a/arch/arm/mach-at91/include/mach/gpio.h +++ b/arch/arm/mach-at91/include/mach/gpio.h @@ -151,6 +151,31 @@ static inline int at91_mux_gpio_get(void __iomem *pio, unsigned mask) return (pdsr & mask) != 0; } +static inline void at91_mux_pio_pin(void __iomem *pio, unsigned mask, + enum at91_mux mux, int gpio_state) +{ + at91_mux_disable_interrupt(pio, mask); + + switch(mux) { + case AT91_MUX_GPIO: + at91_mux_gpio_enable(pio, mask); + break; + case AT91_MUX_PERIPH_A: + at91_mux_set_A_periph(pio, mask); + break; + case AT91_MUX_PERIPH_B: + at91_mux_set_B_periph(pio, mask); + break; + default: + /* ignore everything else */ + break; + } + if (mux != AT91_MUX_GPIO) + at91_mux_gpio_disable(pio, mask); + + at91_mux_set_pullup(pio, mask, gpio_state & GPIO_PULL_UP); +} + static inline void at91_mux_pio3_pin(void __iomem *pio, unsigned mask, enum at91_mux mux, int gpio_state) { |