1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 3 #ifndef __SOC_NVIDIA_TEGRA210_PAD_CFG_H 4 #define __SOC_NVIDIA_TEGRA210_PAD_CFG_H 5 6 #include <stdint.h> 7 #include <soc/pinmux.h> 8 9 struct pad_config { 10 uint16_t pinmux_flags; /* PU/PU, OD, INPUT, SFIO, etc */ 11 uint8_t gpio_index; /* bank, port, index */ 12 uint16_t pinmux_index:9; 13 uint16_t unused:1; 14 uint16_t sfio:1; 15 uint16_t gpio_out0:1; 16 uint16_t gpio_out1:1; 17 uint16_t pad_has_gpio:1; 18 uint16_t por_pullup:1; 19 }; 20 21 #define PAD_CFG_GPIO_INPUT(ball_, pinmux_flgs_) \ 22 { \ 23 .pinmux_flags = pinmux_flgs_ | PINMUX_INPUT_ENABLE, \ 24 .gpio_index = PAD_TO_GPIO_##ball_, \ 25 .pinmux_index = PINMUX_##ball_##_INDEX, \ 26 .sfio = 0, \ 27 .pad_has_gpio = PAD_HAS_GPIO_##ball_, \ 28 } 29 30 #define PAD_CFG_GPIO_OUT0(ball_, pinmux_flgs_) \ 31 { \ 32 .pinmux_flags = pinmux_flgs_, \ 33 .gpio_index = PAD_TO_GPIO_##ball_, \ 34 .pinmux_index = PINMUX_##ball_##_INDEX, \ 35 .sfio = 0, \ 36 .gpio_out0 = 1, \ 37 .pad_has_gpio = PAD_HAS_GPIO_##ball_, \ 38 } 39 40 #define PAD_CFG_GPIO_OUT1(ball_, pinmux_flgs_) \ 41 { \ 42 .pinmux_flags = pinmux_flgs_, \ 43 .gpio_index = PAD_TO_GPIO_##ball_, \ 44 .pinmux_index = PINMUX_##ball_##_INDEX, \ 45 .sfio = 0, \ 46 .gpio_out1 = 1, \ 47 .pad_has_gpio = PAD_HAS_GPIO_##ball_, \ 48 } 49 50 #define PAD_CFG_SFIO(ball_, pinmux_flgs_, sfio_) \ 51 { \ 52 .pinmux_flags = pinmux_flgs_ | \ 53 PINMUX_##ball_##_FUNC_##sfio_, \ 54 .gpio_index = PAD_TO_GPIO_##ball_, \ 55 .pinmux_index = PINMUX_##ball_##_INDEX, \ 56 .sfio = 1, \ 57 .pad_has_gpio = PAD_HAS_GPIO_##ball_, \ 58 } 59 60 #define PAD_CFG_UNUSED(ball_) \ 61 { \ 62 .gpio_index = PAD_TO_GPIO_##ball_, \ 63 .pinmux_index = PINMUX_##ball_##_INDEX, \ 64 .unused = 1, \ 65 .pad_has_gpio = PAD_HAS_GPIO_##ball_, \ 66 } 67 /* 68 * Configure the pads associated with entry according to the configuration. 69 */ 70 void soc_configure_pads(const struct pad_config * const entries, size_t num); 71 /* I2C6 requires special init as its pad lives int the SOR/DPAUX block */ 72 void soc_configure_i2c6pad(void); 73 void soc_configure_host1x(void); 74 /* APE (Audio Processing Engine) requires special init */ 75 void soc_configure_ape(void); 76 77 #endif /* __SOC_NVIDIA_TEGRA210_PAD_CFG_H */ 78