2023-11-27 13:00:20

by Frieder Schrempf

[permalink] [raw]
Subject: [RESEND PATCH v2 1/3] usb: misc: onboard_usb_hub: Print symbolic error names

From: Frieder Schrempf <[email protected]>

Instead of printing the decimal error codes, let's use the more
human-readable symbolic error names provided by the %pe printk
format specifier.

Signed-off-by: Frieder Schrempf <[email protected]>
---
Changes in v2:
* new patch
---
drivers/usb/misc/onboard_usb_hub.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/misc/onboard_usb_hub.c b/drivers/usb/misc/onboard_usb_hub.c
index a341b2fbb7b44..077824beffa01 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/err.h>
#include <linux/gpio/consumer.h>
#include <linux/init.h>
#include <linux/kernel.h>
@@ -68,7 +69,7 @@ static int onboard_hub_power_on(struct onboard_hub *hub)

err = regulator_bulk_enable(hub->pdata->num_supplies, hub->supplies);
if (err) {
- dev_err(hub->dev, "failed to enable supplies: %d\n", err);
+ dev_err(hub->dev, "failed to enable supplies: %pe\n", ERR_PTR(err));
return err;
}

@@ -88,7 +89,7 @@ static int onboard_hub_power_off(struct onboard_hub *hub)

err = regulator_bulk_disable(hub->pdata->num_supplies, hub->supplies);
if (err) {
- dev_err(hub->dev, "failed to disable supplies: %d\n", err);
+ dev_err(hub->dev, "failed to disable supplies: %pe\n", ERR_PTR(err));
return err;
}

@@ -235,7 +236,7 @@ static void onboard_hub_attach_usb_driver(struct work_struct *work)

err = driver_attach(&onboard_hub_usbdev_driver.drvwrap.driver);
if (err)
- pr_err("Failed to attach USB driver: %d\n", err);
+ pr_err("Failed to attach USB driver: %pe\n", ERR_PTR(err));
}

static int onboard_hub_probe(struct platform_device *pdev)
@@ -262,7 +263,7 @@ static int onboard_hub_probe(struct platform_device *pdev)

err = devm_regulator_bulk_get(dev, hub->pdata->num_supplies, hub->supplies);
if (err) {
- dev_err(dev, "Failed to get regulator supplies: %d\n", err);
+ dev_err(dev, "Failed to get regulator supplies: %pe\n", ERR_PTR(err));
return err;
}

--
2.42.1


2023-11-28 11:30:43

by Frieder Schrempf

[permalink] [raw]
Subject: [RESEND PATCH v2 3/3] usb: misc: onboard_usb_hub: Add support for Cypress CY7C6563x

From: Frieder Schrempf <[email protected]>

The Cypress CY7C6563x is a 2/4-port USB 2.0 hub. Add support for
this hub in the driver in order to bring up reset, supply or clock
dependencies.

There is no reset pulse width given in the datasheet so we expect
a minimal value of 1us to be enough. This hasn't been tested though
due to lack of hardware which has the reset connected to a GPIO.

Signed-off-by: Frieder Schrempf <[email protected]>
---
Changes in v2:
* none
---
drivers/usb/misc/onboard_usb_hub.c | 1 +
drivers/usb/misc/onboard_usb_hub.h | 6 ++++++
2 files changed, 7 insertions(+)

diff --git a/drivers/usb/misc/onboard_usb_hub.c b/drivers/usb/misc/onboard_usb_hub.c
index 0d84b16deab50..0c0b698f008b9 100644
--- a/drivers/usb/misc/onboard_usb_hub.c
+++ b/drivers/usb/misc/onboard_usb_hub.c
@@ -441,6 +441,7 @@ static void onboard_hub_usbdev_disconnect(struct usb_device *udev)
static const struct usb_device_id onboard_hub_id_table[] = {
{ USB_DEVICE(VENDOR_ID_CYPRESS, 0x6504) }, /* CYUSB33{0,1,2}x/CYUSB230x 3.0 */
{ USB_DEVICE(VENDOR_ID_CYPRESS, 0x6506) }, /* CYUSB33{0,1,2}x/CYUSB230x 2.0 */
+ { USB_DEVICE(VENDOR_ID_CYPRESS, 0x6570) }, /* CY7C6563x 2.0 */
{ USB_DEVICE(VENDOR_ID_GENESYS, 0x0608) }, /* Genesys Logic GL850G USB 2.0 */
{ USB_DEVICE(VENDOR_ID_GENESYS, 0x0610) }, /* Genesys Logic GL852G USB 2.0 */
{ USB_DEVICE(VENDOR_ID_GENESYS, 0x0620) }, /* Genesys Logic GL3523 USB 3.1 */
diff --git a/drivers/usb/misc/onboard_usb_hub.h b/drivers/usb/misc/onboard_usb_hub.h
index c4e24a7b92904..67b2cc1e15e67 100644
--- a/drivers/usb/misc/onboard_usb_hub.h
+++ b/drivers/usb/misc/onboard_usb_hub.h
@@ -31,6 +31,11 @@ static const struct onboard_hub_pdata cypress_hx3_data = {
.num_supplies = 2,
};

+static const struct onboard_hub_pdata cypress_hx2vl_data = {
+ .reset_us = 1,
+ .num_supplies = 1,
+};
+
static const struct onboard_hub_pdata genesys_gl850g_data = {
.reset_us = 3,
.num_supplies = 1,
@@ -54,6 +59,7 @@ static const struct of_device_id onboard_hub_match[] = {
{ .compatible = "usb451,8142", .data = &ti_tusb8041_data, },
{ .compatible = "usb4b4,6504", .data = &cypress_hx3_data, },
{ .compatible = "usb4b4,6506", .data = &cypress_hx3_data, },
+ { .compatible = "usb4b4,6570", .data = &cypress_hx2vl_data, },
{ .compatible = "usb5e3,608", .data = &genesys_gl850g_data, },
{ .compatible = "usb5e3,610", .data = &genesys_gl852g_data, },
{ .compatible = "usb5e3,620", .data = &genesys_gl852g_data, },
--
2.42.1

2023-11-28 12:05:31

by Frieder Schrempf

[permalink] [raw]
Subject: [RESEND PATCH v2 2/3] usb: misc: onboard_usb_hub: Add support for clock input

From: Frieder Schrempf <[email protected]>

Most onboard USB hubs have a dedicated crystal oscillator but on some
boards the clock signal for the hub is provided by the SoC.

In order to support this, we add the possibility of specifying a
clock in the devicetree that gets enabled/disabled when the hub
is powered up/down.

Signed-off-by: Frieder Schrempf <[email protected]>
---
Changes in v2:
* use %pe to print symbolic error name
---
drivers/usb/misc/onboard_usb_hub.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)

diff --git a/drivers/usb/misc/onboard_usb_hub.c b/drivers/usb/misc/onboard_usb_hub.c
index 077824beffa01..0d84b16deab50 100644
--- a/drivers/usb/misc/onboard_usb_hub.c
+++ b/drivers/usb/misc/onboard_usb_hub.c
@@ -5,6 +5,7 @@
* Copyright (c) 2022, Google LLC
*/

+#include <linux/clk.h>
#include <linux/device.h>
#include <linux/export.h>
#include <linux/err.h>
@@ -61,12 +62,19 @@ struct onboard_hub {
bool going_away;
struct list_head udev_list;
struct mutex lock;
+ struct clk *clk;
};

static int onboard_hub_power_on(struct onboard_hub *hub)
{
int err;

+ err = clk_prepare_enable(hub->clk);
+ if (err) {
+ dev_err(hub->dev, "failed to enable clock: %pe\n", ERR_PTR(err));
+ return err;
+ }
+
err = regulator_bulk_enable(hub->pdata->num_supplies, hub->supplies);
if (err) {
dev_err(hub->dev, "failed to enable supplies: %pe\n", ERR_PTR(err));
@@ -93,6 +101,8 @@ static int onboard_hub_power_off(struct onboard_hub *hub)
return err;
}

+ clk_disable_unprepare(hub->clk);
+
hub->is_powered_on = false;

return 0;
@@ -267,6 +277,10 @@ static int onboard_hub_probe(struct platform_device *pdev)
return err;
}

+ hub->clk = devm_clk_get_optional(dev, NULL);
+ if (IS_ERR(hub->clk))
+ return dev_err_probe(dev, PTR_ERR(hub->clk), "failed to get clock\n");
+
hub->reset_gpio = devm_gpiod_get_optional(dev, "reset",
GPIOD_OUT_HIGH);
if (IS_ERR(hub->reset_gpio))
--
2.42.1

2023-12-01 19:27:28

by Matthias Kaehlcke

[permalink] [raw]
Subject: Re: [RESEND PATCH v2 1/3] usb: misc: onboard_usb_hub: Print symbolic error names

On Mon, Nov 27, 2023 at 12:22:24PM +0100, Frieder Schrempf wrote:
> From: Frieder Schrempf <[email protected]>
>
> Instead of printing the decimal error codes, let's use the more
> human-readable symbolic error names provided by the %pe printk
> format specifier.
>
> Signed-off-by: Frieder Schrempf <[email protected]>

Acked-by: Matthias Kaehlcke <[email protected]>

2023-12-01 20:09:07

by Matthias Kaehlcke

[permalink] [raw]
Subject: Re: [RESEND PATCH v2 2/3] usb: misc: onboard_usb_hub: Add support for clock input

On Mon, Nov 27, 2023 at 12:22:25PM +0100, Frieder Schrempf wrote:
> From: Frieder Schrempf <[email protected]>
>
> Most onboard USB hubs have a dedicated crystal oscillator but on some
> boards the clock signal for the hub is provided by the SoC.
>
> In order to support this, we add the possibility of specifying a
> clock in the devicetree that gets enabled/disabled when the hub
> is powered up/down.
>
> Signed-off-by: Frieder Schrempf <[email protected]>

Acked-by: Matthias Kaehlcke <[email protected]>

2023-12-01 20:31:44

by Matthias Kaehlcke

[permalink] [raw]
Subject: Re: [RESEND PATCH v2 3/3] usb: misc: onboard_usb_hub: Add support for Cypress CY7C6563x

On Mon, Nov 27, 2023 at 12:22:26PM +0100, Frieder Schrempf wrote:
> From: Frieder Schrempf <[email protected]>
>
> The Cypress CY7C6563x is a 2/4-port USB 2.0 hub. Add support for
> this hub in the driver in order to bring up reset, supply or clock
> dependencies.
>
> There is no reset pulse width given in the datasheet so we expect
> a minimal value of 1us to be enough. This hasn't been tested though
> due to lack of hardware which has the reset connected to a GPIO.
>
> Signed-off-by: Frieder Schrempf <[email protected]>

Acked-by: Matthias Kaehlcke <[email protected]>