summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2002-07-23 15:02:25 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2002-07-23 15:02:25 +0000
commit2f4b88e9bb157a81cd57b31f8f22dbecc49f368a (patch)
treecb3db8b0dc1821e99890bd22c943a9967e801b81
parentadfbc119604e93d94f763b5721f64ecdc2247aa9 (diff)
downloadrockbox-2f4b88e9bb157a81cd57b31f8f22dbecc49f368a.zip
rockbox-2f4b88e9bb157a81cd57b31f8f22dbecc49f368a.tar.gz
rockbox-2f4b88e9bb157a81cd57b31f8f22dbecc49f368a.tar.bz2
rockbox-2f4b88e9bb157a81cd57b31f8f22dbecc49f368a.tar.xz
Possibly better USB handling
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1419 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/drivers/ata.c46
-rw-r--r--firmware/usb.c13
2 files changed, 27 insertions, 32 deletions
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c
index 3fdc936..6cab3d3 100644
--- a/firmware/drivers/ata.c
+++ b/firmware/drivers/ata.c
@@ -125,7 +125,6 @@ int ata_read_sectors(unsigned long start,
if ( sleeping ) {
if (ata_soft_reset()) {
- mutex_unlock(&ata_mtx);
return -1;
}
}
@@ -184,7 +183,6 @@ int ata_write_sectors(unsigned long start,
if ( sleeping ) {
if (ata_soft_reset()) {
- mutex_unlock(&ata_mtx);
return -1;
}
}
@@ -307,14 +305,14 @@ static void ata_thread(void)
while (1) {
queue_wait(&ata_queue, &ev);
switch ( ev.id ) {
- case SYS_USB_CONNECTED:
- /* Tell the USB thread that we are safe */
- DEBUGF("backlight_thread got SYS_USB_CONNECTED\n");
- usb_acknowledge(SYS_USB_CONNECTED_ACK);
+ case SYS_USB_CONNECTED:
+ /* Tell the USB thread that we are safe */
+ DEBUGF("backlight_thread got SYS_USB_CONNECTED\n");
+ usb_acknowledge(SYS_USB_CONNECTED_ACK);
- /* Wait until the USB cable is extracted again */
- usb_wait_for_disconnect(&ata_queue);
- break;
+ /* Wait until the USB cable is extracted again */
+ usb_wait_for_disconnect(&ata_queue);
+ break;
case Q_SLEEP:
ata_perform_sleep();
@@ -372,7 +370,7 @@ int ata_soft_reset(void)
retry_count = 8;
do
{
- ret = wait_for_rdy();
+ ret = wait_for_rdy();
} while(!ret && retry_count--);
/* Massage the return code so it is 0 on success and -1 on failure */
@@ -447,9 +445,9 @@ static int io_address_detect(void)
void ata_enable(bool on)
{
if(on)
- PADR &= ~0x80; /* enable ATA */
+ PADR &= ~0x80; /* enable ATA */
else
- PADR |= 0x80; /* disable ATA */
+ PADR |= 0x80; /* disable ATA */
PAIOR |= 0x80;
}
@@ -462,19 +460,19 @@ int ata_init(void)
ata_enable(true);
- if (master_slave_detect())
- return -1;
-
- if (io_address_detect())
- return -2;
-
- if (check_registers())
- return -3;
-
- if (freeze_lock())
- return -4;
-
if ( !initialized ) {
+ if (master_slave_detect())
+ return -1;
+
+ if (io_address_detect())
+ return -2;
+
+ if (check_registers())
+ return -3;
+
+ if (freeze_lock())
+ return -4;
+
queue_init(&ata_queue);
create_thread(ata_thread, ata_stack,
sizeof(ata_stack), ata_thread_name);
diff --git a/firmware/usb.c b/firmware/usb.c
index d7112b9..13bbc17 100644
--- a/firmware/usb.c
+++ b/firmware/usb.c
@@ -32,9 +32,7 @@
#include "button.h"
#include "sprintf.h"
-#ifdef ARCHOS_RECORDER
-extern void dbg_ports(void);
-#endif
+extern void dbg_ports(void); /* NASTY! defined in apps/ */
#define USB_REALLY_BRAVE
@@ -86,6 +84,7 @@ static void usb_slave_mode(bool on)
if(on)
{
DEBUGF("Entering USB slave mode\n");
+ ata_soft_reset();
ata_enable(false);
usb_enable(true);
}
@@ -101,16 +100,14 @@ static void usb_slave_mode(bool on)
rc = ata_init();
if(rc)
{
-#ifdef ARCHOS_RECORDER
char str[32];
lcd_clear_display();
snprintf(str, 31, "ATA error: %d", rc);
- lcd_puts(0, 1, str);
- lcd_puts(0, 3, "Press ON to debug");
+ lcd_puts(0, 0, str);
+ lcd_puts(0, 1, "Press ON to debug");
lcd_update();
while(button_get(true) != BUTTON_ON) {};
dbg_ports();
-#endif
panicf("ata: %d",rc);
}
@@ -248,7 +245,7 @@ static void usb_tick(void)
void usb_acknowledge(int id)
{
- queue_post(&usb_queue, id, NULL);
+ queue_post(&usb_queue, id, NULL);
}
void usb_init(void)