xref: /aosp_15_r20/external/coreboot/src/soc/nvidia/tegra210/include/soc/padconfig.h (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
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