summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Moń <desowin@gmail.com>2011-12-15 15:33:53 +0000
committerTomasz Moń <desowin@gmail.com>2011-12-15 15:33:53 +0000
commitddd594b03ea7209f1b17b1ce918e585c48bd1df8 (patch)
treeba3d050533f0ca319465ecfc46428f77597269b5
parent89aec97f3d03ed66637574bfddea36040f94f0aa (diff)
downloadrockbox-ddd594b03ea7209f1b17b1ce918e585c48bd1df8.tar.gz
rockbox-ddd594b03ea7209f1b17b1ce918e585c48bd1df8.zip
Sansa Connect: Use sleep() instead udelay() in AVR spi_txrx.
This should prevent buffer underruns that can occur during heavy use of buttons or scrollwheel. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31267 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.c8
-rw-r--r--firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.h1
-rw-r--r--firmware/target/arm/tms320dm320/sansa-connect/lcd-sansaconnect.c1
-rw-r--r--firmware/target/arm/tms320dm320/sansa-connect/power-sansaconnect.c3
-rw-r--r--firmware/target/arm/tms320dm320/sdmmc-dm320.c6
-rw-r--r--firmware/target/arm/tms320dm320/system-dm320.c7
6 files changed, 18 insertions, 8 deletions
diff --git a/firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.c b/firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.c
index dedd017cf7..2ed69b6c9b 100644
--- a/firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.c
+++ b/firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.c
@@ -228,7 +228,9 @@ static void spi_txrx(unsigned char *buf_tx, unsigned char *buf_rx, int n)
228 for (i = 0; i<n; i++) 228 for (i = 0; i<n; i++)
229 { 229 {
230 IO_SERIAL1_TX_DATA = buf_tx[i]; 230 IO_SERIAL1_TX_DATA = buf_tx[i];
231 udelay(100); 231
232 /* a short wait for AVR to process data */
233 sleep(HZ/1000);
232 234
233 do 235 do
234 { 236 {
@@ -248,7 +250,7 @@ static void spi_txrx(unsigned char *buf_tx, unsigned char *buf_rx, int n)
248 mutex_unlock(&avr_mtx); 250 mutex_unlock(&avr_mtx);
249} 251}
250 252
251static void avr_hid_sync(void) 253void avr_hid_sync(void)
252{ 254{
253 int i; 255 int i;
254 unsigned char prg[4] = {CMD_SYNC, CMD_VER, CMD_FILL, CMD_CLOSE}; 256 unsigned char prg[4] = {CMD_SYNC, CMD_VER, CMD_FILL, CMD_CLOSE};
@@ -279,8 +281,6 @@ void avr_hid_init(void)
279 IO_SERIAL1_MODE = 0x6DB; 281 IO_SERIAL1_MODE = 0x6DB;
280 282
281 mutex_init(&avr_mtx); 283 mutex_init(&avr_mtx);
282
283 avr_hid_sync();
284} 284}
285 285
286/* defined in powermgmt-sansaconnect.c */ 286/* defined in powermgmt-sansaconnect.c */
diff --git a/firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.h b/firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.h
index 64b44675f7..06fd2b2d72 100644
--- a/firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.h
+++ b/firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.h
@@ -24,6 +24,7 @@
24 24
25#include "config.h" 25#include "config.h"
26 26
27void avr_hid_sync(void);
27void avr_hid_init(void); 28void avr_hid_init(void);
28 29
29void avr_hid_enable_charger(void); 30void avr_hid_enable_charger(void);
diff --git a/firmware/target/arm/tms320dm320/sansa-connect/lcd-sansaconnect.c b/firmware/target/arm/tms320dm320/sansa-connect/lcd-sansaconnect.c
index fcfc82e876..e53a15e94f 100644
--- a/firmware/target/arm/tms320dm320/sansa-connect/lcd-sansaconnect.c
+++ b/firmware/target/arm/tms320dm320/sansa-connect/lcd-sansaconnect.c
@@ -133,6 +133,7 @@ void lcd_init_device(void)
133 /* Copy Rockbox frame buffer to the second framebuffer */ 133 /* Copy Rockbox frame buffer to the second framebuffer */
134 lcd_update(); 134 lcd_update();
135 135
136 avr_hid_sync();
136 avr_hid_lcm_power_on(); 137 avr_hid_lcm_power_on();
137 138
138 /* set framebuffer address - OF sets RAM start address to 0x1000000 */ 139 /* set framebuffer address - OF sets RAM start address to 0x1000000 */
diff --git a/firmware/target/arm/tms320dm320/sansa-connect/power-sansaconnect.c b/firmware/target/arm/tms320dm320/sansa-connect/power-sansaconnect.c
index f73df98641..ecdf3b1a75 100644
--- a/firmware/target/arm/tms320dm320/sansa-connect/power-sansaconnect.c
+++ b/firmware/target/arm/tms320dm320/sansa-connect/power-sansaconnect.c
@@ -60,6 +60,9 @@ void power_init(void)
60 60
61 /* Set LCM (LDO1) to 2.85V, Set CODEC and USB (LDO2) to 1.8V */ 61 /* Set LCM (LDO1) to 2.85V, Set CODEC and USB (LDO2) to 1.8V */
62 tps65021_write_reg(0x08, 0x36); 62 tps65021_write_reg(0x08, 0x36);
63
64 /* Enable internal charger */
65 avr_hid_enable_charger();
63} 66}
64 67
65void power_off(void) 68void power_off(void)
diff --git a/firmware/target/arm/tms320dm320/sdmmc-dm320.c b/firmware/target/arm/tms320dm320/sdmmc-dm320.c
index 7df2925e20..6c744755f2 100644
--- a/firmware/target/arm/tms320dm320/sdmmc-dm320.c
+++ b/firmware/target/arm/tms320dm320/sdmmc-dm320.c
@@ -891,9 +891,9 @@ int sd_init(void)
891 bitclr16(&IO_CLK_MOD2, CLK_MOD2_MMC); 891 bitclr16(&IO_CLK_MOD2, CLK_MOD2_MMC);
892 bitset16(&IO_CLK_INV, CLK_INV_MMC); 892 bitset16(&IO_CLK_INV, CLK_INV_MMC);
893 893
894 /* mmc module clock: 75 Mhz (AHB) / 2 = ~37.5 Mhz */ 894 /* mmc module clock: 75 Mhz (AHB) / 2 = ~37.5 Mhz
895 /* OF uses 1, but for some reason it freezes on us */ 895 * (Frequencies above are taken from Sansa Connect's OF source code) */
896 IO_CLK_DIV3 = (IO_CLK_DIV3 & 0xFF00) | 0x02; 896 IO_CLK_DIV3 = (IO_CLK_DIV3 & 0xFF00) | 0x01;
897 897
898 bitset16(&IO_CLK_MOD2, CLK_MOD2_MMC); 898 bitset16(&IO_CLK_MOD2, CLK_MOD2_MMC);
899 899
diff --git a/firmware/target/arm/tms320dm320/system-dm320.c b/firmware/target/arm/tms320dm320/system-dm320.c
index 37d06f4343..abdca21627 100644
--- a/firmware/target/arm/tms320dm320/system-dm320.c
+++ b/firmware/target/arm/tms320dm320/system-dm320.c
@@ -310,6 +310,11 @@ void system_init(void)
310 else 310 else
311#endif 311#endif
312 { 312 {
313#ifdef SANSA_CONNECT
314 /* Setting AHB divisor to 0 causes MMC/SD interface to lock */
315 clock_arm_slow = (1 << 8) | 3;
316 clock_arm_fast = (1 << 8) | 1;
317#else
313 /* Set the slow and fast clock speeds used for boosting 318 /* Set the slow and fast clock speeds used for boosting
314 * Slow Setup: 319 * Slow Setup:
315 * ARM div = 4 ( 87.5 MHz ) 320 * ARM div = 4 ( 87.5 MHz )
@@ -320,6 +325,7 @@ void system_init(void)
320 */ 325 */
321 clock_arm_slow = (0 << 8) | 3; 326 clock_arm_slow = (0 << 8) | 3;
322 clock_arm_fast = (1 << 8) | 1; 327 clock_arm_fast = (1 << 8) | 1;
328#endif
323 } 329 }
324 330
325 /* M48XI disabled, USB buffer powerdown */ 331 /* M48XI disabled, USB buffer powerdown */
@@ -368,7 +374,6 @@ void system_init(void)
368 374
369 i2c_init(); 375 i2c_init();
370 avr_hid_init(); 376 avr_hid_init();
371 avr_hid_enable_charger();
372#endif 377#endif
373} 378}
374 379