drivers/wifi: Remove unnecessary data structure copy
[coreboot2.git] / src / soc / samsung / exynos5250 / pinmux.c
blobc3b2de1ccb902cbf560cad62af36ded27ab02370
1 /* SPDX-License-Identifier: GPL-2.0-only */
3 #include <console/console.h>
4 #include <soc/gpio.h>
5 #include <soc/pinmux.h>
7 static void exynos_pinmux_uart(int start, int count)
9 int i;
11 for (i = start; i < start + count; i++) {
12 gpio_set_pull(i, GPIO_PULL_NONE);
13 gpio_cfg_pin(i, GPIO_FUNC(0x2));
17 void exynos_pinmux_uart0(void)
19 exynos_pinmux_uart(GPIO_A00, 4);
22 void exynos_pinmux_uart1(void)
24 exynos_pinmux_uart(GPIO_D00, 4);
27 void exynos_pinmux_uart2(void)
29 exynos_pinmux_uart(GPIO_A10, 4);
32 void exynos_pinmux_uart3(void)
34 exynos_pinmux_uart(GPIO_A14, 2);
37 static void exynos_pinmux_sdmmc(int start, int start_ext)
39 int i;
41 if (start_ext) {
42 for (i = 0; i <= 3; i++) {
43 gpio_cfg_pin(start_ext + i, GPIO_FUNC(0x2));
44 gpio_set_pull(start_ext + i, GPIO_PULL_UP);
45 gpio_set_drv(start_ext + i, GPIO_DRV_4X);
48 for (i = 0; i < 2; i++) {
49 gpio_cfg_pin(start + i, GPIO_FUNC(0x2));
50 gpio_set_pull(start + i, GPIO_PULL_NONE);
51 gpio_set_drv(start + i, GPIO_DRV_4X);
53 for (i = 2; i <= 6; i++) {
54 gpio_cfg_pin(start + i, GPIO_FUNC(0x2));
55 gpio_set_pull(start + i, GPIO_PULL_UP);
56 gpio_set_drv(start + i, GPIO_DRV_4X);
60 void exynos_pinmux_sdmmc0(void)
62 exynos_pinmux_sdmmc(GPIO_C00, GPIO_C10);
65 void exynos_pinmux_sdmmc1(void)
67 exynos_pinmux_sdmmc(GPIO_C20, 0);
70 void exynos_pinmux_sdmmc2(void)
72 exynos_pinmux_sdmmc(GPIO_C30, 0);
75 void exynos_pinmux_sdmmc3(void)
78 * TODO: Need to add definitions for GPC4 before
79 * enabling this.
81 printk(BIOS_DEBUG, "SDMMC3 not supported yet");
84 void exynos_pinmux_sromc(int bank, int sixteen_bit)
86 int i;
88 if (bank > 3) {
89 printk(BIOS_DEBUG, "Unsupported sromc bank %d.\n", bank);
90 return;
93 gpio_cfg_pin(GPIO_Y00 + bank, GPIO_FUNC(2));
94 gpio_cfg_pin(GPIO_Y04, GPIO_FUNC(2));
95 gpio_cfg_pin(GPIO_Y05, GPIO_FUNC(2));
97 for (i = 2; i < 4; i++)
98 gpio_cfg_pin(GPIO_Y10 + i, GPIO_FUNC(2));
100 for (i = 0; i < 8; i++) {
101 gpio_cfg_pin(GPIO_Y30 + i, GPIO_FUNC(2));
102 gpio_set_pull(GPIO_Y30 + i, GPIO_PULL_UP);
104 gpio_cfg_pin(GPIO_Y50 + i, GPIO_FUNC(2));
105 gpio_set_pull(GPIO_Y50 + i, GPIO_PULL_UP);
107 if (sixteen_bit) {
108 gpio_cfg_pin(GPIO_Y60 + i, GPIO_FUNC(2));
109 gpio_set_pull(GPIO_Y60 + i, GPIO_PULL_UP);
114 static void exynos_pinmux_spi(int start, int cfg)
116 int i;
118 for (i = 0; i < 4; i++) {
119 gpio_cfg_pin(start + i, GPIO_FUNC(cfg));
120 gpio_set_pull(start + i, GPIO_PULL_NONE);
121 gpio_set_drv(start + i, GPIO_DRV_3X);
125 void exynos_pinmux_spi0(void)
127 exynos_pinmux_spi(GPIO_A20, 0x2);
130 void exynos_pinmux_spi1(void)
132 exynos_pinmux_spi(GPIO_A24, 0x2);
135 void exynos_pinmux_spi2(void)
137 exynos_pinmux_spi(GPIO_B11, 0x5);
140 void exynos_pinmux_spi3(void)
142 exynos_pinmux_spi(GPIO_E00, 0x2);
145 void exynos_pinmux_spi4(void)
147 int i;
149 for (i = 0; i < 2; i++)
150 gpio_cfg_pin(GPIO_F02 + i, GPIO_FUNC(0x4));
151 for (i = 2; i < 4; i++)
152 gpio_cfg_pin(GPIO_E02 + i, GPIO_FUNC(0x4));
155 void exynos_pinmux_backlight(void)
157 gpio_cfg_pin(GPIO_B20, GPIO_OUTPUT);
158 gpio_set_value(GPIO_B20, 1);
161 void exynos_pinmux_lcd(void)
163 gpio_cfg_pin(GPIO_Y25, GPIO_OUTPUT);
164 gpio_set_value(GPIO_Y25, 1);
165 gpio_cfg_pin(GPIO_X15, GPIO_OUTPUT);
166 gpio_set_value(GPIO_X15, 1);
167 gpio_cfg_pin(GPIO_X30, GPIO_OUTPUT);
168 gpio_set_value(GPIO_X30, 1);
171 static void exynos_pinmux_i2c(int start, int func)
173 gpio_cfg_pin(start, GPIO_FUNC(func));
174 gpio_cfg_pin(start + 1, GPIO_FUNC(func));
175 gpio_set_pull(start, GPIO_PULL_NONE);
176 gpio_set_pull(start + 1, GPIO_PULL_NONE);
179 void exynos_pinmux_i2c0(void)
181 exynos_pinmux_i2c(GPIO_B30, 0x2);
184 void exynos_pinmux_i2c1(void)
186 exynos_pinmux_i2c(GPIO_B32, 0x2);
189 void exynos_pinmux_i2c2(void)
191 exynos_pinmux_i2c(GPIO_A06, 0x3);
194 void exynos_pinmux_i2c3(void)
196 exynos_pinmux_i2c(GPIO_A12, 0x3);
199 void exynos_pinmux_i2c4(void)
201 exynos_pinmux_i2c(GPIO_A20, 0x3);
204 void exynos_pinmux_i2c5(void)
206 exynos_pinmux_i2c(GPIO_A22, 0x3);
209 void exynos_pinmux_i2c6(void)
211 exynos_pinmux_i2c(GPIO_B13, 0x4);
214 void exynos_pinmux_i2c7(void)
216 exynos_pinmux_i2c(GPIO_B22, 0x3);
219 void exynos_pinmux_dphpd(void)
221 /* Set Hotplug detect for DP */
222 gpio_cfg_pin(GPIO_X07, GPIO_FUNC(0x3));
225 * Hotplug detect should have an external pullup; disable the
226 * internal pulldown so they don't fight.
228 gpio_set_pull(GPIO_X07, GPIO_PULL_NONE);
231 void exynos_pinmux_i2s0(void)
233 int i;
235 for (i = 0; i < 5; i++) {
236 gpio_cfg_pin(GPIO_Z0 + i, GPIO_FUNC(0x02));
237 gpio_set_pull(GPIO_Z0 + i, GPIO_PULL_NONE);
241 void exynos_pinmux_i2s1(void)
243 int i;
245 for (i = 0; i < 5; i++) {
246 gpio_cfg_pin(GPIO_B00 + i, GPIO_FUNC(0x02));
247 gpio_set_pull(GPIO_B00 + i, GPIO_PULL_NONE);