linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Peter Chen <hzpeterchen@gmail.com>
To: Stephen Boyd <stephen.boyd@linaro.org>
Cc: linux-usb@vger.kernel.org, Peter Chen <peter.chen@nxp.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Neil Armstrong <narmstrong@baylibre.com>,
	linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Andy Gross <andy.gross@linaro.org>,
	linux-arm-kernel@lists.infradead.org,
	Felipe Balbi <balbi@kernel.org>
Subject: Re: [PATCH v6 11/25] usb: chipidea: vbus event may exist before starting gadget
Date: Thu, 12 Jan 2017 17:52:20 +0800	[thread overview]
Message-ID: <20170112095220.GB15726@b29397-desktop> (raw)
In-Reply-To: <148418115431.32258.10648057913784071156@sboyd-linaro>

On Wed, Jan 11, 2017 at 04:32:34PM -0800, Stephen Boyd wrote:
> Quoting Peter Chen (2017-01-03 00:00:31)
> > On Wed, Dec 28, 2016 at 02:56:57PM -0800, Stephen Boyd wrote:
> > > From: Peter Chen <peter.chen@nxp.com>
> > > 
> > > At some situations, the vbus may already be there before starting
> > > gadget. So we need to check vbus event after switch to gadget in
> > > order to handle missing vbus event. The typical use cases are plugging
> > > vbus cable before driver load or the vbus has already been there
> > > after stopping host but before starting gadget.
> > > 
> > > Signed-off-by: Peter Chen <peter.chen@nxp.com>
> > > Tested-by: Stephen Boyd <stephen.boyd@linaro.org>
> > > Reviewed-by: Stephen Boyd <stephen.boyd@linaro.org>
> > > [sboyd@codeaurora.org: Modify comment text per list discussion]
> > > Signed-off-by: Stephen Boyd <stephen.boyd@linaro.org>
> > > ---
> > >  drivers/usb/chipidea/core.c |  4 ----
> > >  drivers/usb/chipidea/otg.c  | 14 +++++++++-----
> > >  drivers/usb/chipidea/udc.c  |  2 ++
> > >  3 files changed, 11 insertions(+), 9 deletions(-)
> > > 
> > > diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
> > > index 8a020ebbbe2f..37f888e31f10 100644
> > > --- a/drivers/usb/chipidea/core.c
> > > +++ b/drivers/usb/chipidea/core.c
> > > @@ -979,10 +979,6 @@ static int ci_hdrc_probe(struct platform_device *pdev)
> > >       }
> > >  
> > >       if (!ci_otg_is_fsm_mode(ci)) {
> > > -             /* only update vbus status for peripheral */
> > > -             if (ci->role == CI_ROLE_GADGET)
> > > -                     ci_handle_vbus_change(ci);
> > > -
> > >               ret = ci_role_start(ci, ci->role);
> > >               if (ret) {
> > >                       dev_err(dev, "can't start %s role\n",
> > > diff --git a/drivers/usb/chipidea/otg.c b/drivers/usb/chipidea/otg.c
> > > index 695f3fe3ae21..c972ed23b8ec 100644
> > > --- a/drivers/usb/chipidea/otg.c
> > > +++ b/drivers/usb/chipidea/otg.c
> > > @@ -134,9 +134,9 @@ void ci_handle_vbus_change(struct ci_hdrc *ci)
> > >       if (!ci->is_otg)
> > >               return;
> > >  
> > > -     if (hw_read_otgsc(ci, OTGSC_BSV))
> > > +     if (hw_read_otgsc(ci, OTGSC_BSV) && !ci->vbus_active)
> > >               usb_gadget_vbus_connect(&ci->gadget);
> > > -     else
> > > +     else if (!hw_read_otgsc(ci, OTGSC_BSV) && ci->vbus_active)
> > >               usb_gadget_vbus_disconnect(&ci->gadget);
> > >  }
> > >  
> > > @@ -175,10 +175,14 @@ static void ci_handle_id_switch(struct ci_hdrc *ci)
> > >  
> > >               ci_role_stop(ci);
> > >  
> > > -             if (role == CI_ROLE_GADGET)
> > > +             if (role == CI_ROLE_GADGET &&
> > > +                             IS_ERR(ci->platdata->vbus_extcon.edev))
> > >                       /*
> > > -                      * wait vbus lower than OTGSC_BSV before connecting
> > > -                      * to host
> > > +                      * wait vbus lower than OTGSC_BSV before connecting to
> > > +                      * host. If connecting status is from an external
> > > +                      * connector instead of register, we don't need to care
> > > +                      * vbus on the board, since it will not affect external
> > > +                      * connector status.
> > >                        */
> > >                       hw_wait_vbus_lower_bsv(ci);
> > >  
> > > diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
> > > index 732b281485de..0db56fb7e9e9 100644
> > > --- a/drivers/usb/chipidea/udc.c
> > > +++ b/drivers/usb/chipidea/udc.c
> > > @@ -1961,6 +1961,8 @@ static int udc_id_switch_for_device(struct ci_hdrc *ci)
> > >               /* Clear and enable BSV irq */
> > >               hw_write_otgsc(ci, OTGSC_BSVIS | OTGSC_BSVIE,
> > >                                       OTGSC_BSVIS | OTGSC_BSVIE);
> > > +     /* vbus change may has already been occurred */
> > > +     ci_handle_vbus_change(ci);
> > >  
> > >       return 0;
> > 
> > After thinking more, the above change will affect OTG FSM which calls
> > this API too, but handle vbus change later, see ci_otg_start_host and
> > ci_otg_start_gadget. How about changing patch like below:
> 
> Ok. I'll give it a spin but I think that should work too. I don't have
> any hardware to test the OTG FSM to make sure things don't break.

ci_handle_id_switch is only called at non OTG FSM mode, so it will not
affect OTG FSM.

-- 

Best Regards,
Peter Chen

  parent reply	other threads:[~2017-01-12  9:51 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-28 22:56 [PATCH v6 00/25] Support qcom's HSIC USB and rewrite USB2 HS support Stephen Boyd
2016-12-28 22:56 ` [PATCH v6 01/25] of: device: Support loading a module with OF based modalias Stephen Boyd
2016-12-28 22:56 ` [PATCH v6 02/25] of: device: Export of_device_{get_modalias,uvent_modalias} to modules Stephen Boyd
2016-12-28 22:56 ` [PATCH v6 03/25] usb: ulpi: Support device discovery via DT Stephen Boyd
2017-01-19  6:33   ` Peter Chen
2017-01-19  7:39     ` Greg Kroah-Hartman
2016-12-28 22:56 ` [PATCH v6 04/25] usb: chipidea: Only read/write OTGSC from one place Stephen Boyd
2016-12-28 22:56 ` [PATCH v6 05/25] usb: chipidea: Handle extcon events properly Stephen Boyd
2016-12-28 22:56 ` [PATCH v6 06/25] usb: chipidea: Add platform flag for wrapper phy management Stephen Boyd
2016-12-28 22:56 ` [PATCH v6 07/25] usb: chipidea: Notify events when switching host mode Stephen Boyd
2016-12-28 22:56 ` [PATCH v6 08/25] usb: chipidea: Remove locking in ci_udc_start() Stephen Boyd
2016-12-28 22:56 ` [PATCH v6 09/25] usb: chipidea: Add support for ULPI PHY bus Stephen Boyd
2016-12-28 22:56 ` [PATCH v6 10/25] usb: chipidea: Consolidate extcon notifiers Stephen Boyd
2016-12-28 22:56 ` [PATCH v6 11/25] usb: chipidea: vbus event may exist before starting gadget Stephen Boyd
2017-01-03  8:00   ` Peter Chen
     [not found]     ` <148418115431.32258.10648057913784071156@sboyd-linaro>
2017-01-12  9:52       ` Peter Chen [this message]
2016-12-28 22:56 ` [PATCH v6 12/25] usb: chipidea: msm: Mark device as runtime pm active Stephen Boyd
2016-12-28 22:56 ` [PATCH v6 13/25] usb: chipidea: msm: Rely on core to override AHBBURST Stephen Boyd
2016-12-28 22:57 ` [PATCH v6 14/25] usb: chipidea: msm: Use hw_write_id_reg() instead of writel Stephen Boyd
2016-12-28 22:57 ` [PATCH v6 15/25] usb: chipidea: msm: Add proper clk and reset support Stephen Boyd
2016-12-28 22:57 ` [PATCH v6 16/25] usb: chipidea: msm: Mux over secondary phy at the right time Stephen Boyd
2016-12-28 22:57 ` [PATCH v6 17/25] usb: chipidea: msm: Restore wrapper settings after reset Stephen Boyd
2016-12-28 22:57 ` [PATCH v6 18/25] usb: chipidea: msm: Make platform data driver local instead of global Stephen Boyd
2016-12-28 22:57 ` [PATCH v6 19/25] usb: chipidea: msm: Add reset controller for PHY POR bit Stephen Boyd
2016-12-28 22:57 ` [PATCH v6 20/25] usb: chipidea: msm: Handle phy power states Stephen Boyd
2016-12-28 22:57 ` [PATCH v6 21/25] usb: chipidea: msm: Be silent on probe defer errors Stephen Boyd
2016-12-28 22:57 ` [PATCH v6 22/25] usb: chipidea: Drop lock across event_notify during gadget stop Stephen Boyd
2017-01-03  6:46   ` Peter Chen
2016-12-28 22:57 ` [PATCH v6 23/25] usb: chipidea: Pullup D+ in device mode via phy APIs Stephen Boyd
2017-01-03  6:53   ` Peter Chen
     [not found]     ` <148418039309.32258.7247753739063801774@sboyd-linaro>
2017-01-12  9:50       ` Peter Chen
     [not found]         ` <148426139182.20672.2422337338087784924@sboyd-linaro>
2017-01-13  3:35           ` Peter Chen
     [not found]             ` <148433778067.32719.6179204976256776867@sboyd-linaro>
2017-01-16  3:45               ` Peter Chen
     [not found]                 ` <148467591341.23457.3638889856786813589@sboyd-linaro>
2017-01-18  7:34                   ` Peter Chen
2017-01-18 20:54                     ` Stephen Boyd
2017-01-18 20:57                       ` Rob Herring
2017-01-19  6:29                         ` Peter Chen
2016-12-28 22:57 ` [PATCH v6 24/25] phy: Add support for Qualcomm's USB HSIC phy Stephen Boyd
2016-12-28 22:57 ` [PATCH v6 25/25] phy: Add support for Qualcomm's USB HS phy Stephen Boyd
2017-01-20  7:40 ` [PATCH v6 00/25] Support qcom's HSIC USB and rewrite USB2 HS support Peter Chen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170112095220.GB15726@b29397-desktop \
    --to=hzpeterchen@gmail.com \
    --cc=andy.gross@linaro.org \
    --cc=arnd@arndb.de \
    --cc=balbi@kernel.org \
    --cc=bjorn.andersson@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=narmstrong@baylibre.com \
    --cc=peter.chen@nxp.com \
    --cc=stephen.boyd@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).