static int __init msg_do_config(struct usb_configuration *c) { static const struct fsg_operations ops = { .thread_exits = msg_thread_exits, }; static struct fsg_common common; struct fsg_common *retp; struct fsg_config config; int ret; if (gadget_is_otg(c->cdev->gadget)) { c->descriptors = otg_desc; c->bmAttributes |= USB_CONFIG_ATT_WAKEUP; } fsg_config_from_params(&config, &mod_data); config.ops = &ops; retp = fsg_common_init(&common, c->cdev, &config); if (IS_ERR(retp)) return PTR_ERR(retp); ret = fsg_bind_config(c->cdev, c, &common); fsg_common_put(&common); return ret; }
static int __init msg_do_config(struct usb_configuration *c) { struct fsg_common *common; struct fsg_config config; int ret; if (gadget_is_otg(c->cdev->gadget)) { c->descriptors = otg_desc; c->bmAttributes |= USB_CONFIG_ATT_WAKEUP; } fsg_config_from_params(&config, &mod_data); config.thread_exits = (void(*)(struct fsg_common*))&msg_cleanup; common = fsg_common_init(0, c->cdev, &config); if (IS_ERR(common)) return PTR_ERR(common); ret = fsg_add(c->cdev, c, common); fsg_common_put(common); return ret; }
static int __init msg_do_config(struct usb_configuration *c) { static const struct fsg_operations ops = { .thread_exits = msg_thread_exits, }; static struct fsg_common common; struct fsg_common *retp; struct fsg_config config; int ret; fsg_config_from_params(&config, &mod_data); config.ops = &ops; retp = fsg_common_init(&common, c->cdev, &config); if (IS_ERR(retp)) return PTR_ERR(retp); ret = fsg_bind_config(c->cdev, c, &common); fsg_common_put(&common); return ret; }