Lines Matching full:udc
3 * udc.c - Core UDC Framework
9 #define pr_fmt(fmt) "UDC core: " fmt
36 * @list: for use by the udc class driver
39 * @started: the UDC's started state. True if the UDC had started.
40 * @allow_connect: Indicates whether UDC is allowed to be pulled up.
44 * @connect_lock: protects udc->started, gadget->connect,
50 * This represents the internal data structure which is used by the UDC-class
51 * to hold information about udc driver and gadget together.
68 /* Protects udc_list, udc->driver, driver->is_bound, and related calls */
78 * This function should be used only in UDC drivers to initialize endpoint
120 /* UDC drivers can't handle endpoints with maxpacket size 0 */ in usb_ep_enable()
286 * UDC are finished with the request. When the completion function is called,
703 __must_hold(&gadget->udc->connect_lock) in usb_gadget_connect_locked()
712 if (gadget->deactivated || !gadget->udc->allow_connect || !gadget->udc->started) { in usb_gadget_connect_locked()
747 mutex_lock(&gadget->udc->connect_lock); in usb_gadget_connect()
749 mutex_unlock(&gadget->udc->connect_lock); in usb_gadget_connect()
756 __must_hold(&gadget->udc->connect_lock) in usb_gadget_disconnect_locked()
768 if (gadget->deactivated || !gadget->udc->started) { in usb_gadget_disconnect_locked()
782 if (gadget->udc->driver) in usb_gadget_disconnect_locked()
783 gadget->udc->driver->disconnect(gadget); in usb_gadget_disconnect_locked()
801 * for the current gadget driver so that UDC drivers don't need to.
809 mutex_lock(&gadget->udc->connect_lock); in usb_gadget_disconnect()
811 mutex_unlock(&gadget->udc->connect_lock); in usb_gadget_disconnect()
835 mutex_lock(&gadget->udc->connect_lock); in usb_gadget_deactivate()
853 mutex_unlock(&gadget->udc->connect_lock); in usb_gadget_deactivate()
875 mutex_lock(&gadget->udc->connect_lock); in usb_gadget_activate()
889 mutex_unlock(&gadget->udc->connect_lock); in usb_gadget_activate()
1089 * usb_gadget_check_config - checks if the UDC can support the binded
1093 * Ensure that a UDC is able to support the requested resources by a
1112 struct usb_udc *udc = gadget->udc; in usb_gadget_state_work() local
1114 if (udc) in usb_gadget_state_work()
1115 sysfs_notify(&udc->dev.kobj, NULL, "state"); in usb_gadget_state_work()
1129 static int usb_udc_connect_control_locked(struct usb_udc *udc) __must_hold(&udc->connect_lock) in usb_udc_connect_control_locked() argument
1131 if (udc->vbus) in usb_udc_connect_control_locked()
1132 return usb_gadget_connect_locked(udc->gadget); in usb_udc_connect_control_locked()
1134 return usb_gadget_disconnect_locked(udc->gadget); in usb_udc_connect_control_locked()
1139 struct usb_udc *udc = container_of(work, struct usb_udc, vbus_work); in vbus_event_work() local
1141 mutex_lock(&udc->connect_lock); in vbus_event_work()
1142 usb_udc_connect_control_locked(udc); in vbus_event_work()
1143 mutex_unlock(&udc->connect_lock); in vbus_event_work()
1147 * usb_udc_vbus_handler - updates the udc core vbus status, and try to
1152 * The udc driver calls it when it wants to connect or disconnect gadget
1165 struct usb_udc *udc = gadget->udc; in usb_udc_vbus_handler() local
1167 if (udc) { in usb_udc_vbus_handler()
1168 udc->vbus = status; in usb_udc_vbus_handler()
1169 schedule_work(&udc->vbus_work); in usb_udc_vbus_handler()
1175 * usb_gadget_udc_reset - notifies the udc core that bus reset occurs
1179 * If the udc driver has bus reset handler, it needs to call this when the bus
1193 * @udc: The UDC to be started
1195 * This call is issued by the UDC Class driver when it's about
1206 static inline int usb_gadget_udc_start_locked(struct usb_udc *udc) in usb_gadget_udc_start_locked() argument
1207 __must_hold(&udc->connect_lock) in usb_gadget_udc_start_locked()
1211 if (udc->started) { in usb_gadget_udc_start_locked()
1212 dev_err(&udc->dev, "UDC had already started\n"); in usb_gadget_udc_start_locked()
1216 ret = udc->gadget->ops->udc_start(udc->gadget, udc->driver); in usb_gadget_udc_start_locked()
1218 udc->started = true; in usb_gadget_udc_start_locked()
1225 * @udc: The UDC to be stopped
1227 * This call is issued by the UDC Class driver after calling
1231 * far as powering off UDC completely and disable its data
1236 static inline void usb_gadget_udc_stop_locked(struct usb_udc *udc) in usb_gadget_udc_stop_locked() argument
1237 __must_hold(&udc->connect_lock) in usb_gadget_udc_stop_locked()
1239 if (!udc->started) { in usb_gadget_udc_stop_locked()
1240 dev_err(&udc->dev, "UDC had already stopped\n"); in usb_gadget_udc_stop_locked()
1244 udc->gadget->ops->udc_stop(udc->gadget); in usb_gadget_udc_stop_locked()
1245 udc->started = false; in usb_gadget_udc_stop_locked()
1251 * @udc: The device we want to set maximum speed
1254 * This call is issued by the UDC Class driver before calling
1258 static inline void usb_gadget_udc_set_speed(struct usb_udc *udc, in usb_gadget_udc_set_speed() argument
1261 struct usb_gadget *gadget = udc->gadget; in usb_gadget_udc_set_speed()
1277 * @udc: The UDC which should enable async callbacks
1280 * of usb_gadget_disable_async_callbacks(); the UDC driver should enable IRQs
1285 static inline void usb_gadget_enable_async_callbacks(struct usb_udc *udc) in usb_gadget_enable_async_callbacks() argument
1287 struct usb_gadget *gadget = udc->gadget; in usb_gadget_enable_async_callbacks()
1295 * @udc: The UDC which should disable async callbacks
1298 * The UDC driver doesn't know when the gadget driver's ->unbind callback
1302 * After this function runs, the UDC driver must suppress all ->suspend,
1305 * way to accomplish this is to tell the UDC hardware not to generate any
1314 static inline void usb_gadget_disable_async_callbacks(struct usb_udc *udc) in usb_gadget_disable_async_callbacks() argument
1316 struct usb_gadget *gadget = udc->gadget; in usb_gadget_disable_async_callbacks()
1331 struct usb_udc *udc; in usb_udc_release() local
1333 udc = container_of(dev, struct usb_udc, dev); in usb_udc_release()
1335 kfree(udc); in usb_udc_release()
1347 * @parent: the parent device to this udc. Usually the controller driver's
1369 * usb_add_gadget - adds a new gadget to the udc class driver list
1377 struct usb_udc *udc; in usb_add_gadget() local
1380 udc = kzalloc(sizeof(*udc), GFP_KERNEL); in usb_add_gadget()
1381 if (!udc) in usb_add_gadget()
1384 device_initialize(&udc->dev); in usb_add_gadget()
1385 udc->dev.release = usb_udc_release; in usb_add_gadget()
1386 udc->dev.class = &udc_class; in usb_add_gadget()
1387 udc->dev.groups = usb_udc_attr_groups; in usb_add_gadget()
1388 udc->dev.parent = gadget->dev.parent; in usb_add_gadget()
1389 ret = dev_set_name(&udc->dev, "%s", in usb_add_gadget()
1394 udc->gadget = gadget; in usb_add_gadget()
1395 gadget->udc = udc; in usb_add_gadget()
1396 mutex_init(&udc->connect_lock); in usb_add_gadget()
1398 udc->started = false; in usb_add_gadget()
1401 list_add_tail(&udc->list, &udc_list); in usb_add_gadget()
1403 INIT_WORK(&udc->vbus_work, vbus_event_work); in usb_add_gadget()
1405 ret = device_add(&udc->dev); in usb_add_gadget()
1410 udc->vbus = true; in usb_add_gadget()
1429 device_del(&udc->dev); in usb_add_gadget()
1433 list_del(&udc->list); in usb_add_gadget()
1437 put_device(&udc->dev); in usb_add_gadget()
1445 * usb_add_gadget_udc_release - adds a new gadget to the udc class driver list
1446 * @parent: the parent device to this udc. Usually the controller driver's
1468 * usb_get_gadget_udc_name - get the name of the first UDC controller
1469 * This functions returns the name of the first UDC controller in the system.
1471 * assume that there is only one UDC controller in the system and they need to
1472 * get its name before initialization. There is no guarantee that the UDC
1476 * Returns pointer to string with UDC controller name on success, NULL
1481 struct usb_udc *udc; in usb_get_gadget_udc_name() local
1484 /* For now we take the first available UDC */ in usb_get_gadget_udc_name()
1486 list_for_each_entry(udc, &udc_list, list) { in usb_get_gadget_udc_name()
1487 if (!udc->driver) { in usb_get_gadget_udc_name()
1488 name = kstrdup(udc->gadget->name, GFP_KERNEL); in usb_get_gadget_udc_name()
1498 * usb_add_gadget_udc - adds a new gadget to the udc class driver list
1499 * @parent: the parent device to this udc. Usually the controller
1512 * usb_del_gadget - deletes a gadget and unregisters its udc
1520 struct usb_udc *udc = gadget->udc; in usb_del_gadget() local
1522 if (!udc) in usb_del_gadget()
1528 list_del(&udc->list); in usb_del_gadget()
1531 kobject_uevent(&udc->dev.kobj, KOBJ_REMOVE); in usb_del_gadget()
1535 cancel_work_sync(&udc->vbus_work); in usb_del_gadget()
1536 device_unregister(&udc->dev); in usb_del_gadget()
1558 struct usb_udc *udc = gadget->udc; in gadget_match_driver() local
1562 /* If the driver specifies a udc_name, it must match the UDC's name */ in gadget_match_driver()
1564 strcmp(driver->udc_name, dev_name(&udc->dev)) != 0) in gadget_match_driver()
1571 /* Otherwise any gadget driver matches any UDC */ in gadget_match_driver()
1578 struct usb_udc *udc = gadget->udc; in gadget_bind_driver() local
1589 udc->driver = driver; in gadget_bind_driver()
1592 dev_dbg(&udc->dev, "binding gadget driver [%s]\n", driver->function); in gadget_bind_driver()
1594 usb_gadget_udc_set_speed(udc, driver->max_speed); in gadget_bind_driver()
1596 ret = driver->bind(udc->gadget, driver); in gadget_bind_driver()
1600 mutex_lock(&udc->connect_lock); in gadget_bind_driver()
1601 ret = usb_gadget_udc_start_locked(udc); in gadget_bind_driver()
1603 mutex_unlock(&udc->connect_lock); in gadget_bind_driver()
1606 usb_gadget_enable_async_callbacks(udc); in gadget_bind_driver()
1607 udc->allow_connect = true; in gadget_bind_driver()
1608 ret = usb_udc_connect_control_locked(udc); in gadget_bind_driver()
1612 mutex_unlock(&udc->connect_lock); in gadget_bind_driver()
1614 kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE); in gadget_bind_driver()
1618 udc->allow_connect = false; in gadget_bind_driver()
1619 usb_gadget_disable_async_callbacks(udc); in gadget_bind_driver()
1622 usb_gadget_udc_stop_locked(udc); in gadget_bind_driver()
1623 mutex_unlock(&udc->connect_lock); in gadget_bind_driver()
1626 driver->unbind(udc->gadget); in gadget_bind_driver()
1630 dev_err(&udc->dev, "failed to start %s: %d\n", in gadget_bind_driver()
1634 udc->driver = NULL; in gadget_bind_driver()
1644 struct usb_udc *udc = gadget->udc; in gadget_unbind_driver() local
1645 struct usb_gadget_driver *driver = udc->driver; in gadget_unbind_driver()
1647 dev_dbg(&udc->dev, "unbinding gadget driver [%s]\n", driver->function); in gadget_unbind_driver()
1649 udc->allow_connect = false; in gadget_unbind_driver()
1650 cancel_work_sync(&udc->vbus_work); in gadget_unbind_driver()
1651 mutex_lock(&udc->connect_lock); in gadget_unbind_driver()
1653 usb_gadget_disable_async_callbacks(udc); in gadget_unbind_driver()
1656 mutex_unlock(&udc->connect_lock); in gadget_unbind_driver()
1658 udc->driver->unbind(gadget); in gadget_unbind_driver()
1660 mutex_lock(&udc->connect_lock); in gadget_unbind_driver()
1661 usb_gadget_udc_stop_locked(udc); in gadget_unbind_driver()
1662 mutex_unlock(&udc->connect_lock); in gadget_unbind_driver()
1666 udc->driver = NULL; in gadget_unbind_driver()
1669 kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE); in gadget_unbind_driver()
1695 pr_warn("%s: couldn't find an available UDC or it's busy\n", in usb_gadget_register_driver_owner()
1699 pr_info("%s: couldn't find an available UDC\n", in usb_gadget_register_driver_owner()
1727 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); in srp_store() local
1730 usb_gadget_wakeup(udc->gadget); in srp_store()
1739 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); in soft_connect_store() local
1742 device_lock(&udc->gadget->dev); in soft_connect_store()
1743 if (!udc->driver) { in soft_connect_store()
1750 mutex_lock(&udc->connect_lock); in soft_connect_store()
1751 usb_gadget_udc_start_locked(udc); in soft_connect_store()
1752 usb_gadget_connect_locked(udc->gadget); in soft_connect_store()
1753 mutex_unlock(&udc->connect_lock); in soft_connect_store()
1755 mutex_lock(&udc->connect_lock); in soft_connect_store()
1756 usb_gadget_disconnect_locked(udc->gadget); in soft_connect_store()
1757 usb_gadget_udc_stop_locked(udc); in soft_connect_store()
1758 mutex_unlock(&udc->connect_lock); in soft_connect_store()
1767 device_unlock(&udc->gadget->dev); in soft_connect_store()
1775 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); in state_show() local
1776 struct usb_gadget *gadget = udc->gadget; in state_show()
1785 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); in function_show() local
1790 drv = udc->driver; in function_show()
1802 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); \
1804 usb_speed_string(udc->gadget->param)); \
1815 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); \
1816 struct usb_gadget *gadget = udc->gadget; \
1857 const struct usb_udc *udc = container_of(dev, struct usb_udc, dev); in usb_udc_uevent() local
1860 ret = add_uevent_var(env, "USB_UDC_NAME=%s", udc->gadget->name); in usb_udc_uevent()
1867 if (udc->driver) in usb_udc_uevent()
1869 udc->driver->function); in usb_udc_uevent()
1880 .name = "udc",
1913 MODULE_DESCRIPTION("UDC Framework");