diff options
author | Linus Nielsen Feltzing <linus@haxx.se> | 2002-05-07 22:59:03 +0000 |
---|---|---|
committer | Linus Nielsen Feltzing <linus@haxx.se> | 2002-05-07 22:59:03 +0000 |
commit | dc4977d98cf3460a5928984612a8cb22a1987b30 (patch) | |
tree | c13d2aeda4cf164b2f43596e49b75f8f4ad960d3 | |
parent | 4674e870173ec46bfd2eb6b552aadc04669fd830 (diff) | |
download | rockbox-dc4977d98cf3460a5928984612a8cb22a1987b30.tar.gz rockbox-dc4977d98cf3460a5928984612a8cb22a1987b30.zip |
Killed a few bugs. Tested in target. Works fairly good.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@501 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | firmware/drivers/ata.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c index fa51259d99..d75544ef3a 100644 --- a/firmware/drivers/ata.c +++ b/firmware/drivers/ata.c @@ -21,6 +21,7 @@ #include "led.h" #include "sh7034.h" #include "system.h" +#include "debug.h" #define ATA_DATA (*((volatile unsigned short*)0x06104100)) #define ATA_ERROR (*((volatile unsigned char*)0x06100101)) @@ -32,7 +33,7 @@ #define ATA_SELECT (*((volatile unsigned char*)0x06100106)) #define ATA_COMMAND (*((volatile unsigned char*)0x06100107)) #define ATA_STATUS ATA_COMMAND -#define ATA_CONTROL (*((volatile unsigned char*)0x06100306)) +#define ATA_CONTROL (*((volatile unsigned char*)0x06200306)) #define ATA_ALT_STATUS ATA_CONTROL #define SELECT_LBA 0x40 @@ -59,9 +60,13 @@ static int wait_for_bsy(void) yield(); if (TIME_BEFORE(current_tick, timeout)) + { return 1; + } else + { return 0; /* timeout */ + } } static int wait_for_rdy(void) @@ -210,7 +215,7 @@ static int freeze_lock(void) int ata_spindown(int time) { - if (!wait_for_rdy()) + if(!wait_for_rdy()) return -1; if ( time == -1 ) { @@ -231,11 +236,11 @@ int ata_spindown(int time) int ata_hard_reset(void) { - clear_bit(1,PADR); - sleep(HZ/500); + PADR &= ~0x0002; - set_bit(1,PADR); - sleep(HZ/500); + sleep(2); + + PADR |= 0x0002; return wait_for_rdy(); } @@ -257,7 +262,7 @@ int ata_init(void) led(FALSE); /* activate ATA */ - PADR |= 0x80; + PADR &= ~0x80; if (!ata_hard_reset()) return -1; @@ -265,12 +270,15 @@ int ata_init(void) if (!check_registers()) return -2; - if (!check_harddisk()) - return -3; +// if (!check_harddisk()) +// return -3; - if (!freeze_lock()) + if (freeze_lock() < 0) return -4; +// if(ata_spindown(-1) < 0) +// return -5; + ATA_SELECT = SELECT_LBA; ATA_CONTROL = CONTROL_nIEN; |