Commit fe2a4297 authored by Felipe Balbi's avatar Felipe Balbi

usb: gadget: pxa27x: fix gadget->dev registration

Whenever ->udc_start() gets called, gadget driver
has already being bound to the udc controller, which
means that gadget->dev had to be already initialized
and added to driver model.

This patch fixes pxa27x mistake.
Tested-by: default avatarRobert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 2b7dc3b1
...@@ -1814,11 +1814,6 @@ static int pxa27x_udc_start(struct usb_gadget *g, ...@@ -1814,11 +1814,6 @@ static int pxa27x_udc_start(struct usb_gadget *g,
udc->gadget.dev.driver = &driver->driver; udc->gadget.dev.driver = &driver->driver;
dplus_pullup(udc, 1); dplus_pullup(udc, 1);
retval = device_add(&udc->gadget.dev);
if (retval) {
dev_err(udc->dev, "device_add error %d\n", retval);
goto fail;
}
if (!IS_ERR_OR_NULL(udc->transceiver)) { if (!IS_ERR_OR_NULL(udc->transceiver)) {
retval = otg_set_peripheral(udc->transceiver->otg, retval = otg_set_peripheral(udc->transceiver->otg,
&udc->gadget); &udc->gadget);
...@@ -1876,7 +1871,6 @@ static int pxa27x_udc_stop(struct usb_gadget *g, ...@@ -1876,7 +1871,6 @@ static int pxa27x_udc_stop(struct usb_gadget *g,
udc->driver = NULL; udc->driver = NULL;
device_del(&udc->gadget.dev);
if (!IS_ERR_OR_NULL(udc->transceiver)) if (!IS_ERR_OR_NULL(udc->transceiver))
return otg_set_peripheral(udc->transceiver->otg, NULL); return otg_set_peripheral(udc->transceiver->otg, NULL);
...@@ -2480,13 +2474,24 @@ static int __init pxa_udc_probe(struct platform_device *pdev) ...@@ -2480,13 +2474,24 @@ static int __init pxa_udc_probe(struct platform_device *pdev)
driver_name, udc->irq, retval); driver_name, udc->irq, retval);
goto err_irq; goto err_irq;
} }
retval = device_add(&udc->gadget.dev);
if (retval) {
dev_err(udc->dev, "device_add error %d\n", retval);
goto err_dev_add;
}
retval = usb_add_gadget_udc(&pdev->dev, &udc->gadget); retval = usb_add_gadget_udc(&pdev->dev, &udc->gadget);
if (retval) if (retval)
goto err_add_udc; goto err_add_udc;
pxa_init_debugfs(udc); pxa_init_debugfs(udc);
return 0; return 0;
err_add_udc: err_add_udc:
device_unregister(&udc->gadget.dev);
err_dev_add:
free_irq(udc->irq, udc); free_irq(udc->irq, udc);
err_irq: err_irq:
iounmap(udc->regs); iounmap(udc->regs);
...@@ -2507,6 +2512,7 @@ static int __exit pxa_udc_remove(struct platform_device *_dev) ...@@ -2507,6 +2512,7 @@ static int __exit pxa_udc_remove(struct platform_device *_dev)
int gpio = udc->mach->gpio_pullup; int gpio = udc->mach->gpio_pullup;
usb_del_gadget_udc(&udc->gadget); usb_del_gadget_udc(&udc->gadget);
device_del(&udc->gadget.dev);
usb_gadget_unregister_driver(udc->driver); usb_gadget_unregister_driver(udc->driver);
free_irq(udc->irq, udc); free_irq(udc->irq, udc);
pxa_cleanup_debugfs(udc); pxa_cleanup_debugfs(udc);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment