static const char longname[] = "Gadget Android";
/* Default vendor and product IDs, overridden by userspace */
-#define VENDOR_ID 0x18D1
-#define PRODUCT_ID 0x0001
+#define VENDOR_ID 0x2207
+#define PRODUCT_ID 0x2910
/* f_midi configuration */
#define MIDI_INPUT_PORTS 1
config->opened = false;
config->data = NULL;
+ if (!WARN_ON(!ffs->gadget)) {
+ dev->cdev->next_string_id -= ffs->strings_count;
+ }
functionfs_unbind(ffs);
mutex_unlock(&dev->mutex);
{
struct mass_storage_function_config *config;
struct fsg_common *common;
- int err;
+ int err, i;
+ const char *name[2];
config = kzalloc(sizeof(struct mass_storage_function_config),
GFP_KERNEL);
if (!config)
return -ENOMEM;
- config->fsg.nluns = 1;
- config->fsg.luns[0].removable = 1;
+ config->fsg.nluns = 2;
+ name[0] = "lun";
+ name[1] = "lun1";
+ for (i = 0; i < config->fsg.nluns; i++) {
+ config->fsg.luns[i].removable = 1;
+ config->fsg.luns[i].nofua = 1;
+ }
common = fsg_common_init(NULL, cdev, &config->fsg);
if (IS_ERR(common)) {
return PTR_ERR(common);
}
- err = sysfs_create_link(&f->dev->kobj,
- &common->luns[0].dev.kobj,
- "lun");
- if (err) {
- kfree(config);
- return err;
+ for (i = 0; i < config->fsg.nluns; i++) {
+ err = sysfs_create_link(&f->dev->kobj,
+ &common->luns[i].dev.kobj,
+ name[i]);
+ if (err)
+ goto error;
}
config->common = common;
f->config = config;
return 0;
+error:
+ for (; i > 0 ; i--)
+ sysfs_remove_link(&f->dev->kobj, name[i-1]);
+ fsg_common_release(&common->ref);
+ kfree(config);
+ return err;
}
static void mass_storage_function_cleanup(struct android_usb_function *f)
return id;
strings_dev[STRING_SERIAL_IDX].id = id;
device_desc.iSerialNumber = id;
+ device_desc.bcdDevice = cpu_to_le16(get_default_bcdDevice());
usb_gadget_set_selfpowered(gadget);
dev->cdev = cdev;