From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Alexander Stein <alexander.stein@ew.tq-group.com>
Cc: Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Matthias Kaehlcke <mka@chromium.org>,
linux-usb@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH v3 2/3] usb: misc: onboard_usb_hub: Add reset-gpio support
Date: Wed, 27 Jul 2022 14:40:55 +0200 [thread overview]
Message-ID: <YuEyVxJipCmQeMTk@kroah.com> (raw)
In-Reply-To: <20220727093801.687361-2-alexander.stein@ew.tq-group.com>
On Wed, Jul 27, 2022 at 11:38:00AM +0200, Alexander Stein wrote:
> Despite default reset upon probe, release reset line after powering up
> the hub and assert reset again before powering down.
>
> Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
> ---
> Thanks Matthias for your review.
>
> Changes in v3:
> * Require platform data unconditionally
> * Removed unecessary checks for that reason
> * Merged power_stable_time into reset_duration (no difference for now)
> * Rename 'reset_duration' to 'reset_us'
> * Renamed platform structure to onboard_hub_pdata
> * Renamed device struct field to pdata as well
>
> Changes in v2:
> * Use device specific sleep times, if present
> * Use fsleep instead of usleep_range
>
> drivers/usb/misc/onboard_usb_hub.c | 28 ++++++++++++++++++++++++++++
> drivers/usb/misc/onboard_usb_hub.h | 16 ++++++++++++----
> 2 files changed, 40 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/usb/misc/onboard_usb_hub.c b/drivers/usb/misc/onboard_usb_hub.c
> index 6b9b949d17d3..2aa1db528b31 100644
> --- a/drivers/usb/misc/onboard_usb_hub.c
> +++ b/drivers/usb/misc/onboard_usb_hub.c
> @@ -7,6 +7,7 @@
>
> #include <linux/device.h>
> #include <linux/export.h>
> +#include <linux/gpio/consumer.h>
> #include <linux/init.h>
> #include <linux/kernel.h>
> #include <linux/list.h>
> @@ -38,6 +39,8 @@ struct usbdev_node {
> struct onboard_hub {
> struct regulator *vdd;
> struct device *dev;
> + const struct onboard_hub_pdata *pdata;
> + struct gpio_desc *reset_gpio;
> bool always_powered_in_suspend;
> bool is_powered_on;
> bool going_away;
> @@ -56,6 +59,9 @@ static int onboard_hub_power_on(struct onboard_hub *hub)
> return err;
> }
>
> + fsleep(hub->pdata->reset_us);
> + gpiod_set_value_cansleep(hub->reset_gpio, 0);
> +
> hub->is_powered_on = true;
>
> return 0;
> @@ -65,6 +71,11 @@ static int onboard_hub_power_off(struct onboard_hub *hub)
> {
> int err;
>
> + if (hub->reset_gpio) {
> + gpiod_set_value_cansleep(hub->reset_gpio, 1);
> + fsleep(hub->pdata->reset_us);
> + }
> +
> err = regulator_disable(hub->vdd);
> if (err) {
> dev_err(hub->dev, "failed to disable regulator: %d\n", err);
> @@ -219,6 +230,7 @@ static void onboard_hub_attach_usb_driver(struct work_struct *work)
>
> static int onboard_hub_probe(struct platform_device *pdev)
> {
> + const struct of_device_id *of_id;
> struct device *dev = &pdev->dev;
> struct onboard_hub *hub;
> int err;
> @@ -227,10 +239,26 @@ static int onboard_hub_probe(struct platform_device *pdev)
> if (!hub)
> return -ENOMEM;
>
> + of_id = of_match_device(onboard_hub_match, &pdev->dev);
> + if (!of_id)
> + return -ENODEV;
> +
> + hub->pdata = of_id->data;
> + if (!hub->pdata)
> + return -EINVAL;
> +
> hub->vdd = devm_regulator_get(dev, "vdd");
> if (IS_ERR(hub->vdd))
> return PTR_ERR(hub->vdd);
>
> + hub->reset_gpio = devm_gpiod_get_optional(dev, "reset",
> + GPIOD_OUT_HIGH);
> + if (IS_ERR(hub->reset_gpio))
> + return dev_err_probe(dev, PTR_ERR(hub->reset_gpio), "failed to get reset GPIO\n");
> +
> + if (hub->reset_gpio)
> + fsleep(hub->pdata->reset_us);
> +
> hub->dev = dev;
> mutex_init(&hub->lock);
> INIT_LIST_HEAD(&hub->udev_list);
> diff --git a/drivers/usb/misc/onboard_usb_hub.h b/drivers/usb/misc/onboard_usb_hub.h
> index d3a5b6938582..01d067db81f2 100644
> --- a/drivers/usb/misc/onboard_usb_hub.h
> +++ b/drivers/usb/misc/onboard_usb_hub.h
> @@ -6,11 +6,19 @@
> #ifndef _USB_MISC_ONBOARD_USB_HUB_H
> #define _USB_MISC_ONBOARD_USB_HUB_H
>
> +struct onboard_hub_pdata {
> + unsigned long reset_us; /* reset pulse width in us */
> +};
> +
> +static const struct onboard_hub_pdata realtek_rts5411_data = {
> + .reset_us = 0,
> +};
> +
> static const struct of_device_id onboard_hub_match[] = {
> - { .compatible = "usbbda,411" },
> - { .compatible = "usbbda,5411" },
> - { .compatible = "usbbda,414" },
> - { .compatible = "usbbda,5414" },
> + { .compatible = "usbbda,411", .data = &realtek_rts5411_data, },
> + { .compatible = "usbbda,5411", .data = &realtek_rts5411_data, },
> + { .compatible = "usbbda,414", .data = &realtek_rts5411_data, },
> + { .compatible = "usbbda,5414", .data = &realtek_rts5411_data, },
> {}
> };
>
> --
> 2.25.1
>
This no longer applies to my tree due to some new devices being added.
Can you rebase against the usb-testing branch of the usb.git tree and
resend?
thanks,
greg k-h
next prev parent reply other threads:[~2022-07-27 12:41 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-27 9:37 [PATCH v3 1/3] dt-bindings: usb: Add binding for TI USB8041 hub controller Alexander Stein
2022-07-27 9:38 ` [PATCH v3 2/3] usb: misc: onboard_usb_hub: Add reset-gpio support Alexander Stein
2022-07-27 12:40 ` Greg Kroah-Hartman [this message]
2022-07-27 16:32 ` Matthias Kaehlcke
2022-07-27 17:16 ` Matthias Kaehlcke
2022-07-27 9:38 ` [PATCH v3 3/3] usb: misc: onboard_usb_hub: Add TI USB8041 hub support Alexander Stein
2022-07-27 9:56 ` [PATCH v3 1/3] dt-bindings: usb: Add binding for TI USB8041 hub controller Krzysztof Kozlowski
2022-07-27 20:28 ` Matthias Kaehlcke
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=YuEyVxJipCmQeMTk@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=alexander.stein@ew.tq-group.com \
--cc=devicetree@vger.kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-usb@vger.kernel.org \
--cc=mka@chromium.org \
--cc=robh+dt@kernel.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 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.