1 /* SPDX-License-Identifier: GPL-2.0-only */
3 #include <console/console.h>
5 #include <soc/pinmux.h>
7 static void exynos_pinmux_uart(int start
, int count
)
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
)
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
81 printk(BIOS_DEBUG
, "SDMMC3 not supported yet");
84 void exynos_pinmux_sromc(int bank
, int sixteen_bit
)
89 printk(BIOS_DEBUG
, "Unsupported sromc bank %d.\n", bank
);
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
);
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
)
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)
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)
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)
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
);