From patchwork Tue Nov 15 21:47:34 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Stultz X-Patchwork-Id: 82418 Delivered-To: patches@linaro.org Received: by 10.140.97.165 with SMTP id m34csp1753152qge; Tue, 15 Nov 2016 13:47:41 -0800 (PST) X-Received: by 10.98.11.71 with SMTP id t68mr50546242pfi.136.1479246461789; Tue, 15 Nov 2016 13:47:41 -0800 (PST) Return-Path: Received: from mail-pg0-x22f.google.com (mail-pg0-x22f.google.com. [2607:f8b0:400e:c05::22f]) by mx.google.com with ESMTPS id q17si28229477pgh.96.2016.11.15.13.47.41 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 15 Nov 2016 13:47:41 -0800 (PST) Received-SPF: pass (google.com: domain of john.stultz@linaro.org designates 2607:f8b0:400e:c05::22f as permitted sender) client-ip=2607:f8b0:400e:c05::22f; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: domain of john.stultz@linaro.org designates 2607:f8b0:400e:c05::22f as permitted sender) smtp.mailfrom=john.stultz@linaro.org; dmarc=pass (p=NONE dis=NONE) header.from=linaro.org Received: by mail-pg0-x22f.google.com with SMTP id p66so70871608pga.2 for ; Tue, 15 Nov 2016 13:47:41 -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=M3/sYQmKzvVPQzx6zCRwdpknoDyWJuhLzYWpNHfnOtk=; b=kaqRVAdwVP3lVC8NlNOufHom8yiI8bQxm72mgU4PbWnXGlC/kyKK38NVlppubet4+9 fcfiEvIc8zoZY+28RbTGyUehfDV4D9NgtpdGd63a8p6mdthIsAefeYNAXpK9qa/Aw/81 ZBPSTTdsNpEBui6qLs5TBLBzAEIxL230gtYu8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=M3/sYQmKzvVPQzx6zCRwdpknoDyWJuhLzYWpNHfnOtk=; b=EOE+09Nt8w2Uu3eh246H4R5HteYc+TxGQYVIQ7nzkVKuOORbeuTQo5iIWQ9Piap+gv 15odIQscbR2nQAlESr1ma5lD7isnFxaflm7TrfuVaFHXcNRDi6c2mfywoJfa6D6EtYTd l+CqNppEgWbz7qRYqZ6XJGHNPoweugol8p1XQ7R0n0qjv4TnbguE/9Fq998+TffnQ6+I fBw984LoopLzmPpPnSg+uIcR1l8Z9vjxNEQ9I41Dw+K1WbFdGxWSv13ff+4F84BOOkW9 +lsSAH+200FakXqyIyf6pIDt/9u6iQ+Fn/4qmV7OenbLd3KA1+nMK8wkdRCpyEt0OPzt yFKQ== X-Gm-Message-State: ABUngvfau/hYz/HD0pgKCsiNJLwCNJ0rgz5EXaWRjAg4pYL0afKiREWa4+0bu97CFhfLP75lqz4= X-Received: by 10.99.144.65 with SMTP id a62mr477005pge.103.1479246461497; Tue, 15 Nov 2016 13:47:41 -0800 (PST) Return-Path: Received: from localhost.localdomain ([2601:1c2:1002:83f0:4e72:b9ff:fe99:466a]) by smtp.gmail.com with ESMTPSA id q9sm46049156pfg.47.2016.11.15.13.47.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 15 Nov 2016 13:47:40 -0800 (PST) From: John Stultz To: lkml Cc: Chen Yu , Wei Xu , Guodong Xu , Amit Pundir , Rob Herring , John Youn , Douglas Anderson , Felipe Balbi , Greg Kroah-Hartman , linux-usb@vger.kernel.org, John Stultz Subject: [RFC][PATCH 1/3] usb: dwc2: Force port resume on switching to device mode Date: Tue, 15 Nov 2016 13:47:34 -0800 Message-Id: <1479246456-21652-2-git-send-email-john.stultz@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1479246456-21652-1-git-send-email-john.stultz@linaro.org> References: <1479246456-21652-1-git-send-email-john.stultz@linaro.org> From: Chen Yu We've seen failures when switching between host and gadget mode, which was diagnosed as being caused due to the bus being auto-suspended when we switched. So this patch forces a port resume when switching to device mode if the bus is suspended. Cc: Wei Xu Cc: Guodong Xu Cc: Amit Pundir Cc: Rob Herring Cc: John Youn Cc: Douglas Anderson Cc: Chen Yu Cc: Felipe Balbi Cc: Greg Kroah-Hartman Cc: linux-usb@vger.kernel.org Signed-off-by: Chen Yu Signed-off-by: John Stultz --- drivers/usb/dwc2/hcd.c | 8 ++++++++ 1 file changed, 8 insertions(+) -- 2.7.4 diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c index df5a065..b374e60 100644 --- a/drivers/usb/dwc2/hcd.c +++ b/drivers/usb/dwc2/hcd.c @@ -54,6 +54,9 @@ #include "core.h" #include "hcd.h" + +static void dwc2_port_resume(struct dwc2_hsotg *hsotg); + /* * ========================================================================= * Host Core Layer Functions @@ -3204,6 +3207,11 @@ static void dwc2_conn_id_status_change(struct work_struct *work) if (gotgctl & GOTGCTL_CONID_B) { /* Wait for switch to device mode */ dev_dbg(hsotg->dev, "connId B\n"); + if (hsotg->bus_suspended) { + dev_info(hsotg->dev, + "Do port resume before switching to device mode\n"); + dwc2_port_resume(hsotg); + } while (!dwc2_is_device_mode(hsotg)) { dev_info(hsotg->dev, "Waiting for Peripheral Mode, Mode=%s\n",