Lines Matching refs:gi

229 static int unregister_gadget(struct gadget_info *gi)  in unregister_gadget()  argument
233 if (!gi->composite.gadget_driver.udc_name) in unregister_gadget()
236 ret = usb_gadget_unregister_driver(&gi->composite.gadget_driver); in unregister_gadget()
239 kfree(gi->composite.gadget_driver.udc_name); in unregister_gadget()
240 gi->composite.gadget_driver.udc_name = NULL; in unregister_gadget()
247 struct gadget_info *gi = to_gadget_info(item); in gadget_dev_desc_UDC_store() local
260 mutex_lock(&gi->lock); in gadget_dev_desc_UDC_store()
263 ret = unregister_gadget(gi); in gadget_dev_desc_UDC_store()
268 if (gi->composite.gadget_driver.udc_name) { in gadget_dev_desc_UDC_store()
272 gi->composite.gadget_driver.udc_name = name; in gadget_dev_desc_UDC_store()
273 ret = usb_gadget_probe_driver(&gi->composite.gadget_driver); in gadget_dev_desc_UDC_store()
275 gi->composite.gadget_driver.udc_name = NULL; in gadget_dev_desc_UDC_store()
279 mutex_unlock(&gi->lock); in gadget_dev_desc_UDC_store()
283 mutex_unlock(&gi->lock); in gadget_dev_desc_UDC_store()
298 struct gadget_info *gi = to_gadget_info(item); in gadget_dev_desc_max_speed_store() local
300 mutex_lock(&gi->lock); in gadget_dev_desc_max_speed_store()
303 if (gi->composite.gadget_driver.udc_name) in gadget_dev_desc_max_speed_store()
307 gi->composite.max_speed = USB_SPEED_SUPER_PLUS; in gadget_dev_desc_max_speed_store()
309 gi->composite.max_speed = USB_SPEED_SUPER; in gadget_dev_desc_max_speed_store()
311 gi->composite.max_speed = USB_SPEED_HIGH; in gadget_dev_desc_max_speed_store()
313 gi->composite.max_speed = USB_SPEED_FULL; in gadget_dev_desc_max_speed_store()
315 gi->composite.max_speed = USB_SPEED_LOW; in gadget_dev_desc_max_speed_store()
319 gi->composite.gadget_driver.max_speed = gi->composite.max_speed; in gadget_dev_desc_max_speed_store()
321 mutex_unlock(&gi->lock); in gadget_dev_desc_max_speed_store()
324 mutex_unlock(&gi->lock); in gadget_dev_desc_max_speed_store()
375 struct gadget_info *gi = to_gadget_info(item); in gadget_info_attr_release() local
377 WARN_ON(!list_empty(&gi->cdev.configs)); in gadget_info_attr_release()
378 WARN_ON(!list_empty(&gi->string_list)); in gadget_info_attr_release()
379 WARN_ON(!list_empty(&gi->available_func)); in gadget_info_attr_release()
380 kfree(gi->composite.gadget_driver.function); in gadget_info_attr_release()
381 kfree(gi); in gadget_info_attr_release()
404 struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev); in config_usb_cfg_link() local
413 mutex_lock(&gi->lock); in config_usb_cfg_link()
419 list_for_each_entry(a_fi, &gi->available_func, cfs_list) { in config_usb_cfg_link()
445 mutex_unlock(&gi->lock); in config_usb_cfg_link()
455 struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev); in config_usb_cfg_unlink() local
468 mutex_lock(&gi->lock); in config_usb_cfg_unlink()
469 if (gi->composite.gadget_driver.udc_name) in config_usb_cfg_unlink()
470 unregister_gadget(gi); in config_usb_cfg_unlink()
471 WARN_ON(gi->composite.gadget_driver.udc_name); in config_usb_cfg_unlink()
477 mutex_unlock(&gi->lock); in config_usb_cfg_unlink()
481 mutex_unlock(&gi->lock); in config_usb_cfg_unlink()
568 struct gadget_info *gi; in function_make() local
605 gi = container_of(group, struct gadget_info, functions_group); in function_make()
607 mutex_lock(&gi->lock); in function_make()
608 list_add_tail(&fi->cfs_list, &gi->available_func); in function_make()
609 mutex_unlock(&gi->lock); in function_make()
618 struct gadget_info *gi; in function_drop() local
620 gi = container_of(group, struct gadget_info, functions_group); in function_drop()
622 mutex_lock(&gi->lock); in function_drop()
624 mutex_unlock(&gi->lock); in function_drop()
662 struct gadget_info *gi; in config_desc_make() local
669 gi = container_of(group, struct gadget_info, configs_group); in config_desc_make()
711 ret = usb_add_config_only(&gi->cdev, &cfg->c); in config_desc_make()
785 struct gadget_info *gi = os_desc_item_to_gadget_info(item); in os_desc_use_store() local
789 mutex_lock(&gi->lock); in os_desc_use_store()
792 gi->use_os_desc = use; in os_desc_use_store()
795 mutex_unlock(&gi->lock); in os_desc_use_store()
809 struct gadget_info *gi = os_desc_item_to_gadget_info(item); in os_desc_b_vendor_code_store() local
813 mutex_lock(&gi->lock); in os_desc_b_vendor_code_store()
816 gi->b_vendor_code = b_vendor_code; in os_desc_b_vendor_code_store()
819 mutex_unlock(&gi->lock); in os_desc_b_vendor_code_store()
826 struct gadget_info *gi = os_desc_item_to_gadget_info(item); in os_desc_qw_sign_show() local
829 res = utf16s_to_utf8s((wchar_t *) gi->qw_sign, OS_STRING_QW_SIGN_LEN, in os_desc_qw_sign_show()
839 struct gadget_info *gi = os_desc_item_to_gadget_info(item); in os_desc_qw_sign_store() local
846 mutex_lock(&gi->lock); in os_desc_qw_sign_store()
848 UTF16_LITTLE_ENDIAN, (wchar_t *) gi->qw_sign, in os_desc_qw_sign_store()
852 mutex_unlock(&gi->lock); in os_desc_qw_sign_store()
877 struct gadget_info *gi = container_of(to_config_group(os_desc_ci), in os_desc_link() local
879 struct usb_composite_dev *cdev = &gi->cdev; in os_desc_link()
886 mutex_lock(&gi->lock); in os_desc_link()
905 mutex_unlock(&gi->lock); in os_desc_link()
912 struct gadget_info *gi = container_of(to_config_group(os_desc_ci), in os_desc_unlink() local
914 struct usb_composite_dev *cdev = &gi->cdev; in os_desc_unlink()
916 mutex_lock(&gi->lock); in os_desc_unlink()
917 if (gi->composite.gadget_driver.udc_name) in os_desc_unlink()
918 unregister_gadget(gi); in os_desc_unlink()
920 WARN_ON(gi->composite.gadget_driver.udc_name); in os_desc_unlink()
921 mutex_unlock(&gi->lock); in os_desc_unlink()
1241 static void purge_configs_funcs(struct gadget_info *gi) in purge_configs_funcs() argument
1245 list_for_each_entry(c, &gi->cdev.configs, list) { in purge_configs_funcs()
1255 dev_dbg(&gi->cdev.gadget->dev, in purge_configs_funcs()
1274 struct gadget_info *gi = container_of(composite, in configfs_composite_bind() local
1276 struct usb_composite_dev *cdev = &gi->cdev; in configfs_composite_bind()
1283 gi->unbind = 0; in configfs_composite_bind()
1292 if (list_empty(&gi->cdev.configs)) { in configfs_composite_bind()
1294 gi->composite.name); in configfs_composite_bind()
1299 list_for_each_entry(c, &gi->cdev.configs, list) { in configfs_composite_bind()
1306 gi->composite.name); in configfs_composite_bind()
1312 if (!list_empty(&gi->string_list)) { in configfs_composite_bind()
1316 list_for_each_entry(gs, &gi->string_list, list) { in configfs_composite_bind()
1318 gi->gstrings[i] = &gs->stringtab_dev; in configfs_composite_bind()
1326 gi->gstrings[i] = NULL; in configfs_composite_bind()
1327 s = usb_gstrings_attach(&gi->cdev, gi->gstrings, in configfs_composite_bind()
1334 gi->cdev.desc.iManufacturer = s[USB_GADGET_MANUFACTURER_IDX].id; in configfs_composite_bind()
1335 gi->cdev.desc.iProduct = s[USB_GADGET_PRODUCT_IDX].id; in configfs_composite_bind()
1336 gi->cdev.desc.iSerialNumber = s[USB_GADGET_SERIAL_IDX].id; in configfs_composite_bind()
1339 if (gi->use_os_desc) { in configfs_composite_bind()
1341 cdev->b_vendor_code = gi->b_vendor_code; in configfs_composite_bind()
1342 memcpy(cdev->qw_sign, gi->qw_sign, OS_STRING_QW_SIGN_LEN); in configfs_composite_bind()
1359 list_for_each_entry(c, &gi->cdev.configs, list) { in configfs_composite_bind()
1378 s = usb_gstrings_attach(&gi->cdev, cfg->gstrings, 1); in configfs_composite_bind()
1406 purge_configs_funcs(gi); in configfs_composite_bind()
1415 struct gadget_info *gi; in configfs_composite_unbind() local
1421 gi = container_of(cdev, struct gadget_info, cdev); in configfs_composite_unbind()
1422 spin_lock_irqsave(&gi->spinlock, flags); in configfs_composite_unbind()
1423 gi->unbind = 1; in configfs_composite_unbind()
1424 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_unbind()
1428 purge_configs_funcs(gi); in configfs_composite_unbind()
1431 spin_lock_irqsave(&gi->spinlock, flags); in configfs_composite_unbind()
1434 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_unbind()
1441 struct gadget_info *gi; in configfs_composite_setup() local
1449 gi = container_of(cdev, struct gadget_info, cdev); in configfs_composite_setup()
1450 spin_lock_irqsave(&gi->spinlock, flags); in configfs_composite_setup()
1452 if (!cdev || gi->unbind) { in configfs_composite_setup()
1453 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_setup()
1458 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_setup()
1465 struct gadget_info *gi; in configfs_composite_disconnect() local
1472 gi = container_of(cdev, struct gadget_info, cdev); in configfs_composite_disconnect()
1473 spin_lock_irqsave(&gi->spinlock, flags); in configfs_composite_disconnect()
1475 if (!cdev || gi->unbind) { in configfs_composite_disconnect()
1476 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_disconnect()
1481 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_disconnect()
1487 struct gadget_info *gi; in configfs_composite_suspend() local
1494 gi = container_of(cdev, struct gadget_info, cdev); in configfs_composite_suspend()
1495 spin_lock_irqsave(&gi->spinlock, flags); in configfs_composite_suspend()
1497 if (!cdev || gi->unbind) { in configfs_composite_suspend()
1498 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_suspend()
1503 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_suspend()
1509 struct gadget_info *gi; in configfs_composite_resume() local
1516 gi = container_of(cdev, struct gadget_info, cdev); in configfs_composite_resume()
1517 spin_lock_irqsave(&gi->spinlock, flags); in configfs_composite_resume()
1519 if (!cdev || gi->unbind) { in configfs_composite_resume()
1520 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_resume()
1525 spin_unlock_irqrestore(&gi->spinlock, flags); in configfs_composite_resume()
1551 struct gadget_info *gi; in gadgets_make() local
1553 gi = kzalloc(sizeof(*gi), GFP_KERNEL); in gadgets_make()
1554 if (!gi) in gadgets_make()
1557 config_group_init_type_name(&gi->group, name, &gadget_root_type); in gadgets_make()
1559 config_group_init_type_name(&gi->functions_group, "functions", in gadgets_make()
1561 configfs_add_default_group(&gi->functions_group, &gi->group); in gadgets_make()
1563 config_group_init_type_name(&gi->configs_group, "configs", in gadgets_make()
1565 configfs_add_default_group(&gi->configs_group, &gi->group); in gadgets_make()
1567 config_group_init_type_name(&gi->strings_group, "strings", in gadgets_make()
1569 configfs_add_default_group(&gi->strings_group, &gi->group); in gadgets_make()
1571 config_group_init_type_name(&gi->os_desc_group, "os_desc", in gadgets_make()
1573 configfs_add_default_group(&gi->os_desc_group, &gi->group); in gadgets_make()
1575 gi->composite.bind = configfs_do_nothing; in gadgets_make()
1576 gi->composite.unbind = configfs_do_nothing; in gadgets_make()
1577 gi->composite.suspend = NULL; in gadgets_make()
1578 gi->composite.resume = NULL; in gadgets_make()
1579 gi->composite.max_speed = USB_SPEED_SUPER; in gadgets_make()
1581 spin_lock_init(&gi->spinlock); in gadgets_make()
1582 mutex_init(&gi->lock); in gadgets_make()
1583 INIT_LIST_HEAD(&gi->string_list); in gadgets_make()
1584 INIT_LIST_HEAD(&gi->available_func); in gadgets_make()
1586 composite_init_dev(&gi->cdev); in gadgets_make()
1587 gi->cdev.desc.bLength = USB_DT_DEVICE_SIZE; in gadgets_make()
1588 gi->cdev.desc.bDescriptorType = USB_DT_DEVICE; in gadgets_make()
1589 gi->cdev.desc.bcdDevice = cpu_to_le16(get_default_bcdDevice()); in gadgets_make()
1591 gi->composite.gadget_driver = configfs_driver_template; in gadgets_make()
1593 gi->composite.gadget_driver.function = kstrdup(name, GFP_KERNEL); in gadgets_make()
1594 gi->composite.name = gi->composite.gadget_driver.function; in gadgets_make()
1596 if (!gi->composite.gadget_driver.function) in gadgets_make()
1599 return &gi->group; in gadgets_make()
1601 kfree(gi); in gadgets_make()
1632 struct gadget_info *gi = to_gadget_info(item); in unregister_gadget_item() local
1634 mutex_lock(&gi->lock); in unregister_gadget_item()
1635 unregister_gadget(gi); in unregister_gadget_item()
1636 mutex_unlock(&gi->lock); in unregister_gadget_item()