From patchwork Wed Dec 28 22:56:57 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Boyd X-Patchwork-Id: 9490731 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id BCF4462AB0 for ; Wed, 28 Dec 2016 23:00:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A6D5626242 for ; Wed, 28 Dec 2016 23:00:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9933A26490; Wed, 28 Dec 2016 23:00:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 32D9626242 for ; Wed, 28 Dec 2016 23:00:37 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.85_2 #1 (Red Hat Linux)) id 1cMNBn-0001rb-Mp; Wed, 28 Dec 2016 22:59:19 +0000 Received: from mail-pg0-x22d.google.com ([2607:f8b0:400e:c05::22d]) by bombadil.infradead.org with esmtps (Exim 4.85_2 #1 (Red Hat Linux)) id 1cMNAH-00011o-Pd for linux-arm-kernel@lists.infradead.org; Wed, 28 Dec 2016 22:57:47 +0000 Received: by mail-pg0-x22d.google.com with SMTP id g1so120719854pgn.0 for ; Wed, 28 Dec 2016 14:57:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Lge0vQ1Lfv7+XSNiuVO0keAqpW3VpQpLDSqt3nNiba0=; b=aE7MXwibYaDpNkc1KMihuwJALkshbh4J3T2iQ5Np+1+Oa35jD89b1eRTZSV0Y0I4c5 S9rTuiCl1o0NJC1wG7iB4ejywSUkmkpDdQX9mttzrkTay5zZULPLK2BQVYUa2bznS3ww qBlRJ5pSe0PypzsvFDToaut7AFI7OSjrv/U4Y= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Lge0vQ1Lfv7+XSNiuVO0keAqpW3VpQpLDSqt3nNiba0=; b=XDzTSOr9WUwZnX6LOvlcWA3yZL70NJOJrz36IoqaFsHK2xNBjp5/aqDD83dvkLKIiX +Sm2acG5LckX70Nxf9TAuSZibrJL+uuTq1ghLeIC+ij3F+ZEwdV+XfWbTWPYYZM4PqRg ntFDMAQRTFLHo0MLw+6BBo60RIajOT3CqcKItnbcMPY0Fs4AIFLCcwb4f1pT3giIwraG RxegI9C2CeaNDstaBZTQKeSvQfdlgpTSTYb2Ac6OYVL4IyJib/ZIaNU8GhoIllG2fLUo wFv6lxcuc/xMSRt+nj+TjbHqK9ABJjQxsE6rRxETrUXDTKsed3DqHzI+aopezuULfvev qcXA== X-Gm-Message-State: AIkVDXJf1c54R/J+lRhjJYzO3BfPj/GOKN8ytcYDxxNTrQoH9EO/sxQ5iCdIVkwc2EwqIv6i X-Received: by 10.84.217.18 with SMTP id o18mr83325907pli.45.1482965846581; Wed, 28 Dec 2016 14:57:26 -0800 (PST) Received: from localhost.localdomain (i-global254.qualcomm.com. [199.106.103.254]) by smtp.gmail.com with ESMTPSA id x4sm100355741pgc.14.2016.12.28.14.57.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 28 Dec 2016 14:57:25 -0800 (PST) From: Stephen Boyd To: linux-usb@vger.kernel.org Subject: [PATCH v6 11/25] usb: chipidea: vbus event may exist before starting gadget Date: Wed, 28 Dec 2016 14:56:57 -0800 Message-Id: <20161228225711.698-12-stephen.boyd@linaro.org> X-Mailer: git-send-email 2.10.0.297.gf6727b0 In-Reply-To: <20161228225711.698-1-stephen.boyd@linaro.org> References: <20161228225711.698-1-stephen.boyd@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20161228_145746_023263_DB9F3BEA X-CRM114-Status: GOOD ( 14.50 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Chen , Arnd Bergmann , Neil Armstrong , linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Bjorn Andersson , Andy Gross , linux-arm-kernel@lists.infradead.org, Felipe Balbi MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP From: Peter Chen 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 Tested-by: Stephen Boyd Reviewed-by: Stephen Boyd [sboyd@codeaurora.org: Modify comment text per list discussion] Signed-off-by: Stephen Boyd --- 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; }