static struct android_usb_platform_data android_usb_pdata = {
.vendor_id = S3C_VENDOR_ID, //18d1
.product_id = S3C_UMS_PRODUCT_ID, //4e21
.manufacturer_name = "SAMSUNG",
.product_name = "S5P OTG-USB",
.serial_number = device_serial, //0123456789ABCDEF
.num_products = ARRAY_SIZE(usb_products),
.products = usb_products,
.num_functions = ARRAY_SIZE(usb_functions_all),
.functions = usb_functions_all,
};
static struct platform_driver android_platform_driver = {
.driver = { .name = "android_usb", },
.probe = android_probe,
};
struct platform_device s3c_device_android_usb = {
.name = "android_usb",
.id = -1,
.dev = {
.platform_data = &android_usb_pdata,
},
};
static struct usb_composite_driver android_usb_driver = {
.name = "android_usb",
.dev = &device_desc,
.strings = dev_strings,
.bind = android_bind,
.enable_function = android_enable_function,
};
static struct usb_gadget_driver composite_driver = {
.speed = USB_SPEED_HIGH,
.bind = composite_bind,
.unbind = composite_unbind,
.setup = composite_setup,
.disconnect = composite_disconnect,
.suspend = composite_suspend,
.resume = composite_resume,
.driver = {
.owner = THIS_MODULE,
},
};
android_probe
usb_composite_register(&android_usb_driver);
usb_gadget_register_driver(&composite_driver);
driver->bind
composite_bind
composite->bind (gadget composite.c)
android_bind
usb_add_config
android_bind_config
bind_functions (gadget android.c)
mass_storage_bind_config
之前android项目上看usb gadget 的probe代码的流程追踪.