summaryrefslogtreecommitdiff
path: root/firmware/drivers/ata_mmc.c
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2009-07-01 10:07:22 +0000
committerRafaël Carré <rafael.carre@gmail.com>2009-07-01 10:07:22 +0000
commite0e24cbf0a3b11cb161e0ae057e4c383c6134801 (patch)
treefcfdb14a4b2984f4bc2c1bbc9657f11dcb03dcd7 /firmware/drivers/ata_mmc.c
parentc929310e55bf337e4a31675a30031a7818f5deda (diff)
downloadrockbox-e0e24cbf0a3b11cb161e0ae057e4c383c6134801.tar.gz
rockbox-e0e24cbf0a3b11cb161e0ae057e4c383c6134801.zip
Merge tCardInfo struct (MMC) and tSDCardInfo struct (SD)
Put specific members under #ifdef (CONFIG_STORAGE & STORAGE_xx) (2 members for SD and 1 for MMC) Fix a typo: tsac doesn't exist and must be read taac Move card_get_info functions declaration inside hotswap.h to remove mutual inclusion of ata_mmc.h and hotswap.h Move static const data structures from SD drivers into sd.h (sd_exponent and sd_mantissa) Fix sd_command prototypes in SD drivers (card registers are unsigned long) Fix speed calculation in Sansa AMS driver (PP SD driver needs to be checked) Move ata-sd-target.h to sd-pp-target.h to reflect the PP specifity. Now it only contains declaration of microsd_int() Remove unused ata-sd-target.h for injenic TODO: - check if CSD register bits are extracted correctly in PP driver - correctly define read_timeout and write_timeout unit for MMC & SD, and use timeouts in Sansa AMS driver git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21586 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers/ata_mmc.c')
-rw-r--r--firmware/drivers/ata_mmc.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/firmware/drivers/ata_mmc.c b/firmware/drivers/ata_mmc.c
index 3396149602..1dc330c538 100644
--- a/firmware/drivers/ata_mmc.c
+++ b/firmware/drivers/ata_mmc.c
@@ -21,6 +21,7 @@
21#include <stdbool.h> 21#include <stdbool.h>
22#include "mmc.h" 22#include "mmc.h"
23#include "ata_mmc.h" 23#include "ata_mmc.h"
24#include "hotswap.h"
24#include "ata_idle_notify.h" 25#include "ata_idle_notify.h"
25#include "kernel.h" 26#include "kernel.h"
26#include "thread.h" 27#include "thread.h"
@@ -439,15 +440,15 @@ static int initialize_card(int card_no)
439 * exponent[ts_exp + 4]; 440 * exponent[ts_exp + 4];
440 card->bitrate_register = (FREQ/4-1) / card->speed; 441 card->bitrate_register = (FREQ/4-1) / card->speed;
441 442
442 /* NSAC, TSAC, read timeout */ 443 /* NSAC, TAAC, read timeout */
443 card->nsac = 100 * card_extract_bits(card->csd, 16, 8); 444 card->nsac = 100 * card_extract_bits(card->csd, 16, 8);
444 card->tsac = mantissa[card_extract_bits(card->csd, 9, 4)]; 445 card->taac = mantissa[card_extract_bits(card->csd, 9, 4)];
445 taac_exp = card_extract_bits(card->csd, 13, 3); 446 taac_exp = card_extract_bits(card->csd, 13, 3);
446 card->read_timeout = ((FREQ/4) / (card->bitrate_register + 1) 447 card->read_timeout = ((FREQ/4) / (card->bitrate_register + 1)
447 * card->tsac / exponent[9 - taac_exp] 448 * card->taac / exponent[9 - taac_exp]
448 + (10 * card->nsac)); 449 + (10 * card->nsac));
449 card->read_timeout /= 8; /* clocks -> bytes */ 450 card->read_timeout /= 8; /* clocks -> bytes */
450 card->tsac = card->tsac * exponent[taac_exp] / 10; 451 card->taac = card->taac * exponent[taac_exp] / 10;
451 452
452 /* r2w_factor, write timeout */ 453 /* r2w_factor, write timeout */
453 card->r2w_factor = BIT_N(card_extract_bits(card->csd, 99, 3)); 454 card->r2w_factor = BIT_N(card_extract_bits(card->csd, 99, 3));