From 17f2dd5c13cda7447da74227099b852ee55e1dd6 Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Wed, 29 Aug 2007 10:14:47 +0000 Subject: 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 --- firmware/drivers/usb/arcotg_dcd.c | 4 ---- firmware/usbstack/core/epsetup.c | 8 +++++++- firmware/usbstack/drivers/device/usb_serial.c | 4 ++++ firmware/usbstack/drivers/device/usb_storage.c | 8 +++++++- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/firmware/drivers/usb/arcotg_dcd.c b/firmware/drivers/usb/arcotg_dcd.c index d57850f067..b1cb24d9ef 100644 --- a/firmware/drivers/usb/arcotg_dcd.c +++ b/firmware/drivers/usb/arcotg_dcd.c @@ -613,10 +613,6 @@ int usb_arcotg_dcd_enable(struct usb_ep* ep, + } #endif - /* set address of used ep in desc */ - logf("ep address %x", desc->bEndpointAddress); - desc->bEndpointAddress |= ep->ep_num; - /* here initialize variable of ep */ ep->maxpacket = max; ep->desc = desc; diff --git a/firmware/usbstack/core/epsetup.c b/firmware/usbstack/core/epsetup.c index 702108a1cb..8581544e0f 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 9f1778a3f2..578e9a1e2d 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 4f820fbe90..88129cdc96 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: -- cgit v1.2.3