linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] usb: misc: Add support for Microchip USB5744
@ 2021-02-09  9:53 Michal Simek
  2021-02-09  9:53 ` [PATCH 1/2] dt-bindings: usb: misc: Add binding for Microchip usb5744 hub Michal Simek
  2021-02-09  9:53 ` [PATCH 2/2] usb: misc: usb5744: Add support for USB hub controller Michal Simek
  0 siblings, 2 replies; 8+ messages in thread
From: Michal Simek @ 2021-02-09  9:53 UTC (permalink / raw)
  To: linux-kernel, monstr, michal.simek, git
  Cc: Al Cooper, Alan Stern, Alexander A. Klimov, Bastien Nocera,
	Greg Kroah-Hartman, Masahiro Yamada, Piyush Mehta, Rob Herring,
	devicetree, linux-arm-kernel, linux-usb

Hi,

the series is adding basic support for this USB hub. The key part is
running reset over GPIO line and when i2c is connected it is necessary to
send command to boot the hub. This chip is available on Xilinx
zcu100/Ultra96 v1 board.

Thanks,
Michal


Piyush Mehta (2):
  dt-bindings: usb: misc: Add binding for Microchip usb5744 hub
  usb: misc: usb5744: Add support for USB hub controller

 .../bindings/usb/microchip,usb5744.yaml       |  56 +++++++++
 MAINTAINERS                                   |   2 +
 drivers/usb/misc/Kconfig                      |   9 ++
 drivers/usb/misc/Makefile                     |   1 +
 drivers/usb/misc/usb5744.c                    | 115 ++++++++++++++++++
 5 files changed, 183 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/usb/microchip,usb5744.yaml
 create mode 100644 drivers/usb/misc/usb5744.c

-- 
2.30.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/2] dt-bindings: usb: misc: Add binding for Microchip usb5744 hub
  2021-02-09  9:53 [PATCH 0/2] usb: misc: Add support for Microchip USB5744 Michal Simek
@ 2021-02-09  9:53 ` Michal Simek
  2021-02-09  9:53 ` [PATCH 2/2] usb: misc: usb5744: Add support for USB hub controller Michal Simek
  1 sibling, 0 replies; 8+ messages in thread
From: Michal Simek @ 2021-02-09  9:53 UTC (permalink / raw)
  To: linux-kernel, monstr, michal.simek, git
  Cc: Piyush Mehta, Greg Kroah-Hartman, Rob Herring, devicetree,
	linux-arm-kernel, linux-usb

From: Piyush Mehta <piyush.mehta@xilinx.com>

Added dt binding for usb5744 driver.

Signed-off-by: Piyush Mehta <piyush.mehta@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---

 .../bindings/usb/microchip,usb5744.yaml       | 56 +++++++++++++++++++
 MAINTAINERS                                   |  1 +
 2 files changed, 57 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/usb/microchip,usb5744.yaml

diff --git a/Documentation/devicetree/bindings/usb/microchip,usb5744.yaml b/Documentation/devicetree/bindings/usb/microchip,usb5744.yaml
new file mode 100644
index 000000000000..fe222f6db81d
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/microchip,usb5744.yaml
@@ -0,0 +1,56 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: "http://devicetree.org/schemas/usb/microchip,usb5744.yaml#"
+$schema: "http://devicetree.org/meta-schemas/core.yaml#"
+
+title: Bindings for the Microchip USB5744 4-port Hub Controller
+
+description:
+  Microchip’s USB5744 SmartHub™ IC is a 4 port, SuperSpeed (SS)/Hi-Speed (HS),
+  low power, low pin count configurable and fully compliant with the USB 3.1
+  Gen 1 specification. The USB5744 also supports Full Speed (FS) and Low Speed
+  (LS) USB signaling, offering complete coverage of all defined USB operating
+  speeds. The new SuperSpeed hubs operate in parallel with the USB 2.0
+  controller, so 5 Gbps SuperSpeed data transfers are not affected by slower
+  USB 2.0 traffic.
+
+maintainers:
+  - Piyush Mehta <piyush.mehta@xilinx.com>
+  - Michal Simek <michal.simek@xilinx.com>
+
+properties:
+  compatible:
+    const: microchip,usb5744
+
+  reg:
+    maxItems: 1
+    description: |
+      Specifies the i2c slave address, it is required and should be 0x2d
+      if I2C is used.
+
+  reset-gpios:
+    maxItems: 1
+    description:
+      The phandle and specifier for the GPIO that controls the RESET line of
+      USB hub.
+
+required:
+  - compatible
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        usb5744@2d {
+            compatible = "microchip,usb5744";
+            reg = <0x2d>;
+            reset-gpios = <&gpio 44 GPIO_ACTIVE_HIGH>;
+        };
+    };
diff --git a/MAINTAINERS b/MAINTAINERS
index 41e8d3d7faec..7439471b5d37 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2697,6 +2697,7 @@ W:	http://wiki.xilinx.com
 T:	git https://github.com/Xilinx/linux-xlnx.git
 F:	Documentation/devicetree/bindings/i2c/cdns,i2c-r1p10.yaml
 F:	Documentation/devicetree/bindings/i2c/xlnx,xps-iic-2.00.a.yaml
+F:	Documentation/devicetree/bindings/usb/microchip,usb5744.yaml
 F:	arch/arm/mach-zynq/
 F:	drivers/block/xsysace.c
 F:	drivers/clocksource/timer-cadence-ttc.c
-- 
2.30.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] usb: misc: usb5744: Add support for USB hub controller
  2021-02-09  9:53 [PATCH 0/2] usb: misc: Add support for Microchip USB5744 Michal Simek
  2021-02-09  9:53 ` [PATCH 1/2] dt-bindings: usb: misc: Add binding for Microchip usb5744 hub Michal Simek
@ 2021-02-09  9:53 ` Michal Simek
  2021-02-09 10:03   ` Greg Kroah-Hartman
  2021-02-10  2:52   ` Andrew Lunn
  1 sibling, 2 replies; 8+ messages in thread
From: Michal Simek @ 2021-02-09  9:53 UTC (permalink / raw)
  To: linux-kernel, monstr, michal.simek, git
  Cc: Piyush Mehta, Al Cooper, Alan Stern, Alexander A. Klimov,
	Bastien Nocera, Greg Kroah-Hartman, Masahiro Yamada,
	linux-arm-kernel, linux-usb

From: Piyush Mehta <piyush.mehta@xilinx.com>

This patch adds a USB GPIO based hub reset for USB5744 hub. This usb5744
driver trigger hub reset signal after soft reset or core Reset. The HUB
needs to be resetted after completion of phy initialization. After the
toggling of gpio, hub configure using i2c usb attached command.

USB5744 hub can be used without any I2C connection, is handled by a
simple platform device driver.

As part of the reset, sets the direction of the pin to output before
toggling the pin. Delay of millisecond is added in between low and
high to meet the setup and hold time requirement of the reset.

Signed-off-by: Piyush Mehta <piyush.mehta@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---

 MAINTAINERS                |   1 +
 drivers/usb/misc/Kconfig   |   9 +++
 drivers/usb/misc/Makefile  |   1 +
 drivers/usb/misc/usb5744.c | 115 +++++++++++++++++++++++++++++++++++++
 4 files changed, 126 insertions(+)
 create mode 100644 drivers/usb/misc/usb5744.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 7439471b5d37..56d1fcdd24f6 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2706,6 +2706,7 @@ F:	drivers/edac/synopsys_edac.c
 F:	drivers/i2c/busses/i2c-cadence.c
 F:	drivers/i2c/busses/i2c-xiic.c
 F:	drivers/mmc/host/sdhci-of-arasan.c
+F:	drivers/usb/misc/usb5744.c
 N:	zynq
 N:	xilinx
 
diff --git a/drivers/usb/misc/Kconfig b/drivers/usb/misc/Kconfig
index 8f1144359012..30335b5c4f88 100644
--- a/drivers/usb/misc/Kconfig
+++ b/drivers/usb/misc/Kconfig
@@ -242,6 +242,15 @@ config USB_HUB_USB251XB
 	  parameters may be set in devicetree or platform data.
 	  Say Y or M here if you need to configure such a device via SMBus.
 
+config USB_USB5744
+	tristate "Microchip USB5744 Hub driver"
+	depends on I2C
+	depends on GPIOLIB
+	help
+	  This option enables support for Microchip USB5744 Hub. This driver
+	  optionally reset the hub using gpio pin and configure hub via i2c if
+	  connected.
+
 config USB_HSIC_USB3503
 	tristate "USB3503 HSIC to USB20 Driver"
 	depends on I2C
diff --git a/drivers/usb/misc/Makefile b/drivers/usb/misc/Makefile
index 5f4e598573ab..5920146a506a 100644
--- a/drivers/usb/misc/Makefile
+++ b/drivers/usb/misc/Makefile
@@ -25,6 +25,7 @@ obj-$(CONFIG_USB_USS720)		+= uss720.o
 obj-$(CONFIG_USB_SEVSEG)		+= usbsevseg.o
 obj-$(CONFIG_USB_YUREX)			+= yurex.o
 obj-$(CONFIG_USB_HUB_USB251XB)		+= usb251xb.o
+obj-$(CONFIG_USB_USB5744)		+= usb5744.o
 obj-$(CONFIG_USB_HSIC_USB3503)		+= usb3503.o
 obj-$(CONFIG_USB_HSIC_USB4604)		+= usb4604.o
 obj-$(CONFIG_USB_CHAOSKEY)		+= chaoskey.o
diff --git a/drivers/usb/misc/usb5744.c b/drivers/usb/misc/usb5744.c
new file mode 100644
index 000000000000..729b76345c69
--- /dev/null
+++ b/drivers/usb/misc/usb5744.c
@@ -0,0 +1,115 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Driver for the Microchip USB5744 4-port hub.
+ *
+ * Copyright (c) 2021 Xilinx, Inc.
+ */
+
+#include <linux/delay.h>
+#include <linux/err.h>
+#include <linux/i2c.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/gpio/consumer.h>
+#include <linux/platform_device.h>
+
+static int usb5744_init_hw(struct device *dev)
+{
+	struct gpio_desc *reset_gpio;
+
+	reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
+	if (IS_ERR(reset_gpio)) {
+		dev_err(dev, "Failed to bind reset gpio");
+		return -ENODEV;
+	}
+
+	if (reset_gpio) {
+		/* Toggle RESET_N to reset the hub. */
+		gpiod_set_value(reset_gpio, 0);
+		usleep_range(5, 20); /* trstia */
+		gpiod_set_value(reset_gpio, 1);
+		usleep_range(5000, 10000); /* tcsh */
+	}
+
+	return 0;
+}
+
+static int usb5744_i2c_probe(struct i2c_client *client,
+			     const struct i2c_device_id *id)
+{
+	struct device *dev = &client->dev;
+	int ret;
+
+	/* Trigger gpio reset to the hub. */
+	ret = usb5744_init_hw(dev);
+	if (ret)
+		return ret;
+
+	/* Send SMBus command to boot hub. */
+	ret = i2c_smbus_write_word_data(client, 0xAA, swab16(0x5600));
+	if (ret < 0)
+		dev_err(dev, "Sending boot command failed");
+
+	return ret;
+}
+
+static int usb5744_platform_probe(struct platform_device *pdev)
+{
+	/* Trigger gpio reset to the hub. */
+	return usb5744_init_hw(&pdev->dev);
+}
+
+static const struct i2c_device_id usb5744_id[] = {
+	{ "usb5744", 0 },
+	{}
+};
+MODULE_DEVICE_TABLE(i2c, usb5744_id);
+
+static struct i2c_driver usb5744_i2c_driver = {
+	.driver = {
+		.name = "usb5744",
+	},
+	.probe = usb5744_i2c_probe,
+	.id_table = usb5744_id,
+};
+
+static const struct of_device_id usb5744_platform_id[] = {
+	{ .compatible = "microchip,usb5744", },
+	{ }
+};
+
+static struct platform_driver usb5744_platform_driver = {
+	.driver = {
+		.name = "microchip,usb5744",
+		.of_match_table = usb5744_platform_id,
+	},
+	.probe = usb5744_platform_probe,
+};
+
+static int __init usb5744_init(void)
+{
+	int err;
+
+	err = i2c_add_driver(&usb5744_i2c_driver);
+	if (err != 0)
+		pr_err("usb5744: Failed to register I2C driver: %d\n", err);
+
+	err = platform_driver_register(&usb5744_platform_driver);
+	if (err != 0)
+		pr_err("usb5744: Failed to register platform driver: %d\n",
+		       err);
+	return 0;
+}
+module_init(usb5744_init);
+
+static void __exit usb5744_exit(void)
+{
+	platform_driver_unregister(&usb5744_platform_driver);
+	i2c_del_driver(&usb5744_i2c_driver);
+}
+module_exit(usb5744_exit);
+
+MODULE_AUTHOR("Piyush Mehta <piyush.mehta@xilinx.com>");
+MODULE_AUTHOR("Michal Simek <michal.simek@xilinx.com>");
+MODULE_DESCRIPTION("USB5744 Hub");
+MODULE_LICENSE("GPL v2");
-- 
2.30.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] usb: misc: usb5744: Add support for USB hub controller
  2021-02-09  9:53 ` [PATCH 2/2] usb: misc: usb5744: Add support for USB hub controller Michal Simek
@ 2021-02-09 10:03   ` Greg Kroah-Hartman
  2021-02-09 10:11     ` Michal Simek
  2021-02-10  2:52   ` Andrew Lunn
  1 sibling, 1 reply; 8+ messages in thread
From: Greg Kroah-Hartman @ 2021-02-09 10:03 UTC (permalink / raw)
  To: Michal Simek
  Cc: linux-kernel, monstr, git, Piyush Mehta, Al Cooper, Alan Stern,
	Alexander A. Klimov, Bastien Nocera, Masahiro Yamada,
	linux-arm-kernel, linux-usb

On Tue, Feb 09, 2021 at 10:53:20AM +0100, Michal Simek wrote:
> From: Piyush Mehta <piyush.mehta@xilinx.com>
> 
> This patch adds a USB GPIO based hub reset for USB5744 hub. This usb5744
> driver trigger hub reset signal after soft reset or core Reset. The HUB
> needs to be resetted after completion of phy initialization. After the
> toggling of gpio, hub configure using i2c usb attached command.
> 
> USB5744 hub can be used without any I2C connection, is handled by a
> simple platform device driver.
> 
> As part of the reset, sets the direction of the pin to output before
> toggling the pin. Delay of millisecond is added in between low and
> high to meet the setup and hold time requirement of the reset.
> 
> Signed-off-by: Piyush Mehta <piyush.mehta@xilinx.com>
> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
> ---
> 
>  MAINTAINERS                |   1 +
>  drivers/usb/misc/Kconfig   |   9 +++
>  drivers/usb/misc/Makefile  |   1 +
>  drivers/usb/misc/usb5744.c | 115 +++++++++++++++++++++++++++++++++++++
>  4 files changed, 126 insertions(+)
>  create mode 100644 drivers/usb/misc/usb5744.c
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 7439471b5d37..56d1fcdd24f6 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -2706,6 +2706,7 @@ F:	drivers/edac/synopsys_edac.c
>  F:	drivers/i2c/busses/i2c-cadence.c
>  F:	drivers/i2c/busses/i2c-xiic.c
>  F:	drivers/mmc/host/sdhci-of-arasan.c
> +F:	drivers/usb/misc/usb5744.c
>  N:	zynq
>  N:	xilinx
>  
> diff --git a/drivers/usb/misc/Kconfig b/drivers/usb/misc/Kconfig
> index 8f1144359012..30335b5c4f88 100644
> --- a/drivers/usb/misc/Kconfig
> +++ b/drivers/usb/misc/Kconfig
> @@ -242,6 +242,15 @@ config USB_HUB_USB251XB
>  	  parameters may be set in devicetree or platform data.
>  	  Say Y or M here if you need to configure such a device via SMBus.
>  
> +config USB_USB5744
> +	tristate "Microchip USB5744 Hub driver"
> +	depends on I2C
> +	depends on GPIOLIB
> +	help
> +	  This option enables support for Microchip USB5744 Hub. This driver
> +	  optionally reset the hub using gpio pin and configure hub via i2c if
> +	  connected.
> +
>  config USB_HSIC_USB3503
>  	tristate "USB3503 HSIC to USB20 Driver"
>  	depends on I2C
> diff --git a/drivers/usb/misc/Makefile b/drivers/usb/misc/Makefile
> index 5f4e598573ab..5920146a506a 100644
> --- a/drivers/usb/misc/Makefile
> +++ b/drivers/usb/misc/Makefile
> @@ -25,6 +25,7 @@ obj-$(CONFIG_USB_USS720)		+= uss720.o
>  obj-$(CONFIG_USB_SEVSEG)		+= usbsevseg.o
>  obj-$(CONFIG_USB_YUREX)			+= yurex.o
>  obj-$(CONFIG_USB_HUB_USB251XB)		+= usb251xb.o
> +obj-$(CONFIG_USB_USB5744)		+= usb5744.o

Can you follow the convention of the config options we have already, and
make this USB_HUB_USB5744 please?

>  obj-$(CONFIG_USB_HSIC_USB3503)		+= usb3503.o
>  obj-$(CONFIG_USB_HSIC_USB4604)		+= usb4604.o

And then put it in sorted order :)

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] usb: misc: usb5744: Add support for USB hub controller
  2021-02-09 10:03   ` Greg Kroah-Hartman
@ 2021-02-09 10:11     ` Michal Simek
  2021-02-09 10:40       ` Greg Kroah-Hartman
  0 siblings, 1 reply; 8+ messages in thread
From: Michal Simek @ 2021-02-09 10:11 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Michal Simek
  Cc: linux-kernel, monstr, git, Piyush Mehta, Al Cooper, Alan Stern,
	Alexander A. Klimov, Bastien Nocera, Masahiro Yamada,
	linux-arm-kernel, linux-usb



On 2/9/21 11:03 AM, Greg Kroah-Hartman wrote:
> On Tue, Feb 09, 2021 at 10:53:20AM +0100, Michal Simek wrote:
>> From: Piyush Mehta <piyush.mehta@xilinx.com>
>>
>> This patch adds a USB GPIO based hub reset for USB5744 hub. This usb5744
>> driver trigger hub reset signal after soft reset or core Reset. The HUB
>> needs to be resetted after completion of phy initialization. After the
>> toggling of gpio, hub configure using i2c usb attached command.
>>
>> USB5744 hub can be used without any I2C connection, is handled by a
>> simple platform device driver.
>>
>> As part of the reset, sets the direction of the pin to output before
>> toggling the pin. Delay of millisecond is added in between low and
>> high to meet the setup and hold time requirement of the reset.
>>
>> Signed-off-by: Piyush Mehta <piyush.mehta@xilinx.com>
>> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
>> ---
>>
>>  MAINTAINERS                |   1 +
>>  drivers/usb/misc/Kconfig   |   9 +++
>>  drivers/usb/misc/Makefile  |   1 +
>>  drivers/usb/misc/usb5744.c | 115 +++++++++++++++++++++++++++++++++++++
>>  4 files changed, 126 insertions(+)
>>  create mode 100644 drivers/usb/misc/usb5744.c
>>
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index 7439471b5d37..56d1fcdd24f6 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -2706,6 +2706,7 @@ F:	drivers/edac/synopsys_edac.c
>>  F:	drivers/i2c/busses/i2c-cadence.c
>>  F:	drivers/i2c/busses/i2c-xiic.c
>>  F:	drivers/mmc/host/sdhci-of-arasan.c
>> +F:	drivers/usb/misc/usb5744.c
>>  N:	zynq
>>  N:	xilinx
>>  
>> diff --git a/drivers/usb/misc/Kconfig b/drivers/usb/misc/Kconfig
>> index 8f1144359012..30335b5c4f88 100644
>> --- a/drivers/usb/misc/Kconfig
>> +++ b/drivers/usb/misc/Kconfig
>> @@ -242,6 +242,15 @@ config USB_HUB_USB251XB
>>  	  parameters may be set in devicetree or platform data.
>>  	  Say Y or M here if you need to configure such a device via SMBus.
>>  
>> +config USB_USB5744
>> +	tristate "Microchip USB5744 Hub driver"
>> +	depends on I2C
>> +	depends on GPIOLIB
>> +	help
>> +	  This option enables support for Microchip USB5744 Hub. This driver
>> +	  optionally reset the hub using gpio pin and configure hub via i2c if
>> +	  connected.
>> +
>>  config USB_HSIC_USB3503
>>  	tristate "USB3503 HSIC to USB20 Driver"
>>  	depends on I2C
>> diff --git a/drivers/usb/misc/Makefile b/drivers/usb/misc/Makefile
>> index 5f4e598573ab..5920146a506a 100644
>> --- a/drivers/usb/misc/Makefile
>> +++ b/drivers/usb/misc/Makefile
>> @@ -25,6 +25,7 @@ obj-$(CONFIG_USB_USS720)		+= uss720.o
>>  obj-$(CONFIG_USB_SEVSEG)		+= usbsevseg.o
>>  obj-$(CONFIG_USB_YUREX)			+= yurex.o
>>  obj-$(CONFIG_USB_HUB_USB251XB)		+= usb251xb.o
>> +obj-$(CONFIG_USB_USB5744)		+= usb5744.o
> 
> Can you follow the convention of the config options we have already, and
> make this USB_HUB_USB5744 please?

Sure.

> 
>>  obj-$(CONFIG_USB_HSIC_USB3503)		+= usb3503.o
>>  obj-$(CONFIG_USB_HSIC_USB4604)		+= usb4604.o
> 
> And then put it in sorted order :)

Do you want me to sort the whole Makefile and Kconfig as separate patch?
It is pretty much unsorted now.

And any other problem with the driver itself?

Thanks,
Michal

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] usb: misc: usb5744: Add support for USB hub controller
  2021-02-09 10:11     ` Michal Simek
@ 2021-02-09 10:40       ` Greg Kroah-Hartman
  0 siblings, 0 replies; 8+ messages in thread
From: Greg Kroah-Hartman @ 2021-02-09 10:40 UTC (permalink / raw)
  To: Michal Simek
  Cc: linux-kernel, monstr, git, Piyush Mehta, Al Cooper, Alan Stern,
	Alexander A. Klimov, Bastien Nocera, Masahiro Yamada,
	linux-arm-kernel, linux-usb

On Tue, Feb 09, 2021 at 11:11:54AM +0100, Michal Simek wrote:
> 
> 
> On 2/9/21 11:03 AM, Greg Kroah-Hartman wrote:
> > On Tue, Feb 09, 2021 at 10:53:20AM +0100, Michal Simek wrote:
> >> From: Piyush Mehta <piyush.mehta@xilinx.com>
> >>
> >> This patch adds a USB GPIO based hub reset for USB5744 hub. This usb5744
> >> driver trigger hub reset signal after soft reset or core Reset. The HUB
> >> needs to be resetted after completion of phy initialization. After the
> >> toggling of gpio, hub configure using i2c usb attached command.
> >>
> >> USB5744 hub can be used without any I2C connection, is handled by a
> >> simple platform device driver.
> >>
> >> As part of the reset, sets the direction of the pin to output before
> >> toggling the pin. Delay of millisecond is added in between low and
> >> high to meet the setup and hold time requirement of the reset.
> >>
> >> Signed-off-by: Piyush Mehta <piyush.mehta@xilinx.com>
> >> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
> >> ---
> >>
> >>  MAINTAINERS                |   1 +
> >>  drivers/usb/misc/Kconfig   |   9 +++
> >>  drivers/usb/misc/Makefile  |   1 +
> >>  drivers/usb/misc/usb5744.c | 115 +++++++++++++++++++++++++++++++++++++
> >>  4 files changed, 126 insertions(+)
> >>  create mode 100644 drivers/usb/misc/usb5744.c
> >>
> >> diff --git a/MAINTAINERS b/MAINTAINERS
> >> index 7439471b5d37..56d1fcdd24f6 100644
> >> --- a/MAINTAINERS
> >> +++ b/MAINTAINERS
> >> @@ -2706,6 +2706,7 @@ F:	drivers/edac/synopsys_edac.c
> >>  F:	drivers/i2c/busses/i2c-cadence.c
> >>  F:	drivers/i2c/busses/i2c-xiic.c
> >>  F:	drivers/mmc/host/sdhci-of-arasan.c
> >> +F:	drivers/usb/misc/usb5744.c
> >>  N:	zynq
> >>  N:	xilinx
> >>  
> >> diff --git a/drivers/usb/misc/Kconfig b/drivers/usb/misc/Kconfig
> >> index 8f1144359012..30335b5c4f88 100644
> >> --- a/drivers/usb/misc/Kconfig
> >> +++ b/drivers/usb/misc/Kconfig
> >> @@ -242,6 +242,15 @@ config USB_HUB_USB251XB
> >>  	  parameters may be set in devicetree or platform data.
> >>  	  Say Y or M here if you need to configure such a device via SMBus.
> >>  
> >> +config USB_USB5744
> >> +	tristate "Microchip USB5744 Hub driver"
> >> +	depends on I2C
> >> +	depends on GPIOLIB
> >> +	help
> >> +	  This option enables support for Microchip USB5744 Hub. This driver
> >> +	  optionally reset the hub using gpio pin and configure hub via i2c if
> >> +	  connected.
> >> +
> >>  config USB_HSIC_USB3503
> >>  	tristate "USB3503 HSIC to USB20 Driver"
> >>  	depends on I2C
> >> diff --git a/drivers/usb/misc/Makefile b/drivers/usb/misc/Makefile
> >> index 5f4e598573ab..5920146a506a 100644
> >> --- a/drivers/usb/misc/Makefile
> >> +++ b/drivers/usb/misc/Makefile
> >> @@ -25,6 +25,7 @@ obj-$(CONFIG_USB_USS720)		+= uss720.o
> >>  obj-$(CONFIG_USB_SEVSEG)		+= usbsevseg.o
> >>  obj-$(CONFIG_USB_YUREX)			+= yurex.o
> >>  obj-$(CONFIG_USB_HUB_USB251XB)		+= usb251xb.o
> >> +obj-$(CONFIG_USB_USB5744)		+= usb5744.o
> > 
> > Can you follow the convention of the config options we have already, and
> > make this USB_HUB_USB5744 please?
> 
> Sure.
> 
> > 
> >>  obj-$(CONFIG_USB_HSIC_USB3503)		+= usb3503.o
> >>  obj-$(CONFIG_USB_HSIC_USB4604)		+= usb4604.o
> > 
> > And then put it in sorted order :)
> 
> Do you want me to sort the whole Makefile and Kconfig as separate patch?

No, but at least put your new line in the obvious place, in order :)

> And any other problem with the driver itself?

No idea, I stopped here in reviewing...

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] usb: misc: usb5744: Add support for USB hub controller
  2021-02-09  9:53 ` [PATCH 2/2] usb: misc: usb5744: Add support for USB hub controller Michal Simek
  2021-02-09 10:03   ` Greg Kroah-Hartman
@ 2021-02-10  2:52   ` Andrew Lunn
  2021-02-10 11:03     ` Michal Simek
  1 sibling, 1 reply; 8+ messages in thread
From: Andrew Lunn @ 2021-02-10  2:52 UTC (permalink / raw)
  To: Michal Simek
  Cc: linux-kernel, monstr, git, linux-usb, Alexander A. Klimov,
	Piyush Mehta, Masahiro Yamada, Al Cooper, Alan Stern,
	Bastien Nocera, Greg Kroah-Hartman, linux-arm-kernel

On Tue, Feb 09, 2021 at 10:53:20AM +0100, Michal Simek wrote:
> +static int usb5744_i2c_probe(struct i2c_client *client,
> +			     const struct i2c_device_id *id)
> +{
> +	struct device *dev = &client->dev;
> +	int ret;
> +
> +	/* Trigger gpio reset to the hub. */
> +	ret = usb5744_init_hw(dev);
> +	if (ret)
> +		return ret;
> +
> +	/* Send SMBus command to boot hub. */
> +	ret = i2c_smbus_write_word_data(client, 0xAA, swab16(0x5600));

Hi Michal

This is not my area of the kernel. But that swab16() stood out, and
made me wonder about endianness. Will this work correctly on big and
little endian hosts?

       Andrew

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] usb: misc: usb5744: Add support for USB hub controller
  2021-02-10  2:52   ` Andrew Lunn
@ 2021-02-10 11:03     ` Michal Simek
  0 siblings, 0 replies; 8+ messages in thread
From: Michal Simek @ 2021-02-10 11:03 UTC (permalink / raw)
  To: Andrew Lunn, Michal Simek
  Cc: linux-kernel, monstr, git, linux-usb, Alexander A. Klimov,
	Piyush Mehta, Masahiro Yamada, Al Cooper, Alan Stern,
	Bastien Nocera, Greg Kroah-Hartman, linux-arm-kernel

Hi Andrew,

On 2/10/21 3:52 AM, Andrew Lunn wrote:
> On Tue, Feb 09, 2021 at 10:53:20AM +0100, Michal Simek wrote:
>> +static int usb5744_i2c_probe(struct i2c_client *client,
>> +			     const struct i2c_device_id *id)
>> +{
>> +	struct device *dev = &client->dev;
>> +	int ret;
>> +
>> +	/* Trigger gpio reset to the hub. */
>> +	ret = usb5744_init_hw(dev);
>> +	if (ret)
>> +		return ret;
>> +
>> +	/* Send SMBus command to boot hub. */
>> +	ret = i2c_smbus_write_word_data(client, 0xAA, swab16(0x5600));
> 
> Hi Michal
> 
> This is not my area of the kernel. But that swab16() stood out, and
> made me wonder about endianness. Will this work correctly on big and
> little endian hosts?

thanks for bringing this up. I didn't test it on BE system.

I have grepped the kernel

[linux](xnext/usb5744)$ git grep i2c_smbus_write_word_data | grep swab
drivers/media/i2c/uda1342.c:17:	i2c_smbus_write_word_data(client, reg,
swab16(value));
drivers/media/i2c/vpx3220.c:97:	if (i2c_smbus_write_word_data(client,
0x27, swab16(fpaddr)) == -1) {
drivers/media/i2c/vpx3220.c:106:	if (i2c_smbus_write_word_data(client,
0x28, swab16(data)) == -1) {
drivers/media/i2c/vpx3220.c:120:	if (i2c_smbus_write_word_data(client,
0x26, swab16(fpaddr)) == -1) {
drivers/usb/misc/usb5744.c:50:	ret = i2c_smbus_write_word_data(client,
0xAA, swab16(0x5600));
include/linux/i2c.h:168:	return i2c_smbus_write_word_data(client,
command, swab16(value));

And last one is interesting

 164 static inline s32
 165 i2c_smbus_write_word_swapped(const struct i2c_client *client,
 166                              u8 command, u16 value)
 167 {
 168         return i2c_smbus_write_word_data(client, command,
swab16(value));
 169 }

And this function is also used

[linux](xnext/usb5744)$ git grep i2c_smbus_write_word_swapped | wc -l
76

I think it would be the best to test it and see if this code works on BE
but I need to prepare it first.
And current code is aligned with others but it doesn't mean that it is
correct.

Thanks,
Michal




^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-02-10 11:07 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-09  9:53 [PATCH 0/2] usb: misc: Add support for Microchip USB5744 Michal Simek
2021-02-09  9:53 ` [PATCH 1/2] dt-bindings: usb: misc: Add binding for Microchip usb5744 hub Michal Simek
2021-02-09  9:53 ` [PATCH 2/2] usb: misc: usb5744: Add support for USB hub controller Michal Simek
2021-02-09 10:03   ` Greg Kroah-Hartman
2021-02-09 10:11     ` Michal Simek
2021-02-09 10:40       ` Greg Kroah-Hartman
2021-02-10  2:52   ` Andrew Lunn
2021-02-10 11:03     ` Michal Simek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).