From 724e4fe5e413355f2bab9ac63ad8e92be37b3f32 Mon Sep 17 00:00:00 2001 From: Frank Gevaerts Date: Sun, 15 Nov 2009 21:58:25 +0000 Subject: Don't use the same completion_event for both directions. This could cause problems on USB controllers that have IN and OUT endpoints with the same endpoint number (such as the arc controller) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23639 a1c6a512-1295-4272-9138-f99709370657 --- firmware/usbstack/usb_core.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/firmware/usbstack/usb_core.c b/firmware/usbstack/usb_core.c index 7fd6f52249..be49df0e48 100644 --- a/firmware/usbstack/usb_core.c +++ b/firmware/usbstack/usb_core.c @@ -174,7 +174,7 @@ static struct { completion_handler_t completion_handler[2]; control_handler_t control_handler[2]; - struct usb_transfer_completion_event_data completion_event; + struct usb_transfer_completion_event_data completion_event[2]; } ep_data[USB_NUM_ENDPOINTS]; static struct usb_class_driver drivers[USB_NUM_DRIVERS] = @@ -821,7 +821,7 @@ void usb_core_transfer_complete(int endpoint,int dir,int status,int length) break; default: - completion_event=&ep_data[endpoint].completion_event; + completion_event=&ep_data[endpoint].completion_event[dir!=0]; completion_event->endpoint=endpoint; completion_event->dir=dir; @@ -838,7 +838,7 @@ void usb_core_transfer_complete(int endpoint,int dir,int status,int length) void usb_core_control_request(struct usb_ctrlrequest* req) { struct usb_transfer_completion_event_data* completion_event = - &ep_data[EP_CONTROL].completion_event; + &ep_data[EP_CONTROL].completion_event[1]; completion_event->endpoint=EP_CONTROL; completion_event->dir=0; -- cgit v1.2.3