aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/udc/udc-core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/gadget/udc/udc-core.c')
-rw-r--r--drivers/usb/gadget/udc/udc-core.c28
1 files changed, 13 insertions, 15 deletions
diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c
index f2054659f25b..e31d574d8860 100644
--- a/drivers/usb/gadget/udc/udc-core.c
+++ b/drivers/usb/gadget/udc/udc-core.c
@@ -174,8 +174,7 @@ EXPORT_SYMBOL_GPL(usb_gadget_udc_reset);
174 174
175/** 175/**
176 * usb_gadget_udc_start - tells usb device controller to start up 176 * usb_gadget_udc_start - tells usb device controller to start up
177 * @gadget: The gadget we want to get started 177 * @udc: The UDC to be started
178 * @driver: The driver we want to bind to @gadget
179 * 178 *
180 * This call is issued by the UDC Class driver when it's about 179 * This call is issued by the UDC Class driver when it's about
181 * to register a gadget driver to the device controller, before 180 * to register a gadget driver to the device controller, before
@@ -186,10 +185,9 @@ EXPORT_SYMBOL_GPL(usb_gadget_udc_reset);
186 * 185 *
187 * Returns zero on success, else negative errno. 186 * Returns zero on success, else negative errno.
188 */ 187 */
189static inline int usb_gadget_udc_start(struct usb_gadget *gadget, 188static inline int usb_gadget_udc_start(struct usb_udc *udc)
190 struct usb_gadget_driver *driver)
191{ 189{
192 return gadget->ops->udc_start(gadget, driver); 190 return udc->gadget->ops->udc_start(udc->gadget, udc->driver);
193} 191}
194 192
195/** 193/**
@@ -204,10 +202,9 @@ static inline int usb_gadget_udc_start(struct usb_gadget *gadget,
204 * far as powering off UDC completely and disable its data 202 * far as powering off UDC completely and disable its data
205 * line pullups. 203 * line pullups.
206 */ 204 */
207static inline void usb_gadget_udc_stop(struct usb_gadget *gadget, 205static inline void usb_gadget_udc_stop(struct usb_udc *udc)
208 struct usb_gadget_driver *driver)
209{ 206{
210 gadget->ops->udc_stop(gadget, driver); 207 udc->gadget->ops->udc_stop(udc->gadget);
211} 208}
212 209
213/** 210/**
@@ -328,14 +325,14 @@ EXPORT_SYMBOL_GPL(usb_add_gadget_udc);
328static void usb_gadget_remove_driver(struct usb_udc *udc) 325static void usb_gadget_remove_driver(struct usb_udc *udc)
329{ 326{
330 dev_dbg(&udc->dev, "unregistering UDC driver [%s]\n", 327 dev_dbg(&udc->dev, "unregistering UDC driver [%s]\n",
331 udc->gadget->name); 328 udc->driver->function);
332 329
333 kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE); 330 kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
334 331
335 usb_gadget_disconnect(udc->gadget); 332 usb_gadget_disconnect(udc->gadget);
336 udc->driver->disconnect(udc->gadget); 333 udc->driver->disconnect(udc->gadget);
337 udc->driver->unbind(udc->gadget); 334 udc->driver->unbind(udc->gadget);
338 usb_gadget_udc_stop(udc->gadget, NULL); 335 usb_gadget_udc_stop(udc);
339 336
340 udc->driver = NULL; 337 udc->driver = NULL;
341 udc->dev.driver = NULL; 338 udc->dev.driver = NULL;
@@ -395,7 +392,7 @@ static int udc_bind_to_driver(struct usb_udc *udc, struct usb_gadget_driver *dri
395 ret = driver->bind(udc->gadget, driver); 392 ret = driver->bind(udc->gadget, driver);
396 if (ret) 393 if (ret)
397 goto err1; 394 goto err1;
398 ret = usb_gadget_udc_start(udc->gadget, driver); 395 ret = usb_gadget_udc_start(udc);
399 if (ret) { 396 if (ret) {
400 driver->unbind(udc->gadget); 397 driver->unbind(udc->gadget);
401 goto err1; 398 goto err1;
@@ -414,7 +411,7 @@ err1:
414 return ret; 411 return ret;
415} 412}
416 413
417int udc_attach_driver(const char *name, struct usb_gadget_driver *driver) 414int usb_udc_attach_driver(const char *name, struct usb_gadget_driver *driver)
418{ 415{
419 struct usb_udc *udc = NULL; 416 struct usb_udc *udc = NULL;
420 int ret = -ENODEV; 417 int ret = -ENODEV;
@@ -438,7 +435,7 @@ out:
438 mutex_unlock(&udc_lock); 435 mutex_unlock(&udc_lock);
439 return ret; 436 return ret;
440} 437}
441EXPORT_SYMBOL_GPL(udc_attach_driver); 438EXPORT_SYMBOL_GPL(usb_udc_attach_driver);
442 439
443int usb_gadget_probe_driver(struct usb_gadget_driver *driver) 440int usb_gadget_probe_driver(struct usb_gadget_driver *driver)
444{ 441{
@@ -513,11 +510,12 @@ static ssize_t usb_udc_softconn_store(struct device *dev,
513 } 510 }
514 511
515 if (sysfs_streq(buf, "connect")) { 512 if (sysfs_streq(buf, "connect")) {
516 usb_gadget_udc_start(udc->gadget, udc->driver); 513 usb_gadget_udc_start(udc);
517 usb_gadget_connect(udc->gadget); 514 usb_gadget_connect(udc->gadget);
518 } else if (sysfs_streq(buf, "disconnect")) { 515 } else if (sysfs_streq(buf, "disconnect")) {
519 usb_gadget_disconnect(udc->gadget); 516 usb_gadget_disconnect(udc->gadget);
520 usb_gadget_udc_stop(udc->gadget, udc->driver); 517 udc->driver->disconnect(udc->gadget);
518 usb_gadget_udc_stop(udc);
521 } else { 519 } else {
522 dev_err(dev, "unsupported command '%s'\n", buf); 520 dev_err(dev, "unsupported command '%s'\n", buf);
523 return -EINVAL; 521 return -EINVAL;