coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
pinmux.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <soc/gpio.h>
4 #include <soc/pinmux.h>
5 
6 static void exynos_pinmux_uart(int start, int count)
7 {
8  int i;
9 
10  for (i = start; i < start + count; i++) {
12  gpio_cfg_pin(i, GPIO_FUNC(0x2));
13  }
14 }
15 
17 {
19 }
20 
22 {
24 }
25 
27 {
29 }
30 
32 {
34 }
35 
36 struct gpio {
37  enum exynos5_gpio_pin pin;
38  unsigned int func;
39  unsigned int pull;
40  unsigned int drv;
41 };
42 
43 static void exynos_pinmux_sdmmc(struct gpio *gpios, int num_gpios)
44 {
45  int i;
46 
47  for (i = 0; i < num_gpios; i++) {
48  gpio_set_drv(gpios[i].pin, gpios[i].drv);
49  gpio_set_pull(gpios[i].pin, gpios[i].pull);
50  gpio_cfg_pin(gpios[i].pin, GPIO_FUNC(gpios[i].func));
51  }
52 }
53 
55 {
56  struct gpio gpios[] = {
57  { GPIO_C00, 0x2, GPIO_PULL_NONE, GPIO_DRV_4X }, /* CLK */
58  { GPIO_C01, 0x2, GPIO_PULL_NONE, GPIO_DRV_4X }, /* CMD */
59  /*
60  * MMC0 is intended to be used for eMMC. The card detect
61  * pin is used as a VDDEN signal to power on the eMMC. The
62  * 5420 iROM makes this same assumption.
63  */
65  { GPIO_C03, 0x2, GPIO_PULL_UP, GPIO_DRV_4X }, /* DATA[0] */
66  { GPIO_C04, 0x2, GPIO_PULL_UP, GPIO_DRV_4X }, /* DATA[1] */
67  { GPIO_C05, 0x2, GPIO_PULL_UP, GPIO_DRV_4X }, /* DATA[2] */
68  { GPIO_C06, 0x2, GPIO_PULL_UP, GPIO_DRV_4X }, /* DATA[3] */
69 
70  { GPIO_C30, 0x2, GPIO_PULL_UP, GPIO_DRV_4X }, /* DATA[4] */
71  { GPIO_C31, 0x2, GPIO_PULL_UP, GPIO_DRV_4X }, /* DATA[5] */
72  { GPIO_C32, 0x2, GPIO_PULL_UP, GPIO_DRV_4X }, /* DATA[6] */
73  { GPIO_C33, 0x2, GPIO_PULL_UP, GPIO_DRV_4X }, /* DATA[7] */
74  };
75 
76  exynos_pinmux_sdmmc(&gpios[0], ARRAY_SIZE(gpios));
77 
78  /* set VDDEN */
80 }
81 
83 {
84  struct gpio gpios[] = {
85  { GPIO_C10, 0x2, GPIO_PULL_NONE, GPIO_DRV_4X }, /* CLK */
86  { GPIO_C11, 0x2, GPIO_PULL_NONE, GPIO_DRV_4X }, /* CMD */
87  { GPIO_C12, 0x2, GPIO_PULL_NONE, GPIO_DRV_4X }, /* CDn */
88  { GPIO_C13, 0x2, GPIO_PULL_NONE, GPIO_DRV_4X }, /* DATA[0] */
89  { GPIO_C14, 0x2, GPIO_PULL_NONE, GPIO_DRV_4X }, /* DATA[1] */
90  { GPIO_C15, 0x2, GPIO_PULL_NONE, GPIO_DRV_4X }, /* DATA[2] */
91  { GPIO_C16, 0x2, GPIO_PULL_NONE, GPIO_DRV_4X }, /* DATA[3] */
92 
93  { GPIO_D14, 0x2, GPIO_PULL_UP, GPIO_DRV_4X }, /* DATA[4] */
94  { GPIO_D15, 0x2, GPIO_PULL_UP, GPIO_DRV_4X }, /* DATA[5] */
95  { GPIO_D16, 0x2, GPIO_PULL_UP, GPIO_DRV_4X }, /* DATA[6] */
96  { GPIO_D17, 0x2, GPIO_PULL_UP, GPIO_DRV_4X }, /* DATA[7] */
97  };
98 
99  exynos_pinmux_sdmmc(&gpios[0], ARRAY_SIZE(gpios));
100 }
101 
103 {
104  struct gpio gpios[] = {
105  { GPIO_C20, 0x2, GPIO_PULL_NONE, GPIO_DRV_4X }, /* CLK */
106  { GPIO_C21, 0x2, GPIO_PULL_NONE, GPIO_DRV_4X }, /* CMD */
107  { GPIO_C22, 0x2, GPIO_PULL_NONE, GPIO_DRV_4X }, /* CDn */
108  { GPIO_C23, 0x2, GPIO_PULL_NONE, GPIO_DRV_4X }, /* DATA[0] */
109  { GPIO_C24, 0x2, GPIO_PULL_NONE, GPIO_DRV_4X }, /* DATA[1] */
110  { GPIO_C25, 0x2, GPIO_PULL_NONE, GPIO_DRV_4X }, /* DATA[2] */
111  { GPIO_C26, 0x2, GPIO_PULL_NONE, GPIO_DRV_4X }, /* DATA[3] */
112  };
113 
114  exynos_pinmux_sdmmc(&gpios[0], ARRAY_SIZE(gpios));
115 }
116 
117 static void exynos_pinmux_spi(int start, int cfg)
118 {
119  int i;
120 
121  for (i = start; i < start + 4; i++) {
122  gpio_cfg_pin(i, cfg);
125  }
126 }
127 
129 {
131 }
132 
134 {
136 }
137 
139 {
141 }
142 
144 {
146 }
147 
149 {
150  int i;
151 
152  for (i = 0; i < 2; i++) {
153  gpio_cfg_pin(GPIO_F02 + i, GPIO_FUNC(0x4));
154  gpio_cfg_pin(GPIO_E04 + i, GPIO_FUNC(0x4));
155  }
156 }
157 
158 static void exynos_pinmux_i2c(int start, int func)
159 {
160  gpio_cfg_pin(start, GPIO_FUNC(func));
161  gpio_cfg_pin(start + 1, GPIO_FUNC(func));
163  gpio_set_pull(start + 1, GPIO_PULL_NONE);
164 }
165 
167 {
169 }
170 
172 {
174 }
175 
177 {
179 }
180 
182 {
184 }
185 
187 {
189 }
190 
192 {
194 }
195 
197 {
199 }
200 
202 {
204 }
205 
207 {
209 }
210 
212 {
214 }
215 
217 {
219 }
220 
222 {
225 }
#define GPIO_OUTPUT
Definition: gpio_ftns.h:23
#define pull
Definition: asmlib.h:26
#define ARRAY_SIZE(a)
Definition: helpers.h:12
void gpio_set_pull(gpio_t gpio, enum pull_enable enable, enum pull_select select)
Definition: gpio.c:17
void exynos_pinmux_sdmmc1(void)
Definition: pinmux.c:65
void exynos_pinmux_i2c6(void)
Definition: pinmux.c:209
void exynos_pinmux_i2c1(void)
Definition: pinmux.c:184
void exynos_pinmux_spi4(void)
Definition: pinmux.c:145
void exynos_pinmux_uart2(void)
Definition: pinmux.c:27
void exynos_pinmux_sdmmc0(void)
Definition: pinmux.c:60
void exynos_pinmux_i2c5(void)
Definition: pinmux.c:204
void exynos_pinmux_dphpd(void)
Definition: pinmux.c:219
void exynos_pinmux_spi2(void)
Definition: pinmux.c:135
void exynos_pinmux_i2c2(void)
Definition: pinmux.c:189
void exynos_pinmux_uart0(void)
Definition: pinmux.c:17
void exynos_pinmux_uart1(void)
Definition: pinmux.c:22
void exynos_pinmux_uart3(void)
Definition: pinmux.c:32
void exynos_pinmux_i2c4(void)
Definition: pinmux.c:199
void exynos_pinmux_spi0(void)
Definition: pinmux.c:125
void exynos_pinmux_spi1(void)
Definition: pinmux.c:130
void exynos_pinmux_i2c0(void)
Definition: pinmux.c:179
void exynos_pinmux_i2c7(void)
Definition: pinmux.c:214
void exynos_pinmux_spi3(void)
Definition: pinmux.c:140
void exynos_pinmux_i2c3(void)
Definition: pinmux.c:194
void exynos_pinmux_sdmmc2(void)
Definition: pinmux.c:70
void exynos_pinmux_i2c9(void)
Definition: pinmux.c:211
static void exynos_pinmux_sdmmc(struct gpio *gpios, int num_gpios)
Definition: pinmux.c:43
static void exynos_pinmux_spi(int start, int cfg)
Definition: pinmux.c:117
static void exynos_pinmux_uart(int start, int count)
Definition: pinmux.c:6
void exynos_pinmux_i2c10(void)
Definition: pinmux.c:216
void exynos_pinmux_i2c8(void)
Definition: pinmux.c:206
static void exynos_pinmux_i2c(int start, int func)
Definition: pinmux.c:158
#define GPIO_FUNC(_func, _pudir, _str)
Definition: gpio.h:255
#define GPIO_PULL_UP
Definition: gpio.h:24
void gpio_cfg_pin(int gpio, int cfg)
Set GPIO pin configuration.
Definition: gpio.c:63
int gpio_set_value(unsigned int gpio, int value)
Set an output GPIO's value.
Definition: gpio.c:176
void gpio_set_drv(int gpio, int mode)
Set GPIO drive strength level.
Definition: gpio.c:102
exynos5_gpio_pin
Definition: gpio.h:102
@ GPIO_C14
Definition: gpio.h:172
@ GPIO_B36
Definition: gpio.h:158
@ GPIO_C13
Definition: gpio.h:171
@ GPIO_C26
Definition: gpio.h:182
@ GPIO_F02
Definition: gpio.h:320
@ GPIO_D17
Definition: gpio.h:207
@ GPIO_D14
Definition: gpio.h:204
@ GPIO_C00
Definition: gpio.h:160
@ GPIO_E04
Definition: gpio.h:306
@ GPIO_C30
Definition: gpio.h:184
@ GPIO_C04
Definition: gpio.h:164
@ GPIO_F10
Definition: gpio.h:326
@ GPIO_C32
Definition: gpio.h:186
@ GPIO_C10
Definition: gpio.h:168
@ GPIO_B32
Definition: gpio.h:154
@ GPIO_C01
Definition: gpio.h:161
@ GPIO_C06
Definition: gpio.h:166
@ GPIO_C16
Definition: gpio.h:174
@ GPIO_B13
Definition: gpio.h:139
@ GPIO_C11
Definition: gpio.h:169
@ GPIO_B22
Definition: gpio.h:146
@ GPIO_A22
Definition: gpio.h:122
@ GPIO_D16
Definition: gpio.h:206
@ GPIO_A10
Definition: gpio.h:112
@ GPIO_A12
Definition: gpio.h:114
@ GPIO_C31
Definition: gpio.h:185
@ GPIO_C20
Definition: gpio.h:176
@ GPIO_C33
Definition: gpio.h:187
@ GPIO_D15
Definition: gpio.h:205
@ GPIO_B34
Definition: gpio.h:156
@ GPIO_C12
Definition: gpio.h:170
@ GPIO_C05
Definition: gpio.h:165
@ GPIO_A24
Definition: gpio.h:124
@ GPIO_C24
Definition: gpio.h:180
@ GPIO_C21
Definition: gpio.h:177
@ GPIO_A04
Definition: gpio.h:108
@ GPIO_C22
Definition: gpio.h:178
@ GPIO_A06
Definition: gpio.h:110
@ GPIO_C03
Definition: gpio.h:163
@ GPIO_X07
Definition: gpio.h:274
@ GPIO_C02
Definition: gpio.h:162
@ GPIO_B11
Definition: gpio.h:137
@ GPIO_A14
Definition: gpio.h:116
@ GPIO_C23
Definition: gpio.h:179
@ GPIO_C25
Definition: gpio.h:181
@ GPIO_B30
Definition: gpio.h:152
@ GPIO_A20
Definition: gpio.h:120
@ GPIO_C15
Definition: gpio.h:173
@ GPIO_A00
Definition: gpio.h:104
#define GPIO_PULL_NONE
Definition: gpio.h:30
#define GPIO_DRV_3X
Definition: gpio.h:36
#define GPIO_DRV_4X
Definition: gpio.h:38
@ GPIO_B40
Definition: gpio.h:385
Definition: pinmux.c:36
unsigned int func
Definition: pinmux.c:38
unsigned int pull
Definition: pinmux.c:39
enum exynos5_gpio_pin pin
Definition: pinmux.c:37
unsigned int drv
Definition: pinmux.c:40
#define count