Re: [PATCH v8 00/11] Add USB OTG HNP and SRP support on Chipidea usb driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux