mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-19 05:31:31 +02:00
On some STM32 SoC's package, GPIO bank may have hole in their GPIO bank Example: If GPIO bank have 16 GPIO pins [0-15]. In particular SoC's package case, some GPIO bank can have less GPIO pins: - [0-10] => 11 pins; - [2-7] => 6 pins. Commit dbf928dd2634 ("gpio: stm32f7: Add gpio bank holes management") proposed a first implementation by not counting GPIO "inside" hole. GPIO are not displaying correctly using gpio or pinmux command when GPIO holes are located at the beginning of GPIO bank. To simplify, consider that all GPIO have 16 GPIO and use the gpio_ranges struct to indicate if a GPIO is mapped or not. GPIO uclass offers several GPIO functions ("input", "output", "unused", "unknown" and "func"), use "unknown" GPIO function to indicate that a GPIO is not mapped. stm32_offset_to_index() is no more needed and removed. This must be reflected using the "gpio" command to indicate to user that a particular GPIO is not mapped (marked as "unknown") as shown below: Example for a 16 pins GPIO bank with the [2-7] mapping (only 6 pins mapped): GPIOI0 : unknown GPIOI1 : unknown GPIOI2 : analog GPIOI3 : analog GPIOI4 : alt function 0 push-pull pull-down GPIOI5 : alt function 0 push-pull pull-down GPIOI6 : alt function 0 push-pull pull-down GPIOI7 : analog GPIOI8 : unknown GPIOI9 : unknown GPIOI10 : unknown GPIOI11 : unknown GPIOI12 : unknown GPIOI13 : unknown GPIOI14 : unknown GPIOI15 : unknown Signed-off-by: Patrice Chotard <patrice.chotard@foss.st.com> Reviewed-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
85 lines
1.7 KiB
C
85 lines
1.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* Copyright (C) 2016, STMicroelectronics - All Rights Reserved
|
|
* Author(s): Vikas Manocha, <vikas.manocha@st.com> for STMicroelectronics.
|
|
*/
|
|
|
|
#ifndef _STM32_GPIO_PRIV_H_
|
|
#define _STM32_GPIO_PRIV_H_
|
|
|
|
enum stm32_gpio_mode {
|
|
STM32_GPIO_MODE_IN = 0,
|
|
STM32_GPIO_MODE_OUT,
|
|
STM32_GPIO_MODE_AF,
|
|
STM32_GPIO_MODE_AN
|
|
};
|
|
|
|
enum stm32_gpio_otype {
|
|
STM32_GPIO_OTYPE_PP = 0,
|
|
STM32_GPIO_OTYPE_OD
|
|
};
|
|
|
|
enum stm32_gpio_speed {
|
|
STM32_GPIO_SPEED_2M = 0,
|
|
STM32_GPIO_SPEED_25M,
|
|
STM32_GPIO_SPEED_50M,
|
|
STM32_GPIO_SPEED_100M
|
|
};
|
|
|
|
enum stm32_gpio_pupd {
|
|
STM32_GPIO_PUPD_NO = 0,
|
|
STM32_GPIO_PUPD_UP,
|
|
STM32_GPIO_PUPD_DOWN
|
|
};
|
|
|
|
enum stm32_gpio_af {
|
|
STM32_GPIO_AF0 = 0,
|
|
STM32_GPIO_AF1,
|
|
STM32_GPIO_AF2,
|
|
STM32_GPIO_AF3,
|
|
STM32_GPIO_AF4,
|
|
STM32_GPIO_AF5,
|
|
STM32_GPIO_AF6,
|
|
STM32_GPIO_AF7,
|
|
STM32_GPIO_AF8,
|
|
STM32_GPIO_AF9,
|
|
STM32_GPIO_AF10,
|
|
STM32_GPIO_AF11,
|
|
STM32_GPIO_AF12,
|
|
STM32_GPIO_AF13,
|
|
STM32_GPIO_AF14,
|
|
STM32_GPIO_AF15
|
|
};
|
|
|
|
struct stm32_gpio_dsc {
|
|
u8 port;
|
|
u8 pin;
|
|
};
|
|
|
|
struct stm32_gpio_ctl {
|
|
enum stm32_gpio_mode mode;
|
|
enum stm32_gpio_otype otype;
|
|
enum stm32_gpio_speed speed;
|
|
enum stm32_gpio_pupd pupd;
|
|
enum stm32_gpio_af af;
|
|
};
|
|
|
|
struct stm32_gpio_regs {
|
|
u32 moder; /* GPIO port mode */
|
|
u32 otyper; /* GPIO port output type */
|
|
u32 ospeedr; /* GPIO port output speed */
|
|
u32 pupdr; /* GPIO port pull-up/pull-down */
|
|
u32 idr; /* GPIO port input data */
|
|
u32 odr; /* GPIO port output data */
|
|
u32 bsrr; /* GPIO port bit set/reset */
|
|
u32 lckr; /* GPIO port configuration lock */
|
|
u32 afr[2]; /* GPIO alternate function */
|
|
};
|
|
|
|
struct stm32_gpio_priv {
|
|
struct stm32_gpio_regs *regs;
|
|
unsigned int gpio_range;
|
|
};
|
|
|
|
#endif /* _STM32_GPIO_PRIV_H_ */
|