Lines Matching full:udc

3  * udc.c - Core UDC Framework
29 * @list: for use by the udc class driver
32 * @started: the UDC's started state. True if the UDC had started.
34 * This represents the internal data structure which is used by the UDC-class
35 * to hold information about udc driver and gadget together.
51 static int udc_bind_to_driver(struct usb_udc *udc,
61 * This function should be used only in UDC drivers to initialize endpoint
103 /* UDC drivers can't handle endpoints with maxpacket size 0 */ in usb_ep_enable()
269 * UDC are finished with the request. When the completion function is called,
706 * for the current gadget driver so that UDC drivers don't need to.
734 gadget->udc->driver->disconnect(gadget); in usb_gadget_disconnect()
1007 * usb_gadget_check_config - checks if the UDC can support the binded
1011 * Ensure that a UDC is able to support the requested resources by a
1030 struct usb_udc *udc = gadget->udc; in usb_gadget_state_work() local
1032 if (udc) in usb_gadget_state_work()
1033 sysfs_notify(&udc->dev.kobj, NULL, "state"); in usb_gadget_state_work()
1046 static void usb_udc_connect_control(struct usb_udc *udc) in usb_udc_connect_control() argument
1048 if (udc->vbus) in usb_udc_connect_control()
1049 usb_gadget_connect(udc->gadget); in usb_udc_connect_control()
1051 usb_gadget_disconnect(udc->gadget); in usb_udc_connect_control()
1055 * usb_udc_vbus_handler - updates the udc core vbus status, and try to
1060 * The udc driver calls it when it wants to connect or disconnect gadget
1065 struct usb_udc *udc = gadget->udc; in usb_udc_vbus_handler() local
1067 if (udc) { in usb_udc_vbus_handler()
1068 udc->vbus = status; in usb_udc_vbus_handler()
1069 usb_udc_connect_control(udc); in usb_udc_vbus_handler()
1075 * usb_gadget_udc_reset - notifies the udc core that bus reset occurs
1079 * If the udc driver has bus reset handler, it needs to call this when the bus
1093 * @udc: The UDC to be started
1095 * This call is issued by the UDC Class driver when it's about
1104 static inline int usb_gadget_udc_start(struct usb_udc *udc) in usb_gadget_udc_start() argument
1108 if (udc->started) { in usb_gadget_udc_start()
1109 dev_err(&udc->dev, "UDC had already started\n"); in usb_gadget_udc_start()
1113 ret = udc->gadget->ops->udc_start(udc->gadget, udc->driver); in usb_gadget_udc_start()
1115 udc->started = true; in usb_gadget_udc_start()
1122 * @udc: The UDC to be stopped
1124 * This call is issued by the UDC Class driver after calling
1128 * far as powering off UDC completely and disable its data
1131 static inline void usb_gadget_udc_stop(struct usb_udc *udc) in usb_gadget_udc_stop() argument
1133 if (!udc->started) { in usb_gadget_udc_stop()
1134 dev_err(&udc->dev, "UDC had already stopped\n"); in usb_gadget_udc_stop()
1138 udc->gadget->ops->udc_stop(udc->gadget); in usb_gadget_udc_stop()
1139 udc->started = false; in usb_gadget_udc_stop()
1145 * @udc: The device we want to set maximum speed
1148 * This call is issued by the UDC Class driver before calling
1152 static inline void usb_gadget_udc_set_speed(struct usb_udc *udc, in usb_gadget_udc_set_speed() argument
1155 struct usb_gadget *gadget = udc->gadget; in usb_gadget_udc_set_speed()
1171 * @udc: The UDC which should enable async callbacks
1174 * of usb_gadget_disable_async_callbacks(); the UDC driver should enable IRQs
1179 static inline void usb_gadget_enable_async_callbacks(struct usb_udc *udc) in usb_gadget_enable_async_callbacks() argument
1181 struct usb_gadget *gadget = udc->gadget; in usb_gadget_enable_async_callbacks()
1189 * @udc: The UDC which should disable async callbacks
1192 * The UDC driver doesn't know when the gadget driver's ->unbind callback
1196 * After this function runs, the UDC driver must suppress all ->suspend,
1199 * way to accomplish this is to tell the UDC hardware not to generate any
1208 static inline void usb_gadget_disable_async_callbacks(struct usb_udc *udc) in usb_gadget_disable_async_callbacks() argument
1210 struct usb_gadget *gadget = udc->gadget; in usb_gadget_disable_async_callbacks()
1225 struct usb_udc *udc; in usb_udc_release() local
1227 udc = container_of(dev, struct usb_udc, dev); in usb_udc_release()
1229 kfree(udc); in usb_udc_release()
1240 static int check_pending_gadget_drivers(struct usb_udc *udc) in check_pending_gadget_drivers() argument
1247 dev_name(&udc->dev)) == 0) { in check_pending_gadget_drivers()
1248 ret = udc_bind_to_driver(udc, driver); in check_pending_gadget_drivers()
1259 * @parent: the parent device to this udc. Usually the controller driver's
1284 * usb_add_gadget - adds a new gadget to the udc class driver list
1292 struct usb_udc *udc; in usb_add_gadget() local
1295 udc = kzalloc(sizeof(*udc), GFP_KERNEL); in usb_add_gadget()
1296 if (!udc) in usb_add_gadget()
1299 device_initialize(&udc->dev); in usb_add_gadget()
1300 udc->dev.release = usb_udc_release; in usb_add_gadget()
1301 udc->dev.class = udc_class; in usb_add_gadget()
1302 udc->dev.groups = usb_udc_attr_groups; in usb_add_gadget()
1303 udc->dev.parent = gadget->dev.parent; in usb_add_gadget()
1304 ret = dev_set_name(&udc->dev, "%s", in usb_add_gadget()
1313 udc->gadget = gadget; in usb_add_gadget()
1314 gadget->udc = udc; in usb_add_gadget()
1316 udc->started = false; in usb_add_gadget()
1319 list_add_tail(&udc->list, &udc_list); in usb_add_gadget()
1321 ret = device_add(&udc->dev); in usb_add_gadget()
1326 udc->vbus = true; in usb_add_gadget()
1329 ret = check_pending_gadget_drivers(udc); in usb_add_gadget()
1339 device_del(&udc->dev); in usb_add_gadget()
1342 list_del(&udc->list); in usb_add_gadget()
1348 put_device(&udc->dev); in usb_add_gadget()
1356 * usb_add_gadget_udc_release - adds a new gadget to the udc class driver list
1357 * @parent: the parent device to this udc. Usually the controller driver's
1379 * usb_get_gadget_udc_name - get the name of the first UDC controller
1380 * This functions returns the name of the first UDC controller in the system.
1382 * assume that there is only one UDC controller in the system and they need to
1383 * get its name before initialization. There is no guarantee that the UDC
1387 * Returns pointer to string with UDC controller name on success, NULL
1392 struct usb_udc *udc; in usb_get_gadget_udc_name() local
1395 /* For now we take the first available UDC */ in usb_get_gadget_udc_name()
1397 list_for_each_entry(udc, &udc_list, list) { in usb_get_gadget_udc_name()
1398 if (!udc->driver) { in usb_get_gadget_udc_name()
1399 name = kstrdup(udc->gadget->name, GFP_KERNEL); in usb_get_gadget_udc_name()
1409 * usb_add_gadget_udc - adds a new gadget to the udc class driver list
1410 * @parent: the parent device to this udc. Usually the controller
1422 static void usb_gadget_remove_driver(struct usb_udc *udc) in usb_gadget_remove_driver() argument
1424 dev_dbg(&udc->dev, "unregistering UDC driver [%s]\n", in usb_gadget_remove_driver()
1425 udc->driver->function); in usb_gadget_remove_driver()
1427 kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE); in usb_gadget_remove_driver()
1429 usb_gadget_disconnect(udc->gadget); in usb_gadget_remove_driver()
1430 usb_gadget_disable_async_callbacks(udc); in usb_gadget_remove_driver()
1431 if (udc->gadget->irq) in usb_gadget_remove_driver()
1432 synchronize_irq(udc->gadget->irq); in usb_gadget_remove_driver()
1433 udc->driver->unbind(udc->gadget); in usb_gadget_remove_driver()
1434 usb_gadget_udc_stop(udc); in usb_gadget_remove_driver()
1436 udc->driver = NULL; in usb_gadget_remove_driver()
1437 udc->dev.driver = NULL; in usb_gadget_remove_driver()
1438 udc->gadget->dev.driver = NULL; in usb_gadget_remove_driver()
1442 * usb_del_gadget - deletes @udc from udc_list
1446 * the @udc is still busy.
1451 struct usb_udc *udc = gadget->udc; in usb_del_gadget() local
1453 if (!udc) in usb_del_gadget()
1459 list_del(&udc->list); in usb_del_gadget()
1461 if (udc->driver) { in usb_del_gadget()
1462 struct usb_gadget_driver *driver = udc->driver; in usb_del_gadget()
1464 usb_gadget_remove_driver(udc); in usb_del_gadget()
1469 kobject_uevent(&udc->dev.kobj, KOBJ_REMOVE); in usb_del_gadget()
1471 device_unregister(&udc->dev); in usb_del_gadget()
1477 * usb_del_gadget_udc - deletes @udc from udc_list
1491 static int udc_bind_to_driver(struct usb_udc *udc, struct usb_gadget_driver *driver) in udc_bind_to_driver() argument
1495 dev_dbg(&udc->dev, "registering UDC driver [%s]\n", in udc_bind_to_driver()
1498 udc->driver = driver; in udc_bind_to_driver()
1499 udc->dev.driver = &driver->driver; in udc_bind_to_driver()
1500 udc->gadget->dev.driver = &driver->driver; in udc_bind_to_driver()
1502 usb_gadget_udc_set_speed(udc, driver->max_speed); in udc_bind_to_driver()
1504 ret = driver->bind(udc->gadget, driver); in udc_bind_to_driver()
1507 ret = usb_gadget_udc_start(udc); in udc_bind_to_driver()
1509 driver->unbind(udc->gadget); in udc_bind_to_driver()
1512 usb_gadget_enable_async_callbacks(udc); in udc_bind_to_driver()
1513 usb_udc_connect_control(udc); in udc_bind_to_driver()
1515 kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE); in udc_bind_to_driver()
1519 dev_err(&udc->dev, "failed to start %s: %d\n", in udc_bind_to_driver()
1520 udc->driver->function, ret); in udc_bind_to_driver()
1521 udc->driver = NULL; in udc_bind_to_driver()
1522 udc->dev.driver = NULL; in udc_bind_to_driver()
1523 udc->gadget->dev.driver = NULL; in udc_bind_to_driver()
1529 struct usb_udc *udc = NULL; in usb_gadget_probe_driver() local
1537 list_for_each_entry(udc, &udc_list, list) { in usb_gadget_probe_driver()
1538 ret = strcmp(driver->udc_name, dev_name(&udc->dev)); in usb_gadget_probe_driver()
1544 else if (udc->driver) in usb_gadget_probe_driver()
1549 list_for_each_entry(udc, &udc_list, list) { in usb_gadget_probe_driver()
1551 if (!udc->driver) in usb_gadget_probe_driver()
1558 pr_info("udc-core: couldn't find an available UDC - added [%s] to list of pending drivers\n", in usb_gadget_probe_driver()
1565 pr_warn("udc-core: couldn't find an available UDC or it's busy\n"); in usb_gadget_probe_driver()
1568 ret = udc_bind_to_driver(udc, driver); in usb_gadget_probe_driver()
1576 struct usb_udc *udc = NULL; in usb_gadget_unregister_driver() local
1583 list_for_each_entry(udc, &udc_list, list) { in usb_gadget_unregister_driver()
1584 if (udc->driver == driver) { in usb_gadget_unregister_driver()
1585 usb_gadget_remove_driver(udc); in usb_gadget_unregister_driver()
1586 usb_gadget_set_state(udc->gadget, in usb_gadget_unregister_driver()
1589 /* Maybe there is someone waiting for this UDC? */ in usb_gadget_unregister_driver()
1590 check_pending_gadget_drivers(udc); in usb_gadget_unregister_driver()
1614 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); in srp_store() local
1617 usb_gadget_wakeup(udc->gadget); in srp_store()
1626 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); in soft_connect_store() local
1630 if (!udc->driver) { in soft_connect_store()
1637 usb_gadget_udc_start(udc); in soft_connect_store()
1638 usb_gadget_connect(udc->gadget); in soft_connect_store()
1640 usb_gadget_disconnect(udc->gadget); in soft_connect_store()
1641 usb_gadget_udc_stop(udc); in soft_connect_store()
1658 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); in state_show() local
1659 struct usb_gadget *gadget = udc->gadget; in state_show()
1668 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); in function_show() local
1669 struct usb_gadget_driver *drv = udc->driver; in function_show()
1681 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); \
1683 usb_speed_string(udc->gadget->param)); \
1694 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); \
1695 struct usb_gadget *gadget = udc->gadget; \
1736 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); in usb_udc_uevent() local
1739 ret = add_uevent_var(env, "USB_UDC_NAME=%s", udc->gadget->name); in usb_udc_uevent()
1745 if (udc->driver) { in usb_udc_uevent()
1747 udc->driver->function); in usb_udc_uevent()
1759 udc_class = class_create(THIS_MODULE, "udc"); in usb_udc_init()
1761 pr_err("failed to create udc class --> %ld\n", in usb_udc_init()
1777 MODULE_DESCRIPTION("UDC Framework");