I added the patch from a while ago into the CVS tree. This apparently makes the HP8230 CDRW work. I've tested it on my 8200 and it works fine, so the change isn't harmful. If you have an 8230, please try this. I wrote 550MB of mp3's to a CD using the 8200 and xcdroast at 4x speed and Disk-At-Once, and the mp3's sounded fine afterwards :) Attached is the patch against the previous revision in CVS. This should also work against kernel 2.4.2. --Rob
--- shuttle_usbat.c.orig Tue Mar 27 19:14:45 2001 +++ shuttle_usbat.c Tue Mar 27 20:02:06 2001 @@ -1,9 +1,9 @@ /* Driver for SCM Microsystems USB-ATAPI cable * - * $Id: shuttle_usbat.c,v 1.11 2000/11/13 22:29:36 mdharm Exp $ + * $Id: shuttle_usbat.c,v 1.14 2001/03/28 01:02:06 groovyjava Exp $ * * Current development and maintenance by: - * (c) 2000 Robert Baruch ([EMAIL PROTECTED]) + * (c) 2000, 2001 Robert Baruch ([EMAIL PROTECTED]) * * Many originally ATAPI devices were slightly modified to meet the USB * market by using some kind of translation from ATAPI to USB on the host, @@ -18,8 +18,8 @@ * as well. This driver is only guaranteed to work with the ATAPI * translation. * - * The only peripheral that I know of (as of 8 Sep 2000) that uses this - * device is the Hewlett-Packard 8200e/8210e CD-Writer Plus. + * The only peripheral that I know of (as of 27 Mar 2001) that uses this + * device is the Hewlett-Packard 8200e/8210e/8230e CD-Writer Plus. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -44,7 +44,7 @@ #include <linux/sched.h> #include <linux/errno.h> -#include <linux/malloc.h> +#include <linux/slab.h> extern int usb_stor_control_msg(struct us_data *us, unsigned int pipe, u8 request, u8 requesttype, u16 value, u16 index, @@ -344,12 +344,14 @@ if (result!=USB_STOR_TRANSPORT_GOOD) return result; - if (status&0x01) // check condition + if (status&0x01) { // check condition + result = usbat_read(us, USBAT_ATA, 0x10, &status); return USB_STOR_TRANSPORT_FAILED; + } if (status&0x20) // device fault return USB_STOR_TRANSPORT_FAILED; - if ((status&0x80)!=0x80) { // not busy + if ((status&0x80)==0x00) { // not busy US_DEBUGP("Waited not busy for %d steps\n", i); return USB_STOR_TRANSPORT_GOOD; } @@ -971,6 +973,9 @@ registers[i] = 0x10; data[i] = (i-7 >= srb->cmd_len) ? 0 : srb->cmnd[i-7]; } + + result = usbat_read(us, USBAT_ATA, 0x17, &status); + US_DEBUGP("Status = %02X\n", status); if (srb->cmnd[0] == TEST_UNIT_READY) transferred = 0;