Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp13334903ybl; Sun, 29 Dec 2019 09:32:31 -0800 (PST) X-Google-Smtp-Source: APXvYqzdNZYnwc78HpV3JhKAhgIvjPNIZv30A1RfSuIesGv6/cPXGdM7y1YOlQq+QAV95hsShgeQ X-Received: by 2002:a9d:6f07:: with SMTP id n7mr67418979otq.112.1577640751711; Sun, 29 Dec 2019 09:32:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1577640751; cv=none; d=google.com; s=arc-20160816; b=OKofcWrkpktKyHO89J7CGUCT66Zd6T1h/H03OfEcQ4oMuyjlXjsxRxFQCO4zF7Bqbl 1auY68b25Nq1tI9dHMNy5Z6y1exRJTXaepld9fZfZ0gwenrcMxhJ7P5s9UssonIHrQhw 33vf5q8TRjLvXPlaqj96Is6+rtYTOPOgQajrJNCBEqo0hy9dQDYzaiCUxy/2XS+X6rEK x77GqBSyb0Buqpui9XlOwdMuMmJVuPbwIiI78oA6gA2UB/yBilrMvyRnGZH+dnUHocLj 3hxUMIBw2QT94LeRGu9LHxN4W7/QIa2Q8QbhOQTBGpoxN1pXMf2wd6hjJr5MZgXq6MLW l8Pw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=2cKCh4OtXXqTbHkckvPJrRyAlg/4B9d7MNADNRm7zEI=; b=nxqcCKhHshFLLRe2sUMYpq3qTVhVq2w4F5XzJpledKXSwhi6bhfOTcx4bwmSusFFit yNqEfxnIBmWrILDS09Zxyb0g4leueX0p7s8mKMhh8nBF8i3utTTBH9ehXFeVEwG884QX Tn0XIbK8Mypv8+gqdcukdtW2Pr+MjTcDkNExC81OEt0wWfYHvU0EAhkdjC0E4JGnIwYw JwRccxpwsEJZGY4e5UOIzB5gGRqLwqe73PrnibKp/Ubqiayc7zhzQopt8m/rgcT8H5Gk g3ykvxYvHKR7fl9ZnDBWLxASAG+8yb7ZsrAyTbImh44cZmSaFZ6RNpH7Y2zWpbcKb7XC Uclg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=bLSjICPb; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 17si5781477oix.22.2019.12.29.09.32.21; Sun, 29 Dec 2019 09:32:31 -0800 (PST) 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=@kernel.org header.s=default header.b=bLSjICPb; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729137AbfL2RbT (ORCPT + 99 others); Sun, 29 Dec 2019 12:31:19 -0500 Received: from mail.kernel.org ([198.145.29.99]:58180 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729111AbfL2RbN (ORCPT ); Sun, 29 Dec 2019 12:31:13 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 1633020409; Sun, 29 Dec 2019 17:31:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1577640672; bh=e3VU0OirdMi86p7XtsD5BpMINgqYQifhGmUKKBmH9wE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bLSjICPbLIwuhFWZK1ZBfiw1mOanMv2GLtkvlcd6QTS5LpLn4I0SeW4DALZ5YN5gp NTXYOLZaTr9e8fqp09Csjt3Co9gWz/1ndcrNovAfQdLT1/VBepbGmbNzHLWYv5eFSh fhhEp6iobV6gUknmn8NODQSGM+6o49fHREd7yPTE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Veeraiyan Chidambaram , Eugeniu Rosca , Yoshihiro Shimoda , Sasha Levin Subject: [PATCH 4.19 052/219] usb: renesas_usbhs: add suspend event support in gadget mode Date: Sun, 29 Dec 2019 18:17:34 +0100 Message-Id: <20191229162515.161483642@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191229162508.458551679@linuxfoundation.org> References: <20191229162508.458551679@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Veeraiyan Chidambaram [ Upstream commit 39abcc84846bbc0538f13c190b6a9c7e36890cd2 ] When R-Car Gen3 USB 2.0 is in Gadget mode, if host is detached an interrupt will be generated and Suspended state bit is set in interrupt status register. Interrupt handler will call driver->suspend(composite_suspend) if suspended state bit is set. composite_suspend will call ffs_func_suspend which will post FUNCTIONFS_SUSPEND and will be consumed by user space application via /dev/ep0. To be able to detect host detach, extend the DVSQ_MASK to cover the Suspended bit of the DVSQ[2:0] bitfield from the Interrupt Status Register 0 (INTSTS0) register and perform appropriate action in the DVST interrupt handler (usbhsg_irq_dev_state). Without this commit, disconnection of the phone from R-Car-H3 ES2.0 Salvator-X CN9 port is not recognized and reverse role switch does not happen. If phone is connected again it does not enumerate. With this commit, disconnection will be recognized and reverse role switch will happen by a user space application. If phone is connected again it will enumerate properly and will become visible in the output of 'lsusb'. Signed-off-by: Veeraiyan Chidambaram Signed-off-by: Eugeniu Rosca Reviewed-by: Yoshihiro Shimoda Tested-by: Yoshihiro Shimoda Link: https://lore.kernel.org/r/1568207756-22325-3-git-send-email-external.veeraiyan.c@de.adit-jv.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/usb/renesas_usbhs/common.h | 3 ++- drivers/usb/renesas_usbhs/mod_gadget.c | 12 +++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/usb/renesas_usbhs/common.h b/drivers/usb/renesas_usbhs/common.h index c47b721b8bca..63a75fd9fa0c 100644 --- a/drivers/usb/renesas_usbhs/common.h +++ b/drivers/usb/renesas_usbhs/common.h @@ -157,11 +157,12 @@ struct usbhs_priv; #define VBSTS (1 << 7) /* VBUS_0 and VBUSIN_0 Input Status */ #define VALID (1 << 3) /* USB Request Receive */ -#define DVSQ_MASK (0x3 << 4) /* Device State */ +#define DVSQ_MASK (0x7 << 4) /* Device State */ #define POWER_STATE (0 << 4) #define DEFAULT_STATE (1 << 4) #define ADDRESS_STATE (2 << 4) #define CONFIGURATION_STATE (3 << 4) +#define SUSPENDED_STATE (4 << 4) #define CTSQ_MASK (0x7) /* Control Transfer Stage */ #define IDLE_SETUP_STAGE 0 /* Idle stage or setup stage */ diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c b/drivers/usb/renesas_usbhs/mod_gadget.c index 7feac4128a2d..f36248e9387d 100644 --- a/drivers/usb/renesas_usbhs/mod_gadget.c +++ b/drivers/usb/renesas_usbhs/mod_gadget.c @@ -456,12 +456,18 @@ static int usbhsg_irq_dev_state(struct usbhs_priv *priv, { struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv); struct device *dev = usbhsg_gpriv_to_dev(gpriv); + int state = usbhs_status_get_device_state(irq_state); gpriv->gadget.speed = usbhs_bus_get_speed(priv); - dev_dbg(dev, "state = %x : speed : %d\n", - usbhs_status_get_device_state(irq_state), - gpriv->gadget.speed); + dev_dbg(dev, "state = %x : speed : %d\n", state, gpriv->gadget.speed); + + if (gpriv->gadget.speed != USB_SPEED_UNKNOWN && + (state & SUSPENDED_STATE)) { + if (gpriv->driver && gpriv->driver->suspend) + gpriv->driver->suspend(&gpriv->gadget); + usb_gadget_set_state(&gpriv->gadget, USB_STATE_SUSPENDED); + } return 0; } -- 2.20.1