[PATCH] usb: add reset pin handling to onboard-hub driver
Simon Glass
sjg at chromium.org
Sat Aug 17 17:58:29 CEST 2024
Hi,
On Fri, 16 Aug 2024 at 07:36, <mailinglist1 at johanneskirchmair.de> wrote:
>
> From: Johannes Kirchmair <johannes.kirchmair at skidata.com>
>
> Some onboard-hub chips have external reset pins. This patch adds
> handling of said pin to the onboard-hub driver. The naming for the
> devicetree binding is done in the same way as in the Linux kernel to
> ensure good compatibility between u-boot's and Linux's devicetrees.
U-Boot's
>
> Signed-off-by: Johannes Kirchmair <johannes.kirchmair at skidata.com>
> ---
> common/usb_onboard_hub.c | 32 +++++++++++++++++++++++++++++++-
> 1 file changed, 31 insertions(+), 1 deletion(-)
>
> diff --git a/common/usb_onboard_hub.c b/common/usb_onboard_hub.c
> index 68a04ac041..5b1bb79c55 100644
> --- a/common/usb_onboard_hub.c
> +++ b/common/usb_onboard_hub.c
> @@ -10,9 +10,11 @@
> #include <dm.h>
> #include <dm/device_compat.h>
> #include <power/regulator.h>
> +#include <asm/gpio.h>
>
> struct onboard_hub {
> struct udevice *vdd;
> + struct gpio_desc reset_pin;
> };
>
> static int usb_onboard_hub_probe(struct udevice *dev)
> @@ -27,8 +29,23 @@ static int usb_onboard_hub_probe(struct udevice *dev)
> }
>
> ret = regulator_set_enable_if_allowed(hub->vdd, true);
> - if (ret)
> + if (ret) {
> dev_err(dev, "can't enable vdd-supply: %d\n", ret);
> + return ret;
> + }
> +
> + ret = gpio_request_by_name(dev, "reset-gpios", 0, &hub->reset_pin,
> + GPIOD_IS_OUT | GPIOD_IS_OUT_ACTIVE);
> + if (ret && ret != -ENOENT) {
> + dev_err(dev, "can't get reset-gpios 0: %d\n", ret);
> + return ret;
> + }
> +
> + if (hub->reset_pin.dev) {
> + ret = dm_gpio_set_value(&hub->reset_pin, 0);
> + if (ret)
> + dev_err(dev, "failed setting reset-gpios to 0: %d\n", ret);
> + }
With the GPIOD_... flags above, this should already be done, so you
don't need this code.
>
> return ret;
> }
> @@ -42,12 +59,25 @@ static int usb_onboard_hub_remove(struct udevice *dev)
> if (ret)
> dev_err(dev, "can't disable vdd-supply: %d\n", ret);
>
> + if (hub->reset_pin.dev) {
> + ret = dm_gpio_set_value(&hub->reset_pin, 1);
> + if (ret)
> + dev_err(dev, "failed setting reset-gpios to 0: %d\n", ret);
1
Is this putting the device in reset? Could you add a comment as to why?
> + }
> +
> + if (hub->reset_pin.dev) {
> + ret = dm_gpio_free(dev, &hub->reset_pin);
> + if (ret)
> + dev_err(dev, "can't free reset-gpios: %d\n", ret);
> + }
> +
> return ret;
> }
>
> static const struct udevice_id usb_onboard_hub_ids[] = {
> /* Use generic usbVID,PID dt-bindings (usb-device.yaml) */
> { .compatible = "usb424,2514" }, /* USB2514B USB 2.0 */
> + { .compatible = "usb4b4,6504" },
> { }
> };
>
> --
> 2.34.1
>
Regards,
Simon
More information about the U-Boot
mailing list