| .. | .. |
|---|
| 982 | 982 | { |
|---|
| 983 | 983 | struct device *parent_dev = hcd->self.controller; |
|---|
| 984 | 984 | struct usb_device *usb_dev = hcd->self.root_hub; |
|---|
| 985 | + struct usb_device_descriptor *descr; |
|---|
| 985 | 986 | const int devnum = 1; |
|---|
| 986 | 987 | int retval; |
|---|
| 987 | 988 | |
|---|
| .. | .. |
|---|
| 993 | 994 | mutex_lock(&usb_bus_idr_lock); |
|---|
| 994 | 995 | |
|---|
| 995 | 996 | usb_dev->ep0.desc.wMaxPacketSize = cpu_to_le16(64); |
|---|
| 996 | | - retval = usb_get_device_descriptor(usb_dev, USB_DT_DEVICE_SIZE); |
|---|
| 997 | | - if (retval != sizeof usb_dev->descriptor) { |
|---|
| 997 | + descr = usb_get_device_descriptor(usb_dev); |
|---|
| 998 | + if (IS_ERR(descr)) { |
|---|
| 999 | + retval = PTR_ERR(descr); |
|---|
| 998 | 1000 | mutex_unlock(&usb_bus_idr_lock); |
|---|
| 999 | 1001 | dev_dbg (parent_dev, "can't read %s device descriptor %d\n", |
|---|
| 1000 | 1002 | dev_name(&usb_dev->dev), retval); |
|---|
| 1001 | | - return (retval < 0) ? retval : -EMSGSIZE; |
|---|
| 1003 | + return retval; |
|---|
| 1002 | 1004 | } |
|---|
| 1005 | + usb_dev->descriptor = *descr; |
|---|
| 1006 | + kfree(descr); |
|---|
| 1003 | 1007 | |
|---|
| 1004 | 1008 | if (le16_to_cpu(usb_dev->descriptor.bcdUSB) >= 0x0201) { |
|---|
| 1005 | 1009 | retval = usb_get_bos_descriptor(usb_dev); |
|---|