On Thu, Apr 10, 2014 at 04:09:31PM +0800, Peter Chen wrote: > On Wed, Apr 09, 2014 at 08:29:30PM +0800, Li Jun wrote: > > From: Li Jun <b47624@xxxxxxxxxxxxx> > > > > This patchset adds USB OTG HNP and SRP support on chipidea usb driver, > > existing OTG port role swtich function by ID pin status kept unchanged, > > based on that, if select CONFIG_USB_OTG_FSM, OTG HNP and SRP will be > > supported. > > > > Reference to: > > "On-The-Go and Embedded Host Supplement to the USB Revision 2.0 Specification July 27, 2012 > > Revision 2.0 version 1.1a" > > > > Changes since v7: > > - move role start special handling in ci_hdrc_otg_fsm_start() > > this can make start host/gadget clean. > > - move ci_hdrc_otg_fsm_init() into ci_hdrc_otg_init() > > - Remain ci_role_start() in ci_hdrc_probe because host role start > > need be done before request_irq. > > - Revert the otg->host set change since fsm init will be fixed before > > role start. > > - Remove fsm->protocol init in ci_hdrc_otg_fsm_init(). > > > > Hi Jun, you have considered all cases well, but we do need the code > flow to reflect otg state machine, otg fsm code is the common code, > it is better to let the otg fsm code to handle device's initialization. > Eg, from undef->b_idle->b_peripheral. > > Below changes you may need to consider: > > 1. At ci_hdrc_probe, > if (ci_otg_is_fsm_mode(ci)) > do ci_hdrc_otg_fsm_start() > else > do ci_role_start(ci, ci->role); > ... > call request_irq > > 2. At ci_udc_start > > if (ci_otg_is_fsm_mode(ci)) > do ci_hdrc_otg_fsm_start() > else > do enable_device_mode(); > > 3. At ci_otg_fsm_work, we need to call the second level otg_statemachine > async since the irq is still not enabled after the first otg_statemachine. > It is reasonable we enable interrupt after the controller's init > has finished. > > Any problems, let me know. > > Peter > Thanks for the detailed comments, yes, I need make the OTG fsm code is early to understand for anyone who firstly touch this driver. I agree with the 3 comments and will resend v9 for those. Li Jun > > Changes since v6: > > - Move ci_hdrc_otg_fsm_start() into ci_hdrc_otg_fsm_init() > > - Call ci_hdrc_otg_fsm_init() in ci_hdrc_probe() > > - Add fsm->protocol init in ci_hdrc_otg_fsm_init() > > - Remove role check in start/stop host/gadget. > > - Add ci_otg_is_fsm_mode() check when start fsm in ci_udc_start(). > > - Add struct usb_otg *otg in ci_hdrc_otg_fsm_init() for easy read when > > do init, set otg->host if host role start before otg fsm init(power up > > with ID is 0). > > - set otg->host in host_start() if otg fsm init happens before host start > > (power up with ID is 1) in host.c > > - Add comments of ci_hdrc structure for added fileds(fsm and fsm_timer) > > in ci.h > > > > Changes since v5: > > - Move ci_otg_is_fsm_mode() check into caller functions. > > - Update comments alignment in otg_fsm.h > > - Revert the ci_hdrc_otg_fsm_start() change to be v4 > > - Revert the role check removal of start host/gadget to be v4 since > > ci_start_role may be called out of otg fsm. > > - Set controller to be device mode after stop host, to be able to > > generate data pulse correctly. > > - Update some fsm variables to align with otg state. > > - Update test documents for A device start new seesion in step 6): > > need set a_bus_drop to be 0 and set a_bus_req to be 1. > > - Typo fix. > > > > Changes since v4: > > - Fix compile warnings if USB_OTG_FSM is not enabled. > > - Add ci_otg_is_fsm_mode() to replace ci->is_otg for checking if ci is in > > OTG FSM mode. > > - Move ci_hdrc_otg_fsm_start() at end of ci_hdrc_otg_fsm_init(). > > - Fix patch splict problem(a later patch changes a previous one). > > - Remove unnecessary role check in start host/gadget. > > - Add {} in start_host.c to fix Coding style problem and declar a variable > > equal to ci->transceiver->otg firstly when init otg port number. > > - Update some driver comments of chipidea drivers if this patchset applied. > > > > Changes since v3: > > - Move out 2 patches from this patchset, as which are not directly related to > > otg fsm. > > - Add a new file chipidea.txt under Documentation/usb/ to show how to test > > OTG HNP and SRP. > > - Directly embed struct otg_fsm into ci_hdrc instead of pointer of otg_fsm. > > - Remove flag check in ci_otg_del_timer(). > > - Remove ADP related code and comments since ADP is not supported by chip. > > - Start OTG fsm before request_irq. > > - For B-device, do not do OTG fsm transitions when gadget driver > > is not registered, and start OTG fsm in register gadget driver. > > - Directly call ci_otg_fsm_work() in ci_hdrc_otg_fsm_start(). > > - Enable data pulse when a_wait_vfall timer time out. > > - Update a_wait_vrise time out function. > > - UPdate comments of OTG time macro definitions in otg_fsm.h according to > > OTG and EH 2.0. > > - Some typo and comments format changes. > > > > Changes since v2: > > - Add ABI document for sysfs input files description: > > Documentation/ABI/testing/sysfs-platform-chipidea-usb-otg > > - Add a debug file for show some USB registers value. > > - Split host driver change to be 2 patches, one for otg_port number init; > > the other one for vbus control change. > > - Export interrupt enable and status read functions from udc driver. > > - Only enable AVV irq in otg fsm init. > > - Remove duplicated USBSTS bits definitions. > > - Add HowTo demo role switch with 2 Freescale i.MX6Q sabre SD boards > > in cover letter. > > - typo correction. > > > > Changes since v1: > > - Move out HNP polling patch from this series, which will be a seperated patchset > > followed this one > > - Change fsm timers global variables to be a structure embeded in ci_hdrc, > > to make multiple OTG instances can exist in one system > > - Change some otg fsm functions to be static > > - Re-split timer init patch to avoid a later patch changing a previous one > > in the same series > > - Change timer structure memory allocation to be devm_kzalloc > > - Update some format alignment and spelling errors > > > > Li Jun (11): > > usb: chipidea: usb OTG fsm initialization. > > usb: chipidea: host: vbus control change for OTG HNP. > > usb: chipidea: host: init otg port number. > > usb: chipidea: udc: driver update for OTG HNP. > > usb: chipidea: add OTG fsm operation functions implemenation. > > usb: chipidea: OTG fsm timers initialization. > > usb: chipidea: OTG HNP and SRP fsm implementation. > > usb: chipidea: add sys inputs for OTG fsm input. > > usb: chipidea: debug: add debug file for OTG variables > > Documentation: ABI: usb: sysfs Description for chipidea USB OTG HNP > > and SRP > > Documentation: usb: add chipidea.txt for how to demo usb OTG HNP and > > SRP > > > > .../ABI/testing/sysfs-platform-chipidea-usb-otg | 56 ++ > > Documentation/usb/chipidea.txt | 71 ++ > > drivers/usb/chipidea/Makefile | 1 + > > drivers/usb/chipidea/bits.h | 10 + > > drivers/usb/chipidea/ci.h | 19 + > > drivers/usb/chipidea/core.c | 13 +- > > drivers/usb/chipidea/debug.c | 84 ++ > > drivers/usb/chipidea/host.c | 21 +- > > drivers/usb/chipidea/otg.c | 15 +- > > drivers/usb/chipidea/otg_fsm.c | 856 ++++++++++++++++++++ > > drivers/usb/chipidea/otg_fsm.h | 129 +++ > > drivers/usb/chipidea/udc.c | 17 +- > > 12 files changed, 1282 insertions(+), 10 deletions(-) > > create mode 100644 Documentation/ABI/testing/sysfs-platform-chipidea-usb-otg > > create mode 100644 Documentation/usb/chipidea.txt > > create mode 100644 drivers/usb/chipidea/otg_fsm.c > > create mode 100644 drivers/usb/chipidea/otg_fsm.h > > > > -- > > 1.7.9.5 > > > > > > -- > > Best Regards, > Peter Chen > -- 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