static void functionfs_closed_callback(struct ffs_data *ffs) { ENTER(); if (test_and_clear_bit(0, &gfs_registered)) usb_composite_unregister(&gfs_driver); }
static void gfs_exit(void) { ENTER(); if (test_and_clear_bit(0, &gfs_registered)) usb_composite_unregister(&gfs_driver); functionfs_cleanup(); }
static int usbg_attach_cb(bool connect) { int ret = 0; if (connect) ret = usb_composite_probe(&usbg_driver, usb_target_bind); else usb_composite_unregister(&usbg_driver); return ret; }
static void __exit nokia_cleanup(void) { usb_composite_unregister(&nokia_driver); }
static void __exit multi_exit(void) { usb_composite_unregister(&multi_driver); }
static void __exit cleanup(void) { usb_composite_unregister(&gserial_driver); gserial_cleanup(); }
static void msg_cleanup(void) { if (test_and_clear_bit(0, &msg_registered)) usb_composite_unregister(&msg_driver); }
void g_dnl_unregister(void) { usb_composite_unregister(&g_dnl_driver); }
static void dUsbExit(void) { usb_composite_unregister(&zero_driver); }
void usb_serial_unregister(void) { usb_composite_unregister(&gserial_driver); }
static void __exit softupd_cleanup(void) { usb_composite_unregister(&softupd_driver); }
static void __exit webcam_cleanup(void) { usb_composite_unregister(&webcam_driver); }
static void __exit qcom_maemo_usb_cleanup(void) { usb_composite_unregister(&qcom_maemo_driver); }
static void __exit g_multi_cleanup(void) { usb_composite_unregister(&multi_driver); }
static int g_dnl_config_register(struct usb_composite_dev *cdev) { static struct usb_configuration config = { .label = "usb_dnload", .bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER, .bConfigurationValue = CONFIG_USBDOWNLOADER, .iConfiguration = STRING_USBDOWN, .bind = g_dnl_do_config, }; return usb_add_config(cdev, &config); } static int g_dnl_bind(struct usb_composite_dev *cdev) { struct usb_gadget *gadget = cdev->gadget; int id, ret; int gcnum; debug("%s: gadget: 0x%p cdev: 0x%p\n", __func__, gadget, cdev); id = usb_string_id(cdev); if (id < 0) return id; g_dnl_string_defs[0].id = id; device_desc.iManufacturer = id; id = usb_string_id(cdev); if (id < 0) return id; g_dnl_string_defs[1].id = id; device_desc.iProduct = id; id = usb_string_id(cdev); if (id < 0) return id; char *s = getenv("fbt_id#"); if (s) g_dnl_string_defs[2].s = s; g_dnl_string_defs[2].id = id; device_desc.iSerialNumber = id; ret = g_dnl_config_register(cdev); if (ret) goto error; gcnum = usb_gadget_controller_number(gadget); debug("gcnum: %d\n", gcnum); if (gcnum >= 0) device_desc.bcdDevice = cpu_to_le16(0x0200 + gcnum); else { debug("%s: controller '%s' not recognized\n", shortname, gadget->name); device_desc.bcdDevice = __constant_cpu_to_le16(0x9999); } return 0; error: g_dnl_unbind(cdev); return -ENOMEM; } static struct usb_composite_driver g_dnl_driver = { .name = NULL, .dev = &device_desc, .strings = g_dnl_composite_strings, .bind = g_dnl_bind, .unbind = g_dnl_unbind, }; int g_dnl_register(const char *type) { /* We only allow "dfu" atm, so 3 should be enough */ static char name[sizeof(shortname) + 3]; int ret; if (!strcmp(type, "dfu")) { strcpy(name, shortname); strcat(name, type); #if defined(CONFIG_CMD_FASTBOOT) } else if (!strcmp(type, "fastboot")) { strcpy(name, shortname); strcat(name, type); #endif #if defined(CONFIG_USB_GADGET_MASS_STORAGE) } else if (!strcmp(type, "ums")) { strcpy(name, shortname); strcat(name, type); #endif } else { printf("%s: unknown command: %s\n", __func__, type); return -EINVAL; } g_dnl_driver.name = name; debug("%s: g_dnl_driver.name: %s\n", __func__, g_dnl_driver.name); ret = usb_composite_register(&g_dnl_driver); if (ret) { printf("%s: failed!, error: %d\n", __func__, ret); return ret; } return 0; } void g_dnl_unregister(void) { usb_composite_unregister(&g_dnl_driver); }
static void __exit cleanup(void) { usb_composite_unregister(&acm_ms_driver); }
static void usbg_detach(struct usb_function_instance *f) { usb_composite_unregister(&usbg_driver); }