summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx233/ssp-imx233.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/imx233/ssp-imx233.c')
-rw-r--r--firmware/target/arm/imx233/ssp-imx233.c81
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)
167void imx233_ssp_setup_ssp1_sd_mmc_pins(bool enable_pullups, unsigned bus_width, 167void 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,
207void imx233_ssp_setup_ssp2_sd_mmc_pins(bool enable_pullups, unsigned bus_width, 201void 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 }