Lines Matching refs:gi

131 	static ssize_t gadget_dev_desc_##__name##_show(struct gadget_info *gi, \
134 return sprintf(page, "0x%02x\n", gi->cdev.desc.__name); \
138 static ssize_t gadget_dev_desc_##__name##_show(struct gadget_info *gi, \
141 return sprintf(page, "0x%04x\n", le16_to_cpup(&gi->cdev.desc.__name)); \
146 static ssize_t gadget_dev_desc_##_name##_store(struct gadget_info *gi, \
154 gi->cdev.desc._name = val; \
159 static ssize_t gadget_dev_desc_##_name##_store(struct gadget_info *gi, \
167 gi->cdev.desc._name = cpu_to_le16p(&val); \
197 static ssize_t gadget_dev_desc_bcdDevice_store(struct gadget_info *gi, in gadget_dev_desc_bcdDevice_store() argument
210 gi->cdev.desc.bcdDevice = cpu_to_le16(bcdDevice); in gadget_dev_desc_bcdDevice_store()
214 static ssize_t gadget_dev_desc_bcdUSB_store(struct gadget_info *gi, in gadget_dev_desc_bcdUSB_store() argument
227 gi->cdev.desc.bcdUSB = cpu_to_le16(bcdUSB); in gadget_dev_desc_bcdUSB_store()
231 static ssize_t gadget_dev_desc_UDC_show(struct gadget_info *gi, char *page) in gadget_dev_desc_UDC_show() argument
233 return sprintf(page, "%s\n", gi->udc_name ?: ""); in gadget_dev_desc_UDC_show()
236 static int unregister_gadget(struct gadget_info *gi) in unregister_gadget() argument
240 if (!gi->udc_name) in unregister_gadget()
243 ret = usb_gadget_unregister_driver(&gi->composite.gadget_driver); in unregister_gadget()
246 kfree(gi->udc_name); in unregister_gadget()
247 gi->udc_name = NULL; in unregister_gadget()
251 static ssize_t gadget_dev_desc_UDC_store(struct gadget_info *gi, in gadget_dev_desc_UDC_store() argument
263 mutex_lock(&gi->lock); in gadget_dev_desc_UDC_store()
266 ret = unregister_gadget(gi); in gadget_dev_desc_UDC_store()
270 if (gi->udc_name) { in gadget_dev_desc_UDC_store()
274 ret = usb_udc_attach_driver(name, &gi->composite.gadget_driver); in gadget_dev_desc_UDC_store()
277 gi->udc_name = name; 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()
343 struct gadget_info *gi = to_gadget_info(item); in gadget_info_attr_release() local
345 WARN_ON(!list_empty(&gi->cdev.configs)); in gadget_info_attr_release()
346 WARN_ON(!list_empty(&gi->string_list)); in gadget_info_attr_release()
347 WARN_ON(!list_empty(&gi->available_func)); in gadget_info_attr_release()
348 kfree(gi->composite.gadget_driver.function); in gadget_info_attr_release()
349 kfree(gi); in gadget_info_attr_release()
376 struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev); in config_usb_cfg_link() local
385 mutex_lock(&gi->lock); in config_usb_cfg_link()
391 list_for_each_entry(a_fi, &gi->available_func, cfs_list) { in config_usb_cfg_link()
417 mutex_unlock(&gi->lock); in config_usb_cfg_link()
427 struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev); in config_usb_cfg_unlink() local
440 mutex_lock(&gi->lock); in config_usb_cfg_unlink()
441 if (gi->udc_name) in config_usb_cfg_unlink()
442 unregister_gadget(gi); in config_usb_cfg_unlink()
443 WARN_ON(gi->udc_name); in config_usb_cfg_unlink()
449 mutex_unlock(&gi->lock); in config_usb_cfg_unlink()
453 mutex_unlock(&gi->lock); in config_usb_cfg_unlink()
550 struct gadget_info *gi; in function_make() local
587 gi = container_of(group, struct gadget_info, functions_group); in function_make()
589 mutex_lock(&gi->lock); in function_make()
590 list_add_tail(&fi->cfs_list, &gi->available_func); in function_make()
591 mutex_unlock(&gi->lock); in function_make()
600 struct gadget_info *gi; in function_drop() local
602 gi = container_of(group, struct gadget_info, functions_group); in function_drop()
604 mutex_lock(&gi->lock); in function_drop()
606 mutex_unlock(&gi->lock); in function_drop()
645 struct gadget_info *gi; in config_desc_make() local
652 gi = container_of(group, struct gadget_info, configs_group); in config_desc_make()
695 ret = usb_add_config_only(&gi->cdev, &cfg->c); in config_desc_make()
760 struct gadget_info *gi; in os_desc_use_show() local
762 gi = to_gadget_info(os_desc->group.cg_item.ci_parent); in os_desc_use_show()
764 return sprintf(page, "%d", gi->use_os_desc); in os_desc_use_show()
770 struct gadget_info *gi; in os_desc_use_store() local
774 gi = to_gadget_info(os_desc->group.cg_item.ci_parent); in os_desc_use_store()
776 mutex_lock(&gi->lock); in os_desc_use_store()
779 gi->use_os_desc = use; in os_desc_use_store()
782 mutex_unlock(&gi->lock); in os_desc_use_store()
794 struct gadget_info *gi; in os_desc_b_vendor_code_show() local
796 gi = to_gadget_info(os_desc->group.cg_item.ci_parent); in os_desc_b_vendor_code_show()
798 return sprintf(page, "%d", gi->b_vendor_code); in os_desc_b_vendor_code_show()
804 struct gadget_info *gi; in os_desc_b_vendor_code_store() local
808 gi = to_gadget_info(os_desc->group.cg_item.ci_parent); in os_desc_b_vendor_code_store()
810 mutex_lock(&gi->lock); in os_desc_b_vendor_code_store()
813 gi->b_vendor_code = b_vendor_code; in os_desc_b_vendor_code_store()
816 mutex_unlock(&gi->lock); in os_desc_b_vendor_code_store()
828 struct gadget_info *gi; in os_desc_qw_sign_show() local
830 gi = to_gadget_info(os_desc->group.cg_item.ci_parent); in os_desc_qw_sign_show()
832 memcpy(page, gi->qw_sign, OS_STRING_QW_SIGN_LEN); in os_desc_qw_sign_show()
840 struct gadget_info *gi; in os_desc_qw_sign_store() local
843 gi = to_gadget_info(os_desc->group.cg_item.ci_parent); in os_desc_qw_sign_store()
848 mutex_lock(&gi->lock); in os_desc_qw_sign_store()
850 UTF16_LITTLE_ENDIAN, (wchar_t *) gi->qw_sign, in os_desc_qw_sign_store()
854 mutex_unlock(&gi->lock); in os_desc_qw_sign_store()
880 struct gadget_info *gi = container_of(to_config_group(os_desc_ci), in os_desc_link() local
882 struct usb_composite_dev *cdev = &gi->cdev; in os_desc_link()
889 mutex_lock(&gi->lock); in os_desc_link()
908 mutex_unlock(&gi->lock); in os_desc_link()
915 struct gadget_info *gi = container_of(to_config_group(os_desc_ci), in os_desc_unlink() local
917 struct usb_composite_dev *cdev = &gi->cdev; in os_desc_unlink()
919 mutex_lock(&gi->lock); in os_desc_unlink()
920 if (gi->udc_name) in os_desc_unlink()
921 unregister_gadget(gi); in os_desc_unlink()
923 WARN_ON(gi->udc_name); in os_desc_unlink()
924 mutex_unlock(&gi->lock); in os_desc_unlink()
1278 static void purge_configs_funcs(struct gadget_info *gi) in purge_configs_funcs() argument
1282 list_for_each_entry(c, &gi->cdev.configs, list) { in purge_configs_funcs()
1292 dev_err(&gi->cdev.gadget->dev, "unbind function" in purge_configs_funcs()
1309 struct gadget_info *gi = container_of(composite, in configfs_composite_bind() local
1311 struct usb_composite_dev *cdev = &gi->cdev; in configfs_composite_bind()
1326 if (list_empty(&gi->cdev.configs)) { in configfs_composite_bind()
1328 gi->composite.name); in configfs_composite_bind()
1333 list_for_each_entry(c, &gi->cdev.configs, list) { in configfs_composite_bind()
1340 gi->composite.name); in configfs_composite_bind()
1346 if (!list_empty(&gi->string_list)) { in configfs_composite_bind()
1350 list_for_each_entry(gs, &gi->string_list, list) { in configfs_composite_bind()
1352 gi->gstrings[i] = &gs->stringtab_dev; in configfs_composite_bind()
1360 gi->gstrings[i] = NULL; in configfs_composite_bind()
1361 s = usb_gstrings_attach(&gi->cdev, gi->gstrings, in configfs_composite_bind()
1368 gi->cdev.desc.iManufacturer = s[USB_GADGET_MANUFACTURER_IDX].id; in configfs_composite_bind()
1369 gi->cdev.desc.iProduct = s[USB_GADGET_PRODUCT_IDX].id; in configfs_composite_bind()
1370 gi->cdev.desc.iSerialNumber = s[USB_GADGET_SERIAL_IDX].id; in configfs_composite_bind()
1373 if (gi->use_os_desc) { in configfs_composite_bind()
1375 cdev->b_vendor_code = gi->b_vendor_code; in configfs_composite_bind()
1376 memcpy(cdev->qw_sign, gi->qw_sign, OS_STRING_QW_SIGN_LEN); in configfs_composite_bind()
1380 list_for_each_entry(c, &gi->cdev.configs, list) { in configfs_composite_bind()
1396 s = usb_gstrings_attach(&gi->cdev, cfg->gstrings, 1); in configfs_composite_bind()
1424 purge_configs_funcs(gi); in configfs_composite_bind()
1433 struct gadget_info *gi; in configfs_composite_unbind() local
1438 gi = container_of(cdev, struct gadget_info, cdev); in configfs_composite_unbind()
1440 purge_configs_funcs(gi); in configfs_composite_unbind()
1469 struct gadget_info *gi; in gadgets_make() local
1471 gi = kzalloc(sizeof(*gi), GFP_KERNEL); in gadgets_make()
1472 if (!gi) in gadgets_make()
1475 gi->group.default_groups = gi->default_groups; in gadgets_make()
1476 gi->group.default_groups[0] = &gi->functions_group; in gadgets_make()
1477 gi->group.default_groups[1] = &gi->configs_group; in gadgets_make()
1478 gi->group.default_groups[2] = &gi->strings_group; in gadgets_make()
1479 gi->group.default_groups[3] = &gi->os_desc_group; in gadgets_make()
1481 config_group_init_type_name(&gi->functions_group, "functions", in gadgets_make()
1483 config_group_init_type_name(&gi->configs_group, "configs", in gadgets_make()
1485 config_group_init_type_name(&gi->strings_group, "strings", in gadgets_make()
1487 config_group_init_type_name(&gi->os_desc_group, "os_desc", in gadgets_make()
1490 gi->composite.bind = configfs_do_nothing; in gadgets_make()
1491 gi->composite.unbind = configfs_do_nothing; in gadgets_make()
1492 gi->composite.suspend = NULL; in gadgets_make()
1493 gi->composite.resume = NULL; in gadgets_make()
1494 gi->composite.max_speed = USB_SPEED_SUPER; in gadgets_make()
1496 mutex_init(&gi->lock); in gadgets_make()
1497 INIT_LIST_HEAD(&gi->string_list); in gadgets_make()
1498 INIT_LIST_HEAD(&gi->available_func); in gadgets_make()
1500 composite_init_dev(&gi->cdev); in gadgets_make()
1501 gi->cdev.desc.bLength = USB_DT_DEVICE_SIZE; in gadgets_make()
1502 gi->cdev.desc.bDescriptorType = USB_DT_DEVICE; in gadgets_make()
1503 gi->cdev.desc.bcdDevice = cpu_to_le16(get_default_bcdDevice()); in gadgets_make()
1505 gi->composite.gadget_driver = configfs_driver_template; in gadgets_make()
1507 gi->composite.gadget_driver.function = kstrdup(name, GFP_KERNEL); in gadgets_make()
1508 gi->composite.name = gi->composite.gadget_driver.function; in gadgets_make()
1510 if (!gi->composite.gadget_driver.function) in gadgets_make()
1514 gi->otg.bLength = sizeof(struct usb_otg_descriptor); in gadgets_make()
1515 gi->otg.bDescriptorType = USB_DT_OTG; in gadgets_make()
1516 gi->otg.bmAttributes = USB_OTG_SRP | USB_OTG_HNP; in gadgets_make()
1519 config_group_init_type_name(&gi->group, name, in gadgets_make()
1521 return &gi->group; in gadgets_make()
1523 kfree(gi); in gadgets_make()
1554 struct gadget_info *gi = to_gadget_info(item); in unregister_gadget_item() local
1556 unregister_gadget(gi); in unregister_gadget_item()