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()
287 * UDC are finished with the request. When the completion function is called,
706 __must_hold(&gadget->udc->connect_lock) in usb_gadget_connect_locked()
715 if (gadget->deactivated || !gadget->udc->allow_connect || !gadget->udc->started) { in usb_gadget_connect_locked()
750 mutex_lock(&gadget->udc->connect_lock); in usb_gadget_connect()
752 mutex_unlock(&gadget->udc->connect_lock); in usb_gadget_connect()
759 __must_hold(&gadget->udc->connect_lock) in usb_gadget_disconnect_locked()
771 if (gadget->deactivated || !gadget->udc->started) { in usb_gadget_disconnect_locked()
785 if (gadget->udc->driver) in usb_gadget_disconnect_locked()
786 gadget->udc->driver->disconnect(gadget); in usb_gadget_disconnect_locked()
804 * for the current gadget driver so that UDC drivers don't need to.
812 mutex_lock(&gadget->udc->connect_lock); in usb_gadget_disconnect()
814 mutex_unlock(&gadget->udc->connect_lock); in usb_gadget_disconnect()
838 mutex_lock(&gadget->udc->connect_lock); in usb_gadget_deactivate()
856 mutex_unlock(&gadget->udc->connect_lock); in usb_gadget_deactivate()
878 mutex_lock(&gadget->udc->connect_lock); in usb_gadget_activate()
892 mutex_unlock(&gadget->udc->connect_lock); in usb_gadget_activate()
1097 * usb_gadget_check_config - checks if the UDC can support the binded
1101 * Ensure that a UDC is able to support the requested resources by a
1120 struct usb_udc *udc = gadget->udc; in usb_gadget_state_work() local
1122 if (udc) in usb_gadget_state_work()
1123 sysfs_notify(&udc->dev.kobj, NULL, "state"); in usb_gadget_state_work()
1143 static int usb_udc_connect_control_locked(struct usb_udc *udc) __must_hold(&udc->connect_lock) in usb_udc_connect_control_locked() argument
1145 if (udc->vbus) in usb_udc_connect_control_locked()
1146 return usb_gadget_connect_locked(udc->gadget); in usb_udc_connect_control_locked()
1148 return usb_gadget_disconnect_locked(udc->gadget); in usb_udc_connect_control_locked()
1153 struct usb_udc *udc = container_of(work, struct usb_udc, vbus_work); in vbus_event_work() local
1155 mutex_lock(&udc->connect_lock); in vbus_event_work()
1156 usb_udc_connect_control_locked(udc); in vbus_event_work()
1157 mutex_unlock(&udc->connect_lock); in vbus_event_work()
1161 * usb_udc_vbus_handler - updates the udc core vbus status, and try to
1166 * The udc driver calls it when it wants to connect or disconnect gadget
1179 struct usb_udc *udc = gadget->udc; in usb_udc_vbus_handler() local
1181 if (udc) { in usb_udc_vbus_handler()
1182 udc->vbus = status; in usb_udc_vbus_handler()
1183 schedule_work(&udc->vbus_work); in usb_udc_vbus_handler()
1189 * usb_gadget_udc_reset - notifies the udc core that bus reset occurs
1193 * If the udc driver has bus reset handler, it needs to call this when the bus
1207 * @udc: The UDC to be started
1209 * This call is issued by the UDC Class driver when it's about
1220 static inline int usb_gadget_udc_start_locked(struct usb_udc *udc) in usb_gadget_udc_start_locked() argument
1221 __must_hold(&udc->connect_lock) in usb_gadget_udc_start_locked()
1225 if (udc->started) { in usb_gadget_udc_start_locked()
1226 dev_err(&udc->dev, "UDC had already started\n"); in usb_gadget_udc_start_locked()
1230 ret = udc->gadget->ops->udc_start(udc->gadget, udc->driver); in usb_gadget_udc_start_locked()
1232 udc->started = true; in usb_gadget_udc_start_locked()
1239 * @udc: The UDC to be stopped
1241 * This call is issued by the UDC Class driver after calling
1245 * far as powering off UDC completely and disable its data
1250 static inline void usb_gadget_udc_stop_locked(struct usb_udc *udc) in usb_gadget_udc_stop_locked() argument
1251 __must_hold(&udc->connect_lock) in usb_gadget_udc_stop_locked()
1253 if (!udc->started) { in usb_gadget_udc_stop_locked()
1254 dev_err(&udc->dev, "UDC had already stopped\n"); in usb_gadget_udc_stop_locked()
1258 udc->gadget->ops->udc_stop(udc->gadget); in usb_gadget_udc_stop_locked()
1259 udc->started = false; in usb_gadget_udc_stop_locked()
1265 * @udc: The device we want to set maximum speed
1268 * This call is issued by the UDC Class driver before calling
1272 static inline void usb_gadget_udc_set_speed(struct usb_udc *udc, in usb_gadget_udc_set_speed() argument
1275 struct usb_gadget *gadget = udc->gadget; in usb_gadget_udc_set_speed()
1291 * @udc: The UDC which should enable async callbacks
1294 * of usb_gadget_disable_async_callbacks(); the UDC driver should enable IRQs
1299 static inline void usb_gadget_enable_async_callbacks(struct usb_udc *udc) in usb_gadget_enable_async_callbacks() argument
1301 struct usb_gadget *gadget = udc->gadget; in usb_gadget_enable_async_callbacks()
1309 * @udc: The UDC which should disable async callbacks
1312 * The UDC driver doesn't know when the gadget driver's ->unbind callback
1316 * After this function runs, the UDC driver must suppress all ->suspend,
1319 * way to accomplish this is to tell the UDC hardware not to generate any
1328 static inline void usb_gadget_disable_async_callbacks(struct usb_udc *udc) in usb_gadget_disable_async_callbacks() argument
1330 struct usb_gadget *gadget = udc->gadget; in usb_gadget_disable_async_callbacks()
1345 struct usb_udc *udc; in usb_udc_release() local
1347 udc = container_of(dev, struct usb_udc, dev); in usb_udc_release()
1349 kfree(udc); in usb_udc_release()
1361 * @parent: the parent device to this udc. Usually the controller driver's
1385 * usb_add_gadget - adds a new gadget to the udc class driver list
1393 struct usb_udc *udc; in usb_add_gadget() local
1396 udc = kzalloc(sizeof(*udc), GFP_KERNEL); in usb_add_gadget()
1397 if (!udc) in usb_add_gadget()
1400 device_initialize(&udc->dev); in usb_add_gadget()
1401 udc->dev.release = usb_udc_release; in usb_add_gadget()
1402 udc->dev.class = &udc_class; in usb_add_gadget()
1403 udc->dev.groups = usb_udc_attr_groups; in usb_add_gadget()
1404 udc->dev.parent = gadget->dev.parent; in usb_add_gadget()
1405 ret = dev_set_name(&udc->dev, "%s", in usb_add_gadget()
1410 udc->gadget = gadget; in usb_add_gadget()
1411 gadget->udc = udc; in usb_add_gadget()
1412 mutex_init(&udc->connect_lock); in usb_add_gadget()
1414 udc->started = false; in usb_add_gadget()
1417 list_add_tail(&udc->list, &udc_list); in usb_add_gadget()
1419 INIT_WORK(&udc->vbus_work, vbus_event_work); in usb_add_gadget()
1421 ret = device_add(&udc->dev); in usb_add_gadget()
1426 udc->vbus = true; in usb_add_gadget()
1438 ret = sysfs_create_link(&udc->dev.kobj, in usb_add_gadget()
1453 device_del(&udc->dev); in usb_add_gadget()
1457 list_del(&udc->list); in usb_add_gadget()
1461 put_device(&udc->dev); in usb_add_gadget()
1469 * usb_add_gadget_udc_release - adds a new gadget to the udc class driver list
1470 * @parent: the parent device to this udc. Usually the controller driver's
1492 * usb_get_gadget_udc_name - get the name of the first UDC controller
1493 * This functions returns the name of the first UDC controller in the system.
1495 * assume that there is only one UDC controller in the system and they need to
1496 * get its name before initialization. There is no guarantee that the UDC
1500 * Returns pointer to string with UDC controller name on success, NULL
1505 struct usb_udc *udc; in usb_get_gadget_udc_name() local
1508 /* For now we take the first available UDC */ in usb_get_gadget_udc_name()
1510 list_for_each_entry(udc, &udc_list, list) { in usb_get_gadget_udc_name()
1511 if (!udc->driver) { in usb_get_gadget_udc_name()
1512 name = kstrdup(udc->gadget->name, GFP_KERNEL); in usb_get_gadget_udc_name()
1522 * usb_add_gadget_udc - adds a new gadget to the udc class driver list
1523 * @parent: the parent device to this udc. Usually the controller
1536 * usb_del_gadget - deletes a gadget and unregisters its udc
1544 struct usb_udc *udc = gadget->udc; in usb_del_gadget() local
1547 if (!udc) in usb_del_gadget()
1553 list_del(&udc->list); in usb_del_gadget()
1556 kobject_uevent(&udc->dev.kobj, KOBJ_REMOVE); in usb_del_gadget()
1557 sysfs_remove_link(&udc->dev.kobj, "gadget"); in usb_del_gadget()
1568 cancel_work_sync(&udc->vbus_work); in usb_del_gadget()
1569 device_unregister(&udc->dev); in usb_del_gadget()
1591 struct usb_udc *udc = gadget->udc; in gadget_match_driver() local
1595 /* If the driver specifies a udc_name, it must match the UDC's name */ in gadget_match_driver()
1597 strcmp(driver->udc_name, dev_name(&udc->dev)) != 0) in gadget_match_driver()
1604 /* Otherwise any gadget driver matches any UDC */ in gadget_match_driver()
1611 struct usb_udc *udc = gadget->udc; in gadget_bind_driver() local
1622 udc->driver = driver; in gadget_bind_driver()
1625 dev_dbg(&udc->dev, "binding gadget driver [%s]\n", driver->function); in gadget_bind_driver()
1627 usb_gadget_udc_set_speed(udc, driver->max_speed); in gadget_bind_driver()
1629 ret = driver->bind(udc->gadget, driver); in gadget_bind_driver()
1633 mutex_lock(&udc->connect_lock); in gadget_bind_driver()
1634 ret = usb_gadget_udc_start_locked(udc); in gadget_bind_driver()
1636 mutex_unlock(&udc->connect_lock); in gadget_bind_driver()
1639 usb_gadget_enable_async_callbacks(udc); in gadget_bind_driver()
1640 udc->allow_connect = true; in gadget_bind_driver()
1641 ret = usb_udc_connect_control_locked(udc); in gadget_bind_driver()
1645 mutex_unlock(&udc->connect_lock); in gadget_bind_driver()
1647 kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE); in gadget_bind_driver()
1651 udc->allow_connect = false; in gadget_bind_driver()
1652 usb_gadget_disable_async_callbacks(udc); in gadget_bind_driver()
1655 usb_gadget_udc_stop_locked(udc); in gadget_bind_driver()
1656 mutex_unlock(&udc->connect_lock); in gadget_bind_driver()
1659 driver->unbind(udc->gadget); in gadget_bind_driver()
1663 dev_err(&udc->dev, "failed to start %s: %d\n", in gadget_bind_driver()
1667 udc->driver = NULL; in gadget_bind_driver()
1677 struct usb_udc *udc = gadget->udc; in gadget_unbind_driver() local
1678 struct usb_gadget_driver *driver = udc->driver; in gadget_unbind_driver()
1680 dev_dbg(&udc->dev, "unbinding gadget driver [%s]\n", driver->function); in gadget_unbind_driver()
1682 udc->allow_connect = false; in gadget_unbind_driver()
1683 cancel_work_sync(&udc->vbus_work); in gadget_unbind_driver()
1684 mutex_lock(&udc->connect_lock); in gadget_unbind_driver()
1686 usb_gadget_disable_async_callbacks(udc); in gadget_unbind_driver()
1689 mutex_unlock(&udc->connect_lock); in gadget_unbind_driver()
1691 udc->driver->unbind(gadget); in gadget_unbind_driver()
1693 mutex_lock(&udc->connect_lock); in gadget_unbind_driver()
1694 usb_gadget_udc_stop_locked(udc); in gadget_unbind_driver()
1695 mutex_unlock(&udc->connect_lock); in gadget_unbind_driver()
1699 udc->driver = NULL; in gadget_unbind_driver()
1702 kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE); in gadget_unbind_driver()
1729 pr_warn("%s: couldn't find an available UDC or it's busy\n", in usb_gadget_register_driver_owner()
1733 pr_info("%s: couldn't find an available UDC\n", in usb_gadget_register_driver_owner()
1761 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); in srp_store() local
1764 usb_gadget_wakeup(udc->gadget); in srp_store()
1773 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); in soft_connect_store() local
1776 device_lock(&udc->gadget->dev); in soft_connect_store()
1777 if (!udc->driver) { in soft_connect_store()
1784 mutex_lock(&udc->connect_lock); in soft_connect_store()
1785 usb_gadget_udc_start_locked(udc); in soft_connect_store()
1786 usb_gadget_connect_locked(udc->gadget); in soft_connect_store()
1787 mutex_unlock(&udc->connect_lock); in soft_connect_store()
1789 mutex_lock(&udc->connect_lock); in soft_connect_store()
1790 usb_gadget_disconnect_locked(udc->gadget); in soft_connect_store()
1791 usb_gadget_udc_stop_locked(udc); in soft_connect_store()
1792 mutex_unlock(&udc->connect_lock); in soft_connect_store()
1801 device_unlock(&udc->gadget->dev); in soft_connect_store()
1809 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); in state_show() local
1810 struct usb_gadget *gadget = udc->gadget; in state_show()
1819 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); in function_show() local
1824 drv = udc->driver; in function_show()
1836 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); \
1838 usb_speed_string(udc->gadget->param)); \
1849 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); \
1850 struct usb_gadget *gadget = udc->gadget; \
1891 const struct usb_udc *udc = container_of(dev, struct usb_udc, dev); in usb_udc_uevent() local
1894 ret = add_uevent_var(env, "USB_UDC_NAME=%s", udc->gadget->name); in usb_udc_uevent()
1901 if (udc->driver) in usb_udc_uevent()
1903 udc->driver->function); in usb_udc_uevent()
1914 .name = "udc",
1947 MODULE_DESCRIPTION("UDC Framework");