|
@@ -136,6 +136,7 @@ struct us_data {
|
|
|
struct usb_device *pusb_dev; /* this usb_device */
|
|
|
|
|
|
unsigned int flags; /* from filter initially */
|
|
|
+# define USB_READY (1 << 0)
|
|
|
unsigned char ifnum; /* interface number */
|
|
|
unsigned char ep_in; /* in endpoint */
|
|
|
unsigned char ep_out; /* out ....... */
|
|
@@ -698,7 +699,8 @@ int usb_stor_BBB_transport(ccb *srb, struct us_data *us)
|
|
|
usb_stor_BBB_reset(us);
|
|
|
return USB_STOR_TRANSPORT_FAILED;
|
|
|
}
|
|
|
- mdelay(5);
|
|
|
+ if (!(us->flags & USB_READY))
|
|
|
+ mdelay(5);
|
|
|
pipein = usb_rcvbulkpipe(us->pusb_dev, us->ep_in);
|
|
|
pipeout = usb_sndbulkpipe(us->pusb_dev, us->ep_out);
|
|
|
/* DATA phase + error handling */
|
|
@@ -963,8 +965,10 @@ static int usb_test_unit_ready(ccb *srb, struct us_data *ss)
|
|
|
srb->cmd[1] = srb->lun << 5;
|
|
|
srb->datalen = 0;
|
|
|
srb->cmdlen = 12;
|
|
|
- if (ss->transport(srb, ss) == USB_STOR_TRANSPORT_GOOD)
|
|
|
+ if (ss->transport(srb, ss) == USB_STOR_TRANSPORT_GOOD) {
|
|
|
+ ss->flags |= USB_READY;
|
|
|
return 0;
|
|
|
+ }
|
|
|
usb_request_sense(srb, ss);
|
|
|
mdelay(100);
|
|
|
} while (retries--);
|
|
@@ -1114,6 +1118,7 @@ retry_it:
|
|
|
blks -= smallblks;
|
|
|
buf_addr += srb->datalen;
|
|
|
} while (blks != 0);
|
|
|
+ ss->flags &= ~USB_READY;
|
|
|
|
|
|
USB_STOR_PRINTF("usb_read: end startblk %lx, blccnt %x buffer %lx\n",
|
|
|
start, smallblks, buf_addr);
|
|
@@ -1193,6 +1198,7 @@ retry_it:
|
|
|
blks -= smallblks;
|
|
|
buf_addr += srb->datalen;
|
|
|
} while (blks != 0);
|
|
|
+ ss->flags &= ~USB_READY;
|
|
|
|
|
|
USB_STOR_PRINTF("usb_write: end startblk %lx, blccnt %x buffer %lx\n",
|
|
|
start, smallblks, buf_addr);
|
|
@@ -1404,6 +1410,7 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
|
|
|
cap[0] = 2880;
|
|
|
cap[1] = 0x200;
|
|
|
}
|
|
|
+ ss->flags &= ~USB_READY;
|
|
|
USB_STOR_PRINTF("Read Capacity returns: 0x%lx, 0x%lx\n", cap[0],
|
|
|
cap[1]);
|
|
|
#if 0
|