summaryrefslogtreecommitdiff
path: root/firmware/usbstack
diff options
context:
space:
mode:
authorChristian Gmeiner <christian.gmeiner@gmail.com>2007-08-29 10:14:47 +0000
committerChristian Gmeiner <christian.gmeiner@gmail.com>2007-08-29 10:14:47 +0000
commit17f2dd5c13cda7447da74227099b852ee55e1dd6 (patch)
tree89b8f659df56ef92adf1859f95e108e802b19852 /firmware/usbstack
parent4ecd9716bd47961ca7377de690eaeb740ef7f947 (diff)
downloadrockbox-17f2dd5c13cda7447da74227099b852ee55e1dd6.zip
rockbox-17f2dd5c13cda7447da74227099b852ee55e1dd6.tar.gz
rockbox-17f2dd5c13cda7447da74227099b852ee55e1dd6.tar.bz2
rockbox-17f2dd5c13cda7447da74227099b852ee55e1dd6.tar.xz
endpoint address was only set in fs descriptor, but we need it in hs too. Update storage device descriptor dynamic based on dcd
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14507 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/usbstack')
-rw-r--r--firmware/usbstack/core/epsetup.c8
-rw-r--r--firmware/usbstack/drivers/device/usb_serial.c4
-rw-r--r--firmware/usbstack/drivers/device/usb_storage.c8
3 files changed, 18 insertions, 2 deletions
diff --git a/firmware/usbstack/core/epsetup.c b/firmware/usbstack/core/epsetup.c
index 702108a..8581544 100644
--- a/firmware/usbstack/core/epsetup.c
+++ b/firmware/usbstack/core/epsetup.c
@@ -164,6 +164,12 @@ static int ep_matches(struct usb_ep* ep, struct usb_endpoint_descriptor* desc)
}
/* MATCH!! */
-
+
+ /* set address of used ep in desc */
+ logf("ep address %x", desc->bEndpointAddress);
+ desc->bEndpointAddress |= ep->ep_num;
+
+ ep->desc = desc;
+
return 1;
}
diff --git a/firmware/usbstack/drivers/device/usb_serial.c b/firmware/usbstack/drivers/device/usb_serial.c
index 9f1778a..578e9a1 100644
--- a/firmware/usbstack/drivers/device/usb_serial.c
+++ b/firmware/usbstack/drivers/device/usb_serial.c
@@ -201,6 +201,10 @@ int usb_serial_driver_bind(void* controler_ops)
serial_debug_desc.bDebugInEndpoint = dev.in->ep_num;
serial_debug_desc.bDebugOutEndpoint = dev.out->ep_num;
+ /* update hs descriptors as we asume that endpoints are the same for fs and hs */
+ serial_hs_in_desc.bEndpointAddress = serial_fs_in_desc.bEndpointAddress;
+ serial_hs_out_desc.bEndpointAddress = serial_fs_out_desc.bEndpointAddress;
+
return 0;
autoconf_fail:
diff --git a/firmware/usbstack/drivers/device/usb_storage.c b/firmware/usbstack/drivers/device/usb_storage.c
index 4f820fb..88129cd 100644
--- a/firmware/usbstack/drivers/device/usb_storage.c
+++ b/firmware/usbstack/drivers/device/usb_storage.c
@@ -53,7 +53,6 @@ static struct usb_device_descriptor storage_device_desc = {
.bDeviceClass = 0,
.bDeviceSubClass = 0,
.bDeviceProtocol = 0,
- .bMaxPacketSize0 = 64,
.idVendor = 0xffff,
.idProduct = 0x0001,
.iManufacturer = 0,
@@ -181,6 +180,13 @@ int usb_storage_driver_bind(void* controler_ops)
dev.out->claimed = true;
logf("usb storage: out: %s", dev.out->name);
+ /* update device decsriptor */
+ storage_device_desc.bMaxPacketSize0 = ops->ep0->maxpacket;
+
+ /* update hs descriptors as we asume that endpoints are the same for fs and hs */
+ storage_hs_bulk_in_desc.bEndpointAddress = storage_fs_bulk_in_desc.bEndpointAddress;
+ storage_hs_bulk_out_desc.bEndpointAddress = storage_fs_bulk_out_desc.bEndpointAddress;
+
return 0;
autoconf_fail: