Commit 6852b914779fb38bdd12995ce871c04aa286c53e
1 parent
9bd91eb645
Exists in
smarc-rel_imx_4.1.15_2.0.0_ga
Fix pinmux for SMARC-FiMX7 rev. 00B0
Showing 1 changed file with 9 additions and 8 deletions Inline Diff
board/embedian/smarcfimx7/smarcfimx7.c
1 | /* | 1 | /* |
2 | * Copyright (C) 2015-2016 Freescale Semiconductor, Inc. | 2 | * Copyright (C) 2015-2016 Freescale Semiconductor, Inc. |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: GPL-2.0+ | 4 | * SPDX-License-Identifier: GPL-2.0+ |
5 | */ | 5 | */ |
6 | 6 | ||
7 | #include <asm/arch/clock.h> | 7 | #include <asm/arch/clock.h> |
8 | #include <asm/arch/imx-regs.h> | 8 | #include <asm/arch/imx-regs.h> |
9 | #include <asm/arch/mx7-pins.h> | 9 | #include <asm/arch/mx7-pins.h> |
10 | #include <asm/arch/sys_proto.h> | 10 | #include <asm/arch/sys_proto.h> |
11 | #include <asm/gpio.h> | 11 | #include <asm/gpio.h> |
12 | #include <asm/imx-common/iomux-v3.h> | 12 | #include <asm/imx-common/iomux-v3.h> |
13 | #include <asm/imx-common/boot_mode.h> | 13 | #include <asm/imx-common/boot_mode.h> |
14 | #include <asm/io.h> | 14 | #include <asm/io.h> |
15 | #include <linux/sizes.h> | 15 | #include <linux/sizes.h> |
16 | #include <common.h> | 16 | #include <common.h> |
17 | #include <fsl_esdhc.h> | 17 | #include <fsl_esdhc.h> |
18 | #include <mmc.h> | 18 | #include <mmc.h> |
19 | #include <miiphy.h> | 19 | #include <miiphy.h> |
20 | #include <netdev.h> | 20 | #include <netdev.h> |
21 | #include <power/pmic.h> | 21 | #include <power/pmic.h> |
22 | #include <power/pfuze3000_pmic.h> | 22 | #include <power/pfuze3000_pmic.h> |
23 | #include "pfuze.h" | 23 | #include "pfuze.h" |
24 | #include <pwm.h> | 24 | #include <pwm.h> |
25 | #include <i2c.h> | 25 | #include <i2c.h> |
26 | #include <asm/imx-common/mxc_i2c.h> | 26 | #include <asm/imx-common/mxc_i2c.h> |
27 | #include <asm/arch/crm_regs.h> | 27 | #include <asm/arch/crm_regs.h> |
28 | #include <usb.h> | 28 | #include <usb.h> |
29 | #include <usb/ehci-fsl.h> | 29 | #include <usb/ehci-fsl.h> |
30 | #if defined(CONFIG_MXC_EPDC) | 30 | #if defined(CONFIG_MXC_EPDC) |
31 | #include <lcd.h> | 31 | #include <lcd.h> |
32 | #include <mxc_epdc_fb.h> | 32 | #include <mxc_epdc_fb.h> |
33 | #endif | 33 | #endif |
34 | #include <asm/imx-common/video.h> | 34 | #include <asm/imx-common/video.h> |
35 | 35 | ||
36 | #include "smarcfimx7.h" | 36 | #include "smarcfimx7.h" |
37 | #ifdef CONFIG_FSL_FASTBOOT | 37 | #ifdef CONFIG_FSL_FASTBOOT |
38 | #include <fsl_fastboot.h> | 38 | #include <fsl_fastboot.h> |
39 | #ifdef CONFIG_ANDROID_RECOVERY | 39 | #ifdef CONFIG_ANDROID_RECOVERY |
40 | #include <recovery.h> | 40 | #include <recovery.h> |
41 | #endif | 41 | #endif |
42 | #endif /*CONFIG_FSL_FASTBOOT*/ | 42 | #endif /*CONFIG_FSL_FASTBOOT*/ |
43 | 43 | ||
44 | DECLARE_GLOBAL_DATA_PTR; | 44 | DECLARE_GLOBAL_DATA_PTR; |
45 | 45 | ||
46 | #define UART_PAD_CTRL (PAD_CTL_DSE_3P3V_49OHM | \ | 46 | #define UART_PAD_CTRL (PAD_CTL_DSE_3P3V_49OHM | \ |
47 | PAD_CTL_PUS_PU100KOHM | PAD_CTL_HYS) | 47 | PAD_CTL_PUS_PU100KOHM | PAD_CTL_HYS) |
48 | 48 | ||
49 | #define USDHC_PAD_CTRL (PAD_CTL_DSE_3P3V_32OHM | PAD_CTL_SRE_SLOW | \ | 49 | #define USDHC_PAD_CTRL (PAD_CTL_DSE_3P3V_32OHM | PAD_CTL_SRE_SLOW | \ |
50 | PAD_CTL_HYS | PAD_CTL_PUE | PAD_CTL_PUS_PU47KOHM) | 50 | PAD_CTL_HYS | PAD_CTL_PUE | PAD_CTL_PUS_PU47KOHM) |
51 | 51 | ||
52 | #define ENET_PAD_CTRL (PAD_CTL_PUS_PU100KOHM | PAD_CTL_DSE_3P3V_49OHM) | 52 | #define ENET_PAD_CTRL (PAD_CTL_PUS_PU100KOHM | PAD_CTL_DSE_3P3V_49OHM) |
53 | #define ENET_PAD_CTRL_MII (PAD_CTL_DSE_3P3V_32OHM) | 53 | #define ENET_PAD_CTRL_MII (PAD_CTL_DSE_3P3V_32OHM) |
54 | 54 | ||
55 | #define ENET_RX_PAD_CTRL (PAD_CTL_PUS_PU100KOHM | PAD_CTL_DSE_3P3V_49OHM) | 55 | #define ENET_RX_PAD_CTRL (PAD_CTL_PUS_PU100KOHM | PAD_CTL_DSE_3P3V_49OHM) |
56 | 56 | ||
57 | #define I2C_PAD_CTRL (PAD_CTL_DSE_3P3V_32OHM | PAD_CTL_SRE_SLOW | \ | 57 | #define I2C_PAD_CTRL (PAD_CTL_DSE_3P3V_32OHM | PAD_CTL_SRE_SLOW | \ |
58 | PAD_CTL_HYS | PAD_CTL_PUE | PAD_CTL_PUS_PU100KOHM) | 58 | PAD_CTL_HYS | PAD_CTL_PUE | PAD_CTL_PUS_PU100KOHM) |
59 | 59 | ||
60 | #define LCD_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_PUS_PU100KOHM | \ | 60 | #define LCD_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_PUS_PU100KOHM | \ |
61 | PAD_CTL_DSE_3P3V_49OHM) | 61 | PAD_CTL_DSE_3P3V_49OHM) |
62 | 62 | ||
63 | #define SPI_PAD_CTRL (PAD_CTL_DSE_3P3V_49OHM | PAD_CTL_SRE_FAST | PAD_CTL_HYS) | 63 | #define SPI_PAD_CTRL (PAD_CTL_DSE_3P3V_49OHM | PAD_CTL_SRE_FAST | PAD_CTL_HYS) |
64 | 64 | ||
65 | #define BUTTON_PAD_CTRL (PAD_CTL_PUS_PU5KOHM | PAD_CTL_DSE_3P3V_98OHM) | 65 | #define BUTTON_PAD_CTRL (PAD_CTL_PUS_PU5KOHM | PAD_CTL_DSE_3P3V_98OHM) |
66 | 66 | ||
67 | #define NAND_PAD_CTRL (PAD_CTL_DSE_3P3V_49OHM | PAD_CTL_SRE_SLOW | PAD_CTL_HYS) | 67 | #define NAND_PAD_CTRL (PAD_CTL_DSE_3P3V_49OHM | PAD_CTL_SRE_SLOW | PAD_CTL_HYS) |
68 | 68 | ||
69 | #define NAND_PAD_READY0_CTRL (PAD_CTL_DSE_3P3V_49OHM | PAD_CTL_PUS_PU5KOHM) | 69 | #define NAND_PAD_READY0_CTRL (PAD_CTL_DSE_3P3V_49OHM | PAD_CTL_PUS_PU5KOHM) |
70 | 70 | ||
71 | #define EPDC_PAD_CTRL 0x0 | 71 | #define EPDC_PAD_CTRL 0x0 |
72 | 72 | ||
73 | #define WEAK_PULLUP (PAD_CTL_PUS_PU100KOHM | PAD_CTL_DSE_3P3V_49OHM | \ | 73 | #define WEAK_PULLUP (PAD_CTL_PUS_PU100KOHM | PAD_CTL_DSE_3P3V_49OHM | \ |
74 | PAD_CTL_HYS | PAD_CTL_SRE_SLOW) | 74 | PAD_CTL_HYS | PAD_CTL_SRE_SLOW) |
75 | 75 | ||
76 | #ifdef CONFIG_SYS_I2C_MXC | 76 | #ifdef CONFIG_SYS_I2C_MXC |
77 | #define PC MUX_PAD_CTRL(I2C_PAD_CTRL) | 77 | #define PC MUX_PAD_CTRL(I2C_PAD_CTRL) |
78 | /* | 78 | /* |
79 | * Read header information from EEPROM into global structure. | 79 | * Read header information from EEPROM into global structure. |
80 | */ | 80 | */ |
81 | static int read_eeprom(struct smarcfimx7_id *header) | 81 | static int read_eeprom(struct smarcfimx7_id *header) |
82 | { | 82 | { |
83 | i2c_set_bus_num(1); | 83 | i2c_set_bus_num(1); |
84 | /* Check if baseboard eeprom is available */ | 84 | /* Check if baseboard eeprom is available */ |
85 | if (i2c_probe(CONFIG_SYS_I2C_EEPROM_ADDR)) { | 85 | if (i2c_probe(CONFIG_SYS_I2C_EEPROM_ADDR)) { |
86 | puts("Could not probe the EEPROM; something fundamentally " | 86 | puts("Could not probe the EEPROM; something fundamentally " |
87 | "wrong on the I2C bus.\n"); | 87 | "wrong on the I2C bus.\n"); |
88 | return -ENODEV; | 88 | return -ENODEV; |
89 | } | 89 | } |
90 | 90 | ||
91 | /* read the eeprom using i2c */ | 91 | /* read the eeprom using i2c */ |
92 | if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 2, (uchar *)header, | 92 | if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 2, (uchar *)header, |
93 | sizeof(struct smarcfimx7_id))) { | 93 | sizeof(struct smarcfimx7_id))) { |
94 | puts("Could not read the EEPROM; something fundamentally" | 94 | puts("Could not read the EEPROM; something fundamentally" |
95 | " wrong on the I2C bus.\n"); | 95 | " wrong on the I2C bus.\n"); |
96 | return -EIO; | 96 | return -EIO; |
97 | } | 97 | } |
98 | 98 | ||
99 | if (header->magic != 0xEE3355AA) { | 99 | if (header->magic != 0xEE3355AA) { |
100 | /* | 100 | /* |
101 | * read the eeprom using i2c again, | 101 | * read the eeprom using i2c again, |
102 | * but use only a 1 byte address | 102 | * but use only a 1 byte address |
103 | */ | 103 | */ |
104 | if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 1, (uchar *)header, | 104 | if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 1, (uchar *)header, |
105 | sizeof(struct smarcfimx7_id))) { | 105 | sizeof(struct smarcfimx7_id))) { |
106 | puts("Could not read the EEPROM; something " | 106 | puts("Could not read the EEPROM; something " |
107 | "fundamentally wrong on the I2C bus.\n"); | 107 | "fundamentally wrong on the I2C bus.\n"); |
108 | return -EIO; | 108 | return -EIO; |
109 | } | 109 | } |
110 | 110 | ||
111 | if (header->magic != 0xEE3355AA) { | 111 | if (header->magic != 0xEE3355AA) { |
112 | printf("Incorrect magic number (0x%x) in EEPROM\n", | 112 | printf("Incorrect magic number (0x%x) in EEPROM\n", |
113 | header->magic); | 113 | header->magic); |
114 | return -EINVAL; | 114 | return -EINVAL; |
115 | } | 115 | } |
116 | } | 116 | } |
117 | 117 | ||
118 | return 0; | 118 | return 0; |
119 | } | 119 | } |
120 | 120 | ||
121 | /* I2C1 for PMIC (I2C_PM)*/ | 121 | /* I2C1 for PMIC (I2C_PM)*/ |
122 | static struct i2c_pads_info i2c_pad_info1 = { | 122 | static struct i2c_pads_info i2c_pad_info1 = { |
123 | .scl = { | 123 | .scl = { |
124 | .i2c_mode = MX7D_PAD_I2C1_SCL__I2C1_SCL | PC, | 124 | .i2c_mode = MX7D_PAD_I2C1_SCL__I2C1_SCL | PC, |
125 | .gpio_mode = MX7D_PAD_I2C1_SCL__GPIO4_IO8 | PC, | 125 | .gpio_mode = MX7D_PAD_I2C1_SCL__GPIO4_IO8 | PC, |
126 | .gp = IMX_GPIO_NR(4, 8), | 126 | .gp = IMX_GPIO_NR(4, 8), |
127 | }, | 127 | }, |
128 | .sda = { | 128 | .sda = { |
129 | .i2c_mode = MX7D_PAD_I2C1_SDA__I2C1_SDA | PC, | 129 | .i2c_mode = MX7D_PAD_I2C1_SDA__I2C1_SDA | PC, |
130 | .gpio_mode = MX7D_PAD_I2C1_SDA__GPIO4_IO9 | PC, | 130 | .gpio_mode = MX7D_PAD_I2C1_SDA__GPIO4_IO9 | PC, |
131 | .gp = IMX_GPIO_NR(4, 9), | 131 | .gp = IMX_GPIO_NR(4, 9), |
132 | }, | 132 | }, |
133 | }; | 133 | }; |
134 | 134 | ||
135 | /* I2C2 for I2C_GP */ | 135 | /* I2C2 for I2C_GP */ |
136 | static struct i2c_pads_info i2c_pad_info2 = { | 136 | static struct i2c_pads_info i2c_pad_info2 = { |
137 | .scl = { | 137 | .scl = { |
138 | .i2c_mode = MX7D_PAD_I2C2_SCL__I2C2_SCL | PC, | 138 | .i2c_mode = MX7D_PAD_I2C2_SCL__I2C2_SCL | PC, |
139 | .gpio_mode = MX7D_PAD_I2C2_SCL__GPIO4_IO10 | PC, | 139 | .gpio_mode = MX7D_PAD_I2C2_SCL__GPIO4_IO10 | PC, |
140 | .gp = IMX_GPIO_NR(4, 10), | 140 | .gp = IMX_GPIO_NR(4, 10), |
141 | }, | 141 | }, |
142 | .sda = { | 142 | .sda = { |
143 | .i2c_mode = MX7D_PAD_I2C2_SDA__I2C2_SDA | PC, | 143 | .i2c_mode = MX7D_PAD_I2C2_SDA__I2C2_SDA | PC, |
144 | .gpio_mode = MX7D_PAD_I2C2_SDA__GPIO4_IO11 | PC, | 144 | .gpio_mode = MX7D_PAD_I2C2_SDA__GPIO4_IO11 | PC, |
145 | .gp = IMX_GPIO_NR(4, 11), | 145 | .gp = IMX_GPIO_NR(4, 11), |
146 | }, | 146 | }, |
147 | }; | 147 | }; |
148 | 148 | ||
149 | /* I2C3 for I2C_LCD */ | 149 | /* I2C3 for I2C_LCD */ |
150 | static struct i2c_pads_info i2c_pad_info3 = { | 150 | static struct i2c_pads_info i2c_pad_info3 = { |
151 | .scl = { | 151 | .scl = { |
152 | .i2c_mode = MX7D_PAD_I2C3_SCL__I2C3_SCL | PC, | 152 | .i2c_mode = MX7D_PAD_I2C3_SCL__I2C3_SCL | PC, |
153 | .gpio_mode = MX7D_PAD_I2C3_SCL__GPIO4_IO12 | PC, | 153 | .gpio_mode = MX7D_PAD_I2C3_SCL__GPIO4_IO12 | PC, |
154 | .gp = IMX_GPIO_NR(4, 12), | 154 | .gp = IMX_GPIO_NR(4, 12), |
155 | }, | 155 | }, |
156 | .sda = { | 156 | .sda = { |
157 | .i2c_mode = MX7D_PAD_I2C3_SDA__I2C3_SDA | PC, | 157 | .i2c_mode = MX7D_PAD_I2C3_SDA__I2C3_SDA | PC, |
158 | .gpio_mode = MX7D_PAD_I2C3_SDA__GPIO4_IO13 | PC, | 158 | .gpio_mode = MX7D_PAD_I2C3_SDA__GPIO4_IO13 | PC, |
159 | .gp = IMX_GPIO_NR(4, 13), | 159 | .gp = IMX_GPIO_NR(4, 13), |
160 | }, | 160 | }, |
161 | }; | 161 | }; |
162 | 162 | ||
163 | /* I2C4 for I2C_CAM1 */ | 163 | /* I2C4 for I2C_CAM1 */ |
164 | static struct i2c_pads_info i2c_pad_info4 = { | 164 | static struct i2c_pads_info i2c_pad_info4 = { |
165 | .scl = { | 165 | .scl = { |
166 | .i2c_mode = MX7D_PAD_I2C4_SCL__I2C4_SCL | PC, | 166 | .i2c_mode = MX7D_PAD_I2C4_SCL__I2C4_SCL | PC, |
167 | .gpio_mode = MX7D_PAD_I2C4_SCL__GPIO4_IO14 | PC, | 167 | .gpio_mode = MX7D_PAD_I2C4_SCL__GPIO4_IO14 | PC, |
168 | .gp = IMX_GPIO_NR(4, 14), | 168 | .gp = IMX_GPIO_NR(4, 14), |
169 | }, | 169 | }, |
170 | .sda = { | 170 | .sda = { |
171 | .i2c_mode = MX7D_PAD_I2C4_SDA__I2C4_SDA | PC, | 171 | .i2c_mode = MX7D_PAD_I2C4_SDA__I2C4_SDA | PC, |
172 | .gpio_mode = MX7D_PAD_I2C4_SDA__GPIO4_IO15 | PC, | 172 | .gpio_mode = MX7D_PAD_I2C4_SDA__GPIO4_IO15 | PC, |
173 | .gp = IMX_GPIO_NR(4, 15), | 173 | .gp = IMX_GPIO_NR(4, 15), |
174 | }, | 174 | }, |
175 | }; | 175 | }; |
176 | #endif | 176 | #endif |
177 | 177 | ||
178 | int dram_init(void) | 178 | int dram_init(void) |
179 | { | 179 | { |
180 | gd->ram_size = PHYS_SDRAM_SIZE; | 180 | gd->ram_size = PHYS_SDRAM_SIZE; |
181 | 181 | ||
182 | return 0; | 182 | return 0; |
183 | } | 183 | } |
184 | 184 | ||
185 | static iomux_v3_cfg_t const wdog_pads[] = { | 185 | static iomux_v3_cfg_t const wdog_pads[] = { |
186 | MX7D_PAD_GPIO1_IO00__WDOG1_WDOG_B | MUX_PAD_CTRL(NO_PAD_CTRL), | 186 | MX7D_PAD_GPIO1_IO00__WDOG1_WDOG_B | MUX_PAD_CTRL(NO_PAD_CTRL), |
187 | }; | 187 | }; |
188 | 188 | ||
189 | /* SER0/UART6 */ | 189 | /* SER0/UART6 */ |
190 | static iomux_v3_cfg_t const uart6_pads[] = { | 190 | static iomux_v3_cfg_t const uart6_pads[] = { |
191 | MX7D_PAD_EPDC_DATA09__UART6_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), | 191 | MX7D_PAD_EPDC_DATA09__UART6_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), |
192 | MX7D_PAD_EPDC_DATA08__UART6_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), | 192 | MX7D_PAD_EPDC_DATA08__UART6_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), |
193 | MX7D_PAD_EPDC_DATA10__UART6_DTE_CTS | MUX_PAD_CTRL(UART_PAD_CTRL), | 193 | MX7D_PAD_EPDC_DATA10__UART6_DTE_CTS | MUX_PAD_CTRL(UART_PAD_CTRL), |
194 | MX7D_PAD_EPDC_DATA11__UART6_DTE_RTS | MUX_PAD_CTRL(UART_PAD_CTRL), | 194 | MX7D_PAD_EPDC_DATA11__UART6_DTE_RTS | MUX_PAD_CTRL(UART_PAD_CTRL), |
195 | }; | 195 | }; |
196 | 196 | ||
197 | /* SER1/UART2 */ | 197 | /* SER1/UART2 */ |
198 | static iomux_v3_cfg_t const uart2_pads[] = { | 198 | static iomux_v3_cfg_t const uart2_pads[] = { |
199 | MX7D_PAD_UART2_TX_DATA__UART2_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), | 199 | MX7D_PAD_UART2_TX_DATA__UART2_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), |
200 | MX7D_PAD_UART2_RX_DATA__UART2_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), | 200 | MX7D_PAD_UART2_RX_DATA__UART2_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), |
201 | }; | 201 | }; |
202 | 202 | ||
203 | /* SER2/UART7 */ | 203 | /* SER2/UART7 */ |
204 | static iomux_v3_cfg_t const uart7_pads[] = { | 204 | static iomux_v3_cfg_t const uart7_pads[] = { |
205 | MX7D_PAD_EPDC_DATA13__UART7_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), | 205 | MX7D_PAD_EPDC_DATA13__UART7_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), |
206 | MX7D_PAD_EPDC_DATA12__UART7_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), | 206 | MX7D_PAD_EPDC_DATA12__UART7_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), |
207 | MX7D_PAD_EPDC_DATA14__UART7_DTE_CTS | MUX_PAD_CTRL(UART_PAD_CTRL), | 207 | MX7D_PAD_EPDC_DATA14__UART7_DTE_CTS | MUX_PAD_CTRL(UART_PAD_CTRL), |
208 | MX7D_PAD_EPDC_DATA15__UART7_DTE_RTS | MUX_PAD_CTRL(UART_PAD_CTRL), | 208 | MX7D_PAD_EPDC_DATA15__UART7_DTE_RTS | MUX_PAD_CTRL(UART_PAD_CTRL), |
209 | }; | 209 | }; |
210 | 210 | ||
211 | /* SER3/UART3 Debug Port */ | 211 | /* SER3/UART3 Debug Port */ |
212 | static iomux_v3_cfg_t const uart3_pads[] = { | 212 | static iomux_v3_cfg_t const uart3_pads[] = { |
213 | MX7D_PAD_UART3_TX_DATA__UART3_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), | 213 | MX7D_PAD_UART3_TX_DATA__UART3_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), |
214 | MX7D_PAD_UART3_RX_DATA__UART3_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), | 214 | MX7D_PAD_UART3_RX_DATA__UART3_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), |
215 | }; | 215 | }; |
216 | 216 | ||
217 | /* RESET_OUT# */ | 217 | /* RESET_OUT# */ |
218 | static iomux_v3_cfg_t const reset_out_pads[] = { | 218 | static iomux_v3_cfg_t const reset_out_pads[] = { |
219 | MX7D_PAD_EPDC_BDR1__GPIO2_IO29 | MUX_PAD_CTRL(NO_PAD_CTRL), | 219 | MX7D_PAD_EPDC_BDR1__GPIO2_IO29 | MUX_PAD_CTRL(NO_PAD_CTRL), |
220 | }; | 220 | }; |
221 | 221 | ||
222 | /* SD Card */ | 222 | /* SD Card */ |
223 | static iomux_v3_cfg_t const usdhc1_pads[] = { | 223 | static iomux_v3_cfg_t const usdhc1_pads[] = { |
224 | MX7D_PAD_SD1_CLK__SD1_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 224 | MX7D_PAD_SD1_CLK__SD1_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
225 | MX7D_PAD_SD1_CMD__SD1_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 225 | MX7D_PAD_SD1_CMD__SD1_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
226 | MX7D_PAD_SD1_DATA0__SD1_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 226 | MX7D_PAD_SD1_DATA0__SD1_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
227 | MX7D_PAD_SD1_DATA1__SD1_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 227 | MX7D_PAD_SD1_DATA1__SD1_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
228 | MX7D_PAD_SD1_DATA2__SD1_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 228 | MX7D_PAD_SD1_DATA2__SD1_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
229 | MX7D_PAD_SD1_DATA3__SD1_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 229 | MX7D_PAD_SD1_DATA3__SD1_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
230 | 230 | ||
231 | MX7D_PAD_SD1_CD_B__GPIO5_IO0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), /*CD */ | 231 | MX7D_PAD_SD1_CD_B__GPIO5_IO0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), /*CD */ |
232 | MX7D_PAD_SD1_WP__GPIO5_IO1 | MUX_PAD_CTRL(NO_PAD_CTRL), /* WP */ | 232 | MX7D_PAD_SD1_WP__GPIO5_IO1 | MUX_PAD_CTRL(NO_PAD_CTRL), /* WP */ |
233 | MX7D_PAD_SD1_RESET_B__GPIO5_IO2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), /* SDIO_PWR_EN */ | 233 | MX7D_PAD_SD1_RESET_B__GPIO5_IO2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), /* SDIO_PWR_EN */ |
234 | }; | 234 | }; |
235 | 235 | ||
236 | /* eMMC */ | 236 | /* eMMC */ |
237 | static iomux_v3_cfg_t const usdhc3_emmc_pads[] = { | 237 | static iomux_v3_cfg_t const usdhc3_emmc_pads[] = { |
238 | MX7D_PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 238 | MX7D_PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
239 | MX7D_PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 239 | MX7D_PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
240 | MX7D_PAD_SD3_DATA0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 240 | MX7D_PAD_SD3_DATA0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
241 | MX7D_PAD_SD3_DATA1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 241 | MX7D_PAD_SD3_DATA1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
242 | MX7D_PAD_SD3_DATA2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 242 | MX7D_PAD_SD3_DATA2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
243 | MX7D_PAD_SD3_DATA3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 243 | MX7D_PAD_SD3_DATA3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
244 | MX7D_PAD_SD3_DATA4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 244 | MX7D_PAD_SD3_DATA4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
245 | MX7D_PAD_SD3_DATA5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 245 | MX7D_PAD_SD3_DATA5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
246 | MX7D_PAD_SD3_DATA6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 246 | MX7D_PAD_SD3_DATA6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
247 | MX7D_PAD_SD3_DATA7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 247 | MX7D_PAD_SD3_DATA7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
248 | MX7D_PAD_SD3_STROBE__SD3_STROBE | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 248 | MX7D_PAD_SD3_STROBE__SD3_STROBE | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
249 | MX7D_PAD_SD3_RESET_B__GPIO6_IO11 | MUX_PAD_CTRL(USDHC_PAD_CTRL), | 249 | MX7D_PAD_SD3_RESET_B__GPIO6_IO11 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
250 | }; | 250 | }; |
251 | 251 | ||
252 | /* SPI0 */ | 252 | /* SPI0 */ |
253 | static iomux_v3_cfg_t const ecspi1_pads[] = { | 253 | static iomux_v3_cfg_t const ecspi1_pads[] = { |
254 | MX7D_PAD_ECSPI1_SCLK__ECSPI1_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL), | 254 | MX7D_PAD_ECSPI1_SCLK__ECSPI1_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL), |
255 | MX7D_PAD_ECSPI1_MOSI__ECSPI1_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL), | 255 | MX7D_PAD_ECSPI1_MOSI__ECSPI1_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL), |
256 | MX7D_PAD_ECSPI1_MISO__ECSPI1_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL), | 256 | MX7D_PAD_ECSPI1_MISO__ECSPI1_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL), |
257 | MX7D_PAD_ECSPI1_SS0__ECSPI1_SS0 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/ | 257 | MX7D_PAD_ECSPI1_SS0__ECSPI1_SS0 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/ |
258 | MX7D_PAD_UART1_RX_DATA__ECSPI1_SS1 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS1#*/ | 258 | MX7D_PAD_UART1_RX_DATA__ECSPI1_SS1 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS1#*/ |
259 | }; | 259 | }; |
260 | 260 | ||
261 | /* ESPI */ | 261 | /* ESPI */ |
262 | static iomux_v3_cfg_t const ecspi3_pads[] = { | 262 | static iomux_v3_cfg_t const ecspi3_pads[] = { |
263 | MX7D_PAD_SAI2_RX_DATA__ECSPI3_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL), | 263 | MX7D_PAD_SAI2_RX_DATA__ECSPI3_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL), |
264 | MX7D_PAD_SAI2_TX_BCLK__ECSPI3_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL), | 264 | MX7D_PAD_SAI2_TX_BCLK__ECSPI3_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL), |
265 | MX7D_PAD_SAI2_TX_SYNC__ECSPI3_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL), | 265 | MX7D_PAD_SAI2_TX_SYNC__ECSPI3_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL), |
266 | MX7D_PAD_SAI2_TX_DATA__ECSPI3_SS0 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/ | 266 | MX7D_PAD_SAI2_TX_DATA__ECSPI3_SS0 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/ |
267 | MX7D_PAD_SD2_CD_B__ECSPI3_SS2 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS2#*/ | 267 | MX7D_PAD_SD2_CD_B__ECSPI3_SS2 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS2#*/ |
268 | }; | 268 | }; |
269 | 269 | ||
270 | /* CAN0/FLEXCAN1 */ | 270 | /* CAN0/FLEXCAN1 */ |
271 | static iomux_v3_cfg_t const flexcan1_pads[] = { | 271 | static iomux_v3_cfg_t const flexcan1_pads[] = { |
272 | MX7D_PAD_GPIO1_IO13__FLEXCAN1_TX | MUX_PAD_CTRL(WEAK_PULLUP), | 272 | MX7D_PAD_GPIO1_IO13__FLEXCAN1_TX | MUX_PAD_CTRL(WEAK_PULLUP), |
273 | MX7D_PAD_GPIO1_IO12__FLEXCAN1_RX | MUX_PAD_CTRL(WEAK_PULLUP), | 273 | MX7D_PAD_GPIO1_IO12__FLEXCAN1_RX | MUX_PAD_CTRL(WEAK_PULLUP), |
274 | }; | 274 | }; |
275 | 275 | ||
276 | /* CAN1/FLEXCAN2 */ | 276 | /* CAN1/FLEXCAN2 */ |
277 | static iomux_v3_cfg_t const flexcan2_pads[] = { | 277 | static iomux_v3_cfg_t const flexcan2_pads[] = { |
278 | MX7D_PAD_GPIO1_IO15__FLEXCAN2_TX | MUX_PAD_CTRL(WEAK_PULLUP), | 278 | MX7D_PAD_GPIO1_IO15__FLEXCAN2_TX | MUX_PAD_CTRL(WEAK_PULLUP), |
279 | MX7D_PAD_GPIO1_IO14__FLEXCAN2_RX | MUX_PAD_CTRL(WEAK_PULLUP), | 279 | MX7D_PAD_GPIO1_IO14__FLEXCAN2_RX | MUX_PAD_CTRL(WEAK_PULLUP), |
280 | }; | 280 | }; |
281 | 281 | ||
282 | /* GPIOs */ | 282 | /* GPIOs */ |
283 | static iomux_v3_cfg_t const gpios_pads[] = { | 283 | static iomux_v3_cfg_t const gpios_pads[] = { |
284 | MX7D_PAD_EPDC_DATA00__GPIO2_IO0 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO0 */ | 284 | MX7D_PAD_EPDC_DATA00__GPIO2_IO0 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO0 */ |
285 | MX7D_PAD_EPDC_DATA01__GPIO2_IO1 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO1 */ | 285 | MX7D_PAD_EPDC_DATA01__GPIO2_IO1 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO1 */ |
286 | MX7D_PAD_EPDC_DATA02__GPIO2_IO2 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO2 */ | 286 | MX7D_PAD_EPDC_DATA02__GPIO2_IO2 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO2 */ |
287 | MX7D_PAD_EPDC_DATA03__GPIO2_IO3 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO3 */ | 287 | MX7D_PAD_EPDC_DATA03__GPIO2_IO3 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO3 */ |
288 | MX7D_PAD_EPDC_DATA04__GPIO2_IO4 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO4 */ | 288 | MX7D_PAD_EPDC_DATA04__GPIO2_IO4 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO4 */ |
289 | MX7D_PAD_EPDC_DATA05__GPIO2_IO5 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO6 */ | 289 | MX7D_PAD_EPDC_DATA05__GPIO2_IO5 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO6 */ |
290 | MX7D_PAD_EPDC_DATA07__GPIO2_IO7 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO7 */ | 290 | MX7D_PAD_EPDC_DATA07__GPIO2_IO7 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO7 */ |
291 | MX7D_PAD_EPDC_DATA06__GPIO2_IO6 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO8 */ | 291 | MX7D_PAD_EPDC_DATA06__GPIO2_IO6 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO8 */ |
292 | MX7D_PAD_UART1_TX_DATA__GPIO4_IO1 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO9 */ | 292 | MX7D_PAD_UART1_TX_DATA__GPIO4_IO1 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO9 */ |
293 | MX7D_PAD_UART3_RTS_B__GPIO4_IO6 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO10 */ | 293 | MX7D_PAD_UART3_RTS_B__GPIO4_IO6 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO10 */ |
294 | MX7D_PAD_UART3_CTS_B__GPIO4_IO7 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO11 */ | 294 | MX7D_PAD_UART3_CTS_B__GPIO4_IO7 | MUX_PAD_CTRL(WEAK_PULLUP), /* GPIO11 */ |
295 | }; | 295 | }; |
296 | 296 | ||
297 | /* LVDS channel selection, set low as single channel LVDS and high as dual channel LVDS */ | 297 | /* LVDS channel selection, set low as single channel LVDS and high as dual channel LVDS */ |
298 | static iomux_v3_cfg_t const lvds_ch_sel_pads[] = { | 298 | static iomux_v3_cfg_t const lvds_ch_sel_pads[] = { |
299 | MX7D_PAD_SD2_CMD__GPIO5_IO13 | MUX_PAD_CTRL(WEAK_PULLUP), /* LVDS_CH_SEL */ | 299 | MX7D_PAD_SD2_CMD__GPIO5_IO13 | MUX_PAD_CTRL(WEAK_PULLUP), /* LVDS_CH_SEL */ |
300 | }; | 300 | }; |
301 | 301 | ||
302 | /* Misc. pins */ | 302 | /* Misc. pins */ |
303 | static iomux_v3_cfg_t const misc_pads[] = { | 303 | static iomux_v3_cfg_t const misc_pads[] = { |
304 | MX7D_PAD_SD2_DATA0__GPIO5_IO14 | MUX_PAD_CTRL(WEAK_PULLUP), /* SLEEP# */ | 304 | MX7D_PAD_SD2_DATA0__GPIO5_IO14 | MUX_PAD_CTRL(WEAK_PULLUP), /* SLEEP# */ |
305 | MX7D_PAD_ENET1_RX_CLK__GPIO7_IO13 | MUX_PAD_CTRL(WEAK_PULLUP), /* CHARGER_PRSNT# */ | 305 | MX7D_PAD_GPIO1_IO09__GPIO1_IO9 | MUX_PAD_CTRL(WEAK_PULLUP), /* CHARGER_PRSNT# */ |
306 | MX7D_PAD_GPIO1_IO08__GPIO1_IO8 | MUX_PAD_CTRL(WEAK_PULLUP), /* CHARGING# */ | 306 | MX7D_PAD_GPIO1_IO08__GPIO1_IO8 | MUX_PAD_CTRL(WEAK_PULLUP), /* CHARGING# */ |
307 | MX7D_PAD_SAI1_RX_SYNC__GPIO6_IO16 | MUX_PAD_CTRL(WEAK_PULLUP), /* CARRIER_STBY# */ | 307 | MX7D_PAD_SAI1_RX_SYNC__GPIO6_IO16 | MUX_PAD_CTRL(WEAK_PULLUP), /* CARRIER_STBY# */ |
308 | MX7D_PAD_SAI1_RX_BCLK__GPIO6_IO17 | MUX_PAD_CTRL(WEAK_PULLUP), /* CARRIER_PWR_ON# */ | ||
309 | MX7D_PAD_SD2_RESET_B__GPIO5_IO11 | MUX_PAD_CTRL(WEAK_PULLUP), /* BATLOW# */ | 308 | MX7D_PAD_SD2_RESET_B__GPIO5_IO11 | MUX_PAD_CTRL(WEAK_PULLUP), /* BATLOW# */ |
310 | MX7D_PAD_EPDC_BDR0__GPIO2_IO28 | MUX_PAD_CTRL(NO_PAD_CTRL), /* PCIe_RST# */ | 309 | MX7D_PAD_EPDC_BDR0__GPIO2_IO28 | MUX_PAD_CTRL(NO_PAD_CTRL), /* PCIe_RST# */ |
311 | MX7D_PAD_EPDC_PWR_STAT__GPIO2_IO31 | MUX_PAD_CTRL(NO_PAD_CTRL), /* PCIe_WAKE# */ | 310 | MX7D_PAD_EPDC_PWR_STAT__GPIO2_IO31 | MUX_PAD_CTRL(NO_PAD_CTRL), /* PCIe_WAKE# */ |
311 | MX7D_PAD_ENET1_CRS__GPIO7_IO14 | MUX_PAD_CTRL(NO_PAD_CTRL), /* WDT_TIME_OUT# */ | ||
312 | }; | 312 | }; |
313 | 313 | ||
314 | #ifdef CONFIG_VIDEO_MXS | 314 | #ifdef CONFIG_VIDEO_MXS |
315 | static iomux_v3_cfg_t const lcd_pads[] = { | 315 | static iomux_v3_cfg_t const lcd_pads[] = { |
316 | MX7D_PAD_LCD_CLK__LCD_CLK | MUX_PAD_CTRL(LCD_PAD_CTRL), | 316 | MX7D_PAD_LCD_CLK__LCD_CLK | MUX_PAD_CTRL(LCD_PAD_CTRL), |
317 | MX7D_PAD_LCD_ENABLE__LCD_ENABLE | MUX_PAD_CTRL(LCD_PAD_CTRL), | 317 | MX7D_PAD_LCD_ENABLE__LCD_ENABLE | MUX_PAD_CTRL(LCD_PAD_CTRL), |
318 | MX7D_PAD_LCD_HSYNC__LCD_HSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL), | 318 | MX7D_PAD_LCD_HSYNC__LCD_HSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL), |
319 | MX7D_PAD_LCD_VSYNC__LCD_VSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL), | 319 | MX7D_PAD_LCD_VSYNC__LCD_VSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL), |
320 | MX7D_PAD_LCD_DATA00__LCD_DATA0 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 320 | MX7D_PAD_LCD_DATA00__LCD_DATA0 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
321 | MX7D_PAD_LCD_DATA01__LCD_DATA1 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 321 | MX7D_PAD_LCD_DATA01__LCD_DATA1 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
322 | MX7D_PAD_LCD_DATA02__LCD_DATA2 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 322 | MX7D_PAD_LCD_DATA02__LCD_DATA2 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
323 | MX7D_PAD_LCD_DATA03__LCD_DATA3 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 323 | MX7D_PAD_LCD_DATA03__LCD_DATA3 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
324 | MX7D_PAD_LCD_DATA04__LCD_DATA4 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 324 | MX7D_PAD_LCD_DATA04__LCD_DATA4 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
325 | MX7D_PAD_LCD_DATA05__LCD_DATA5 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 325 | MX7D_PAD_LCD_DATA05__LCD_DATA5 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
326 | MX7D_PAD_LCD_DATA06__LCD_DATA6 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 326 | MX7D_PAD_LCD_DATA06__LCD_DATA6 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
327 | MX7D_PAD_LCD_DATA07__LCD_DATA7 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 327 | MX7D_PAD_LCD_DATA07__LCD_DATA7 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
328 | MX7D_PAD_LCD_DATA08__LCD_DATA8 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 328 | MX7D_PAD_LCD_DATA08__LCD_DATA8 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
329 | MX7D_PAD_LCD_DATA09__LCD_DATA9 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 329 | MX7D_PAD_LCD_DATA09__LCD_DATA9 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
330 | MX7D_PAD_LCD_DATA10__LCD_DATA10 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 330 | MX7D_PAD_LCD_DATA10__LCD_DATA10 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
331 | MX7D_PAD_LCD_DATA11__LCD_DATA11 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 331 | MX7D_PAD_LCD_DATA11__LCD_DATA11 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
332 | MX7D_PAD_LCD_DATA12__LCD_DATA12 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 332 | MX7D_PAD_LCD_DATA12__LCD_DATA12 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
333 | MX7D_PAD_LCD_DATA13__LCD_DATA13 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 333 | MX7D_PAD_LCD_DATA13__LCD_DATA13 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
334 | MX7D_PAD_LCD_DATA14__LCD_DATA14 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 334 | MX7D_PAD_LCD_DATA14__LCD_DATA14 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
335 | MX7D_PAD_LCD_DATA15__LCD_DATA15 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 335 | MX7D_PAD_LCD_DATA15__LCD_DATA15 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
336 | MX7D_PAD_LCD_DATA16__LCD_DATA16 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 336 | MX7D_PAD_LCD_DATA16__LCD_DATA16 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
337 | MX7D_PAD_LCD_DATA17__LCD_DATA17 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 337 | MX7D_PAD_LCD_DATA17__LCD_DATA17 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
338 | MX7D_PAD_LCD_DATA18__LCD_DATA18 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 338 | MX7D_PAD_LCD_DATA18__LCD_DATA18 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
339 | MX7D_PAD_LCD_DATA19__LCD_DATA19 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 339 | MX7D_PAD_LCD_DATA19__LCD_DATA19 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
340 | MX7D_PAD_LCD_DATA20__LCD_DATA20 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 340 | MX7D_PAD_LCD_DATA20__LCD_DATA20 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
341 | MX7D_PAD_LCD_DATA21__LCD_DATA21 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 341 | MX7D_PAD_LCD_DATA21__LCD_DATA21 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
342 | MX7D_PAD_LCD_DATA22__LCD_DATA22 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 342 | MX7D_PAD_LCD_DATA22__LCD_DATA22 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
343 | MX7D_PAD_LCD_DATA23__LCD_DATA23 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 343 | MX7D_PAD_LCD_DATA23__LCD_DATA23 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
344 | 344 | ||
345 | MX7D_PAD_LCD_RESET__GPIO3_IO4 | MUX_PAD_CTRL(LCD_PAD_CTRL), | 345 | MX7D_PAD_LCD_RESET__GPIO3_IO4 | MUX_PAD_CTRL(LCD_PAD_CTRL), |
346 | }; | 346 | }; |
347 | 347 | ||
348 | static iomux_v3_cfg_t const backlight_pads[] = { | 348 | static iomux_v3_cfg_t const backlight_pads[] = { |
349 | /* Backlight Enable for RGB: S127 */ | 349 | /* Backlight Enable for RGB: S127 */ |
350 | MX7D_PAD_GPIO1_IO02__GPIO1_IO2 | MUX_PAD_CTRL(WEAK_PULLUP), | 350 | MX7D_PAD_SAI1_RX_BCLK__GPIO6_IO17 | MUX_PAD_CTRL(WEAK_PULLUP), |
351 | 351 | ||
352 | /* PWM Backlight Control: S141. Use GPIO for Brightness adjustment, duty cycle = period */ | 352 | /* PWM Backlight Control: S141. Use GPIO for Brightness adjustment, duty cycle = period */ |
353 | MX7D_PAD_GPIO1_IO01__GPIO1_IO1 | MUX_PAD_CTRL(NO_PAD_CTRL), | 353 | MX7D_PAD_GPIO1_IO02__GPIO1_IO2 | MUX_PAD_CTRL(NO_PAD_CTRL), |
354 | }; | 354 | }; |
355 | 355 | ||
356 | void do_enable_parallel_lcd(struct display_info_t const *dev) | 356 | void do_enable_parallel_lcd(struct display_info_t const *dev) |
357 | { | 357 | { |
358 | imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads)); | 358 | imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads)); |
359 | 359 | ||
360 | imx_iomux_v3_setup_multiple_pads(backlight_pads, ARRAY_SIZE(backlight_pads)); | 360 | imx_iomux_v3_setup_multiple_pads(backlight_pads, ARRAY_SIZE(backlight_pads)); |
361 | 361 | ||
362 | /* Reset LCD */ | 362 | /* Reset LCD */ |
363 | gpio_direction_output(IMX_GPIO_NR(3, 4) , 1); | 363 | gpio_direction_output(IMX_GPIO_NR(3, 4) , 1); |
364 | 364 | ||
365 | /* Turn on Backlight */ | 365 | /* Turn on Backlight */ |
366 | gpio_direction_output(IMX_GPIO_NR(1, 2), 1); | 366 | gpio_direction_output(IMX_GPIO_NR(6, 17), 1); |
367 | 367 | ||
368 | /* Set Brightness to high */ | 368 | /* Set Brightness to high */ |
369 | gpio_direction_output(IMX_GPIO_NR(1, 1) , 1); | 369 | gpio_direction_output(IMX_GPIO_NR(1, 2) , 1); |
370 | } | 370 | } |
371 | 371 | ||
372 | 372 | ||
373 | /* LVDS Panel for AUO G070VW01 V0 7-inch Color TFT 800x480 Panel Settings */ | 373 | /* LVDS Panel for AUO G070VW01 V0 7-inch Color TFT 800x480 Panel Settings */ |
374 | struct display_info_t const displays[] = {{ | 374 | struct display_info_t const displays[] = {{ |
375 | .bus = ELCDIF1_IPS_BASE_ADDR, | 375 | .bus = ELCDIF1_IPS_BASE_ADDR, |
376 | .addr = 0, | 376 | .addr = 0, |
377 | .pixfmt = 24, | 377 | .pixfmt = 24, |
378 | .detect = NULL, | 378 | .detect = NULL, |
379 | .enable = do_enable_parallel_lcd, | 379 | .enable = do_enable_parallel_lcd, |
380 | .mode = { | 380 | .mode = { |
381 | .name = "G070VW01", | 381 | .name = "G070VW01", |
382 | .xres = 800, | 382 | .xres = 800, |
383 | .yres = 480, | 383 | .yres = 480, |
384 | .pixclock = 31069, | 384 | .pixclock = 31069, |
385 | .left_margin = 64, | 385 | .left_margin = 64, |
386 | .right_margin = 64, | 386 | .right_margin = 64, |
387 | .upper_margin = 12, | 387 | .upper_margin = 12, |
388 | .lower_margin = 4, | 388 | .lower_margin = 4, |
389 | .hsync_len = 128, | 389 | .hsync_len = 128, |
390 | .vsync_len = 12, | 390 | .vsync_len = 12, |
391 | .sync = 0, | 391 | .sync = 0, |
392 | .vmode = FB_VMODE_NONINTERLACED | 392 | .vmode = FB_VMODE_NONINTERLACED |
393 | } } }; | 393 | } } }; |
394 | size_t display_count = ARRAY_SIZE(displays); | 394 | size_t display_count = ARRAY_SIZE(displays); |
395 | #endif | 395 | #endif |
396 | 396 | ||
397 | static void setup_iomux_uart6(void) | 397 | static void setup_iomux_uart6(void) |
398 | { | 398 | { |
399 | imx_iomux_v3_setup_multiple_pads(uart6_pads, ARRAY_SIZE(uart6_pads)); | 399 | imx_iomux_v3_setup_multiple_pads(uart6_pads, ARRAY_SIZE(uart6_pads)); |
400 | } | 400 | } |
401 | 401 | ||
402 | static void setup_iomux_uart2(void) | 402 | static void setup_iomux_uart2(void) |
403 | { | 403 | { |
404 | imx_iomux_v3_setup_multiple_pads(uart2_pads, ARRAY_SIZE(uart2_pads)); | 404 | imx_iomux_v3_setup_multiple_pads(uart2_pads, ARRAY_SIZE(uart2_pads)); |
405 | } | 405 | } |
406 | 406 | ||
407 | static void setup_iomux_uart7(void) | 407 | static void setup_iomux_uart7(void) |
408 | { | 408 | { |
409 | imx_iomux_v3_setup_multiple_pads(uart7_pads, ARRAY_SIZE(uart7_pads)); | 409 | imx_iomux_v3_setup_multiple_pads(uart7_pads, ARRAY_SIZE(uart7_pads)); |
410 | } | 410 | } |
411 | 411 | ||
412 | static void setup_iomux_uart3(void) | 412 | static void setup_iomux_uart3(void) |
413 | { | 413 | { |
414 | imx_iomux_v3_setup_multiple_pads(uart3_pads, ARRAY_SIZE(uart3_pads)); | 414 | imx_iomux_v3_setup_multiple_pads(uart3_pads, ARRAY_SIZE(uart3_pads)); |
415 | } | 415 | } |
416 | 416 | ||
417 | static void setup_iomux_reset_out(void) | 417 | static void setup_iomux_reset_out(void) |
418 | { | 418 | { |
419 | imx_iomux_v3_setup_multiple_pads(reset_out_pads, ARRAY_SIZE(reset_out_pads)); | 419 | imx_iomux_v3_setup_multiple_pads(reset_out_pads, ARRAY_SIZE(reset_out_pads)); |
420 | 420 | ||
421 | /* Set CPU RESET_OUT as Output */ | 421 | /* Set CPU RESET_OUT as Output */ |
422 | gpio_direction_output(IMX_GPIO_NR(2, 29) , 0); | 422 | gpio_direction_output(IMX_GPIO_NR(2, 29) , 0); |
423 | } | 423 | } |
424 | 424 | ||
425 | static void setup_iomux_spi1(void) | 425 | static void setup_iomux_spi1(void) |
426 | { | 426 | { |
427 | imx_iomux_v3_setup_multiple_pads(ecspi1_pads, ARRAY_SIZE(ecspi1_pads)); | 427 | imx_iomux_v3_setup_multiple_pads(ecspi1_pads, ARRAY_SIZE(ecspi1_pads)); |
428 | gpio_direction_output(IMX_GPIO_NR(4, 19), 0); | 428 | gpio_direction_output(IMX_GPIO_NR(4, 19), 0); |
429 | gpio_direction_output(IMX_GPIO_NR(4, 0), 0); | 429 | gpio_direction_output(IMX_GPIO_NR(4, 0), 0); |
430 | } | 430 | } |
431 | 431 | ||
432 | static void setup_iomux_spi3(void) | 432 | static void setup_iomux_spi3(void) |
433 | { | 433 | { |
434 | imx_iomux_v3_setup_multiple_pads(ecspi3_pads, ARRAY_SIZE(ecspi3_pads)); | 434 | imx_iomux_v3_setup_multiple_pads(ecspi3_pads, ARRAY_SIZE(ecspi3_pads)); |
435 | gpio_direction_output(IMX_GPIO_NR(6, 22), 0); | 435 | gpio_direction_output(IMX_GPIO_NR(6, 22), 0); |
436 | gpio_direction_output(IMX_GPIO_NR(5, 9), 0); | 436 | gpio_direction_output(IMX_GPIO_NR(5, 9), 0); |
437 | } | 437 | } |
438 | 438 | ||
439 | static void setup_iomux_gpios(void) | 439 | static void setup_iomux_gpios(void) |
440 | { | 440 | { |
441 | imx_iomux_v3_setup_multiple_pads(gpios_pads, ARRAY_SIZE(gpios_pads)); | 441 | imx_iomux_v3_setup_multiple_pads(gpios_pads, ARRAY_SIZE(gpios_pads)); |
442 | gpio_direction_output(IMX_GPIO_NR(2, 0), 0); | 442 | gpio_direction_output(IMX_GPIO_NR(2, 0), 0); |
443 | gpio_direction_output(IMX_GPIO_NR(2, 1), 0); | 443 | gpio_direction_output(IMX_GPIO_NR(2, 1), 0); |
444 | gpio_direction_output(IMX_GPIO_NR(2, 2), 0); | 444 | gpio_direction_output(IMX_GPIO_NR(2, 2), 0); |
445 | gpio_direction_output(IMX_GPIO_NR(2, 3), 0); | 445 | gpio_direction_output(IMX_GPIO_NR(2, 3), 0); |
446 | gpio_direction_output(IMX_GPIO_NR(2, 4), 0); | 446 | gpio_direction_output(IMX_GPIO_NR(2, 4), 0); |
447 | gpio_direction_input(IMX_GPIO_NR(2, 5)); | 447 | gpio_direction_input(IMX_GPIO_NR(2, 5)); |
448 | gpio_direction_input(IMX_GPIO_NR(2, 7)); | 448 | gpio_direction_input(IMX_GPIO_NR(2, 7)); |
449 | gpio_direction_input(IMX_GPIO_NR(2, 6)); | 449 | gpio_direction_input(IMX_GPIO_NR(2, 6)); |
450 | gpio_direction_input(IMX_GPIO_NR(4, 1)); | 450 | gpio_direction_input(IMX_GPIO_NR(4, 1)); |
451 | gpio_direction_input(IMX_GPIO_NR(4, 6)); | 451 | gpio_direction_input(IMX_GPIO_NR(4, 6)); |
452 | gpio_direction_input(IMX_GPIO_NR(4, 7)); | 452 | gpio_direction_input(IMX_GPIO_NR(4, 7)); |
453 | } | 453 | } |
454 | 454 | ||
455 | static void setup_iomux_lvds_ch_sel(void) | 455 | static void setup_iomux_lvds_ch_sel(void) |
456 | { | 456 | { |
457 | imx_iomux_v3_setup_multiple_pads(lvds_ch_sel_pads, ARRAY_SIZE(lvds_ch_sel_pads)); | 457 | imx_iomux_v3_setup_multiple_pads(lvds_ch_sel_pads, ARRAY_SIZE(lvds_ch_sel_pads)); |
458 | gpio_direction_output(IMX_GPIO_NR(5, 13), 0); | 458 | gpio_direction_output(IMX_GPIO_NR(5, 13), 0); |
459 | } | 459 | } |
460 | 460 | ||
461 | static void setup_iomux_misc(void) | 461 | static void setup_iomux_misc(void) |
462 | { | 462 | { |
463 | imx_iomux_v3_setup_multiple_pads(misc_pads, ARRAY_SIZE(misc_pads)); | 463 | imx_iomux_v3_setup_multiple_pads(misc_pads, ARRAY_SIZE(misc_pads)); |
464 | gpio_direction_input(IMX_GPIO_NR(5, 14)); | 464 | gpio_direction_input(IMX_GPIO_NR(5, 14)); |
465 | gpio_direction_input(IMX_GPIO_NR(1, 8)); | 465 | gpio_direction_input(IMX_GPIO_NR(1, 8)); |
466 | gpio_direction_input(IMX_GPIO_NR(1, 9)); | 466 | gpio_direction_input(IMX_GPIO_NR(1, 9)); |
467 | gpio_direction_input(IMX_GPIO_NR(5, 11)); | 467 | gpio_direction_input(IMX_GPIO_NR(5, 11)); |
468 | gpio_direction_output(IMX_GPIO_NR(6, 16), 0); | 468 | gpio_direction_output(IMX_GPIO_NR(6, 16), 0); |
469 | gpio_direction_output(IMX_GPIO_NR(6, 17), 0); | ||
470 | gpio_direction_output(IMX_GPIO_NR(2, 28), 0); | 469 | gpio_direction_output(IMX_GPIO_NR(2, 28), 0); |
471 | udelay(500); | 470 | udelay(500); |
472 | gpio_direction_output(IMX_GPIO_NR(2, 28), 1); | 471 | gpio_direction_output(IMX_GPIO_NR(2, 28), 1); |
473 | gpio_direction_input(IMX_GPIO_NR(2, 31)); | 472 | gpio_direction_input(IMX_GPIO_NR(2, 31)); |
473 | /* Set WDT_TIME_OUT# as Output High */ | ||
474 | gpio_direction_output(IMX_GPIO_NR(7, 14), 1); | ||
474 | } | 475 | } |
475 | 476 | ||
476 | static void setup_iomux_flexcan1(void) | 477 | static void setup_iomux_flexcan1(void) |
477 | { | 478 | { |
478 | imx_iomux_v3_setup_multiple_pads(flexcan1_pads, ARRAY_SIZE(flexcan1_pads)); | 479 | imx_iomux_v3_setup_multiple_pads(flexcan1_pads, ARRAY_SIZE(flexcan1_pads)); |
479 | } | 480 | } |
480 | 481 | ||
481 | static void setup_iomux_flexcan2(void) | 482 | static void setup_iomux_flexcan2(void) |
482 | { | 483 | { |
483 | imx_iomux_v3_setup_multiple_pads(flexcan2_pads, ARRAY_SIZE(flexcan2_pads)); | 484 | imx_iomux_v3_setup_multiple_pads(flexcan2_pads, ARRAY_SIZE(flexcan2_pads)); |
484 | } | 485 | } |
485 | 486 | ||
486 | #ifdef CONFIG_FSL_ESDHC | 487 | #ifdef CONFIG_FSL_ESDHC |
487 | 488 | ||
488 | #define USDHC1_CD_GPIO IMX_GPIO_NR(5, 0) | 489 | #define USDHC1_CD_GPIO IMX_GPIO_NR(5, 0) |
489 | #define USDHC1_PWR_GPIO IMX_GPIO_NR(5, 2) | 490 | #define USDHC1_PWR_GPIO IMX_GPIO_NR(5, 2) |
490 | #define USDHC3_PWR_GPIO IMX_GPIO_NR(6, 11) | 491 | #define USDHC3_PWR_GPIO IMX_GPIO_NR(6, 11) |
491 | 492 | ||
492 | static struct fsl_esdhc_cfg usdhc_cfg[3] = { | 493 | static struct fsl_esdhc_cfg usdhc_cfg[3] = { |
493 | {USDHC1_BASE_ADDR, 0, 4}, | 494 | {USDHC1_BASE_ADDR, 0, 4}, |
494 | {USDHC3_BASE_ADDR}, | 495 | {USDHC3_BASE_ADDR}, |
495 | }; | 496 | }; |
496 | 497 | ||
497 | int board_mmc_get_env_dev(int devno) | 498 | int board_mmc_get_env_dev(int devno) |
498 | { | 499 | { |
499 | if (devno == 2) | 500 | if (devno == 2) |
500 | devno--; | 501 | devno--; |
501 | 502 | ||
502 | return devno; | 503 | return devno; |
503 | } | 504 | } |
504 | 505 | ||
505 | int mmc_map_to_kernel_blk(int dev_no) | 506 | int mmc_map_to_kernel_blk(int dev_no) |
506 | { | 507 | { |
507 | if (dev_no == 1) | 508 | if (dev_no == 1) |
508 | dev_no++; | 509 | dev_no++; |
509 | 510 | ||
510 | return dev_no; | 511 | return dev_no; |
511 | } | 512 | } |
512 | 513 | ||
513 | int board_mmc_getcd(struct mmc *mmc) | 514 | int board_mmc_getcd(struct mmc *mmc) |
514 | { | 515 | { |
515 | struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; | 516 | struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; |
516 | int ret = 0; | 517 | int ret = 0; |
517 | 518 | ||
518 | switch (cfg->esdhc_base) { | 519 | switch (cfg->esdhc_base) { |
519 | case USDHC1_BASE_ADDR: | 520 | case USDHC1_BASE_ADDR: |
520 | ret = !gpio_get_value(USDHC1_CD_GPIO); | 521 | ret = !gpio_get_value(USDHC1_CD_GPIO); |
521 | break; | 522 | break; |
522 | case USDHC3_BASE_ADDR: | 523 | case USDHC3_BASE_ADDR: |
523 | ret = 1; /* Assume uSDHC3 emmc is always present */ | 524 | ret = 1; /* Assume uSDHC3 emmc is always present */ |
524 | break; | 525 | break; |
525 | } | 526 | } |
526 | 527 | ||
527 | return ret; | 528 | return ret; |
528 | } | 529 | } |
529 | 530 | ||
530 | int board_mmc_init(bd_t *bis) | 531 | int board_mmc_init(bd_t *bis) |
531 | { | 532 | { |
532 | int i, ret; | 533 | int i, ret; |
533 | /* | 534 | /* |
534 | * According to the board_mmc_init() the following map is done: | 535 | * According to the board_mmc_init() the following map is done: |
535 | * (U-Boot device node) (Physical Port) | 536 | * (U-Boot device node) (Physical Port) |
536 | * mmc0 USDHC1 | 537 | * mmc0 USDHC1 |
537 | * mmc2 USDHC3 (eMMC) | 538 | * mmc2 USDHC3 (eMMC) |
538 | */ | 539 | */ |
539 | for (i = 0; i < CONFIG_SYS_FSL_USDHC_NUM; i++) { | 540 | for (i = 0; i < CONFIG_SYS_FSL_USDHC_NUM; i++) { |
540 | switch (i) { | 541 | switch (i) { |
541 | case 0: | 542 | case 0: |
542 | imx_iomux_v3_setup_multiple_pads( | 543 | imx_iomux_v3_setup_multiple_pads( |
543 | usdhc1_pads, ARRAY_SIZE(usdhc1_pads)); | 544 | usdhc1_pads, ARRAY_SIZE(usdhc1_pads)); |
544 | gpio_request(USDHC1_CD_GPIO, "usdhc1_cd"); | 545 | gpio_request(USDHC1_CD_GPIO, "usdhc1_cd"); |
545 | gpio_direction_input(USDHC1_CD_GPIO); | 546 | gpio_direction_input(USDHC1_CD_GPIO); |
546 | gpio_request(USDHC1_PWR_GPIO, "usdhc1_pwr"); | 547 | gpio_request(USDHC1_PWR_GPIO, "usdhc1_pwr"); |
547 | gpio_direction_output(USDHC1_PWR_GPIO, 0); | 548 | gpio_direction_output(USDHC1_PWR_GPIO, 0); |
548 | udelay(500); | 549 | udelay(500); |
549 | gpio_direction_output(USDHC1_PWR_GPIO, 1); | 550 | gpio_direction_output(USDHC1_PWR_GPIO, 1); |
550 | usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK); | 551 | usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK); |
551 | break; | 552 | break; |
552 | case 1: | 553 | case 1: |
553 | imx_iomux_v3_setup_multiple_pads( | 554 | imx_iomux_v3_setup_multiple_pads( |
554 | usdhc3_emmc_pads, ARRAY_SIZE(usdhc3_emmc_pads)); | 555 | usdhc3_emmc_pads, ARRAY_SIZE(usdhc3_emmc_pads)); |
555 | gpio_request(USDHC3_PWR_GPIO, "usdhc3_pwr"); | 556 | gpio_request(USDHC3_PWR_GPIO, "usdhc3_pwr"); |
556 | gpio_direction_output(USDHC3_PWR_GPIO, 0); | 557 | gpio_direction_output(USDHC3_PWR_GPIO, 0); |
557 | udelay(500); | 558 | udelay(500); |
558 | gpio_direction_output(USDHC3_PWR_GPIO, 1); | 559 | gpio_direction_output(USDHC3_PWR_GPIO, 1); |
559 | usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); | 560 | usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); |
560 | break; | 561 | break; |
561 | default: | 562 | default: |
562 | printf("Warning: you configured more USDHC controllers" | 563 | printf("Warning: you configured more USDHC controllers" |
563 | "(%d) than supported by the board\n", i + 1); | 564 | "(%d) than supported by the board\n", i + 1); |
564 | return -EINVAL; | 565 | return -EINVAL; |
565 | } | 566 | } |
566 | 567 | ||
567 | ret = fsl_esdhc_initialize(bis, &usdhc_cfg[i]); | 568 | ret = fsl_esdhc_initialize(bis, &usdhc_cfg[i]); |
568 | if (ret) | 569 | if (ret) |
569 | return ret; | 570 | return ret; |
570 | } | 571 | } |
571 | 572 | ||
572 | return 0; | 573 | return 0; |
573 | } | 574 | } |
574 | #endif | 575 | #endif |
575 | 576 | ||
576 | #ifdef CONFIG_FEC_MXC | 577 | #ifdef CONFIG_FEC_MXC |
577 | static iomux_v3_cfg_t const fec1_pads[] = { | 578 | static iomux_v3_cfg_t const fec1_pads[] = { |
578 | MX7D_PAD_ENET1_RGMII_RX_CTL__ENET1_RGMII_RX_CTL | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), | 579 | MX7D_PAD_ENET1_RGMII_RX_CTL__ENET1_RGMII_RX_CTL | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), |
579 | MX7D_PAD_ENET1_RGMII_RD0__ENET1_RGMII_RD0 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), | 580 | MX7D_PAD_ENET1_RGMII_RD0__ENET1_RGMII_RD0 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), |
580 | MX7D_PAD_ENET1_RGMII_RD1__ENET1_RGMII_RD1 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), | 581 | MX7D_PAD_ENET1_RGMII_RD1__ENET1_RGMII_RD1 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), |
581 | MX7D_PAD_ENET1_RGMII_RD2__ENET1_RGMII_RD2 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), | 582 | MX7D_PAD_ENET1_RGMII_RD2__ENET1_RGMII_RD2 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), |
582 | MX7D_PAD_ENET1_RGMII_RD3__ENET1_RGMII_RD3 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), | 583 | MX7D_PAD_ENET1_RGMII_RD3__ENET1_RGMII_RD3 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), |
583 | MX7D_PAD_ENET1_RGMII_RXC__ENET1_RGMII_RXC | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), | 584 | MX7D_PAD_ENET1_RGMII_RXC__ENET1_RGMII_RXC | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), |
584 | MX7D_PAD_ENET1_RGMII_TX_CTL__ENET1_RGMII_TX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL), | 585 | MX7D_PAD_ENET1_RGMII_TX_CTL__ENET1_RGMII_TX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL), |
585 | MX7D_PAD_ENET1_RGMII_TD0__ENET1_RGMII_TD0 | MUX_PAD_CTRL(ENET_PAD_CTRL), | 586 | MX7D_PAD_ENET1_RGMII_TD0__ENET1_RGMII_TD0 | MUX_PAD_CTRL(ENET_PAD_CTRL), |
586 | MX7D_PAD_ENET1_RGMII_TD1__ENET1_RGMII_TD1 | MUX_PAD_CTRL(ENET_PAD_CTRL), | 587 | MX7D_PAD_ENET1_RGMII_TD1__ENET1_RGMII_TD1 | MUX_PAD_CTRL(ENET_PAD_CTRL), |
587 | MX7D_PAD_ENET1_RGMII_TD2__ENET1_RGMII_TD2 | MUX_PAD_CTRL(ENET_PAD_CTRL), | 588 | MX7D_PAD_ENET1_RGMII_TD2__ENET1_RGMII_TD2 | MUX_PAD_CTRL(ENET_PAD_CTRL), |
588 | MX7D_PAD_ENET1_RGMII_TD3__ENET1_RGMII_TD3 | MUX_PAD_CTRL(ENET_PAD_CTRL), | 589 | MX7D_PAD_ENET1_RGMII_TD3__ENET1_RGMII_TD3 | MUX_PAD_CTRL(ENET_PAD_CTRL), |
589 | MX7D_PAD_ENET1_RGMII_TXC__ENET1_RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL), | 590 | MX7D_PAD_ENET1_RGMII_TXC__ENET1_RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL), |
590 | MX7D_PAD_GPIO1_IO10__ENET1_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL_MII), | 591 | MX7D_PAD_GPIO1_IO10__ENET1_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL_MII), |
591 | MX7D_PAD_GPIO1_IO11__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL_MII), | 592 | MX7D_PAD_GPIO1_IO11__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL_MII), |
592 | }; | 593 | }; |
593 | 594 | ||
594 | static iomux_v3_cfg_t const fec2_pads[] = { | 595 | static iomux_v3_cfg_t const fec2_pads[] = { |
595 | MX7D_PAD_EPDC_SDCE0__ENET2_RGMII_RX_CTL | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), | 596 | MX7D_PAD_EPDC_SDCE0__ENET2_RGMII_RX_CTL | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), |
596 | MX7D_PAD_EPDC_SDCLK__ENET2_RGMII_RD0 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), | 597 | MX7D_PAD_EPDC_SDCLK__ENET2_RGMII_RD0 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), |
597 | MX7D_PAD_EPDC_SDLE__ENET2_RGMII_RD1 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), | 598 | MX7D_PAD_EPDC_SDLE__ENET2_RGMII_RD1 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), |
598 | MX7D_PAD_EPDC_SDOE__ENET2_RGMII_RD2 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), | 599 | MX7D_PAD_EPDC_SDOE__ENET2_RGMII_RD2 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), |
599 | MX7D_PAD_EPDC_SDSHR__ENET2_RGMII_RD3 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), | 600 | MX7D_PAD_EPDC_SDSHR__ENET2_RGMII_RD3 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), |
600 | MX7D_PAD_EPDC_SDCE1__ENET2_RGMII_RXC | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), | 601 | MX7D_PAD_EPDC_SDCE1__ENET2_RGMII_RXC | MUX_PAD_CTRL(ENET_RX_PAD_CTRL), |
601 | MX7D_PAD_EPDC_GDRL__ENET2_RGMII_TX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL), | 602 | MX7D_PAD_EPDC_GDRL__ENET2_RGMII_TX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL), |
602 | MX7D_PAD_EPDC_SDCE2__ENET2_RGMII_TD0 | MUX_PAD_CTRL(ENET_PAD_CTRL), | 603 | MX7D_PAD_EPDC_SDCE2__ENET2_RGMII_TD0 | MUX_PAD_CTRL(ENET_PAD_CTRL), |
603 | MX7D_PAD_EPDC_SDCE3__ENET2_RGMII_TD1 | MUX_PAD_CTRL(ENET_PAD_CTRL), | 604 | MX7D_PAD_EPDC_SDCE3__ENET2_RGMII_TD1 | MUX_PAD_CTRL(ENET_PAD_CTRL), |
604 | MX7D_PAD_EPDC_GDCLK__ENET2_RGMII_TD2 | MUX_PAD_CTRL(ENET_PAD_CTRL), | 605 | MX7D_PAD_EPDC_GDCLK__ENET2_RGMII_TD2 | MUX_PAD_CTRL(ENET_PAD_CTRL), |
605 | MX7D_PAD_EPDC_GDOE__ENET2_RGMII_TD3 | MUX_PAD_CTRL(ENET_PAD_CTRL), | 606 | MX7D_PAD_EPDC_GDOE__ENET2_RGMII_TD3 | MUX_PAD_CTRL(ENET_PAD_CTRL), |
606 | MX7D_PAD_EPDC_GDSP__ENET2_RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL), | 607 | MX7D_PAD_EPDC_GDSP__ENET2_RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL), |
607 | MX7D_PAD_GPIO1_IO10__ENET1_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL_MII), | 608 | MX7D_PAD_GPIO1_IO10__ENET1_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL_MII), |
608 | MX7D_PAD_GPIO1_IO11__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL_MII), | 609 | MX7D_PAD_GPIO1_IO11__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL_MII), |
609 | }; | 610 | }; |
610 | 611 | ||
611 | static void setup_iomux_fec(void) | 612 | static void setup_iomux_fec(void) |
612 | { | 613 | { |
613 | if (0 == CONFIG_FEC_ENET_DEV) { | 614 | if (0 == CONFIG_FEC_ENET_DEV) { |
614 | imx_iomux_v3_setup_multiple_pads(fec1_pads, ARRAY_SIZE(fec1_pads)); | 615 | imx_iomux_v3_setup_multiple_pads(fec1_pads, ARRAY_SIZE(fec1_pads)); |
615 | gpio_direction_input(IMX_GPIO_NR(7, 15)); | 616 | gpio_direction_input(IMX_GPIO_NR(7, 15)); |
616 | } else { | 617 | } else { |
617 | imx_iomux_v3_setup_multiple_pads(fec2_pads, ARRAY_SIZE(fec2_pads)); | 618 | imx_iomux_v3_setup_multiple_pads(fec2_pads, ARRAY_SIZE(fec2_pads)); |
618 | gpio_direction_input(IMX_GPIO_NR(7, 14)); | 619 | gpio_direction_input(IMX_GPIO_NR(7, 13)); |
619 | } | 620 | } |
620 | } | 621 | } |
621 | 622 | ||
622 | int board_eth_init(bd_t *bis) | 623 | int board_eth_init(bd_t *bis) |
623 | { | 624 | { |
624 | #if defined(CONFIG_MAC_ADDR_IN_EEPROM) | 625 | #if defined(CONFIG_MAC_ADDR_IN_EEPROM) |
625 | 626 | ||
626 | uchar env_enetaddr[6]; | 627 | uchar env_enetaddr[6]; |
627 | int enetaddr_found; | 628 | int enetaddr_found; |
628 | 629 | ||
629 | enetaddr_found = eth_getenv_enetaddr("ethaddr", env_enetaddr); | 630 | enetaddr_found = eth_getenv_enetaddr("ethaddr", env_enetaddr); |
630 | 631 | ||
631 | uint8_t enetaddr[8]; | 632 | uint8_t enetaddr[8]; |
632 | int eeprom_mac_read; | 633 | int eeprom_mac_read; |
633 | 634 | ||
634 | /* Read Ethernet MAC address from EEPROM */ | 635 | /* Read Ethernet MAC address from EEPROM */ |
635 | eeprom_mac_read = smarcfimx7_read_mac_address(enetaddr); | 636 | eeprom_mac_read = smarcfimx7_read_mac_address(enetaddr); |
636 | 637 | ||
637 | /* | 638 | /* |
638 | * MAC address not present in the environment | 639 | * MAC address not present in the environment |
639 | * try and read the MAC address from EEPROM flash | 640 | * try and read the MAC address from EEPROM flash |
640 | * and set it. | 641 | * and set it. |
641 | */ | 642 | */ |
642 | if (!enetaddr_found) { | 643 | if (!enetaddr_found) { |
643 | if (eeprom_mac_read) | 644 | if (eeprom_mac_read) |
644 | /* Set Ethernet MAC address from EEPROM */ | 645 | /* Set Ethernet MAC address from EEPROM */ |
645 | smarcfimx7_sync_env_enetaddr(enetaddr); | 646 | smarcfimx7_sync_env_enetaddr(enetaddr); |
646 | } else { | 647 | } else { |
647 | /* | 648 | /* |
648 | * MAC address present in environment compare it with | 649 | * MAC address present in environment compare it with |
649 | * the MAC address in EEPROM and warn on mismatch | 650 | * the MAC address in EEPROM and warn on mismatch |
650 | */ | 651 | */ |
651 | if (eeprom_mac_read && memcmp(enetaddr, env_enetaddr, 6)) | 652 | if (eeprom_mac_read && memcmp(enetaddr, env_enetaddr, 6)) |
652 | printf("Warning: MAC address in EEPROM don't match " | 653 | printf("Warning: MAC address in EEPROM don't match " |
653 | "with the MAC address in the environment\n"); | 654 | "with the MAC address in the environment\n"); |
654 | printf("Default using MAC address from environment\n"); | 655 | printf("Default using MAC address from environment\n"); |
655 | } | 656 | } |
656 | 657 | ||
657 | uchar env_enet1addr[6]; | 658 | uchar env_enet1addr[6]; |
658 | int enet1addr_found; | 659 | int enet1addr_found; |
659 | 660 | ||
660 | enet1addr_found = eth_getenv_enetaddr("eth1addr", env_enet1addr); | 661 | enet1addr_found = eth_getenv_enetaddr("eth1addr", env_enet1addr); |
661 | 662 | ||
662 | uint8_t enet1addr[8]; | 663 | uint8_t enet1addr[8]; |
663 | int eeprom_mac1_read; | 664 | int eeprom_mac1_read; |
664 | 665 | ||
665 | /* Read Ethernet MAC address from EEPROM */ | 666 | /* Read Ethernet MAC address from EEPROM */ |
666 | eeprom_mac1_read = smarcfimx7_read_mac1_address(enet1addr); | 667 | eeprom_mac1_read = smarcfimx7_read_mac1_address(enet1addr); |
667 | 668 | ||
668 | /* | 669 | /* |
669 | * MAC address not present in the environment | 670 | * MAC address not present in the environment |
670 | * try and read the MAC address from EEPROM flash | 671 | * try and read the MAC address from EEPROM flash |
671 | * and set it. | 672 | * and set it. |
672 | */ | 673 | */ |
673 | if (!enet1addr_found) { | 674 | if (!enet1addr_found) { |
674 | if (eeprom_mac1_read) | 675 | if (eeprom_mac1_read) |
675 | /* Set Ethernet MAC address from EEPROM */ | 676 | /* Set Ethernet MAC address from EEPROM */ |
676 | smarcfimx7_sync_env_enet1addr(enet1addr); | 677 | smarcfimx7_sync_env_enet1addr(enet1addr); |
677 | } else { | 678 | } else { |
678 | /* | 679 | /* |
679 | * MAC address present in environment compare it with | 680 | * MAC address present in environment compare it with |
680 | * the MAC address in EEPROM and warn on mismatch | 681 | * the MAC address in EEPROM and warn on mismatch |
681 | */ | 682 | */ |
682 | if (eeprom_mac_read && memcmp(enet1addr, env_enet1addr, 6)) | 683 | if (eeprom_mac_read && memcmp(enet1addr, env_enet1addr, 6)) |
683 | printf("Warning: 2nd GBE MAC address in EEPROM don't match " | 684 | printf("Warning: 2nd GBE MAC address in EEPROM don't match " |
684 | "with the MAC address in the environment\n"); | 685 | "with the MAC address in the environment\n"); |
685 | printf("Default using 2nd GBE MAC address from environment\n"); | 686 | printf("Default using 2nd GBE MAC address from environment\n"); |
686 | } | 687 | } |
687 | 688 | ||
688 | #endif | 689 | #endif |
689 | 690 | ||
690 | int ret; | 691 | int ret; |
691 | 692 | ||
692 | setup_iomux_fec(); | 693 | setup_iomux_fec(); |
693 | 694 | ||
694 | ret = fecmxc_initialize_multi(bis, CONFIG_FEC_ENET_DEV, | 695 | ret = fecmxc_initialize_multi(bis, CONFIG_FEC_ENET_DEV, |
695 | CONFIG_FEC_MXC_PHYADDR, IMX_FEC_BASE); | 696 | CONFIG_FEC_MXC_PHYADDR, IMX_FEC_BASE); |
696 | if (ret) | 697 | if (ret) |
697 | printf("FEC1 MXC: %s:failed\n", __func__); | 698 | printf("FEC1 MXC: %s:failed\n", __func__); |
698 | 699 | ||
699 | return ret; | 700 | return ret; |
700 | } | 701 | } |
701 | 702 | ||
702 | static int setup_fec(int fec_id) | 703 | static int setup_fec(int fec_id) |
703 | { | 704 | { |
704 | struct iomuxc_gpr_base_regs *const iomuxc_gpr_regs | 705 | struct iomuxc_gpr_base_regs *const iomuxc_gpr_regs |
705 | = (struct iomuxc_gpr_base_regs *) IOMUXC_GPR_BASE_ADDR; | 706 | = (struct iomuxc_gpr_base_regs *) IOMUXC_GPR_BASE_ADDR; |
706 | 707 | ||
707 | if (0 == fec_id) { | 708 | if (0 == fec_id) { |
708 | /* Use 125M anatop REF_CLK1 for ENET1, clear gpr1[13], gpr1[17]*/ | 709 | /* Use 125M anatop REF_CLK1 for ENET1, clear gpr1[13], gpr1[17]*/ |
709 | clrsetbits_le32(&iomuxc_gpr_regs->gpr[1], | 710 | clrsetbits_le32(&iomuxc_gpr_regs->gpr[1], |
710 | (IOMUXC_GPR_GPR1_GPR_ENET1_TX_CLK_SEL_MASK | | 711 | (IOMUXC_GPR_GPR1_GPR_ENET1_TX_CLK_SEL_MASK | |
711 | IOMUXC_GPR_GPR1_GPR_ENET1_CLK_DIR_MASK), 0); | 712 | IOMUXC_GPR_GPR1_GPR_ENET1_CLK_DIR_MASK), 0); |
712 | } else { | 713 | } else { |
713 | /* Use 125M anatop REF_CLK2 for ENET2, clear gpr1[14], gpr1[18]*/ | 714 | /* Use 125M anatop REF_CLK2 for ENET2, clear gpr1[14], gpr1[18]*/ |
714 | clrsetbits_le32(&iomuxc_gpr_regs->gpr[1], | 715 | clrsetbits_le32(&iomuxc_gpr_regs->gpr[1], |
715 | (IOMUXC_GPR_GPR1_GPR_ENET2_TX_CLK_SEL_MASK | | 716 | (IOMUXC_GPR_GPR1_GPR_ENET2_TX_CLK_SEL_MASK | |
716 | IOMUXC_GPR_GPR1_GPR_ENET2_CLK_DIR_MASK), 0); | 717 | IOMUXC_GPR_GPR1_GPR_ENET2_CLK_DIR_MASK), 0); |
717 | } | 718 | } |
718 | 719 | ||
719 | return set_clk_enet(ENET_125MHz); | 720 | return set_clk_enet(ENET_125MHz); |
720 | 721 | ||
721 | } | 722 | } |
722 | 723 | ||
723 | int board_phy_config(struct phy_device *phydev) | 724 | int board_phy_config(struct phy_device *phydev) |
724 | { | 725 | { |
725 | /* enable rgmii rxc skew and phy mode select to RGMII copper */ | 726 | /* enable rgmii rxc skew and phy mode select to RGMII copper */ |
726 | /*phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x21); | 727 | /*phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x21); |
727 | phy_write(phydev, MDIO_DEVAD_NONE, 0x1f, 0x7ea8); | 728 | phy_write(phydev, MDIO_DEVAD_NONE, 0x1f, 0x7ea8); |
728 | phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x2f); | 729 | phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x2f); |
729 | phy_write(phydev, MDIO_DEVAD_NONE, 0x1f, 0x71b7);*/ | 730 | phy_write(phydev, MDIO_DEVAD_NONE, 0x1f, 0x71b7);*/ |
730 | 731 | ||
731 | if (phydev->drv->config) | 732 | if (phydev->drv->config) |
732 | phydev->drv->config(phydev); | 733 | phydev->drv->config(phydev); |
733 | return 0; | 734 | return 0; |
734 | } | 735 | } |
735 | #endif | 736 | #endif |
736 | 737 | ||
737 | #ifdef CONFIG_MXC_SPI | 738 | #ifdef CONFIG_MXC_SPI |
738 | /* SPI2 (SPINOR) */ | 739 | /* SPI2 (SPINOR) */ |
739 | static iomux_v3_cfg_t const ecspi2_pads[] = { | 740 | static iomux_v3_cfg_t const ecspi2_pads[] = { |
740 | MX7D_PAD_ECSPI2_SCLK__ECSPI2_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL), | 741 | MX7D_PAD_ECSPI2_SCLK__ECSPI2_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL), |
741 | MX7D_PAD_ECSPI2_MOSI__ECSPI2_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL), | 742 | MX7D_PAD_ECSPI2_MOSI__ECSPI2_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL), |
742 | MX7D_PAD_ECSPI2_MISO__ECSPI2_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL), | 743 | MX7D_PAD_ECSPI2_MISO__ECSPI2_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL), |
743 | MX7D_PAD_ECSPI2_SS0__GPIO4_IO23 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/ | 744 | MX7D_PAD_ECSPI2_SS0__GPIO4_IO23 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/ |
744 | }; | 745 | }; |
745 | 746 | ||
746 | static void setup_spinor(void) | 747 | static void setup_spinor(void) |
747 | { | 748 | { |
748 | imx_iomux_v3_setup_multiple_pads(ecspi2_pads, ARRAY_SIZE(ecspi2_pads)); | 749 | imx_iomux_v3_setup_multiple_pads(ecspi2_pads, ARRAY_SIZE(ecspi2_pads)); |
749 | gpio_direction_output(IMX_GPIO_NR(4, 23), 0); | 750 | gpio_direction_output(IMX_GPIO_NR(4, 23), 0); |
750 | } | 751 | } |
751 | 752 | ||
752 | int board_spi_cs_gpio(unsigned bus, unsigned cs) | 753 | int board_spi_cs_gpio(unsigned bus, unsigned cs) |
753 | { | 754 | { |
754 | return (bus == 1 && cs == 0) ? (IMX_GPIO_NR(4, 23)) : -1; | 755 | return (bus == 1 && cs == 0) ? (IMX_GPIO_NR(4, 23)) : -1; |
755 | } | 756 | } |
756 | #endif | 757 | #endif |
757 | 758 | ||
758 | #ifdef CONFIG_MXC_EPDC | 759 | #ifdef CONFIG_MXC_EPDC |
759 | static iomux_v3_cfg_t const epdc_enable_pads[] = { | 760 | static iomux_v3_cfg_t const epdc_enable_pads[] = { |
760 | MX7D_PAD_EPDC_DATA00__EPDC_DATA0 | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 761 | MX7D_PAD_EPDC_DATA00__EPDC_DATA0 | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
761 | MX7D_PAD_EPDC_DATA01__EPDC_DATA1 | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 762 | MX7D_PAD_EPDC_DATA01__EPDC_DATA1 | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
762 | MX7D_PAD_EPDC_DATA02__EPDC_DATA2 | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 763 | MX7D_PAD_EPDC_DATA02__EPDC_DATA2 | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
763 | MX7D_PAD_EPDC_DATA03__EPDC_DATA3 | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 764 | MX7D_PAD_EPDC_DATA03__EPDC_DATA3 | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
764 | MX7D_PAD_EPDC_DATA04__EPDC_DATA4 | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 765 | MX7D_PAD_EPDC_DATA04__EPDC_DATA4 | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
765 | MX7D_PAD_EPDC_DATA05__EPDC_DATA5 | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 766 | MX7D_PAD_EPDC_DATA05__EPDC_DATA5 | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
766 | MX7D_PAD_EPDC_DATA06__EPDC_DATA6 | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 767 | MX7D_PAD_EPDC_DATA06__EPDC_DATA6 | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
767 | MX7D_PAD_EPDC_DATA07__EPDC_DATA7 | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 768 | MX7D_PAD_EPDC_DATA07__EPDC_DATA7 | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
768 | MX7D_PAD_EPDC_SDCLK__EPDC_SDCLK | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 769 | MX7D_PAD_EPDC_SDCLK__EPDC_SDCLK | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
769 | MX7D_PAD_EPDC_SDLE__EPDC_SDLE | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 770 | MX7D_PAD_EPDC_SDLE__EPDC_SDLE | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
770 | MX7D_PAD_EPDC_SDOE__EPDC_SDOE | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 771 | MX7D_PAD_EPDC_SDOE__EPDC_SDOE | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
771 | MX7D_PAD_EPDC_SDSHR__EPDC_SDSHR | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 772 | MX7D_PAD_EPDC_SDSHR__EPDC_SDSHR | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
772 | MX7D_PAD_EPDC_SDCE0__EPDC_SDCE0 | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 773 | MX7D_PAD_EPDC_SDCE0__EPDC_SDCE0 | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
773 | MX7D_PAD_EPDC_SDCE1__EPDC_SDCE1 | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 774 | MX7D_PAD_EPDC_SDCE1__EPDC_SDCE1 | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
774 | MX7D_PAD_EPDC_GDCLK__EPDC_GDCLK | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 775 | MX7D_PAD_EPDC_GDCLK__EPDC_GDCLK | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
775 | MX7D_PAD_EPDC_GDOE__EPDC_GDOE | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 776 | MX7D_PAD_EPDC_GDOE__EPDC_GDOE | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
776 | MX7D_PAD_EPDC_GDRL__EPDC_GDRL | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 777 | MX7D_PAD_EPDC_GDRL__EPDC_GDRL | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
777 | MX7D_PAD_EPDC_GDSP__EPDC_GDSP | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 778 | MX7D_PAD_EPDC_GDSP__EPDC_GDSP | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
778 | MX7D_PAD_EPDC_BDR0__EPDC_BDR0 | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 779 | MX7D_PAD_EPDC_BDR0__EPDC_BDR0 | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
779 | MX7D_PAD_EPDC_BDR1__EPDC_BDR1 | MUX_PAD_CTRL(EPDC_PAD_CTRL), | 780 | MX7D_PAD_EPDC_BDR1__EPDC_BDR1 | MUX_PAD_CTRL(EPDC_PAD_CTRL), |
780 | }; | 781 | }; |
781 | 782 | ||
782 | static iomux_v3_cfg_t const epdc_disable_pads[] = { | 783 | static iomux_v3_cfg_t const epdc_disable_pads[] = { |
783 | MX7D_PAD_EPDC_DATA00__GPIO2_IO0, | 784 | MX7D_PAD_EPDC_DATA00__GPIO2_IO0, |
784 | MX7D_PAD_EPDC_DATA01__GPIO2_IO1, | 785 | MX7D_PAD_EPDC_DATA01__GPIO2_IO1, |
785 | MX7D_PAD_EPDC_DATA02__GPIO2_IO2, | 786 | MX7D_PAD_EPDC_DATA02__GPIO2_IO2, |
786 | MX7D_PAD_EPDC_DATA03__GPIO2_IO3, | 787 | MX7D_PAD_EPDC_DATA03__GPIO2_IO3, |
787 | MX7D_PAD_EPDC_DATA04__GPIO2_IO4, | 788 | MX7D_PAD_EPDC_DATA04__GPIO2_IO4, |
788 | MX7D_PAD_EPDC_DATA05__GPIO2_IO5, | 789 | MX7D_PAD_EPDC_DATA05__GPIO2_IO5, |
789 | MX7D_PAD_EPDC_DATA06__GPIO2_IO6, | 790 | MX7D_PAD_EPDC_DATA06__GPIO2_IO6, |
790 | MX7D_PAD_EPDC_DATA07__GPIO2_IO7, | 791 | MX7D_PAD_EPDC_DATA07__GPIO2_IO7, |
791 | MX7D_PAD_EPDC_SDCLK__GPIO2_IO16, | 792 | MX7D_PAD_EPDC_SDCLK__GPIO2_IO16, |
792 | MX7D_PAD_EPDC_SDLE__GPIO2_IO17, | 793 | MX7D_PAD_EPDC_SDLE__GPIO2_IO17, |
793 | MX7D_PAD_EPDC_SDOE__GPIO2_IO18, | 794 | MX7D_PAD_EPDC_SDOE__GPIO2_IO18, |
794 | MX7D_PAD_EPDC_SDSHR__GPIO2_IO19, | 795 | MX7D_PAD_EPDC_SDSHR__GPIO2_IO19, |
795 | MX7D_PAD_EPDC_SDCE0__GPIO2_IO20, | 796 | MX7D_PAD_EPDC_SDCE0__GPIO2_IO20, |
796 | MX7D_PAD_EPDC_SDCE1__GPIO2_IO21, | 797 | MX7D_PAD_EPDC_SDCE1__GPIO2_IO21, |
797 | MX7D_PAD_EPDC_GDCLK__GPIO2_IO24, | 798 | MX7D_PAD_EPDC_GDCLK__GPIO2_IO24, |
798 | MX7D_PAD_EPDC_GDOE__GPIO2_IO25, | 799 | MX7D_PAD_EPDC_GDOE__GPIO2_IO25, |
799 | MX7D_PAD_EPDC_GDRL__GPIO2_IO26, | 800 | MX7D_PAD_EPDC_GDRL__GPIO2_IO26, |
800 | MX7D_PAD_EPDC_GDSP__GPIO2_IO27, | 801 | MX7D_PAD_EPDC_GDSP__GPIO2_IO27, |
801 | MX7D_PAD_EPDC_BDR0__GPIO2_IO28, | 802 | MX7D_PAD_EPDC_BDR0__GPIO2_IO28, |
802 | MX7D_PAD_EPDC_BDR1__GPIO2_IO29, | 803 | MX7D_PAD_EPDC_BDR1__GPIO2_IO29, |
803 | }; | 804 | }; |
804 | 805 | ||
805 | vidinfo_t panel_info = { | 806 | vidinfo_t panel_info = { |
806 | .vl_refresh = 85, | 807 | .vl_refresh = 85, |
807 | .vl_col = 1024, | 808 | .vl_col = 1024, |
808 | .vl_row = 758, | 809 | .vl_row = 758, |
809 | .vl_pixclock = 40000000, | 810 | .vl_pixclock = 40000000, |
810 | .vl_left_margin = 12, | 811 | .vl_left_margin = 12, |
811 | .vl_right_margin = 76, | 812 | .vl_right_margin = 76, |
812 | .vl_upper_margin = 4, | 813 | .vl_upper_margin = 4, |
813 | .vl_lower_margin = 5, | 814 | .vl_lower_margin = 5, |
814 | .vl_hsync = 12, | 815 | .vl_hsync = 12, |
815 | .vl_vsync = 2, | 816 | .vl_vsync = 2, |
816 | .vl_sync = 0, | 817 | .vl_sync = 0, |
817 | .vl_mode = 0, | 818 | .vl_mode = 0, |
818 | .vl_flag = 0, | 819 | .vl_flag = 0, |
819 | .vl_bpix = 3, | 820 | .vl_bpix = 3, |
820 | .cmap = 0, | 821 | .cmap = 0, |
821 | }; | 822 | }; |
822 | 823 | ||
823 | struct epdc_timing_params panel_timings = { | 824 | struct epdc_timing_params panel_timings = { |
824 | .vscan_holdoff = 4, | 825 | .vscan_holdoff = 4, |
825 | .sdoed_width = 10, | 826 | .sdoed_width = 10, |
826 | .sdoed_delay = 20, | 827 | .sdoed_delay = 20, |
827 | .sdoez_width = 10, | 828 | .sdoez_width = 10, |
828 | .sdoez_delay = 20, | 829 | .sdoez_delay = 20, |
829 | .gdclk_hp_offs = 524, | 830 | .gdclk_hp_offs = 524, |
830 | .gdsp_offs = 327, | 831 | .gdsp_offs = 327, |
831 | .gdoe_offs = 0, | 832 | .gdoe_offs = 0, |
832 | .gdclk_offs = 19, | 833 | .gdclk_offs = 19, |
833 | .num_ce = 1, | 834 | .num_ce = 1, |
834 | }; | 835 | }; |
835 | 836 | ||
836 | static void setup_epdc_power(void) | 837 | static void setup_epdc_power(void) |
837 | { | 838 | { |
838 | /* IOMUX_GPR1: bit30: Disable On-chip RAM EPDC Function */ | 839 | /* IOMUX_GPR1: bit30: Disable On-chip RAM EPDC Function */ |
839 | struct iomuxc_gpr_base_regs *const iomuxc_gpr_regs | 840 | struct iomuxc_gpr_base_regs *const iomuxc_gpr_regs |
840 | = (struct iomuxc_gpr_base_regs *) IOMUXC_GPR_BASE_ADDR; | 841 | = (struct iomuxc_gpr_base_regs *) IOMUXC_GPR_BASE_ADDR; |
841 | 842 | ||
842 | clrsetbits_le32(&iomuxc_gpr_regs->gpr[1], | 843 | clrsetbits_le32(&iomuxc_gpr_regs->gpr[1], |
843 | IOMUXC_GPR_GPR1_GPR_ENABLE_OCRAM_EPDC_MASK, 0); | 844 | IOMUXC_GPR_GPR1_GPR_ENABLE_OCRAM_EPDC_MASK, 0); |
844 | 845 | ||
845 | /* Setup epdc voltage */ | 846 | /* Setup epdc voltage */ |
846 | 847 | ||
847 | /* EPDC_PWRSTAT - GPIO2[31] for PWR_GOOD status */ | 848 | /* EPDC_PWRSTAT - GPIO2[31] for PWR_GOOD status */ |
848 | imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_PWR_STAT__GPIO2_IO31 | | 849 | imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_PWR_STAT__GPIO2_IO31 | |
849 | MUX_PAD_CTRL(EPDC_PAD_CTRL)); | 850 | MUX_PAD_CTRL(EPDC_PAD_CTRL)); |
850 | gpio_direction_input(IMX_GPIO_NR(2, 31)); | 851 | gpio_direction_input(IMX_GPIO_NR(2, 31)); |
851 | 852 | ||
852 | /* EPDC_VCOM0 - GPIO4[14] for VCOM control */ | 853 | /* EPDC_VCOM0 - GPIO4[14] for VCOM control */ |
853 | imx_iomux_v3_setup_pad(MX7D_PAD_I2C4_SCL__GPIO4_IO14 | | 854 | imx_iomux_v3_setup_pad(MX7D_PAD_I2C4_SCL__GPIO4_IO14 | |
854 | MUX_PAD_CTRL(EPDC_PAD_CTRL)); | 855 | MUX_PAD_CTRL(EPDC_PAD_CTRL)); |
855 | 856 | ||
856 | /* Set as output */ | 857 | /* Set as output */ |
857 | gpio_direction_output(IMX_GPIO_NR(4, 14), 1); | 858 | gpio_direction_output(IMX_GPIO_NR(4, 14), 1); |
858 | 859 | ||
859 | /* EPDC_PWRWAKEUP - GPIO2[23] for EPD PMIC WAKEUP */ | 860 | /* EPDC_PWRWAKEUP - GPIO2[23] for EPD PMIC WAKEUP */ |
860 | imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_SDCE3__GPIO2_IO23 | | 861 | imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_SDCE3__GPIO2_IO23 | |
861 | MUX_PAD_CTRL(EPDC_PAD_CTRL)); | 862 | MUX_PAD_CTRL(EPDC_PAD_CTRL)); |
862 | /* Set as output */ | 863 | /* Set as output */ |
863 | gpio_direction_output(IMX_GPIO_NR(2, 23), 1); | 864 | gpio_direction_output(IMX_GPIO_NR(2, 23), 1); |
864 | 865 | ||
865 | /* EPDC_PWRCTRL0 - GPIO2[30] for EPD PWR CTL0 */ | 866 | /* EPDC_PWRCTRL0 - GPIO2[30] for EPD PWR CTL0 */ |
866 | imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_PWR_COM__GPIO2_IO30 | | 867 | imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_PWR_COM__GPIO2_IO30 | |
867 | MUX_PAD_CTRL(EPDC_PAD_CTRL)); | 868 | MUX_PAD_CTRL(EPDC_PAD_CTRL)); |
868 | /* Set as output */ | 869 | /* Set as output */ |
869 | gpio_direction_output(IMX_GPIO_NR(2, 30), 1); | 870 | gpio_direction_output(IMX_GPIO_NR(2, 30), 1); |
870 | } | 871 | } |
871 | 872 | ||
872 | static void epdc_enable_pins(void) | 873 | static void epdc_enable_pins(void) |
873 | { | 874 | { |
874 | /* epdc iomux settings */ | 875 | /* epdc iomux settings */ |
875 | imx_iomux_v3_setup_multiple_pads(epdc_enable_pads, | 876 | imx_iomux_v3_setup_multiple_pads(epdc_enable_pads, |
876 | ARRAY_SIZE(epdc_enable_pads)); | 877 | ARRAY_SIZE(epdc_enable_pads)); |
877 | } | 878 | } |
878 | 879 | ||
879 | static void epdc_disable_pins(void) | 880 | static void epdc_disable_pins(void) |
880 | { | 881 | { |
881 | /* Configure MUX settings for EPDC pins to GPIO and drive to 0 */ | 882 | /* Configure MUX settings for EPDC pins to GPIO and drive to 0 */ |
882 | imx_iomux_v3_setup_multiple_pads(epdc_disable_pads, | 883 | imx_iomux_v3_setup_multiple_pads(epdc_disable_pads, |
883 | ARRAY_SIZE(epdc_disable_pads)); | 884 | ARRAY_SIZE(epdc_disable_pads)); |
884 | } | 885 | } |
885 | 886 | ||
886 | static void setup_epdc(void) | 887 | static void setup_epdc(void) |
887 | { | 888 | { |
888 | /*** epdc Maxim PMIC settings ***/ | 889 | /*** epdc Maxim PMIC settings ***/ |
889 | 890 | ||
890 | /* EPDC_PWRSTAT - GPIO2[31] for PWR_GOOD status */ | 891 | /* EPDC_PWRSTAT - GPIO2[31] for PWR_GOOD status */ |
891 | imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_PWR_STAT__GPIO2_IO31 | | 892 | imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_PWR_STAT__GPIO2_IO31 | |
892 | MUX_PAD_CTRL(EPDC_PAD_CTRL)); | 893 | MUX_PAD_CTRL(EPDC_PAD_CTRL)); |
893 | 894 | ||
894 | /* EPDC_VCOM0 - GPIO4[14] for VCOM control */ | 895 | /* EPDC_VCOM0 - GPIO4[14] for VCOM control */ |
895 | imx_iomux_v3_setup_pad(MX7D_PAD_I2C4_SCL__GPIO4_IO14 | | 896 | imx_iomux_v3_setup_pad(MX7D_PAD_I2C4_SCL__GPIO4_IO14 | |
896 | MUX_PAD_CTRL(EPDC_PAD_CTRL)); | 897 | MUX_PAD_CTRL(EPDC_PAD_CTRL)); |
897 | 898 | ||
898 | /* EPDC_PWRWAKEUP - GPIO4[23] for EPD PMIC WAKEUP */ | 899 | /* EPDC_PWRWAKEUP - GPIO4[23] for EPD PMIC WAKEUP */ |
899 | imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_SDCE3__GPIO2_IO23 | | 900 | imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_SDCE3__GPIO2_IO23 | |
900 | MUX_PAD_CTRL(EPDC_PAD_CTRL)); | 901 | MUX_PAD_CTRL(EPDC_PAD_CTRL)); |
901 | 902 | ||
902 | /* EPDC_PWRCTRL0 - GPIO4[20] for EPD PWR CTL0 */ | 903 | /* EPDC_PWRCTRL0 - GPIO4[20] for EPD PWR CTL0 */ |
903 | imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_PWR_COM__GPIO2_IO30 | | 904 | imx_iomux_v3_setup_pad(MX7D_PAD_EPDC_PWR_COM__GPIO2_IO30 | |
904 | MUX_PAD_CTRL(EPDC_PAD_CTRL)); | 905 | MUX_PAD_CTRL(EPDC_PAD_CTRL)); |
905 | 906 | ||
906 | /* Set pixel clock rates for EPDC in clock.c */ | 907 | /* Set pixel clock rates for EPDC in clock.c */ |
907 | 908 | ||
908 | panel_info.epdc_data.wv_modes.mode_init = 0; | 909 | panel_info.epdc_data.wv_modes.mode_init = 0; |
909 | panel_info.epdc_data.wv_modes.mode_du = 1; | 910 | panel_info.epdc_data.wv_modes.mode_du = 1; |
910 | panel_info.epdc_data.wv_modes.mode_gc4 = 3; | 911 | panel_info.epdc_data.wv_modes.mode_gc4 = 3; |
911 | panel_info.epdc_data.wv_modes.mode_gc8 = 2; | 912 | panel_info.epdc_data.wv_modes.mode_gc8 = 2; |
912 | panel_info.epdc_data.wv_modes.mode_gc16 = 2; | 913 | panel_info.epdc_data.wv_modes.mode_gc16 = 2; |
913 | panel_info.epdc_data.wv_modes.mode_gc32 = 2; | 914 | panel_info.epdc_data.wv_modes.mode_gc32 = 2; |
914 | 915 | ||
915 | panel_info.epdc_data.epdc_timings = panel_timings; | 916 | panel_info.epdc_data.epdc_timings = panel_timings; |
916 | 917 | ||
917 | setup_epdc_power(); | 918 | setup_epdc_power(); |
918 | } | 919 | } |
919 | 920 | ||
920 | void epdc_power_on(void) | 921 | void epdc_power_on(void) |
921 | { | 922 | { |
922 | unsigned int reg; | 923 | unsigned int reg; |
923 | struct gpio_regs *gpio_regs = (struct gpio_regs *)GPIO2_BASE_ADDR; | 924 | struct gpio_regs *gpio_regs = (struct gpio_regs *)GPIO2_BASE_ADDR; |
924 | 925 | ||
925 | /* Set EPD_PWR_CTL0 to high - enable EINK_VDD (3.15) */ | 926 | /* Set EPD_PWR_CTL0 to high - enable EINK_VDD (3.15) */ |
926 | gpio_set_value(IMX_GPIO_NR(2, 30), 1); | 927 | gpio_set_value(IMX_GPIO_NR(2, 30), 1); |
927 | udelay(1000); | 928 | udelay(1000); |
928 | 929 | ||
929 | /* Enable epdc signal pin */ | 930 | /* Enable epdc signal pin */ |
930 | epdc_enable_pins(); | 931 | epdc_enable_pins(); |
931 | 932 | ||
932 | /* Set PMIC Wakeup to high - enable Display power */ | 933 | /* Set PMIC Wakeup to high - enable Display power */ |
933 | gpio_set_value(IMX_GPIO_NR(2, 23), 1); | 934 | gpio_set_value(IMX_GPIO_NR(2, 23), 1); |
934 | 935 | ||
935 | /* Wait for PWRGOOD == 1 */ | 936 | /* Wait for PWRGOOD == 1 */ |
936 | while (1) { | 937 | while (1) { |
937 | reg = readl(&gpio_regs->gpio_psr); | 938 | reg = readl(&gpio_regs->gpio_psr); |
938 | if (!(reg & (1 << 31))) | 939 | if (!(reg & (1 << 31))) |
939 | break; | 940 | break; |
940 | 941 | ||
941 | udelay(100); | 942 | udelay(100); |
942 | } | 943 | } |
943 | 944 | ||
944 | /* Enable VCOM */ | 945 | /* Enable VCOM */ |
945 | gpio_set_value(IMX_GPIO_NR(4, 14), 1); | 946 | gpio_set_value(IMX_GPIO_NR(4, 14), 1); |
946 | 947 | ||
947 | udelay(500); | 948 | udelay(500); |
948 | } | 949 | } |
949 | 950 | ||
950 | void epdc_power_off(void) | 951 | void epdc_power_off(void) |
951 | { | 952 | { |
952 | /* Set PMIC Wakeup to low - disable Display power */ | 953 | /* Set PMIC Wakeup to low - disable Display power */ |
953 | gpio_set_value(IMX_GPIO_NR(2, 23), 0); | 954 | gpio_set_value(IMX_GPIO_NR(2, 23), 0); |
954 | 955 | ||
955 | /* Disable VCOM */ | 956 | /* Disable VCOM */ |
956 | gpio_set_value(IMX_GPIO_NR(4, 14), 0); | 957 | gpio_set_value(IMX_GPIO_NR(4, 14), 0); |
957 | 958 | ||
958 | epdc_disable_pins(); | 959 | epdc_disable_pins(); |
959 | 960 | ||
960 | /* Set EPD_PWR_CTL0 to low - disable EINK_VDD (3.15) */ | 961 | /* Set EPD_PWR_CTL0 to low - disable EINK_VDD (3.15) */ |
961 | gpio_set_value(IMX_GPIO_NR(2, 30), 0); | 962 | gpio_set_value(IMX_GPIO_NR(2, 30), 0); |
962 | } | 963 | } |
963 | #endif | 964 | #endif |
964 | 965 | ||
965 | #ifdef CONFIG_USB_EHCI_MX7 | 966 | #ifdef CONFIG_USB_EHCI_MX7 |
966 | static iomux_v3_cfg_t const usb_otg1_pads[] = { | 967 | static iomux_v3_cfg_t const usb_otg1_pads[] = { |
967 | MX7D_PAD_GPIO1_IO12__USB_OTG1_ID | MUX_PAD_CTRL(WEAK_PULLUP), | 968 | MX7D_PAD_GPIO1_IO12__USB_OTG1_ID | MUX_PAD_CTRL(WEAK_PULLUP), |
968 | /* OTG1 Power Enable */ | 969 | /* OTG1 Power Enable */ |
969 | MX7D_PAD_GPIO1_IO05__USB_OTG1_PWR | MUX_PAD_CTRL(NO_PAD_CTRL), | 970 | MX7D_PAD_GPIO1_IO05__USB_OTG1_PWR | MUX_PAD_CTRL(NO_PAD_CTRL), |
970 | /* OTG1 Over Current */ | 971 | /* OTG1 Over Current */ |
971 | MX7D_PAD_GPIO1_IO04__GPIO1_IO4 | MUX_PAD_CTRL(WEAK_PULLUP), | 972 | MX7D_PAD_GPIO1_IO04__GPIO1_IO4 | MUX_PAD_CTRL(WEAK_PULLUP), |
972 | 973 | ||
973 | }; | 974 | }; |
974 | 975 | ||
975 | static iomux_v3_cfg_t const usb_otg2_pads[] = { | 976 | static iomux_v3_cfg_t const usb_otg2_pads[] = { |
976 | /* OTG2 Power Enable */ | 977 | /* OTG2 Power Enable */ |
977 | MX7D_PAD_GPIO1_IO07__USB_OTG2_PWR | MUX_PAD_CTRL(NO_PAD_CTRL), | 978 | MX7D_PAD_GPIO1_IO07__USB_OTG2_PWR | MUX_PAD_CTRL(NO_PAD_CTRL), |
978 | /* OTG2 Over Current */ | 979 | /* OTG2 Over Current */ |
979 | MX7D_PAD_GPIO1_IO06__GPIO1_IO6 | MUX_PAD_CTRL(WEAK_PULLUP), | 980 | MX7D_PAD_GPIO1_IO06__GPIO1_IO6 | MUX_PAD_CTRL(WEAK_PULLUP), |
980 | }; | 981 | }; |
981 | 982 | ||
982 | static void setup_usb(void) | 983 | static void setup_usb(void) |
983 | { | 984 | { |
984 | imx_iomux_v3_setup_multiple_pads(usb_otg1_pads, | 985 | imx_iomux_v3_setup_multiple_pads(usb_otg1_pads, |
985 | ARRAY_SIZE(usb_otg1_pads)); | 986 | ARRAY_SIZE(usb_otg1_pads)); |
986 | gpio_direction_input(IMX_GPIO_NR(1, 4)); | 987 | gpio_direction_input(IMX_GPIO_NR(1, 4)); |
987 | 988 | ||
988 | imx_iomux_v3_setup_multiple_pads(usb_otg2_pads, | 989 | imx_iomux_v3_setup_multiple_pads(usb_otg2_pads, |
989 | ARRAY_SIZE(usb_otg2_pads)); | 990 | ARRAY_SIZE(usb_otg2_pads)); |
990 | gpio_direction_input(IMX_GPIO_NR(1, 6)); | 991 | gpio_direction_input(IMX_GPIO_NR(1, 6)); |
991 | } | 992 | } |
992 | 993 | ||
993 | int board_usb_phy_mode(int port) | 994 | int board_usb_phy_mode(int port) |
994 | { | 995 | { |
995 | if (port == 0) | 996 | if (port == 0) |
996 | return usb_phy_mode(port); | 997 | return usb_phy_mode(port); |
997 | else | 998 | else |
998 | return USB_INIT_HOST; | 999 | return USB_INIT_HOST; |
999 | } | 1000 | } |
1000 | #endif | 1001 | #endif |
1001 | 1002 | ||
1002 | int board_early_init_f(void) | 1003 | int board_early_init_f(void) |
1003 | { | 1004 | { |
1004 | setup_iomux_reset_out(); | 1005 | setup_iomux_reset_out(); |
1005 | setup_iomux_uart6(); | 1006 | setup_iomux_uart6(); |
1006 | setup_iomux_uart2(); | 1007 | setup_iomux_uart2(); |
1007 | setup_iomux_uart7(); | 1008 | setup_iomux_uart7(); |
1008 | setup_iomux_uart3(); | 1009 | setup_iomux_uart3(); |
1009 | 1010 | ||
1010 | #ifdef CONFIG_SYS_I2C_MXC | 1011 | #ifdef CONFIG_SYS_I2C_MXC |
1011 | setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1); | 1012 | setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1); |
1012 | setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2); | 1013 | setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2); |
1013 | setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info3); | 1014 | setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info3); |
1014 | setup_i2c(3, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info4); | 1015 | setup_i2c(3, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info4); |
1015 | #endif | 1016 | #endif |
1016 | 1017 | ||
1017 | #ifdef CONFIG_MXC_SPI | 1018 | #ifdef CONFIG_MXC_SPI |
1018 | setup_spinor(); | 1019 | setup_spinor(); |
1019 | #endif | 1020 | #endif |
1020 | 1021 | ||
1021 | #ifdef CONFIG_USB_EHCI_MX7 | 1022 | #ifdef CONFIG_USB_EHCI_MX7 |
1022 | setup_usb(); | 1023 | setup_usb(); |
1023 | #endif | 1024 | #endif |
1024 | setup_iomux_spi1(); | 1025 | setup_iomux_spi1(); |
1025 | setup_iomux_spi3(); | 1026 | setup_iomux_spi3(); |
1026 | setup_iomux_flexcan1(); | 1027 | setup_iomux_flexcan1(); |
1027 | setup_iomux_flexcan2(); | 1028 | setup_iomux_flexcan2(); |
1028 | setup_iomux_gpios(); | 1029 | setup_iomux_gpios(); |
1029 | setup_iomux_lvds_ch_sel(); | 1030 | setup_iomux_lvds_ch_sel(); |
1030 | setup_iomux_misc(); | 1031 | setup_iomux_misc(); |
1031 | 1032 | ||
1032 | return 0; | 1033 | return 0; |
1033 | } | 1034 | } |
1034 | 1035 | ||
1035 | int board_init(void) | 1036 | int board_init(void) |
1036 | { | 1037 | { |
1037 | /* address of boot parameters */ | 1038 | /* address of boot parameters */ |
1038 | gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; | 1039 | gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; |
1039 | 1040 | ||
1040 | #ifdef CONFIG_FEC_MXC | 1041 | #ifdef CONFIG_FEC_MXC |
1041 | setup_fec(CONFIG_FEC_ENET_DEV); | 1042 | setup_fec(CONFIG_FEC_ENET_DEV); |
1042 | #endif | 1043 | #endif |
1043 | 1044 | ||
1044 | #ifdef CONFIG_NAND_MXS | 1045 | #ifdef CONFIG_NAND_MXS |
1045 | setup_gpmi_nand(); | 1046 | setup_gpmi_nand(); |
1046 | #endif | 1047 | #endif |
1047 | 1048 | ||
1048 | #ifdef CONFIG_FSL_QSPI | 1049 | #ifdef CONFIG_FSL_QSPI |
1049 | board_qspi_init(); | 1050 | board_qspi_init(); |
1050 | #endif | 1051 | #endif |
1051 | 1052 | ||
1052 | return 0; | 1053 | return 0; |
1053 | } | 1054 | } |
1054 | 1055 | ||
1055 | #ifdef CONFIG_CMD_BMODE | 1056 | #ifdef CONFIG_CMD_BMODE |
1056 | static const struct boot_mode board_boot_modes[] = { | 1057 | static const struct boot_mode board_boot_modes[] = { |
1057 | /* 4 bit bus width */ | 1058 | /* 4 bit bus width */ |
1058 | {"sd1", MAKE_CFGVAL(0x10, 0x10, 0x00, 0x00)}, | 1059 | {"sd1", MAKE_CFGVAL(0x10, 0x10, 0x00, 0x00)}, |
1059 | {"emmc", MAKE_CFGVAL(0x10, 0x2a, 0x00, 0x00)}, | 1060 | {"emmc", MAKE_CFGVAL(0x10, 0x2a, 0x00, 0x00)}, |
1060 | /* TODO: Nand */ | 1061 | /* TODO: Nand */ |
1061 | {"qspi", MAKE_CFGVAL(0x00, 0x40, 0x00, 0x00)}, | 1062 | {"qspi", MAKE_CFGVAL(0x00, 0x40, 0x00, 0x00)}, |
1062 | {NULL, 0}, | 1063 | {NULL, 0}, |
1063 | }; | 1064 | }; |
1064 | #endif | 1065 | #endif |
1065 | 1066 | ||
1066 | #ifdef CONFIG_POWER | 1067 | #ifdef CONFIG_POWER |
1067 | #define I2C_PMIC 0 | 1068 | #define I2C_PMIC 0 |
1068 | int power_init_board(void) | 1069 | int power_init_board(void) |
1069 | { | 1070 | { |
1070 | struct pmic *p; | 1071 | struct pmic *p; |
1071 | int ret; | 1072 | int ret; |
1072 | unsigned int reg, rev_id; | 1073 | unsigned int reg, rev_id; |
1073 | 1074 | ||
1074 | ret = power_pfuze3000_init(I2C_PMIC); | 1075 | ret = power_pfuze3000_init(I2C_PMIC); |
1075 | if (ret) | 1076 | if (ret) |
1076 | return ret; | 1077 | return ret; |
1077 | 1078 | ||
1078 | p = pmic_get("PFUZE3000"); | 1079 | p = pmic_get("PFUZE3000"); |
1079 | ret = pmic_probe(p); | 1080 | ret = pmic_probe(p); |
1080 | if (ret) | 1081 | if (ret) |
1081 | return ret; | 1082 | return ret; |
1082 | 1083 | ||
1083 | pmic_reg_read(p, PFUZE3000_DEVICEID, ®); | 1084 | pmic_reg_read(p, PFUZE3000_DEVICEID, ®); |
1084 | pmic_reg_read(p, PFUZE3000_REVID, &rev_id); | 1085 | pmic_reg_read(p, PFUZE3000_REVID, &rev_id); |
1085 | printf("PMIC: PFUZE3000 DEV_ID=0x%x REV_ID=0x%x\n", reg, rev_id); | 1086 | printf("PMIC: PFUZE3000 DEV_ID=0x%x REV_ID=0x%x\n", reg, rev_id); |
1086 | 1087 | ||
1087 | /* disable Low Power Mode during standby mode */ | 1088 | /* disable Low Power Mode during standby mode */ |
1088 | pmic_reg_read(p, PFUZE3000_LDOGCTL, ®); | 1089 | pmic_reg_read(p, PFUZE3000_LDOGCTL, ®); |
1089 | reg |= 0x1; | 1090 | reg |= 0x1; |
1090 | pmic_reg_write(p, PFUZE3000_LDOGCTL, reg); | 1091 | pmic_reg_write(p, PFUZE3000_LDOGCTL, reg); |
1091 | 1092 | ||
1092 | /* SW1A/1B mode set to APS/APS */ | 1093 | /* SW1A/1B mode set to APS/APS */ |
1093 | reg = 0x8; | 1094 | reg = 0x8; |
1094 | pmic_reg_write(p, PFUZE3000_SW1AMODE, reg); | 1095 | pmic_reg_write(p, PFUZE3000_SW1AMODE, reg); |
1095 | pmic_reg_write(p, PFUZE3000_SW1BMODE, reg); | 1096 | pmic_reg_write(p, PFUZE3000_SW1BMODE, reg); |
1096 | 1097 | ||
1097 | /* SW1A/1B standby voltage set to 0.975V */ | 1098 | /* SW1A/1B standby voltage set to 0.975V */ |
1098 | reg = 0xb; | 1099 | reg = 0xb; |
1099 | pmic_reg_write(p, PFUZE3000_SW1ASTBY, reg); | 1100 | pmic_reg_write(p, PFUZE3000_SW1ASTBY, reg); |
1100 | pmic_reg_write(p, PFUZE3000_SW1BSTBY, reg); | 1101 | pmic_reg_write(p, PFUZE3000_SW1BSTBY, reg); |
1101 | 1102 | ||
1102 | /* decrease SW1B normal voltage to 0.975V */ | 1103 | /* decrease SW1B normal voltage to 0.975V */ |
1103 | pmic_reg_read(p, PFUZE3000_SW1BVOLT, ®); | 1104 | pmic_reg_read(p, PFUZE3000_SW1BVOLT, ®); |
1104 | reg &= ~0x1f; | 1105 | reg &= ~0x1f; |
1105 | reg |= PFUZE3000_SW1AB_SETP(975); | 1106 | reg |= PFUZE3000_SW1AB_SETP(975); |
1106 | pmic_reg_write(p, PFUZE3000_SW1BVOLT, reg); | 1107 | pmic_reg_write(p, PFUZE3000_SW1BVOLT, reg); |
1107 | 1108 | ||
1108 | return 0; | 1109 | return 0; |
1109 | } | 1110 | } |
1110 | #endif | 1111 | #endif |
1111 | 1112 | ||
1112 | int board_late_init(void) | 1113 | int board_late_init(void) |
1113 | { | 1114 | { |
1114 | struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR; | 1115 | struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR; |
1115 | #ifdef CONFIG_CMD_BMODE | 1116 | #ifdef CONFIG_CMD_BMODE |
1116 | add_board_boot_modes(board_boot_modes); | 1117 | add_board_boot_modes(board_boot_modes); |
1117 | #endif | 1118 | #endif |
1118 | 1119 | ||
1119 | #ifdef CONFIG_ENV_IS_IN_MMC | 1120 | #ifdef CONFIG_ENV_IS_IN_MMC |
1120 | board_late_mmc_env_init(); | 1121 | board_late_mmc_env_init(); |
1121 | #endif | 1122 | #endif |
1122 | 1123 | ||
1123 | imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads)); | 1124 | imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads)); |
1124 | 1125 | ||
1125 | set_wdog_reset(wdog); | 1126 | set_wdog_reset(wdog); |
1126 | 1127 | ||
1127 | /* Check Board Information */ | 1128 | /* Check Board Information */ |
1128 | setup_i2c(1, CONFIG_SYS_I2C_SPEED, | 1129 | setup_i2c(1, CONFIG_SYS_I2C_SPEED, |
1129 | 0x50, &i2c_pad_info2); | 1130 | 0x50, &i2c_pad_info2); |
1130 | 1131 | ||
1131 | struct smarcfimx7_id header; | 1132 | struct smarcfimx7_id header; |
1132 | 1133 | ||
1133 | if (read_eeprom(&header) < 0) | 1134 | if (read_eeprom(&header) < 0) |
1134 | puts("Could not get board ID.\n"); | 1135 | puts("Could not get board ID.\n"); |
1135 | 1136 | ||
1136 | puts("---------Embedian SMARC-FiMX7------------\n"); | 1137 | puts("---------Embedian SMARC-FiMX7------------\n"); |
1137 | printf("Board ID: %.*s\n", | 1138 | printf("Board ID: %.*s\n", |
1138 | sizeof(header.name), header.name); | 1139 | sizeof(header.name), header.name); |
1139 | printf("Board Revision: %.*s\n", | 1140 | printf("Board Revision: %.*s\n", |
1140 | sizeof(header.version), header.version); | 1141 | sizeof(header.version), header.version); |
1141 | printf("Board Serial#: %.*s\n", | 1142 | printf("Board Serial#: %.*s\n", |
1142 | sizeof(header.serial), header.serial); | 1143 | sizeof(header.serial), header.serial); |
1143 | puts("-----------------------------------------\n"); | 1144 | puts("-----------------------------------------\n"); |
1144 | 1145 | ||
1145 | /* SMARC BOOT_SEL*/ | 1146 | /* SMARC BOOT_SEL*/ |
1146 | if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 0)) { | 1147 | if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 0)) { |
1147 | puts("BOOT_SEL Detected: OFF OFF OFF, unsupported boot up device: SATA...\n"); | 1148 | puts("BOOT_SEL Detected: OFF OFF OFF, unsupported boot up device: SATA...\n"); |
1148 | hang(); | 1149 | hang(); |
1149 | } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 1)) { | 1150 | } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 1)) { |
1150 | puts("BOOT_SEL Detected: OFF OFF ON, unsupported boot up device: NAND...\n"); | 1151 | puts("BOOT_SEL Detected: OFF OFF ON, unsupported boot up device: NAND...\n"); |
1151 | hang(); | 1152 | hang(); |
1152 | } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 0)) { | 1153 | } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 0)) { |
1153 | puts("BOOT_SEL Detected: OFF ON OFF, unsupported boot up device: Carrier eSPI...\n"); | 1154 | puts("BOOT_SEL Detected: OFF ON OFF, unsupported boot up device: Carrier eSPI...\n"); |
1154 | hang(); | 1155 | hang(); |
1155 | } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 0)) { | 1156 | } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 0)) { |
1156 | puts("BOOT_SEL Detected: ON OFF OFF, Load zImage from Carrier SD Card...\n"); | 1157 | puts("BOOT_SEL Detected: ON OFF OFF, Load zImage from Carrier SD Card...\n"); |
1157 | setenv_ulong("mmcdev", 0); | 1158 | setenv_ulong("mmcdev", 0); |
1158 | setenv("bootcmd", "mmc rescan; run loadbootenv; run importbootenv; run uenvcmd; run loadzimage; run loadfdt; run mmcboot;"); | 1159 | setenv("bootcmd", "mmc rescan; run loadbootenv; run importbootenv; run uenvcmd; run loadzimage; run loadfdt; run mmcboot;"); |
1159 | } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 1)) { | 1160 | } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 1)) { |
1160 | puts("BOOT_SEL Detected: OFF ON ON, Load zImage from Module eMMC Flash...\n"); | 1161 | puts("BOOT_SEL Detected: OFF ON ON, Load zImage from Module eMMC Flash...\n"); |
1161 | setenv_ulong("mmcdev", 1); | 1162 | setenv_ulong("mmcdev", 1); |
1162 | setenv("bootcmd", "mmc rescan; run loadbootenv; run importbootenv; run uenvcmd; run loadzimage; run loadfdt; run mmcboot;"); | 1163 | setenv("bootcmd", "mmc rescan; run loadbootenv; run importbootenv; run uenvcmd; run loadzimage; run loadfdt; run mmcboot;"); |
1163 | } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 1)) { | 1164 | } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 0)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 1)) { |
1164 | puts("BOOT_SEL Detected: ON OFF ON, Load zImage from GBE...\n"); | 1165 | puts("BOOT_SEL Detected: ON OFF ON, Load zImage from GBE...\n"); |
1165 | setenv("bootcmd", "run netboot;"); | 1166 | setenv("bootcmd", "run netboot;"); |
1166 | } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 0)) { | 1167 | } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 0)) { |
1167 | puts("BOOT_SEL Detected: OFF ON OFF, unsupported boot up device: Carrier SPI...\n"); | 1168 | puts("BOOT_SEL Detected: OFF ON OFF, unsupported boot up device: Carrier SPI...\n"); |
1168 | hang(); | 1169 | hang(); |
1169 | } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 1)) { | 1170 | } else if ((gpio_get_value(IMX_GPIO_NR(5, 15)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 16)) == 1)&&(gpio_get_value(IMX_GPIO_NR(5, 17)) == 1)) { |
1170 | puts("BOOT_SEL Detected: ON ON ON, MOdule SPI Boot up is Default, Load zImage from Module eMMC...\n"); | 1171 | puts("BOOT_SEL Detected: ON ON ON, MOdule SPI Boot up is Default, Load zImage from Module eMMC...\n"); |
1171 | setenv_ulong("mmcdev", 1); | 1172 | setenv_ulong("mmcdev", 1); |
1172 | setenv("bootcmd", "mmc rescan; run loadbootenv; run importbootenv; run uenvcmd; run loadzimage; run loadfdt; run mmcboot;"); | 1173 | setenv("bootcmd", "mmc rescan; run loadbootenv; run importbootenv; run uenvcmd; run loadzimage; run loadfdt; run mmcboot;"); |
1173 | } else { | 1174 | } else { |
1174 | puts("unsupported boot devices\n"); | 1175 | puts("unsupported boot devices\n"); |
1175 | hang(); | 1176 | hang(); |
1176 | } | 1177 | } |
1177 | 1178 | ||
1178 | return 0; | 1179 | return 0; |
1179 | } | 1180 | } |
1180 | 1181 | ||
1181 | #ifdef CONFIG_FSL_FASTBOOT | 1182 | #ifdef CONFIG_FSL_FASTBOOT |
1182 | void board_fastboot_setup(void) | 1183 | void board_fastboot_setup(void) |
1183 | { | 1184 | { |
1184 | switch (get_boot_device()) { | 1185 | switch (get_boot_device()) { |
1185 | #if defined(CONFIG_FASTBOOT_STORAGE_MMC) | 1186 | #if defined(CONFIG_FASTBOOT_STORAGE_MMC) |
1186 | case SD1_BOOT: | 1187 | case SD1_BOOT: |
1187 | case MMC1_BOOT: | 1188 | case MMC1_BOOT: |
1188 | if (!getenv("fastboot_dev")) | 1189 | if (!getenv("fastboot_dev")) |
1189 | setenv("fastboot_dev", "mmc0"); | 1190 | setenv("fastboot_dev", "mmc0"); |
1190 | if (!getenv("bootcmd")) | 1191 | if (!getenv("bootcmd")) |
1191 | setenv("bootcmd", "boota mmc0"); | 1192 | setenv("bootcmd", "boota mmc0"); |
1192 | break; | 1193 | break; |
1193 | case SD3_BOOT: | 1194 | case SD3_BOOT: |
1194 | case MMC3_BOOT: | 1195 | case MMC3_BOOT: |
1195 | if (!getenv("fastboot_dev")) | 1196 | if (!getenv("fastboot_dev")) |
1196 | setenv("fastboot_dev", "mmc1"); | 1197 | setenv("fastboot_dev", "mmc1"); |
1197 | if (!getenv("bootcmd")) | 1198 | if (!getenv("bootcmd")) |
1198 | setenv("bootcmd", "boota mmc1"); | 1199 | setenv("bootcmd", "boota mmc1"); |
1199 | break; | 1200 | break; |
1200 | #endif /*CONFIG_FASTBOOT_STORAGE_MMC*/ | 1201 | #endif /*CONFIG_FASTBOOT_STORAGE_MMC*/ |
1201 | default: | 1202 | default: |
1202 | printf("unsupported boot devices\n"); | 1203 | printf("unsupported boot devices\n"); |
1203 | break; | 1204 | break; |
1204 | } | 1205 | } |
1205 | } | 1206 | } |
1206 | 1207 | ||
1207 | #ifdef CONFIG_ANDROID_RECOVERY | 1208 | #ifdef CONFIG_ANDROID_RECOVERY |
1208 | 1209 | ||
1209 | /* Use LID# for recovery key */ | 1210 | /* Use LID# for recovery key */ |
1210 | #define GPIO_VOL_DN_KEY IMX_GPIO_NR(5, 10) | 1211 | #define GPIO_VOL_DN_KEY IMX_GPIO_NR(5, 10) |
1211 | iomux_v3_cfg_t const recovery_key_pads[] = { | 1212 | iomux_v3_cfg_t const recovery_key_pads[] = { |
1212 | (MX7D_PAD_SD2_WP__GPIO5_IO10 | MUX_PAD_CTRL(BUTTON_PAD_CTRL)), | 1213 | (MX7D_PAD_SD2_WP__GPIO5_IO10 | MUX_PAD_CTRL(BUTTON_PAD_CTRL)), |
1213 | }; | 1214 | }; |
1214 | 1215 | ||
1215 | int check_recovery_cmd_file(void) | 1216 | int check_recovery_cmd_file(void) |
1216 | { | 1217 | { |
1217 | int button_pressed = 0; | 1218 | int button_pressed = 0; |
1218 | int recovery_mode = 0; | 1219 | int recovery_mode = 0; |
1219 | 1220 | ||
1220 | recovery_mode = recovery_check_and_clean_flag(); | 1221 | recovery_mode = recovery_check_and_clean_flag(); |
1221 | 1222 | ||
1222 | /* Check Recovery Combo Button press or not. */ | 1223 | /* Check Recovery Combo Button press or not. */ |
1223 | imx_iomux_v3_setup_multiple_pads(recovery_key_pads, | 1224 | imx_iomux_v3_setup_multiple_pads(recovery_key_pads, |
1224 | ARRAY_SIZE(recovery_key_pads)); | 1225 | ARRAY_SIZE(recovery_key_pads)); |
1225 | 1226 | ||
1226 | gpio_direction_input(GPIO_VOL_DN_KEY); | 1227 | gpio_direction_input(GPIO_VOL_DN_KEY); |
1227 | 1228 | ||
1228 | if (gpio_get_value(GPIO_VOL_DN_KEY) == 0) { /* VOL_DN key is low assert */ | 1229 | if (gpio_get_value(GPIO_VOL_DN_KEY) == 0) { /* VOL_DN key is low assert */ |
1229 | button_pressed = 1; | 1230 | button_pressed = 1; |
1230 | printf("Recovery key pressed\n"); | 1231 | printf("Recovery key pressed\n"); |
1231 | } | 1232 | } |
1232 | 1233 | ||
1233 | return recovery_mode || button_pressed; | 1234 | return recovery_mode || button_pressed; |
1234 | } | 1235 | } |
1235 | 1236 | ||
1236 | void board_recovery_setup(void) | 1237 | void board_recovery_setup(void) |
1237 | { | 1238 | { |
1238 | int bootdev = get_boot_device(); | 1239 | int bootdev = get_boot_device(); |
1239 | 1240 | ||
1240 | switch (bootdev) { | 1241 | switch (bootdev) { |
1241 | #if defined(CONFIG_FASTBOOT_STORAGE_MMC) | 1242 | #if defined(CONFIG_FASTBOOT_STORAGE_MMC) |
1242 | case SD1_BOOT: | 1243 | case SD1_BOOT: |
1243 | case MMC1_BOOT: | 1244 | case MMC1_BOOT: |
1244 | if (!getenv("bootcmd_android_recovery")) | 1245 | if (!getenv("bootcmd_android_recovery")) |
1245 | setenv("bootcmd_android_recovery", "boota mmc0 recovery"); | 1246 | setenv("bootcmd_android_recovery", "boota mmc0 recovery"); |
1246 | break; | 1247 | break; |
1247 | case SD3_BOOT: | 1248 | case SD3_BOOT: |
1248 | case MMC3_BOOT: | 1249 | case MMC3_BOOT: |
1249 | if (!getenv("bootcmd_android_recovery")) | 1250 | if (!getenv("bootcmd_android_recovery")) |
1250 | setenv("bootcmd_android_recovery", "boota mmc1 recovery"); | 1251 | setenv("bootcmd_android_recovery", "boota mmc1 recovery"); |
1251 | break; | 1252 | break; |
1252 | #endif /*CONFIG_FASTBOOT_STORAGE_MMC*/ | 1253 | #endif /*CONFIG_FASTBOOT_STORAGE_MMC*/ |
1253 | default: | 1254 | default: |
1254 | printf("Unsupported bootup device for recovery: dev: %d\n", | 1255 | printf("Unsupported bootup device for recovery: dev: %d\n", |
1255 | bootdev); | 1256 | bootdev); |
1256 | return; | 1257 | return; |
1257 | } | 1258 | } |
1258 | 1259 | ||
1259 | printf("setup env for recovery..\n"); | 1260 | printf("setup env for recovery..\n"); |
1260 | setenv("bootcmd", "run bootcmd_android_recovery"); | 1261 | setenv("bootcmd", "run bootcmd_android_recovery"); |
1261 | } | 1262 | } |
1262 | #endif /*CONFIG_ANDROID_RECOVERY*/ | 1263 | #endif /*CONFIG_ANDROID_RECOVERY*/ |
1263 | 1264 | ||
1264 | #endif /*CONFIG_FSL_FASTBOOT*/ | 1265 | #endif /*CONFIG_FSL_FASTBOOT*/ |