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: 89221 Delivered-To: patch@linaro.org Received: by 10.140.20.101 with SMTP id 92csp5739576qgi; Wed, 28 Dec 2016 15:00:17 -0800 (PST) X-Received: by 10.99.66.198 with SMTP id p189mr71939116pga.30.1482966017488; Wed, 28 Dec 2016 15:00:17 -0800 (PST) Return-Path: Received: from bombadil.infradead.org (bombadil.infradead.org. [2001:1868:205::9]) by mx.google.com with ESMTPS id e186si51369369pfc.285.2016.12.28.15.00.17 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Dec 2016 15:00:17 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org designates 2001:1868:205::9 as permitted sender) client-ip=2001:1868:205::9; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org designates 2001:1868:205::9 as permitted sender) smtp.mailfrom=linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org; dmarc=fail (p=NONE dis=NONE) header.from=linaro.org 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-Spam-Score: -2.0 (--) X-Spam-Report: SpamAssassin version 3.4.0 on bombadil.infradead.org summary: Content analysis details: (-2.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2607:f8b0:400e:c05:0:0:0:22d listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid 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+patch=linaro.org@lists.infradead.org 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(-) -- 2.10.0.297.gf6727b0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel 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; }