Lines Matching refs:gi

262 	struct gadget_info *gi = to_gadget_info(item);  in gadget_dev_desc_UDC_show()  local
266 mutex_lock(&gi->lock); in gadget_dev_desc_UDC_show()
267 udc_name = gi->composite.gadget_driver.udc_name; in gadget_dev_desc_UDC_show()
269 mutex_unlock(&gi->lock); in gadget_dev_desc_UDC_show()
274 static int unregister_gadget(struct gadget_info *gi) in unregister_gadget() argument
278 if (!gi->composite.gadget_driver.udc_name) in unregister_gadget()
281 ret = usb_gadget_unregister_driver(&gi->composite.gadget_driver); in unregister_gadget()
284 kfree(gi->composite.gadget_driver.udc_name); in unregister_gadget()
285 gi->composite.gadget_driver.udc_name = NULL; in unregister_gadget()
292 struct gadget_info *gi = to_gadget_info(item); in gadget_dev_desc_UDC_store() local
305 mutex_lock(&gi->lock); in gadget_dev_desc_UDC_store()
308 ret = unregister_gadget(gi); in gadget_dev_desc_UDC_store()
313 if (gi->composite.gadget_driver.udc_name) { in gadget_dev_desc_UDC_store()
317 gi->composite.gadget_driver.udc_name = name; in gadget_dev_desc_UDC_store()
318 ret = usb_gadget_probe_driver(&gi->composite.gadget_driver); in gadget_dev_desc_UDC_store()
320 gi->composite.gadget_driver.udc_name = NULL; in gadget_dev_desc_UDC_store()
324 mutex_unlock(&gi->lock); in gadget_dev_desc_UDC_store()
328 mutex_unlock(&gi->lock); in gadget_dev_desc_UDC_store()
343 struct gadget_info *gi = to_gadget_info(item); in gadget_dev_desc_max_speed_store() local
345 mutex_lock(&gi->lock); in gadget_dev_desc_max_speed_store()
348 if (gi->composite.gadget_driver.udc_name) in gadget_dev_desc_max_speed_store()
352 gi->composite.max_speed = USB_SPEED_SUPER_PLUS; in gadget_dev_desc_max_speed_store()
354 gi->composite.max_speed = USB_SPEED_SUPER; in gadget_dev_desc_max_speed_store()
356 gi->composite.max_speed = USB_SPEED_HIGH; in gadget_dev_desc_max_speed_store()
358 gi->composite.max_speed = USB_SPEED_FULL; in gadget_dev_desc_max_speed_store()
360 gi->composite.max_speed = USB_SPEED_LOW; in gadget_dev_desc_max_speed_store()
364 gi->composite.gadget_driver.max_speed = gi->composite.max_speed; in gadget_dev_desc_max_speed_store()
366 mutex_unlock(&gi->lock); in gadget_dev_desc_max_speed_store()
369 mutex_unlock(&gi->lock); in gadget_dev_desc_max_speed_store()
420 struct gadget_info *gi = to_gadget_info(item); in gadget_info_attr_release() local
422 WARN_ON(!list_empty(&gi->cdev.configs)); in gadget_info_attr_release()
423 WARN_ON(!list_empty(&gi->string_list)); in gadget_info_attr_release()
424 WARN_ON(!list_empty(&gi->available_func)); in gadget_info_attr_release()
425 kfree(gi->composite.gadget_driver.function); in gadget_info_attr_release()
426 kfree(gi); in gadget_info_attr_release()
449 struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev); in config_usb_cfg_link() local
458 mutex_lock(&gi->lock); in config_usb_cfg_link()
464 list_for_each_entry(a_fi, &gi->available_func, cfs_list) { in config_usb_cfg_link()
490 mutex_unlock(&gi->lock); in config_usb_cfg_link()
500 struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev); in config_usb_cfg_unlink() local
513 mutex_lock(&gi->lock); in config_usb_cfg_unlink()
514 if (gi->composite.gadget_driver.udc_name) in config_usb_cfg_unlink()
515 unregister_gadget(gi); in config_usb_cfg_unlink()
516 WARN_ON(gi->composite.gadget_driver.udc_name); in config_usb_cfg_unlink()
522 mutex_unlock(&gi->lock); in config_usb_cfg_unlink()
526 mutex_unlock(&gi->lock); in config_usb_cfg_unlink()
613 struct gadget_info *gi; in function_make() local
650 gi = container_of(group, struct gadget_info, functions_group); in function_make()
652 mutex_lock(&gi->lock); in function_make()
653 list_add_tail(&fi->cfs_list, &gi->available_func); in function_make()
654 mutex_unlock(&gi->lock); in function_make()
663 struct gadget_info *gi; in function_drop() local
665 gi = container_of(group, struct gadget_info, functions_group); in function_drop()
667 mutex_lock(&gi->lock); in function_drop()
669 mutex_unlock(&gi->lock); in function_drop()
707 struct gadget_info *gi; in config_desc_make() local
714 gi = container_of(group, struct gadget_info, configs_group); in config_desc_make()
756 ret = usb_add_config_only(&gi->cdev, &cfg->c); in config_desc_make()
830 struct gadget_info *gi = os_desc_item_to_gadget_info(item); in os_desc_use_store() local
834 mutex_lock(&gi->lock); in os_desc_use_store()
837 gi->use_os_desc = use; in os_desc_use_store()
840 mutex_unlock(&gi->lock); in os_desc_use_store()
854 struct gadget_info *gi = os_desc_item_to_gadget_info(item); in os_desc_b_vendor_code_store() local
858 mutex_lock(&gi->lock); in os_desc_b_vendor_code_store()
861 gi->b_vendor_code = b_vendor_code; in os_desc_b_vendor_code_store()
864 mutex_unlock(&gi->lock); in os_desc_b_vendor_code_store()
871 struct gadget_info *gi = os_desc_item_to_gadget_info(item); in os_desc_qw_sign_show() local
874 res = utf16s_to_utf8s((wchar_t *) gi->qw_sign, OS_STRING_QW_SIGN_LEN, in os_desc_qw_sign_show()
884 struct gadget_info *gi = os_desc_item_to_gadget_info(item); in os_desc_qw_sign_store() local
891 mutex_lock(&gi->lock); in os_desc_qw_sign_store()
893 UTF16_LITTLE_ENDIAN, (wchar_t *) gi->qw_sign, in os_desc_qw_sign_store()
897 mutex_unlock(&gi->lock); in os_desc_qw_sign_store()
922 struct gadget_info *gi = container_of(to_config_group(os_desc_ci), in os_desc_link() local
924 struct usb_composite_dev *cdev = &gi->cdev; in os_desc_link()
931 mutex_lock(&gi->lock); in os_desc_link()
950 mutex_unlock(&gi->lock); in os_desc_link()
957 struct gadget_info *gi = container_of(to_config_group(os_desc_ci), in os_desc_unlink() local
959 struct usb_composite_dev *cdev = &gi->cdev; in os_desc_unlink()
961 mutex_lock(&gi->lock); in os_desc_unlink()
962 if (gi->composite.gadget_driver.udc_name) in os_desc_unlink()
963 unregister_gadget(gi); in os_desc_unlink()
965 WARN_ON(gi->composite.gadget_driver.udc_name); in os_desc_unlink()
966 mutex_unlock(&gi->lock); in os_desc_unlink()
1286 static void purge_configs_funcs(struct gadget_info *gi) in purge_configs_funcs() argument
1290 list_for_each_entry(c, &gi->cdev.configs, list) { in purge_configs_funcs()
1300 dev_dbg(&gi->cdev.gadget->dev, in purge_configs_funcs()
1322 struct gadget_info *gi = container_of(composite, in configfs_composite_bind() local
1324 struct usb_composite_dev *cdev = &gi->cdev; in configfs_composite_bind()
1331 gi->unbind = 0; in configfs_composite_bind()
1340 if (list_empty(&gi->cdev.configs)) { in configfs_composite_bind()
1342 gi->composite.name); in configfs_composite_bind()
1347 list_for_each_entry(c, &gi->cdev.configs, list) { in configfs_composite_bind()
1354 gi->composite.name); in configfs_composite_bind()
1360 if (!list_empty(&gi->string_list)) { in configfs_composite_bind()
1364 list_for_each_entry(gs, &gi->string_list, list) { in configfs_composite_bind()
1366 gi->gstrings[i] = &gs->stringtab_dev; in configfs_composite_bind()
1374 gi->gstrings[i] = NULL; in configfs_composite_bind()
1375 s = usb_gstrings_attach(&gi->cdev, gi->gstrings, in configfs_composite_bind()
1382 gi->cdev.desc.iManufacturer = s[USB_GADGET_MANUFACTURER_IDX].id; in configfs_composite_bind()
1383 gi->cdev.desc.iProduct = s[USB_GADGET_PRODUCT_IDX].id; in configfs_composite_bind()
1384 gi->cdev.desc.iSerialNumber = s[USB_GADGET_SERIAL_IDX].id; in configfs_composite_bind()
1387 if (gi->use_os_desc) { in configfs_composite_bind()
1389 cdev->b_vendor_code = gi->b_vendor_code; in configfs_composite_bind()
1390 memcpy(cdev->qw_sign, gi->qw_sign, OS_STRING_QW_SIGN_LEN); in configfs_composite_bind()
1407 list_for_each_entry(c, &gi->cdev.configs, list) { in configfs_composite_bind()
1426 s = usb_gstrings_attach(&gi->cdev, cfg->gstrings, 1); in configfs_composite_bind()
1458 purge_configs_funcs(gi); in configfs_composite_bind()
1467 struct gadget_info *gi = container_of(data, struct gadget_info, work); in android_work() local
1468 struct usb_composite_dev *cdev = &gi->cdev; in android_work()
1481 if (gi->connected != gi->sw_connected) { in android_work()
1482 if (gi->connected) in android_work()
1486 gi->sw_connected = gi->connected; in android_work()
1491 kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, connected); in android_work()
1497 kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, configured); in android_work()
1503 kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, disconnected); in android_work()
1510 gi->connected, gi->sw_connected, cdev->config); in android_work()
1518 struct gadget_info *gi; in configfs_composite_unbind() local
1524 gi = container_of(cdev, struct gadget_info, cdev); in configfs_composite_unbind()
1525 spin_lock_irqsave(&gi->spinlock, flags); in configfs_composite_unbind()
1526 gi->unbind = 1; in configfs_composite_unbind()
1527 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_unbind()
1531 purge_configs_funcs(gi); in configfs_composite_unbind()
1534 spin_lock_irqsave(&gi->spinlock, flags); in configfs_composite_unbind()
1539 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_unbind()
1548 struct gadget_info *gi; in android_setup() local
1555 gi = dev_get_drvdata(android_device); in android_setup()
1556 spin_lock_irqsave(&gi->spinlock, flags); in android_setup()
1558 if (!cdev || gi->unbind) { in android_setup()
1559 spin_unlock_irqrestore(&gi->spinlock, flags); in android_setup()
1564 (c->wValue >> 8) == USB_DT_CONFIG && !gi->connected) { in android_setup()
1565 gi->connected = 1; in android_setup()
1566 schedule_work(&gi->work); in android_setup()
1569 list_for_each_entry(fi, &gi->available_func, cfs_list) { in android_setup()
1587 schedule_work(&gi->work); in android_setup()
1589 spin_unlock_irqrestore(&gi->spinlock, flags); in android_setup()
1600 struct gadget_info *gi; in configfs_composite_setup() local
1608 gi = container_of(cdev, struct gadget_info, cdev); in configfs_composite_setup()
1609 spin_lock_irqsave(&gi->spinlock, flags); in configfs_composite_setup()
1611 if (!cdev || gi->unbind) { in configfs_composite_setup()
1612 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_setup()
1617 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_setup()
1626 struct gadget_info *gi; in configfs_composite_disconnect() local
1641 gi = container_of(cdev, struct gadget_info, cdev); in configfs_composite_disconnect()
1642 spin_lock_irqsave(&gi->spinlock, flags); in configfs_composite_disconnect()
1644 if (!cdev || gi->unbind) { in configfs_composite_disconnect()
1645 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_disconnect()
1650 gi->connected = 0; in configfs_composite_disconnect()
1651 schedule_work(&gi->work); in configfs_composite_disconnect()
1654 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_disconnect()
1660 struct gadget_info *gi; in configfs_composite_reset() local
1667 gi = container_of(cdev, struct gadget_info, cdev); in configfs_composite_reset()
1668 spin_lock_irqsave(&gi->spinlock, flags); in configfs_composite_reset()
1670 if (!cdev || gi->unbind) { in configfs_composite_reset()
1671 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_reset()
1676 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_reset()
1682 struct gadget_info *gi; in configfs_composite_suspend() local
1689 gi = container_of(cdev, struct gadget_info, cdev); in configfs_composite_suspend()
1690 spin_lock_irqsave(&gi->spinlock, flags); in configfs_composite_suspend()
1692 if (!cdev || gi->unbind) { in configfs_composite_suspend()
1693 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_suspend()
1698 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_suspend()
1704 struct gadget_info *gi; in configfs_composite_resume() local
1711 gi = container_of(cdev, struct gadget_info, cdev); in configfs_composite_resume()
1712 spin_lock_irqsave(&gi->spinlock, flags); in configfs_composite_resume()
1714 if (!cdev || gi->unbind) { in configfs_composite_resume()
1715 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_resume()
1720 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_resume()
1779 static int android_device_create(struct gadget_info *gi) in android_device_create() argument
1784 INIT_WORK(&gi->work, android_work); in android_device_create()
1785 gi->dev = device_create(android_class, NULL, in android_device_create()
1787 if (IS_ERR(gi->dev)) in android_device_create()
1788 return PTR_ERR(gi->dev); in android_device_create()
1790 dev_set_drvdata(gi->dev, gi); in android_device_create()
1792 android_device = gi->dev; in android_device_create()
1798 err = device_create_file(gi->dev, attr); in android_device_create()
1800 device_destroy(gi->dev->class, in android_device_create()
1801 gi->dev->devt); in android_device_create()
1809 static void android_device_destroy(struct gadget_info *gi) in android_device_destroy() argument
1816 device_remove_file(gi->dev, attr); in android_device_destroy()
1817 device_destroy(gi->dev->class, gi->dev->devt); in android_device_destroy()
1820 static inline int android_device_create(struct gadget_info *gi) in android_device_create() argument
1825 static inline void android_device_destroy(struct gadget_info *gi) in android_device_destroy() argument
1834 struct gadget_info *gi; in gadgets_make() local
1836 gi = kzalloc(sizeof(*gi), GFP_KERNEL); in gadgets_make()
1837 if (!gi) in gadgets_make()
1840 config_group_init_type_name(&gi->group, name, &gadget_root_type); in gadgets_make()
1842 config_group_init_type_name(&gi->functions_group, "functions", in gadgets_make()
1844 configfs_add_default_group(&gi->functions_group, &gi->group); in gadgets_make()
1846 config_group_init_type_name(&gi->configs_group, "configs", in gadgets_make()
1848 configfs_add_default_group(&gi->configs_group, &gi->group); in gadgets_make()
1850 config_group_init_type_name(&gi->strings_group, "strings", in gadgets_make()
1852 configfs_add_default_group(&gi->strings_group, &gi->group); in gadgets_make()
1854 config_group_init_type_name(&gi->os_desc_group, "os_desc", in gadgets_make()
1856 configfs_add_default_group(&gi->os_desc_group, &gi->group); in gadgets_make()
1858 gi->composite.bind = configfs_do_nothing; in gadgets_make()
1859 gi->composite.unbind = configfs_do_nothing; in gadgets_make()
1860 gi->composite.suspend = NULL; in gadgets_make()
1861 gi->composite.resume = NULL; in gadgets_make()
1862 gi->composite.max_speed = USB_SPEED_SUPER_PLUS; in gadgets_make()
1864 spin_lock_init(&gi->spinlock); in gadgets_make()
1865 mutex_init(&gi->lock); in gadgets_make()
1866 INIT_LIST_HEAD(&gi->string_list); in gadgets_make()
1867 INIT_LIST_HEAD(&gi->available_func); in gadgets_make()
1869 composite_init_dev(&gi->cdev); in gadgets_make()
1870 gi->cdev.desc.bLength = USB_DT_DEVICE_SIZE; in gadgets_make()
1871 gi->cdev.desc.bDescriptorType = USB_DT_DEVICE; in gadgets_make()
1872 gi->cdev.desc.bcdDevice = cpu_to_le16(get_default_bcdDevice()); in gadgets_make()
1874 gi->composite.gadget_driver = configfs_driver_template; in gadgets_make()
1876 gi->composite.gadget_driver.function = kstrdup(name, GFP_KERNEL); in gadgets_make()
1877 gi->composite.name = gi->composite.gadget_driver.function; in gadgets_make()
1879 if (!gi->composite.gadget_driver.function) in gadgets_make()
1882 if (android_device_create(gi) < 0) in gadgets_make()
1885 return &gi->group; in gadgets_make()
1888 kfree(gi); in gadgets_make()
1894 struct gadget_info *gi; in gadgets_drop() local
1896 gi = container_of(to_config_group(item), struct gadget_info, group); in gadgets_drop()
1898 android_device_destroy(gi); in gadgets_drop()
1923 struct gadget_info *gi = to_gadget_info(item); in unregister_gadget_item() local
1925 mutex_lock(&gi->lock); in unregister_gadget_item()
1926 unregister_gadget(gi); in unregister_gadget_item()
1927 mutex_unlock(&gi->lock); in unregister_gadget_item()