diff options
Diffstat (limited to 'drivers/usb/gadget/dbgp.c')
-rw-r--r-- | drivers/usb/gadget/dbgp.c | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/drivers/usb/gadget/dbgp.c b/drivers/usb/gadget/dbgp.c index 0ed50a2c0a36..dbe92ee88477 100644 --- a/drivers/usb/gadget/dbgp.c +++ b/drivers/usb/gadget/dbgp.c | |||
@@ -261,8 +261,8 @@ static int __init dbgp_configure_endpoints(struct usb_gadget *gadget) | |||
261 | o_desc.wMaxPacketSize = | 261 | o_desc.wMaxPacketSize = |
262 | __constant_cpu_to_le16(USB_DEBUG_MAX_PACKET_SIZE); | 262 | __constant_cpu_to_le16(USB_DEBUG_MAX_PACKET_SIZE); |
263 | 263 | ||
264 | dbg_desc.bDebugInEndpoint = i_desc.bEndpointAddress & 0x7f; | 264 | dbg_desc.bDebugInEndpoint = i_desc.bEndpointAddress; |
265 | dbg_desc.bDebugOutEndpoint = o_desc.bEndpointAddress & 0x7f; | 265 | dbg_desc.bDebugOutEndpoint = o_desc.bEndpointAddress; |
266 | 266 | ||
267 | #ifdef CONFIG_USB_G_DBGP_SERIAL | 267 | #ifdef CONFIG_USB_G_DBGP_SERIAL |
268 | dbgp.serial->in = dbgp.i_ep; | 268 | dbgp.serial->in = dbgp.i_ep; |
@@ -312,6 +312,7 @@ static int __init dbgp_bind(struct usb_gadget *gadget) | |||
312 | 312 | ||
313 | dbgp.req->length = DBGP_REQ_EP0_LEN; | 313 | dbgp.req->length = DBGP_REQ_EP0_LEN; |
314 | gadget->ep0->driver_data = gadget; | 314 | gadget->ep0->driver_data = gadget; |
315 | device_desc.bMaxPacketSize0 = gadget->ep0->maxpacket; | ||
315 | 316 | ||
316 | #ifdef CONFIG_USB_G_DBGP_SERIAL | 317 | #ifdef CONFIG_USB_G_DBGP_SERIAL |
317 | dbgp.serial = kzalloc(sizeof(struct gserial), GFP_KERNEL); | 318 | dbgp.serial = kzalloc(sizeof(struct gserial), GFP_KERNEL); |
@@ -350,9 +351,9 @@ static int dbgp_setup(struct usb_gadget *gadget, | |||
350 | u8 request = ctrl->bRequest; | 351 | u8 request = ctrl->bRequest; |
351 | u16 value = le16_to_cpu(ctrl->wValue); | 352 | u16 value = le16_to_cpu(ctrl->wValue); |
352 | u16 length = le16_to_cpu(ctrl->wLength); | 353 | u16 length = le16_to_cpu(ctrl->wLength); |
353 | int err = 0; | 354 | int err = -EOPNOTSUPP; |
354 | void *data; | 355 | void *data = NULL; |
355 | u16 len; | 356 | u16 len = 0; |
356 | 357 | ||
357 | gadget->ep0->driver_data = gadget; | 358 | gadget->ep0->driver_data = gadget; |
358 | 359 | ||
@@ -371,10 +372,9 @@ static int dbgp_setup(struct usb_gadget *gadget, | |||
371 | default: | 372 | default: |
372 | goto fail; | 373 | goto fail; |
373 | } | 374 | } |
375 | err = 0; | ||
374 | } else if (request == USB_REQ_SET_FEATURE && | 376 | } else if (request == USB_REQ_SET_FEATURE && |
375 | value == USB_DEVICE_DEBUG_MODE) { | 377 | value == USB_DEVICE_DEBUG_MODE) { |
376 | len = 0; | ||
377 | data = NULL; | ||
378 | dev_dbg(&dbgp.gadget->dev, "setup: feat debug\n"); | 378 | dev_dbg(&dbgp.gadget->dev, "setup: feat debug\n"); |
379 | #ifdef CONFIG_USB_G_DBGP_PRINTK | 379 | #ifdef CONFIG_USB_G_DBGP_PRINTK |
380 | err = dbgp_enable_ep(); | 380 | err = dbgp_enable_ep(); |
@@ -386,15 +386,13 @@ static int dbgp_setup(struct usb_gadget *gadget, | |||
386 | } else | 386 | } else |
387 | goto fail; | 387 | goto fail; |
388 | 388 | ||
389 | if (len >= 0) { | 389 | req->length = min(length, len); |
390 | req->length = min(length, len); | 390 | req->zero = len < req->length; |
391 | req->zero = len < req->length; | 391 | if (data && req->length) |
392 | if (data && req->length) | 392 | memcpy(req->buf, data, req->length); |
393 | memcpy(req->buf, data, req->length); | ||
394 | 393 | ||
395 | req->complete = dbgp_setup_complete; | 394 | req->complete = dbgp_setup_complete; |
396 | return usb_ep_queue(gadget->ep0, req, GFP_ATOMIC); | 395 | return usb_ep_queue(gadget->ep0, req, GFP_ATOMIC); |
397 | } | ||
398 | 396 | ||
399 | fail: | 397 | fail: |
400 | dev_dbg(&dbgp.gadget->dev, | 398 | dev_dbg(&dbgp.gadget->dev, |
@@ -405,7 +403,6 @@ fail: | |||
405 | static struct usb_gadget_driver dbgp_driver = { | 403 | static struct usb_gadget_driver dbgp_driver = { |
406 | .function = "dbgp", | 404 | .function = "dbgp", |
407 | .speed = USB_SPEED_HIGH, | 405 | .speed = USB_SPEED_HIGH, |
408 | .bind = dbgp_bind, | ||
409 | .unbind = dbgp_unbind, | 406 | .unbind = dbgp_unbind, |
410 | .setup = dbgp_setup, | 407 | .setup = dbgp_setup, |
411 | .disconnect = dbgp_disconnect, | 408 | .disconnect = dbgp_disconnect, |
@@ -417,7 +414,7 @@ static struct usb_gadget_driver dbgp_driver = { | |||
417 | 414 | ||
418 | static int __init dbgp_init(void) | 415 | static int __init dbgp_init(void) |
419 | { | 416 | { |
420 | return usb_gadget_register_driver(&dbgp_driver); | 417 | return usb_gadget_probe_driver(&dbgp_driver, dbgp_bind); |
421 | } | 418 | } |
422 | 419 | ||
423 | static void __exit dbgp_exit(void) | 420 | static void __exit dbgp_exit(void) |