All of lore.kernel.org
 help / color / mirror / Atom feed
From: Felipe Balbi <balbi@kernel.org>
To: John Stultz <john.stultz@linaro.org>,
	lkml <linux-kernel@vger.kernel.org>
Cc: Yu Chen <chenyu56@huawei.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	ShuFan Lee <shufan_lee@richtek.com>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Chunfeng Yun <chunfeng.yun@mediatek.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Andy Shevchenko <andy.shevchenko@gmail.com>,
	Jun Li <lijun.kernel@gmail.com>,
	Valentin Schneider <valentin.schneider@arm.com>,
	Jack Pham <jackp@codeaurora.org>,
	linux-usb@vger.kernel.org, devicetree@vger.kernel.org,
	John Stultz <john.stultz@linaro.org>
Subject: Re: [PATCH v4 7/9] usb: dwc3: Registering a role switch in the DRD code.
Date: Tue, 29 Oct 2019 11:21:49 +0200	[thread overview]
Message-ID: <87eeyvj49e.fsf@gmail.com> (raw)
In-Reply-To: <20191028215919.83697-8-john.stultz@linaro.org>

[-- Attachment #1: Type: text/plain, Size: 4066 bytes --]


Hi,

John Stultz <john.stultz@linaro.org> writes:
> From: Yu Chen <chenyu56@huawei.com>
>
> The Type-C drivers use USB role switch API to inform the
> system about the negotiated data role, so registering a role
> switch in the DRD code in order to support platforms with
> USB Type-C connectors.
>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Rob Herring <robh+dt@kernel.org>
> Cc: Mark Rutland <mark.rutland@arm.com>
> CC: ShuFan Lee <shufan_lee@richtek.com>
> Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
> Cc: Chunfeng Yun <chunfeng.yun@mediatek.com>
> Cc: Yu Chen <chenyu56@huawei.com>
> Cc: Felipe Balbi <balbi@kernel.org>
> Cc: Hans de Goede <hdegoede@redhat.com>
> Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
> Cc: Jun Li <lijun.kernel@gmail.com>
> Cc: Valentin Schneider <valentin.schneider@arm.com>
> Cc: Jack Pham <jackp@codeaurora.org>
> Cc: linux-usb@vger.kernel.org
> Cc: devicetree@vger.kernel.org
> Suggested-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Signed-off-by: Yu Chen <chenyu56@huawei.com>
> Signed-off-by: John Stultz <john.stultz@linaro.org>
> ---
> v2: Fix role_sw and role_switch_default_mode descriptions as
>     reported by kbuild test robot <lkp@intel.com>
>
> v3: Split out the role-switch-default-host logic into its own
>     patch
> ---
>  drivers/usb/dwc3/Kconfig |  1 +
>  drivers/usb/dwc3/core.h  |  3 ++
>  drivers/usb/dwc3/drd.c   | 66 +++++++++++++++++++++++++++++++++++++++-
>  3 files changed, 69 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig
> index 89abc6078703..1104745c41a9 100644
> --- a/drivers/usb/dwc3/Kconfig
> +++ b/drivers/usb/dwc3/Kconfig
> @@ -44,6 +44,7 @@ config USB_DWC3_DUAL_ROLE
>  	bool "Dual Role mode"
>  	depends on ((USB=y || USB=USB_DWC3) && (USB_GADGET=y || USB_GADGET=USB_DWC3))
>  	depends on (EXTCON=y || EXTCON=USB_DWC3)
> +	select USB_ROLE_SWITCH

so even those using DWC3 as a peripheral-only or host-only driver will
need role switch?

> diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
> index 1c8b349379af..6f19e9891767 100644
> --- a/drivers/usb/dwc3/core.h
> +++ b/drivers/usb/dwc3/core.h
> @@ -25,6 +25,7 @@
>  #include <linux/usb/ch9.h>
>  #include <linux/usb/gadget.h>
>  #include <linux/usb/otg.h>
> +#include <linux/usb/role.h>
>  #include <linux/ulpi/interface.h>
>  
>  #include <linux/phy/phy.h>
> @@ -951,6 +952,7 @@ struct dwc3_scratchpad_array {
>   * @hsphy_mode: UTMI phy mode, one of following:
>   *		- USBPHY_INTERFACE_MODE_UTMI
>   *		- USBPHY_INTERFACE_MODE_UTMIW
> + * @role_sw: usb_role_switch handle
>   * @usb2_phy: pointer to USB2 PHY
>   * @usb3_phy: pointer to USB3 PHY
>   * @usb2_generic_phy: pointer to USB2 PHY
> @@ -1084,6 +1086,7 @@ struct dwc3 {
>  	struct extcon_dev	*edev;
>  	struct notifier_block	edev_nb;
>  	enum usb_phy_interface	hsphy_mode;
> +	struct usb_role_switch	*role_sw;
>  
>  	u32			fladj;
>  	u32			irq_gadget;
> diff --git a/drivers/usb/dwc3/drd.c b/drivers/usb/dwc3/drd.c
> index c946d64142ad..61d4fd8aead4 100644
> --- a/drivers/usb/dwc3/drd.c
> +++ b/drivers/usb/dwc3/drd.c
> @@ -476,6 +476,52 @@ static struct extcon_dev *dwc3_get_extcon(struct dwc3 *dwc)
>  	return edev;
>  }
>  
> +static int dwc3_usb_role_switch_set(struct device *dev, enum usb_role role)
> +{
> +	struct dwc3 *dwc = dev_get_drvdata(dev);
> +	u32 mode;
> +
> +	switch (role) {
> +	case USB_ROLE_HOST:
> +		mode = DWC3_GCTL_PRTCAP_HOST;
> +		break;
> +	case USB_ROLE_DEVICE:
> +		mode = DWC3_GCTL_PRTCAP_DEVICE;
> +		break;
> +	default:
> +		mode = DWC3_GCTL_PRTCAP_DEVICE;
> +		break;
> +	}
> +
> +	dwc3_set_mode(dwc, mode);
> +	return 0;
> +}

role switching is starting to get way too complicated in DWC3. We now
have a function that queues a work on the system_freezable_wq that will
configure PHY and change PRTCAP. Is there a way we can simplify some of
this a little?

-- 
balbi

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

  reply	other threads:[~2019-10-29  9:22 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-28 21:59 [PATCH v4 0/9] Prereqs for HiKey960 USB support John Stultz
2019-10-28 21:59 ` [PATCH v4 1/9] dt-bindings: usb: rt1711h: Add connector bindings John Stultz
2019-10-28 21:59 ` [PATCH v4 2/9] usb: dwc3: Execute GCTL Core Soft Reset while switch modes John Stultz
2019-10-29  9:09   ` Felipe Balbi
2019-10-29 21:21     ` John Stultz
2019-10-28 21:59 ` [PATCH v4 3/9] usb: dwc3: Increase timeout for CmdAct cleared by device controller John Stultz
2019-10-29  9:11   ` Felipe Balbi
2019-10-29 21:17     ` John Stultz
2020-05-06  9:00       ` Jun Li
2020-05-06 22:27         ` John Stultz
2020-05-07  3:08           ` Jun Li
2020-05-08 12:22             ` Jun Li
2020-05-08 12:35               ` Felipe Balbi
2020-05-09  8:28                 ` Jun Li
2020-05-08 12:33         ` Felipe Balbi
2020-05-09  8:10           ` Jun Li
2020-05-15  9:31             ` Felipe Balbi
2020-05-15 10:07               ` Jun Li
2020-05-15 10:41                 ` Felipe Balbi
2020-05-16  0:25                 ` Thinh Nguyen
2020-05-16  7:12                   ` Felipe Balbi
2020-05-16  9:20                     ` Jun Li
2020-05-16 11:57                       ` Felipe Balbi
2020-05-19  2:24                         ` Jun Li
2020-05-19  6:28                           ` Thinh Nguyen
2020-05-19  6:46                             ` Thinh Nguyen
2020-05-19  7:39                               ` Jun Li
2020-05-21  1:07                                 ` Thinh Nguyen
2020-05-21  1:55                                   ` Thinh Nguyen
2020-05-21  6:20                                     ` Felipe Balbi
2020-05-21  6:22                                       ` Felipe Balbi
2020-05-21  7:47                                         ` Jun Li
2020-05-21  7:33                                     ` Jun Li
2019-10-28 21:59 ` [PATCH v4 4/9] dt-bindings: usb: dwc3: Allow clock list & resets to be more flexible John Stultz
2019-10-28 21:59 ` [PATCH v4 5/9] usb: dwc3: Rework clock initialization " John Stultz
2019-10-29  9:13   ` Felipe Balbi
2019-10-29 16:08     ` John Stultz
2019-10-30  9:02       ` Felipe Balbi
2019-11-07 21:53     ` Rob Herring
2019-10-28 21:59 ` [PATCH v4 6/9] usb: dwc3: Rework resets " John Stultz
2019-10-29  9:17   ` Felipe Balbi
2019-10-29 18:05     ` John Stultz
2019-10-30  9:01       ` Felipe Balbi
2019-11-07 21:45         ` Rob Herring
2019-10-28 21:59 ` [PATCH v4 7/9] usb: dwc3: Registering a role switch in the DRD code John Stultz
2019-10-29  9:21   ` Felipe Balbi [this message]
2019-11-07 23:20     ` John Stultz
2019-10-28 21:59 ` [PATCH v4 8/9] dt-bindings: usb: generic: Add role-switch-default-host binding John Stultz
2019-10-29  9:23   ` Felipe Balbi
2019-10-29 18:26     ` John Stultz
2019-10-28 21:59 ` [PATCH v4 9/9] usb: dwc3: Add host-mode as default support John Stultz
2019-10-29  9:25   ` Felipe Balbi
2019-11-07 22:23     ` John Stultz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87eeyvj49e.fsf@gmail.com \
    --to=balbi@kernel.org \
    --cc=andy.shevchenko@gmail.com \
    --cc=chenyu56@huawei.com \
    --cc=chunfeng.yun@mediatek.com \
    --cc=devicetree@vger.kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=hdegoede@redhat.com \
    --cc=heikki.krogerus@linux.intel.com \
    --cc=jackp@codeaurora.org \
    --cc=john.stultz@linaro.org \
    --cc=lijun.kernel@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=robh+dt@kernel.org \
    --cc=shufan_lee@richtek.com \
    --cc=suzuki.poulose@arm.com \
    --cc=valentin.schneider@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.