On Wed, Apr 09, 2014 at 08:29:30PM +0800, Li Jun wrote:
> From: Li Jun <b47...@freescale.com>
> 
> 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

> 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to