Hi Felipe & Alan: It is the follow-up: http://marc.info/?l=linux-usb&m=142301743123434&w=2 In the first patch, I follow Alan's suggestion that store usb_udc pointer in struct usb_gadget, it will help to find usb_udc according to usb_gadget easlier (Using iterates usb_udc list way will meet lock udc_lock twice problem). In the second patch, I introduce the API usb_udc_vbus_handler, the udc driver can call it if it wants to let the udc core control dp according to vbus. In the third patch, I add the user chipidea for using usb_udc_vbus_handler, after applying this new API, all other dp control code can be deleted except for .pullup API. Thanks. Peter Chen (3): usb: udc: store usb_udc pointer in struct usb_gadget usb: udc: add usb_udc_vbus_handler usb: chipidea: udc: apply new usb_udc_vbus_handler interface drivers/usb/chipidea/udc.c | 10 ++--- drivers/usb/gadget/udc/udc-core.c | 82 +++++++++++++++++++-------------------- include/linux/usb/gadget.h | 27 +++++++++++++ 3 files changed, 71 insertions(+), 48 deletions(-) -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html