From 2f4b88e9bb157a81cd57b31f8f22dbecc49f368a Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Tue, 23 Jul 2002 15:02:25 +0000 Subject: Possibly better USB handling git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1419 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/ata.c | 46 ++++++++++++++++++++++------------------------ firmware/usb.c | 13 +++++-------- 2 files changed, 27 insertions(+), 32 deletions(-) diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c index 3fdc93669e..6cab3d3872 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 d7112b971f..13bbc173c2 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) -- cgit v1.2.3