public inbox for linux-tegra@vger.kernel.org
 help / color / mirror / Atom feed
From: Thierry Reding <thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Nagarjuna Kristam <nkristam-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
Cc: balbi-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org,
	jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org,
	mark.rutland-5wv7dgnIgG8@public.gmane.org,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	kishon-l0cyMroinI0@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [Patch V3 04/18] phy: tegra: xusb: Add usb-phy support
Date: Tue, 28 Jan 2020 18:38:40 +0100	[thread overview]
Message-ID: <20200128173840.GB2293590@ulmo> (raw)
In-Reply-To: <1577704195-2535-5-git-send-email-nkristam-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>

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

On Mon, Dec 30, 2019 at 04:39:41PM +0530, Nagarjuna Kristam wrote:
> For USB 2 ports that has usb-role-switch enabled, add usb-phy for
> corresponding USB 2 phy. USB role changes from role switch are then
> updated to corresponding host and device mode drivers via usb-phy notifier
> block.
> 
> Signed-off-by: Nagarjuna Kristam <nkristam-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> ---
> V3:
>  - Updated arguments and variable allignments as per Thierry inputs.
> ---
> V2:
>  - Added dev_set_drvdata for port->dev.
> ---
>  drivers/phy/tegra/xusb.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++
>  drivers/phy/tegra/xusb.h |  2 ++
>  2 files changed, 76 insertions(+)
> 
> diff --git a/drivers/phy/tegra/xusb.c b/drivers/phy/tegra/xusb.c
> index 11ea9b5..536b2fc 100644
> --- a/drivers/phy/tegra/xusb.c
> +++ b/drivers/phy/tegra/xusb.c
> @@ -533,6 +533,8 @@ static int tegra_xusb_port_init(struct tegra_xusb_port *port,
>  	if (err < 0)
>  		goto unregister;
>  
> +	dev_set_drvdata(&port->dev, port);
> +
>  	return 0;
>  
>  unregister:
> @@ -545,6 +547,8 @@ static void tegra_xusb_port_unregister(struct tegra_xusb_port *port)
>  	if (!IS_ERR_OR_NULL(port->usb_role_sw)) {
>  		of_platform_depopulate(&port->dev);
>  		usb_role_switch_unregister(port->usb_role_sw);
> +		cancel_work_sync(&port->usb_phy_work);
> +		usb_remove_phy(&port->usb_phy);
>  	}
>  
>  	device_unregister(&port->dev);
> @@ -563,15 +567,62 @@ static const char * const usb_roles[] = {
>  	[USB_ROLE_DEVICE]	= "device",
>  };
>  
> +static void tegra_xusb_usb_phy_work(struct work_struct *work)
> +{
> +	struct tegra_xusb_port *port = container_of(work,
> +						    struct tegra_xusb_port,
> +						    usb_phy_work);
> +	enum usb_role role = usb_role_switch_get_role(port->usb_role_sw);
> +
> +	dev_dbg(&port->dev, "%s: calling notifier for role %s\n", __func__,
> +		usb_roles[role]);

Nit: I'd add parentheses into the above message, after %s, to highlight
that this is the name of a function.

> +
> +	atomic_notifier_call_chain(&port->usb_phy.notifier, role,
> +				   &port->usb_phy);
> +}
> +
>  static int tegra_xusb_role_sw_set(struct device *dev, enum usb_role role)
>  {
> +	struct tegra_xusb_port *port = dev_get_drvdata(dev);
> +
>  	dev_dbg(dev, "%s: role %s\n", __func__, usb_roles[role]);
>  
> +	schedule_work(&port->usb_phy_work);
> +
>  	return 0;
>  }
>  
> +static int tegra_xusb_set_peripheral(struct usb_otg *otg,
> +				     struct usb_gadget *gadget)
> +{
> +	struct tegra_xusb_port *port = container_of(otg->usb_phy,
> +						    struct tegra_xusb_port,
> +						    usb_phy);
> +
> +	if (gadget != NULL)
> +		schedule_work(&port->usb_phy_work);
> +
> +	return 0;
> +}
> +
> +static int tegra_xusb_set_host(struct usb_otg *otg, struct usb_bus *host)
> +{
> +	struct tegra_xusb_port *port = container_of(otg->usb_phy,
> +						    struct tegra_xusb_port,
> +						    usb_phy);
> +
> +	if (host != NULL)
> +		schedule_work(&port->usb_phy_work);
> +
> +	return 0;
> +}
> +
> +
>  static int tegra_xusb_setup_usb_role_switch(struct tegra_xusb_port *port)
>  {
> +	struct tegra_xusb_lane *lane = tegra_xusb_find_lane(port->padctl,
> +							    "usb2",
> +							    port->index);

Nit: This looks slightly awkward. It might be worth just declaring the
variable here and move the initialization to a separate line following
the declarations because then it fits on a single line.

>  	struct usb_role_switch_desc role_sx_desc = {
>  		.fwnode = dev_fwnode(&port->dev),
>  		.set = tegra_xusb_role_sw_set,
> @@ -587,6 +638,29 @@ static int tegra_xusb_setup_usb_role_switch(struct tegra_xusb_port *port)
>  		return err;
>  	}
>  
> +	INIT_WORK(&port->usb_phy_work, tegra_xusb_usb_phy_work);
> +
> +	port->usb_phy.otg = devm_kzalloc(&port->dev,
> +					 sizeof(struct usb_otg), GFP_KERNEL);

Nit: typically you try to fill up a line as much as possible before you
wrap, so the sizeof(...) can go onto the first line.

> +	if (!port->usb_phy.otg)
> +		return -ENOMEM;
> +
> +	/*
> +	 * Assign phy dev to usb-phy dev. Host/device drivers can use phy
> +	 * reference to retrieve usb-phy details.
> +	 */
> +	port->usb_phy.dev = &lane->pad->lanes[port->index]->dev;
> +	port->usb_phy.dev->driver = port->padctl->dev->driver;
> +	port->usb_phy.otg->usb_phy = &port->usb_phy;
> +	port->usb_phy.otg->set_peripheral = tegra_xusb_set_peripheral;
> +	port->usb_phy.otg->set_host = tegra_xusb_set_host;
> +
> +	err = usb_add_phy_dev(&port->usb_phy);
> +	if (err < 0) {
> +		dev_err(&port->dev, "Failed to add usbphy: %d\n", err);

Nit: "failed to add USB PHY: %d\n", to make this more consistent with
the existing error messages.

Other than that, looks great:

Acked-by: Thierry Reding <treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>

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

  parent reply	other threads:[~2020-01-28 17:38 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-30 11:09 [Patch V3 00/18] Tegra XUSB OTG support Nagarjuna Kristam
2019-12-30 11:09 ` [Patch V3 01/18] dt-bindings: phy: tegra-xusb: Add usb-role-switch Nagarjuna Kristam
2020-01-04  0:37   ` Rob Herring
2019-12-30 11:09 ` [Patch V3 02/18] dt-bindings: usb: Add NVIDIA Tegra XUSB device mode controller binding Nagarjuna Kristam
2019-12-30 11:09 ` [Patch V3 03/18] phy: tegra: xusb: Add usb-role-switch support Nagarjuna Kristam
2020-01-28 17:32   ` Thierry Reding
2020-01-29  9:15     ` Nagarjuna Kristam
     [not found]       ` <b6de0078-f1cd-31a1-70bd-dfc320eab70e-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2020-01-29  9:26         ` Thierry Reding
2019-12-30 11:09 ` [Patch V3 04/18] phy: tegra: xusb: Add usb-phy support Nagarjuna Kristam
     [not found]   ` <1577704195-2535-5-git-send-email-nkristam-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2020-01-28 17:38     ` Thierry Reding [this message]
2019-12-30 11:09 ` [Patch V3 05/18] phy: tegra: xusb: Add support to get companion USB 3 port Nagarjuna Kristam
     [not found]   ` <1577704195-2535-6-git-send-email-nkristam-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2020-01-28 17:40     ` Thierry Reding
2019-12-30 11:09 ` [Patch V3 06/18] phy: tegra: xusb: Add set_mode support for USB 2 phy on Tegra210 Nagarjuna Kristam
     [not found]   ` <1577704195-2535-7-git-send-email-nkristam-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2020-01-28 17:41     ` Thierry Reding
2019-12-30 11:09 ` [Patch V3 07/18] phy: tegra: xusb: Add set_mode support for utmi phy on Tegra186 Nagarjuna Kristam
     [not found]   ` <1577704195-2535-8-git-send-email-nkristam-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2020-01-28 17:45     ` Thierry Reding
2019-12-30 11:09 ` [Patch V3 08/18] usb: xhci-tegra: Add OTG support Nagarjuna Kristam
2020-01-28 17:54   ` Thierry Reding
2019-12-30 11:09 ` [Patch V3 09/18] usb: gadget: tegra-xudc: Remove usb-role-switch support Nagarjuna Kristam
     [not found]   ` <1577704195-2535-10-git-send-email-nkristam-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2020-01-28 17:58     ` Thierry Reding
2019-12-30 11:09 ` [Patch V3 10/18] usb: gadget: tegra-xudc: Add usb-phy support Nagarjuna Kristam
     [not found]   ` <1577704195-2535-11-git-send-email-nkristam-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2020-01-28 18:02     ` Thierry Reding
2019-12-30 11:09 ` [Patch V3 11/18] usb: gadget: tegra-xudc: use phy_set_mode to set/unset device mode Nagarjuna Kristam
2020-01-28 18:03   ` Thierry Reding
2019-12-30 11:09 ` [Patch V3 12/18] usb: gadget: tegra-xudc: support multiple device modes Nagarjuna Kristam
2020-01-28 18:10   ` Thierry Reding
2020-01-29  6:50     ` Nagarjuna Kristam
     [not found]       ` <7478f53a-c236-5442-8abb-7531edb89b29-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2020-01-29  9:27         ` Thierry Reding
2019-12-30 11:09 ` [Patch V3 13/18] arm64: tegra: update OTG port entries for jetson-tx1 Nagarjuna Kristam
2019-12-30 11:09 ` [Patch V3 14/18] arm64: tegra: update OTG port entries for jetson-tx2 Nagarjuna Kristam
2019-12-30 11:09 ` [Patch V3 15/18] arm64: tegra: Add xudc node for Tegra210 Nagarjuna Kristam
2019-12-30 11:09 ` [Patch V3 16/18] arm64: tegra: Enable xudc on Jetson TX1 Nagarjuna Kristam
2019-12-30 11:09 ` [Patch V3 17/18] arm64: tegra: Add xudc node for Tegra186 Nagarjuna Kristam
2019-12-30 11:09 ` [Patch V3 18/18] arm64: tegra: Enable xudc node on Jetson TX2 Nagarjuna Kristam

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=20200128173840.GB2293590@ulmo \
    --to=thierry.reding-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
    --cc=balbi-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
    --cc=jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
    --cc=kishon-l0cyMroinI0@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
    --cc=nkristam-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
    --cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox