diff options
| author | Jörg Hohensohn <hohensoh@rockbox.org> | 2003-07-08 06:33:30 +0000 |
|---|---|---|
| committer | Jörg Hohensohn <hohensoh@rockbox.org> | 2003-07-08 06:33:30 +0000 |
| commit | adef8fb17e3990f9ee3d4d63374513108ec1a534 (patch) | |
| tree | f255679922e298ca5bf9d91f987826fb98286d3a | |
| parent | f937912b5c2a3d6030b78eacfe15d57d9b3483ae (diff) | |
| download | rockbox-adef8fb17e3990f9ee3d4d63374513108ec1a534.zip rockbox-adef8fb17e3990f9ee3d4d63374513108ec1a534.tar.gz rockbox-adef8fb17e3990f9ee3d4d63374513108ec1a534.tar.bz2 rockbox-adef8fb17e3990f9ee3d4d63374513108ec1a534.tar.xz | |
better place and method for the spinup wait code, still I'd welcome comments on this
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3815 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | firmware/drivers/ata.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c index f4e1da4..b665dc0 100644 --- a/firmware/drivers/ata.c +++ b/firmware/drivers/ata.c @@ -424,19 +424,9 @@ extern void ata_flush(void) static int check_registers(void) { - /* When starting from Flash, the disk is not yet ready when we get here. */ - /* Crude first fix is to block and poll here for a while, - can we do better? */ - int time = 0; - while ((ATA_STATUS & STATUS_BSY)) - { - if (time >= HZ*10) /* timeout, disk is not coming up */ + if ( ATA_STATUS & STATUS_BSY ) return -1; - sleep(HZ/10); - time += HZ/10; - }; - ATA_NSECTOR = 0xa5; ATA_SECTOR = 0x5a; ATA_LCYL = 0xaa; @@ -819,6 +809,19 @@ int ata_init(void) ata_enable(true); if ( !initialized ) { + /* When starting from Flash, the disk is not yet ready when we get here. */ + /* Crude first fix is to block and poll here for a while, + can we do better? */ + int time = 0; + while ((ATA_STATUS & STATUS_BSY)) + { + if (time >= HZ*10) /* timeout, disk is not coming up */ + return -6; + + sleep(HZ/10); + time += HZ/10; + }; + if (master_slave_detect()) return -1; |