From patchwork Mon May 16 08:43:53 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "\(Exiting\) Baolin Wang" X-Patchwork-Id: 67833 Delivered-To: patch@linaro.org Received: by 10.140.92.199 with SMTP id b65csp1421923qge; Mon, 16 May 2016 01:44:14 -0700 (PDT) X-Received: by 10.98.0.203 with SMTP id 194mr43640631pfa.126.1463388254521; Mon, 16 May 2016 01:44:14 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w13si44592407pas.206.2016.05.16.01.44.14; Mon, 16 May 2016 01:44:14 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753433AbcEPIoM (ORCPT + 29 others); Mon, 16 May 2016 04:44:12 -0400 Received: from mail-pf0-f181.google.com ([209.85.192.181]:33247 "EHLO mail-pf0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752059AbcEPIoK (ORCPT ); Mon, 16 May 2016 04:44:10 -0400 Received: by mail-pf0-f181.google.com with SMTP id 206so65828606pfu.0 for ; Mon, 16 May 2016 01:44:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=BXc4IqTocD8CPiOifFkrR9E3YfxMzZg52pgzmaSCQWY=; b=IcNwQsU2ALZjJtOhrB2ePr3XPl9sfWYkwO8jDKHgARhRL+plESc8XNhUjxQ0Dvfzs+ F9NzUbULPWVoZ83ubcZBWmZcROY66CqClfrS2Xbd18kpzwA7a8o+ctMTtQwKrC7EmwlL 4nX2J0xoRZ6quUpFxFR45Klu24+g/C3hVUOR4= 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; bh=BXc4IqTocD8CPiOifFkrR9E3YfxMzZg52pgzmaSCQWY=; b=V73dI07V0Hw4peDmoNdJ/AxWPyYai19IRaqWhHRfNKQODDmBdYh2KZTUPdhKnTUGMc a3TlA1g9oRbWwW/evmVaLHwAWxyOfk0i6VSgnhF+5+C1G3+fvh7nlgw+4iLFquKPY7ff TRW+HsWJFpejjxwccpmFdWArraWmvnm+nKBdZdtrhsl5hGT2X9G7T/axCV1sbEtkoaGu +TunJGSThbLYSCmV3Omeit/SM0EQd5zt+mrviKCD8RzLeHcctrgCaekVapQh8ve7yHyK 7xCNgY6I08BJQjiQ0iGop45IyG60LTNJs9QSPwuOaVfoSXcCfUGouTiLFAKBH+yLZyqt p6Fw== X-Gm-Message-State: AOPr4FVUnk+lVErRh4WDkiUWHC0OczmhaVvyjJjcrFymr/37OwOsD21eJq5ij8VhWwX6TH/k X-Received: by 10.98.109.198 with SMTP id i189mr43220069pfc.106.1463388249883; Mon, 16 May 2016 01:44:09 -0700 (PDT) Received: from baolinwangubtpc.spreadtrum.com ([175.111.195.49]) by smtp.gmail.com with ESMTPSA id zs16sm45639900pab.13.2016.05.16.01.44.07 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 16 May 2016 01:44:09 -0700 (PDT) From: Baolin Wang To: balbi@kernel.org, gregkh@linuxfoundation.org Cc: broonie@kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, baolin.wang@linaro.org Subject: [PATCH] dwc3: gadget: Implement the suspend entry event handler Date: Mon, 16 May 2016 16:43:53 +0800 Message-Id: X-Mailer: git-send-email 1.7.9.5 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org It had changed to be suspend event for BIT6 in DEVT register from version 2.30a and above. Thus this patch introduces one suspend event handler to handle the suspend event. Signed-off-by: Baolin Wang --- drivers/usb/dwc3/gadget.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) -- 1.7.9.5 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 8e4a1b1..9b14ecc 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2595,6 +2595,17 @@ static void dwc3_gadget_linksts_change_interrupt(struct dwc3 *dwc, dwc->link_state = next; } +static void dwc3_gadget_suspend_interrupt(struct dwc3 *dwc, + unsigned int evtinfo) +{ + enum dwc3_link_state next = evtinfo & DWC3_LINK_STATE_MASK; + + if (dwc->link_state != next && next == DWC3_LINK_STATE_U3) + dwc3_suspend_gadget(dwc); + + dwc->link_state = next; +} + static void dwc3_gadget_hibernation_interrupt(struct dwc3 *dwc, unsigned int evtinfo) { @@ -2646,7 +2657,20 @@ static void dwc3_gadget_interrupt(struct dwc3 *dwc, dwc3_gadget_linksts_change_interrupt(dwc, event->event_info); break; case DWC3_DEVICE_EVENT_EOPF: - dwc3_trace(trace_dwc3_gadget, "End of Periodic Frame"); + /* It changed to be suspend event for version 2.30a and above */ + if (dwc->revision < DWC3_REVISION_230A) { + dwc3_trace(trace_dwc3_gadget, "End of Periodic Frame"); + } else { + dwc3_trace(trace_dwc3_gadget, "U3/L1-L2 Suspend Event"); + + /* + * Ignore suspend event until the gadget enters into + * USB_STATE_CONFIGURED state. + */ + if (dwc->gadget.state >= USB_STATE_CONFIGURED) + dwc3_gadget_suspend_interrupt(dwc, + event->event_info); + } break; case DWC3_DEVICE_EVENT_SOF: dwc3_trace(trace_dwc3_gadget, "Start of Periodic Frame");