diff options
Diffstat (limited to 'firmware/target/arm/imx233/ssp-imx233.c')
-rw-r--r-- | firmware/target/arm/imx233/ssp-imx233.c | 81 |
1 files changed, 40 insertions, 41 deletions
diff --git a/firmware/target/arm/imx233/ssp-imx233.c b/firmware/target/arm/imx233/ssp-imx233.c index d83cea7bc0..5f0880c2e9 100644 --- a/firmware/target/arm/imx233/ssp-imx233.c +++ b/firmware/target/arm/imx233/ssp-imx233.c | |||
@@ -167,39 +167,33 @@ void imx233_ssp_set_timings(int ssp, int divide, int rate, int timeout) | |||
167 | void imx233_ssp_setup_ssp1_sd_mmc_pins(bool enable_pullups, unsigned bus_width, | 167 | void imx233_ssp_setup_ssp1_sd_mmc_pins(bool enable_pullups, unsigned bus_width, |
168 | unsigned drive_strength, bool use_alt) | 168 | unsigned drive_strength, bool use_alt) |
169 | { | 169 | { |
170 | (void) use_alt; | ||
170 | /* SSP_{CMD,SCK} */ | 171 | /* SSP_{CMD,SCK} */ |
171 | imx233_pinctrl_set_drive(2, 0, drive_strength); | 172 | imx233_pinctrl_setup_vpin(VPIN_SSP1_CMD, "ssp1_cmd", drive_strength, enable_pullups); |
172 | imx233_pinctrl_set_drive(2, 6, drive_strength); | 173 | imx233_pinctrl_setup_vpin(VPIN_SSP1_SCK, "ssp1_sck", drive_strength, false); |
173 | imx233_pinctrl_acquire(2, 0, "ssp1 cmd"); | ||
174 | imx233_pinctrl_acquire(2, 6, "ssp1 sck"); | ||
175 | imx233_pinctrl_set_function(2, 0, PINCTRL_FUNCTION_MAIN); | ||
176 | imx233_pinctrl_set_function(2, 6, PINCTRL_FUNCTION_MAIN); | ||
177 | imx233_pinctrl_enable_pullup(2, 0, enable_pullups); | ||
178 | /* SSP_DATA{0-3} */ | 174 | /* SSP_DATA{0-3} */ |
179 | for(unsigned i = 0; i < MIN(bus_width, 4); i++) | 175 | imx233_pinctrl_setup_vpin(VPIN_SSP1_D0, "ssp1_d0", drive_strength, enable_pullups); |
176 | if(bus_width >= 4) | ||
180 | { | 177 | { |
181 | imx233_pinctrl_acquire(2, 2 + i, "ssp1 data"); | 178 | imx233_pinctrl_setup_vpin(VPIN_SSP1_D1, "ssp1_d1", drive_strength, enable_pullups); |
182 | imx233_pinctrl_set_drive(2, 2 + i, drive_strength); | 179 | imx233_pinctrl_setup_vpin(VPIN_SSP1_D2, "ssp1_d2", drive_strength, enable_pullups); |
183 | imx233_pinctrl_set_function(2, 2 + i, PINCTRL_FUNCTION_MAIN); | 180 | imx233_pinctrl_setup_vpin(VPIN_SSP1_D3, "ssp1_d3", drive_strength, enable_pullups); |
184 | imx233_pinctrl_enable_pullup(2, 2 + i, enable_pullups); | ||
185 | } | 181 | } |
186 | 182 | if(bus_width >= 8) | |
187 | /* SSP_DATA{4-7} */ | ||
188 | for(unsigned i = 4; i < bus_width; i++) | ||
189 | { | 183 | { |
190 | if(use_alt) | 184 | if(use_alt) |
191 | { | 185 | { |
192 | imx233_pinctrl_acquire(0, 22 + i, "ssp1 data"); | 186 | imx233_pinctrl_setup_vpin(VPIN_SSP1_D4_ALT, "ssp1_d4", drive_strength, enable_pullups); |
193 | imx233_pinctrl_set_drive(0, 22 + i, drive_strength); | 187 | imx233_pinctrl_setup_vpin(VPIN_SSP1_D5_ALT, "ssp1_d5", drive_strength, enable_pullups); |
194 | imx233_pinctrl_set_function(0, 22 + i, PINCTRL_FUNCTION_ALT2); | 188 | imx233_pinctrl_setup_vpin(VPIN_SSP1_D6_ALT, "ssp1_d6", drive_strength, enable_pullups); |
195 | imx233_pinctrl_enable_pullup(0, 22 + i, enable_pullups); | 189 | imx233_pinctrl_setup_vpin(VPIN_SSP1_D7_ALT, "ssp1_d7", drive_strength, enable_pullups); |
196 | } | 190 | } |
197 | else | 191 | else |
198 | { | 192 | { |
199 | imx233_pinctrl_acquire(0, 4 + i, "ssp1 data"); | 193 | imx233_pinctrl_setup_vpin(VPIN_SSP1_D4, "ssp1_d4", drive_strength, enable_pullups); |
200 | imx233_pinctrl_set_drive(0, 4 + i, drive_strength); | 194 | imx233_pinctrl_setup_vpin(VPIN_SSP1_D5, "ssp1_d5", drive_strength, enable_pullups); |
201 | imx233_pinctrl_set_function(0, 4 + i, PINCTRL_FUNCTION_ALT2); | 195 | imx233_pinctrl_setup_vpin(VPIN_SSP1_D6, "ssp1_d6", drive_strength, enable_pullups); |
202 | imx233_pinctrl_enable_pullup(0, 4 + i, enable_pullups); | 196 | imx233_pinctrl_setup_vpin(VPIN_SSP1_D7, "ssp1_d7", drive_strength, enable_pullups); |
203 | } | 197 | } |
204 | } | 198 | } |
205 | } | 199 | } |
@@ -207,23 +201,26 @@ void imx233_ssp_setup_ssp1_sd_mmc_pins(bool enable_pullups, unsigned bus_width, | |||
207 | void imx233_ssp_setup_ssp2_sd_mmc_pins(bool enable_pullups, unsigned bus_width, | 201 | void imx233_ssp_setup_ssp2_sd_mmc_pins(bool enable_pullups, unsigned bus_width, |
208 | unsigned drive_strength) | 202 | unsigned drive_strength) |
209 | { | 203 | { |
204 | (void) enable_pullups; | ||
205 | (void) bus_width; | ||
206 | (void) drive_strength; | ||
210 | /* SSP_{CMD,SCK} */ | 207 | /* SSP_{CMD,SCK} */ |
211 | imx233_pinctrl_acquire(0, 20, "ssp2 cmd"); | 208 | imx233_pinctrl_setup_vpin(VPIN_SSP2_CMD, "ssp2_cmd", drive_strength, enable_pullups); |
212 | imx233_pinctrl_acquire(0, 24, "ssp2 sck"); | 209 | imx233_pinctrl_setup_vpin(VPIN_SSP2_SCK, "ssp2_sck", drive_strength, false); |
213 | imx233_pinctrl_set_drive(0, 20, drive_strength); | 210 | /* SSP_DATA{0-3} */ |
214 | imx233_pinctrl_set_drive(0, 24, drive_strength); | 211 | imx233_pinctrl_setup_vpin(VPIN_SSP2_D0, "ssp2_d0", drive_strength, enable_pullups); |
215 | imx233_pinctrl_set_function(0, 20, PINCTRL_FUNCTION_ALT2); | 212 | if(bus_width >= 4) |
216 | imx233_pinctrl_set_function(0, 24, PINCTRL_FUNCTION_ALT2); | 213 | { |
217 | imx233_pinctrl_enable_pullup(0, 20, enable_pullups); | 214 | imx233_pinctrl_setup_vpin(VPIN_SSP2_D1, "ssp2_d1", drive_strength, enable_pullups); |
218 | /* SSP_DATA{0-7}*/ | 215 | imx233_pinctrl_setup_vpin(VPIN_SSP2_D2, "ssp2_d2", drive_strength, enable_pullups); |
219 | for(unsigned i = 0; i < bus_width; i++) | 216 | imx233_pinctrl_setup_vpin(VPIN_SSP2_D3, "ssp2_d3", drive_strength, enable_pullups); |
217 | } | ||
218 | if(bus_width >= 8) | ||
220 | { | 219 | { |
221 | imx233_pinctrl_acquire(0, i, "ssp2 data"); | 220 | imx233_pinctrl_setup_vpin(VPIN_SSP2_D4, "ssp2_d4", drive_strength, enable_pullups); |
222 | imx233_pinctrl_set_drive(0, i, drive_strength); | 221 | imx233_pinctrl_setup_vpin(VPIN_SSP2_D5, "ssp2_d5", drive_strength, enable_pullups); |
223 | imx233_pinctrl_set_function(0, i, PINCTRL_FUNCTION_ALT2); | 222 | imx233_pinctrl_setup_vpin(VPIN_SSP2_D6, "ssp2_d6", drive_strength, enable_pullups); |
224 | imx233_pinctrl_enable_pullup(0, i, enable_pullups); | 223 | imx233_pinctrl_setup_vpin(VPIN_SSP2_D7, "ssp2_d7", drive_strength, enable_pullups); |
225 | imx233_pinctrl_enable_gpio(0, i, false); | ||
226 | imx233_pinctrl_set_gpio(0, i, false); | ||
227 | } | 224 | } |
228 | } | 225 | } |
229 | 226 | ||
@@ -358,13 +355,15 @@ void imx233_ssp_sdmmc_setup_detect(int ssp, bool enable, ssp_detect_cb_t fn, | |||
358 | bool first_time, bool invert) | 355 | bool first_time, bool invert) |
359 | { | 356 | { |
360 | ASSERT_SSP(ssp) | 357 | ASSERT_SSP(ssp) |
361 | int bank = ssp == 1 ? 2 : 0; | 358 | vpin_t vpin = VPIN_SSP1_DET; |
362 | int pin = ssp == 1 ? 1 : 19; | 359 | if(ssp == 2) |
360 | vpin = VPIN_SSP2_DET; | ||
361 | unsigned bank = VPIN_UNPACK_BANK(vpin), pin = VPIN_UNPACK_PIN(vpin); | ||
363 | ssp_detect_cb[ssp - 1] = fn; | 362 | ssp_detect_cb[ssp - 1] = fn; |
364 | ssp_detect_invert[ssp - 1] = invert; | 363 | ssp_detect_invert[ssp - 1] = invert; |
365 | if(enable) | 364 | if(enable) |
366 | { | 365 | { |
367 | imx233_pinctrl_acquire(bank, pin, ssp == 1 ? "ssp1 detect" : "ssp2 detect"); | 366 | imx233_pinctrl_acquire(bank, pin, ssp == 1 ? "ssp1_det" : "ssp2_det"); |
368 | imx233_pinctrl_set_function(bank, pin, PINCTRL_FUNCTION_GPIO); | 367 | imx233_pinctrl_set_function(bank, pin, PINCTRL_FUNCTION_GPIO); |
369 | imx233_pinctrl_enable_gpio(bank, pin, false); | 368 | imx233_pinctrl_enable_gpio(bank, pin, false); |
370 | } | 369 | } |