aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorNikunj A Dadhania <nikunj@linux.vnet.ibm.com>2013-09-24 15:09:29 +0530
committerNikunj A Dadhania <nikunj@linux.vnet.ibm.com>2013-10-04 12:01:21 +0530
commit5962dbf56dbf8028eeb60dbae0d0b5b96a3b28cc (patch)
tree9261ccc902d51282a3a89fe61b40ed129c4e3e3d /lib
parent80ba6519d89df92174d02c21f2f19d1f11282637 (diff)
downloadSLOF-5962dbf56dbf8028eeb60dbae0d0b5b96a3b28cc.zip
SLOF-5962dbf56dbf8028eeb60dbae0d0b5b96a3b28cc.tar.gz
SLOF-5962dbf56dbf8028eeb60dbae0d0b5b96a3b28cc.tar.bz2
usb-ohci: preserve the toggleCarry bit in ED
Endpoint descriptors toggleCarry bit needs to be preserved when using DataToggle bit in transfer descriptor is set to 0. Also zero the bulk_curr_ed Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/libusb/usb-ohci.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/libusb/usb-ohci.c b/lib/libusb/usb-ohci.c
index b959cd3..1a7e60c 100644
--- a/lib/libusb/usb-ohci.c
+++ b/lib/libusb/usb-ohci.c
@@ -381,7 +381,7 @@ static void ohci_fill_ed(struct ohci_ed *ed, long headp, long tailp,
unsigned int attr, long next_ed)
{
ed->attr = cpu_to_le32(attr);
- ed->headp = cpu_to_le32(headp);
+ ed->headp = cpu_to_le32(headp) | (ed->headp & ~EDA_HEADP_MASK_LE);
ed->tailp = cpu_to_le32(tailp);
ed->next_ed = cpu_to_le32(next_ed);
dpprintf("%s: headp %08X tailp %08X next_td %08X attr %08X\n", __func__,
@@ -693,6 +693,7 @@ static int ohci_transfer_bulk(struct usb_pipe *pipe, void *td_ptr,
ed->attr |= cpu_to_le32(EDA_SKIP);
mb();
write_reg32(&regs->bulk_head_ed, 0);
+ write_reg32(&regs->bulk_curr_ed, 0);
if (le32_to_cpu(ed->headp) & EDA_HEADP_HALTED) {
printf("ED Halted\n");