Lines Matching refs:gi

239 static int unregister_gadget(struct gadget_info *gi)  in unregister_gadget()  argument
243 if (!gi->udc_name) in unregister_gadget()
246 ret = usb_gadget_unregister_driver(&gi->composite.gadget_driver); in unregister_gadget()
249 kfree(gi->udc_name); in unregister_gadget()
250 gi->udc_name = NULL; in unregister_gadget()
257 struct gadget_info *gi = to_gadget_info(item); in gadget_dev_desc_UDC_store() local
267 mutex_lock(&gi->lock); in gadget_dev_desc_UDC_store()
270 ret = unregister_gadget(gi); in gadget_dev_desc_UDC_store()
274 if (gi->udc_name) { in gadget_dev_desc_UDC_store()
278 ret = usb_udc_attach_driver(name, &gi->composite.gadget_driver); in gadget_dev_desc_UDC_store()
281 gi->udc_name = name; in gadget_dev_desc_UDC_store()
283 mutex_unlock(&gi->lock); in gadget_dev_desc_UDC_store()
287 mutex_unlock(&gi->lock); in gadget_dev_desc_UDC_store()
336 struct gadget_info *gi = to_gadget_info(item); in gadget_info_attr_release() local
338 WARN_ON(!list_empty(&gi->cdev.configs)); in gadget_info_attr_release()
339 WARN_ON(!list_empty(&gi->string_list)); in gadget_info_attr_release()
340 WARN_ON(!list_empty(&gi->available_func)); in gadget_info_attr_release()
341 kfree(gi->composite.gadget_driver.function); in gadget_info_attr_release()
342 kfree(gi); in gadget_info_attr_release()
365 struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev); in config_usb_cfg_link() local
374 mutex_lock(&gi->lock); in config_usb_cfg_link()
380 list_for_each_entry(a_fi, &gi->available_func, cfs_list) { in config_usb_cfg_link()
406 mutex_unlock(&gi->lock); in config_usb_cfg_link()
416 struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev); in config_usb_cfg_unlink() local
429 mutex_lock(&gi->lock); in config_usb_cfg_unlink()
430 if (gi->udc_name) in config_usb_cfg_unlink()
431 unregister_gadget(gi); in config_usb_cfg_unlink()
432 WARN_ON(gi->udc_name); in config_usb_cfg_unlink()
438 mutex_unlock(&gi->lock); in config_usb_cfg_unlink()
442 mutex_unlock(&gi->lock); in config_usb_cfg_unlink()
530 struct gadget_info *gi; in function_make() local
567 gi = container_of(group, struct gadget_info, functions_group); in function_make()
569 mutex_lock(&gi->lock); in function_make()
570 list_add_tail(&fi->cfs_list, &gi->available_func); in function_make()
571 mutex_unlock(&gi->lock); in function_make()
580 struct gadget_info *gi; in function_drop() local
582 gi = container_of(group, struct gadget_info, functions_group); in function_drop()
584 mutex_lock(&gi->lock); in function_drop()
586 mutex_unlock(&gi->lock); in function_drop()
624 struct gadget_info *gi; in config_desc_make() local
631 gi = container_of(group, struct gadget_info, configs_group); in config_desc_make()
674 ret = usb_add_config_only(&gi->cdev, &cfg->c); in config_desc_make()
748 struct gadget_info *gi = os_desc_item_to_gadget_info(item); in os_desc_use_store() local
752 mutex_lock(&gi->lock); in os_desc_use_store()
755 gi->use_os_desc = use; in os_desc_use_store()
758 mutex_unlock(&gi->lock); in os_desc_use_store()
772 struct gadget_info *gi = os_desc_item_to_gadget_info(item); in os_desc_b_vendor_code_store() local
776 mutex_lock(&gi->lock); in os_desc_b_vendor_code_store()
779 gi->b_vendor_code = b_vendor_code; in os_desc_b_vendor_code_store()
782 mutex_unlock(&gi->lock); in os_desc_b_vendor_code_store()
789 struct gadget_info *gi = os_desc_item_to_gadget_info(item); in os_desc_qw_sign_show() local
791 memcpy(page, gi->qw_sign, OS_STRING_QW_SIGN_LEN); in os_desc_qw_sign_show()
798 struct gadget_info *gi = os_desc_item_to_gadget_info(item); in os_desc_qw_sign_store() local
805 mutex_lock(&gi->lock); in os_desc_qw_sign_store()
807 UTF16_LITTLE_ENDIAN, (wchar_t *) gi->qw_sign, in os_desc_qw_sign_store()
811 mutex_unlock(&gi->lock); in os_desc_qw_sign_store()
836 struct gadget_info *gi = container_of(to_config_group(os_desc_ci), in os_desc_link() local
838 struct usb_composite_dev *cdev = &gi->cdev; in os_desc_link()
845 mutex_lock(&gi->lock); in os_desc_link()
864 mutex_unlock(&gi->lock); in os_desc_link()
871 struct gadget_info *gi = container_of(to_config_group(os_desc_ci), in os_desc_unlink() local
873 struct usb_composite_dev *cdev = &gi->cdev; in os_desc_unlink()
875 mutex_lock(&gi->lock); in os_desc_unlink()
876 if (gi->udc_name) in os_desc_unlink()
877 unregister_gadget(gi); in os_desc_unlink()
879 WARN_ON(gi->udc_name); in os_desc_unlink()
880 mutex_unlock(&gi->lock); in os_desc_unlink()
1208 static void purge_configs_funcs(struct gadget_info *gi) in purge_configs_funcs() argument
1212 list_for_each_entry(c, &gi->cdev.configs, list) { in purge_configs_funcs()
1222 dev_err(&gi->cdev.gadget->dev, "unbind function" in purge_configs_funcs()
1239 struct gadget_info *gi = container_of(composite, in configfs_composite_bind() local
1241 struct usb_composite_dev *cdev = &gi->cdev; in configfs_composite_bind()
1256 if (list_empty(&gi->cdev.configs)) { in configfs_composite_bind()
1258 gi->composite.name); in configfs_composite_bind()
1263 list_for_each_entry(c, &gi->cdev.configs, list) { in configfs_composite_bind()
1270 gi->composite.name); in configfs_composite_bind()
1276 if (!list_empty(&gi->string_list)) { in configfs_composite_bind()
1280 list_for_each_entry(gs, &gi->string_list, list) { in configfs_composite_bind()
1282 gi->gstrings[i] = &gs->stringtab_dev; in configfs_composite_bind()
1290 gi->gstrings[i] = NULL; in configfs_composite_bind()
1291 s = usb_gstrings_attach(&gi->cdev, gi->gstrings, in configfs_composite_bind()
1298 gi->cdev.desc.iManufacturer = s[USB_GADGET_MANUFACTURER_IDX].id; in configfs_composite_bind()
1299 gi->cdev.desc.iProduct = s[USB_GADGET_PRODUCT_IDX].id; in configfs_composite_bind()
1300 gi->cdev.desc.iSerialNumber = s[USB_GADGET_SERIAL_IDX].id; in configfs_composite_bind()
1303 if (gi->use_os_desc) { in configfs_composite_bind()
1305 cdev->b_vendor_code = gi->b_vendor_code; in configfs_composite_bind()
1306 memcpy(cdev->qw_sign, gi->qw_sign, OS_STRING_QW_SIGN_LEN); in configfs_composite_bind()
1323 list_for_each_entry(c, &gi->cdev.configs, list) { in configfs_composite_bind()
1342 s = usb_gstrings_attach(&gi->cdev, cfg->gstrings, 1); in configfs_composite_bind()
1370 purge_configs_funcs(gi); in configfs_composite_bind()
1379 struct gadget_info *gi; in configfs_composite_unbind() local
1384 gi = container_of(cdev, struct gadget_info, cdev); in configfs_composite_unbind()
1388 purge_configs_funcs(gi); in configfs_composite_unbind()
1417 struct gadget_info *gi; in gadgets_make() local
1419 gi = kzalloc(sizeof(*gi), GFP_KERNEL); in gadgets_make()
1420 if (!gi) in gadgets_make()
1423 gi->group.default_groups = gi->default_groups; in gadgets_make()
1424 gi->group.default_groups[0] = &gi->functions_group; in gadgets_make()
1425 gi->group.default_groups[1] = &gi->configs_group; in gadgets_make()
1426 gi->group.default_groups[2] = &gi->strings_group; in gadgets_make()
1427 gi->group.default_groups[3] = &gi->os_desc_group; in gadgets_make()
1429 config_group_init_type_name(&gi->functions_group, "functions", in gadgets_make()
1431 config_group_init_type_name(&gi->configs_group, "configs", in gadgets_make()
1433 config_group_init_type_name(&gi->strings_group, "strings", in gadgets_make()
1435 config_group_init_type_name(&gi->os_desc_group, "os_desc", in gadgets_make()
1438 gi->composite.bind = configfs_do_nothing; in gadgets_make()
1439 gi->composite.unbind = configfs_do_nothing; in gadgets_make()
1440 gi->composite.suspend = NULL; in gadgets_make()
1441 gi->composite.resume = NULL; in gadgets_make()
1442 gi->composite.max_speed = USB_SPEED_SUPER; in gadgets_make()
1444 mutex_init(&gi->lock); in gadgets_make()
1445 INIT_LIST_HEAD(&gi->string_list); in gadgets_make()
1446 INIT_LIST_HEAD(&gi->available_func); in gadgets_make()
1448 composite_init_dev(&gi->cdev); in gadgets_make()
1449 gi->cdev.desc.bLength = USB_DT_DEVICE_SIZE; in gadgets_make()
1450 gi->cdev.desc.bDescriptorType = USB_DT_DEVICE; in gadgets_make()
1451 gi->cdev.desc.bcdDevice = cpu_to_le16(get_default_bcdDevice()); in gadgets_make()
1453 gi->composite.gadget_driver = configfs_driver_template; in gadgets_make()
1455 gi->composite.gadget_driver.function = kstrdup(name, GFP_KERNEL); in gadgets_make()
1456 gi->composite.name = gi->composite.gadget_driver.function; in gadgets_make()
1458 if (!gi->composite.gadget_driver.function) in gadgets_make()
1461 config_group_init_type_name(&gi->group, name, in gadgets_make()
1463 return &gi->group; in gadgets_make()
1465 kfree(gi); in gadgets_make()
1496 struct gadget_info *gi = to_gadget_info(item); in unregister_gadget_item() local
1498 unregister_gadget(gi); in unregister_gadget_item()