diff options
author | Rafaël Carré <rafael.carre@gmail.com> | 2009-05-13 08:27:33 +0000 |
---|---|---|
committer | Rafaël Carré <rafael.carre@gmail.com> | 2009-05-13 08:27:33 +0000 |
commit | 8033342d0fe3b977fc7cb1cd77ef408fc69f0878 (patch) | |
tree | cbbd8d9e2836489f2edb63fd85f7851169f60726 | |
parent | adb978a44d39598cb26d2fde5cfe74b2a37a3cda (diff) | |
download | rockbox-8033342d0fe3b977fc7cb1cd77ef408fc69f0878.tar.gz rockbox-8033342d0fe3b977fc7cb1cd77ef408fc69f0878.zip |
Sansa AMS : remove mci_set_clock_divider()
Inline the 2 uses, and use a preprocessor sanity check for identification frequency
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20924 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | firmware/target/arm/as3525/ata_sd_as3525.c | 38 | ||||
-rw-r--r-- | firmware/target/arm/as3525/clock-target.h | 3 |
2 files changed, 8 insertions, 33 deletions
diff --git a/firmware/target/arm/as3525/ata_sd_as3525.c b/firmware/target/arm/as3525/ata_sd_as3525.c index 7e5bc126af..342be613c5 100644 --- a/firmware/target/arm/as3525/ata_sd_as3525.c +++ b/firmware/target/arm/as3525/ata_sd_as3525.c | |||
@@ -117,32 +117,6 @@ static volatile bool retry; | |||
117 | 117 | ||
118 | static inline void mci_delay(void) { int i = 0xffff; while(i--) ; } | 118 | static inline void mci_delay(void) { int i = 0xffff; while(i--) ; } |
119 | 119 | ||
120 | static void mci_set_clock_divider(const int drive, int divider) | ||
121 | { | ||
122 | int clock = MCI_CLOCK(drive); | ||
123 | |||
124 | if(divider > 1) | ||
125 | { | ||
126 | /* use divide logic */ | ||
127 | clock &= ~MCI_CLOCK_BYPASS; | ||
128 | |||
129 | /* convert divider to MCI_CLOCK logic */ | ||
130 | divider = (divider/2) - 1; | ||
131 | if(divider >= 256) | ||
132 | divider = 255; | ||
133 | } | ||
134 | else | ||
135 | { | ||
136 | /* bypass dividing logic */ | ||
137 | clock |= MCI_CLOCK_BYPASS; | ||
138 | divider = 0; | ||
139 | } | ||
140 | |||
141 | MCI_CLOCK(drive) = clock | divider; | ||
142 | |||
143 | mci_delay(); | ||
144 | } | ||
145 | |||
146 | #ifdef HAVE_HOTSWAP | 120 | #ifdef HAVE_HOTSWAP |
147 | #if defined(SANSA_E200V2) || defined(SANSA_FUZE) | 121 | #if defined(SANSA_E200V2) || defined(SANSA_FUZE) |
148 | static int sd1_oneshot_callback(struct timeout *tmo) | 122 | static int sd1_oneshot_callback(struct timeout *tmo) |
@@ -348,7 +322,8 @@ static int sd_init_card(const int drive) | |||
348 | 322 | ||
349 | card_info[drive].initialized = 1; | 323 | card_info[drive].initialized = 1; |
350 | 324 | ||
351 | mci_set_clock_divider(drive, 1); /* full speed */ | 325 | MCI_CLOCK(drive) |= MCI_CLOCK_BYPASS; /* full speed */ |
326 | mci_delay(); | ||
352 | 327 | ||
353 | /* | 328 | /* |
354 | * enable bank switching | 329 | * enable bank switching |
@@ -481,12 +456,9 @@ static void init_pl180_controller(const int drive) | |||
481 | 456 | ||
482 | MCI_SELECT(drive) = 0; | 457 | MCI_SELECT(drive) = 0; |
483 | 458 | ||
484 | MCI_CLOCK(drive) = MCI_CLOCK_ENABLE; | 459 | MCI_CLOCK(drive) = MCI_CLOCK_ENABLE | |
485 | MCI_CLOCK(drive) &= ~MCI_CLOCK_POWERSAVE; | 460 | (((CLK_DIV(AS3525_PCLK_FREQ, AS3525_SD_IDENT_FREQ)) / 2) - 1); |
486 | 461 | mci_delay(); | |
487 | /* set MCLK divider */ | ||
488 | mci_set_clock_divider(drive, | ||
489 | CLK_DIV(AS3525_PCLK_FREQ, AS3525_SD_IDENT_FREQ)); | ||
490 | } | 462 | } |
491 | 463 | ||
492 | int sd_init(void) | 464 | int sd_init(void) |
diff --git a/firmware/target/arm/as3525/clock-target.h b/firmware/target/arm/as3525/clock-target.h index 21fd4c65d2..f4b223cdff 100644 --- a/firmware/target/arm/as3525/clock-target.h +++ b/firmware/target/arm/as3525/clock-target.h | |||
@@ -63,5 +63,8 @@ | |||
63 | #endif | 63 | #endif |
64 | 64 | ||
65 | #define AS3525_SD_IDENT_FREQ 400000 /* must be between 100 & 400 kHz */ | 65 | #define AS3525_SD_IDENT_FREQ 400000 /* must be between 100 & 400 kHz */ |
66 | #if ((CLK_DIV(AS3525_PCLK_FREQ, AS3525_SD_IDENT_FREQ) / 2) - 1) >= (1<<8) /* 8 bits */ | ||
67 | #error SD IDENTIFICATION frequency is too low : clock divider will not fit ! | ||
68 | #endif | ||
66 | 69 | ||
67 | #endif /* CLOCK_TARGET_H */ | 70 | #endif /* CLOCK_TARGET_H */ |