2021-09-03 09:30:25

by Mauro Carvalho Chehab

[permalink] [raw]
Subject: [PATCH v4 0/4] Make USB ports to work on HiKey960/970

Hi Rob,

It follows the patchset adding a DT schema needed to power on and to
use the integrated USB hub found on HiKey 960 and Hikey 970 boards.

Besides each board use a different chip for the hub, on both they're
controlled the same way. Such boards come with an integrated 4-port
USB hub on it, set on what it seems to be a non-standard way: on both
implementations, the USB type-C port is used to detect the USB role.

When in host mode, the 3.3V power supply (VDD33 pins) for the hub
are disabled. That disables the USB I/O on type-A ports.

When USB type-C is on device mode, the OTG is switched via a GPIO pin
to device mode, and the hub is powered on.

A Type-C power supply line is also controlled depending on the role.

-

The entire series which contains the remaining patches to support
PCI and USB on HiKey970, and USB on HiKey960 is at:

https://github.com/mchehab/linux/commits/linux-master

The patches needed by the USB on HiKey970 were already merged
upstream. So, the above branch applies on the top of Linux master
branch.

Tested on HiKey 960:

$ lsusb
Bus 002 Device 002: ID 0424:5734 Standard Microsystems Corp.
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 0424:2740 Standard Microsystems Corp.
Bus 001 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 001 Device 002: ID 0424:2734 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Tested on HiKey 970:

$ lsusb
Bus 002 Device 002: ID 0451:8140 Texas Instruments, Inc. TUSB8041 4-Port Hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 001 Device 002: ID 0451:8142 Texas Instruments, Inc. TUSB8041 4-Port Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

v4:
- Improved description at the DT schema;
- Use just one compatible, as there's no difference between
HiKey 960 and 970 with regards to how the hub should be
controlled;
- parse usb-role-switch property at the driver;
- make the properties that depends on usb-role-switch optional.

v3:
- The examples at the dt-bindings were updated to reflect
the actual DTS content and won't produce any warnings;
- Added John Stultz SoB to Hikey960 DTS patch;
- Added a patch for the mux hub driver for it to work with
the newer schema;

John Stultz (1):
arm64: dts: hisilicon: Add usb mux hub for hikey960

Mauro Carvalho Chehab (2):
misc: hisi_hikey_usb: change the DT schema
arm64: dts: hisilicon: Add usb mux hub for hikey970

Yu Chen (1):
dt-bindings: misc: add schema for USB hub on Kirin devices

.../bindings/misc/hisilicon,hikey-usb.yaml | 87 +++++++++++++
.../boot/dts/hisilicon/hi3660-hikey960.dts | 35 +++++-
.../boot/dts/hisilicon/hi3670-hikey970.dts | 23 ++++
drivers/misc/hisi_hikey_usb.c | 119 +++++++++---------
4 files changed, 206 insertions(+), 58 deletions(-)
create mode 100644 Documentation/devicetree/bindings/misc/hisilicon,hikey-usb.yaml

--
2.31.1



2021-09-03 09:30:32

by Mauro Carvalho Chehab

[permalink] [raw]
Subject: [PATCH v4 2/4] misc: hisi_hikey_usb: change the DT schema

As there's no upstream DT bindings for this driver, let's
update its DT schema, while it is not too late.

While here, add error messages, in order to help discovering
problems during probing time.

Signed-off-by: Mauro Carvalho Chehab <[email protected]>
---
drivers/misc/hisi_hikey_usb.c | 119 ++++++++++++++++++----------------
1 file changed, 63 insertions(+), 56 deletions(-)

diff --git a/drivers/misc/hisi_hikey_usb.c b/drivers/misc/hisi_hikey_usb.c
index 989d7d129469..2165ec35a343 100644
--- a/drivers/misc/hisi_hikey_usb.c
+++ b/drivers/misc/hisi_hikey_usb.c
@@ -34,7 +34,6 @@ struct hisi_hikey_usb {
struct device *dev;
struct gpio_desc *otg_switch;
struct gpio_desc *typec_vbus;
- struct gpio_desc *hub_vbus;
struct gpio_desc *reset;

struct regulator *regulator;
@@ -54,9 +53,6 @@ static void hub_power_ctrl(struct hisi_hikey_usb *hisi_hikey_usb, int value)
{
int ret, status;

- if (hisi_hikey_usb->hub_vbus)
- gpiod_set_value_cansleep(hisi_hikey_usb->hub_vbus, value);
-
if (!hisi_hikey_usb->regulator)
return;

@@ -147,75 +143,50 @@ static int hub_usb_role_switch_set(struct usb_role_switch *sw, enum usb_role rol
return 0;
}

-static int hisi_hikey_usb_parse_kirin970(struct platform_device *pdev,
+static int hisi_hikey_usb_of_role_switch(struct platform_device *pdev,
struct hisi_hikey_usb *hisi_hikey_usb)
-{
- struct regulator *regulator;
-
- regulator = devm_regulator_get(&pdev->dev, "hub-vdd");
- if (IS_ERR(regulator)) {
- if (PTR_ERR(regulator) == -EPROBE_DEFER) {
- dev_info(&pdev->dev,
- "waiting for hub-vdd-supply to be probed\n");
- return PTR_ERR(regulator);
- }
- dev_err(&pdev->dev,
- "get hub-vdd-supply failed with error %ld\n",
- PTR_ERR(regulator));
- return PTR_ERR(regulator);
- }
- hisi_hikey_usb->regulator = regulator;
-
- hisi_hikey_usb->reset = devm_gpiod_get(&pdev->dev, "hub_reset_en_gpio",
- GPIOD_OUT_HIGH);
- return PTR_ERR_OR_ZERO(hisi_hikey_usb->reset);
-}
-
-static int hisi_hikey_usb_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
- struct hisi_hikey_usb *hisi_hikey_usb;
struct usb_role_switch_desc hub_role_switch = {NULL};
- int ret;

- hisi_hikey_usb = devm_kzalloc(dev, sizeof(*hisi_hikey_usb), GFP_KERNEL);
- if (!hisi_hikey_usb)
- return -ENOMEM;
-
- hisi_hikey_usb->dev = &pdev->dev;
+ if (!device_property_read_bool(dev, "usb-role-switch"))
+ return 0;

hisi_hikey_usb->otg_switch = devm_gpiod_get(dev, "otg-switch",
GPIOD_OUT_HIGH);
- if (IS_ERR(hisi_hikey_usb->otg_switch))
+ if (IS_ERR(hisi_hikey_usb->otg_switch)) {
+ dev_err(dev, "get otg-switch failed with error %ld\n",
+ PTR_ERR(hisi_hikey_usb->otg_switch));
return PTR_ERR(hisi_hikey_usb->otg_switch);
+ }

hisi_hikey_usb->typec_vbus = devm_gpiod_get(dev, "typec-vbus",
GPIOD_OUT_LOW);
- if (IS_ERR(hisi_hikey_usb->typec_vbus))
+ if (IS_ERR(hisi_hikey_usb->typec_vbus)) {
+ dev_err(dev, "get typec-vbus failed with error %ld\n",
+ PTR_ERR(hisi_hikey_usb->typec_vbus));
return PTR_ERR(hisi_hikey_usb->typec_vbus);
+ }

- /* Parse Kirin 970-specific OF data */
- if (of_device_is_compatible(pdev->dev.of_node,
- "hisilicon,kirin970_hikey_usbhub")) {
- ret = hisi_hikey_usb_parse_kirin970(pdev, hisi_hikey_usb);
- if (ret)
- return ret;
- } else {
- /* hub-vdd33-en is optional */
- hisi_hikey_usb->hub_vbus = devm_gpiod_get_optional(dev, "hub-vdd33-en",
- GPIOD_OUT_HIGH);
- if (IS_ERR(hisi_hikey_usb->hub_vbus))
- return PTR_ERR(hisi_hikey_usb->hub_vbus);
+ hisi_hikey_usb->reset = devm_gpiod_get_optional(dev,
+ "hub-reset-en",
+ GPIOD_OUT_HIGH);
+ if (IS_ERR(hisi_hikey_usb->reset)) {
+ dev_err(dev, "get hub-reset-en failed with error %ld\n",
+ PTR_ERR(hisi_hikey_usb->reset));
+ return PTR_ERR(hisi_hikey_usb->reset);
}

hisi_hikey_usb->dev_role_sw = usb_role_switch_get(dev);
if (!hisi_hikey_usb->dev_role_sw)
return -EPROBE_DEFER;
- if (IS_ERR(hisi_hikey_usb->dev_role_sw))
+ if (IS_ERR(hisi_hikey_usb->dev_role_sw)) {
+ dev_err(dev, "get device role switch failed with error %ld\n",
+ PTR_ERR(hisi_hikey_usb->dev_role_sw));
return PTR_ERR(hisi_hikey_usb->dev_role_sw);
+ }

INIT_WORK(&hisi_hikey_usb->work, relay_set_role_switch);
- mutex_init(&hisi_hikey_usb->lock);

hub_role_switch.fwnode = dev_fwnode(dev);
hub_role_switch.set = hub_usb_role_switch_set;
@@ -225,10 +196,44 @@ static int hisi_hikey_usb_probe(struct platform_device *pdev)
&hub_role_switch);

if (IS_ERR(hisi_hikey_usb->hub_role_sw)) {
+ dev_err(dev,
+ "failed to register hub role with error %ld\n",
+ PTR_ERR(hisi_hikey_usb->hub_role_sw));
usb_role_switch_put(hisi_hikey_usb->dev_role_sw);
return PTR_ERR(hisi_hikey_usb->hub_role_sw);
}

+ return 0;
+}
+
+static int hisi_hikey_usb_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct hisi_hikey_usb *hisi_hikey_usb;
+ int ret;
+
+ hisi_hikey_usb = devm_kzalloc(dev, sizeof(*hisi_hikey_usb), GFP_KERNEL);
+ if (!hisi_hikey_usb)
+ return -ENOMEM;
+
+ hisi_hikey_usb->dev = &pdev->dev;
+ mutex_init(&hisi_hikey_usb->lock);
+
+ hisi_hikey_usb->regulator = devm_regulator_get(dev, "hub-vdd");
+ if (IS_ERR(hisi_hikey_usb->regulator)) {
+ if (PTR_ERR(hisi_hikey_usb->regulator) == -EPROBE_DEFER) {
+ dev_info(dev, "waiting for hub-vdd-supply\n");
+ return PTR_ERR(hisi_hikey_usb->regulator);
+ }
+ dev_err(dev, "get hub-vdd-supply failed with error %ld\n",
+ PTR_ERR(hisi_hikey_usb->regulator));
+ return PTR_ERR(hisi_hikey_usb->regulator);
+ }
+
+ ret = hisi_hikey_usb_of_role_switch(pdev, hisi_hikey_usb);
+ if (ret)
+ return ret;
+
platform_set_drvdata(pdev, hisi_hikey_usb);

return 0;
@@ -238,18 +243,20 @@ static int hisi_hikey_usb_remove(struct platform_device *pdev)
{
struct hisi_hikey_usb *hisi_hikey_usb = platform_get_drvdata(pdev);

- if (hisi_hikey_usb->hub_role_sw)
+ if (hisi_hikey_usb->hub_role_sw) {
usb_role_switch_unregister(hisi_hikey_usb->hub_role_sw);

- if (hisi_hikey_usb->dev_role_sw)
- usb_role_switch_put(hisi_hikey_usb->dev_role_sw);
+ if (hisi_hikey_usb->dev_role_sw)
+ usb_role_switch_put(hisi_hikey_usb->dev_role_sw);
+ } else {
+ hub_power_ctrl(hisi_hikey_usb, HUB_VBUS_POWER_OFF);
+ }

return 0;
}

static const struct of_device_id id_table_hisi_hikey_usb[] = {
- { .compatible = "hisilicon,gpio_hubv1" },
- { .compatible = "hisilicon,kirin970_hikey_usbhub" },
+ { .compatible = "hisilicon,usbhub" },
{}
};
MODULE_DEVICE_TABLE(of, id_table_hisi_hikey_usb);
--
2.31.1

2021-09-03 09:31:01

by Mauro Carvalho Chehab

[permalink] [raw]
Subject: [PATCH v4 3/4] arm64: dts: hisilicon: Add usb mux hub for hikey970

Add dt bindings for Kirin 970 USB HUB. Such board comes with an
integrated USB HUB provided via a TI TUSB8041 4-port USB 3.0 hub.

Signed-off-by: Mauro Carvalho Chehab <[email protected]>
---
.../boot/dts/hisilicon/hi3670-hikey970.dts | 23 +++++++++++++++++++
1 file changed, 23 insertions(+)

diff --git a/arch/arm64/boot/dts/hisilicon/hi3670-hikey970.dts b/arch/arm64/boot/dts/hisilicon/hi3670-hikey970.dts
index 60594db07041..95ca49f1e455 100644
--- a/arch/arm64/boot/dts/hisilicon/hi3670-hikey970.dts
+++ b/arch/arm64/boot/dts/hisilicon/hi3670-hikey970.dts
@@ -53,6 +53,29 @@ wlan_en: wlan-en-1-8v {
startup-delay-us = <70000>;
enable-active-high;
};
+
+ usb-hub {
+ compatible = "hisilicon,usbhub";
+ typec-vbus-gpios = <&gpio26 1 0>;
+ otg-switch-gpios = <&gpio4 2 0>;
+ hub-reset-en-gpios = <&gpio0 3 0>;
+ hub-vdd-supply = <&ldo17>;
+ usb-role-switch;
+
+ port {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ hikey_usb_ep0: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&dwc3_role_switch>;
+ };
+ hikey_usb_ep1: endpoint@1 {
+ reg = <1>;
+ remote-endpoint = <&rt1711h_ep>;
+ };
+ };
+ };
};

/*
--
2.31.1

2021-09-03 09:32:19

by Mauro Carvalho Chehab

[permalink] [raw]
Subject: [PATCH v4 1/4] dt-bindings: misc: add schema for USB hub on Kirin devices

From: Yu Chen <[email protected]>

This patch adds binding documentation to support USB HUB and
USB data role switch of HiSilicon HiKey960 and HiKey970 boards.

[mchehab: updated OF schema and added HiKey970 example]
Signed-off-by: Yu Chen <[email protected]>
Signed-off-by: John Stultz <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
---
.../bindings/misc/hisilicon,hikey-usb.yaml | 87 +++++++++++++++++++
1 file changed, 87 insertions(+)
create mode 100644 Documentation/devicetree/bindings/misc/hisilicon,hikey-usb.yaml

diff --git a/Documentation/devicetree/bindings/misc/hisilicon,hikey-usb.yaml b/Documentation/devicetree/bindings/misc/hisilicon,hikey-usb.yaml
new file mode 100644
index 000000000000..761ab686121a
--- /dev/null
+++ b/Documentation/devicetree/bindings/misc/hisilicon,hikey-usb.yaml
@@ -0,0 +1,87 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+# Copyright 2019 Linaro Ltd.
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/misc/hisilicon,hikey-usb.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: HiKey960/970 onboard USB GPIO Hub
+
+maintainers:
+ - John Stultz <[email protected]>
+
+description: |
+ Supports the onboard USB GPIO hubs found on HiKey960/970.
+ Such hubs require a power supply for the USB I/O. Depending on the
+ exact hub model, after USB I/O is powered up, a reset should be needed.
+
+ It also acts as a role-switch intermediary to detect the state of
+ the USB-C port, to switch the hub into dual-role USB-C or host mode,
+ which enables and powers up the onboard USB-A host ports.
+
+ Schematics about such hubs can be found here:
+ https://github.com/96boards/documentation/raw/master/consumer/hikey/hikey960/hardware-docs/HiKey960_Schematics.pdf
+ https://www.96boards.org/documentation/consumer/hikey/hikey970/hardware-docs/files/hikey970-schematics.pdf
+
+properties:
+ compatible:
+ enum:
+ - hisilicon,usbhub
+
+ typec-vbus-gpios:
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ description: phandle to the typec-vbus gpio
+
+ otg-switch-gpios:
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ description: phandle to the otg-switch gpio
+
+ hub-reset-en-gpios:
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ description: phandle to the hub reset gpio
+
+ usb-role-switch:
+ $ref: /schemas/types.yaml#/definitions/flag
+ description: Support role switch.
+
+ hub-vdd-supply:
+ description: regulator for hub power
+
+ port:
+ description: |
+ describe hadware connections between USB endpoints.
+ Two ports are supported: the first being the endpoint that will
+ be notified by this driver, and the second being the endpoint
+ that notifies this driver of a role switch.
+
+required:
+ - compatible
+ - hub-vdd-supply
+ - port
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+
+ usb-hub {
+ compatible = "hisilicon,usbhub";
+ typec-vbus-gpios = <&gpio25 2 GPIO_ACTIVE_HIGH>;
+ otg-switch-gpios = <&gpio25 6 GPIO_ACTIVE_HIGH>;
+ hub-reset-en-gpios = <&gpio0 3 GPIO_ACTIVE_HIGH>;
+ hub-vdd-supply = <&usb_hub_vdd>;
+ usb-role-switch;
+ port {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ usb_ep0: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&dwc3_role_switch>;
+ };
+ usb_ep1: endpoint@1 {
+ reg = <1>;
+ remote-endpoint = <&rt1711h_ep>;
+ };
+ };
+ };
--
2.31.1

2021-09-03 11:41:22

by Mauro Carvalho Chehab

[permalink] [raw]
Subject: [PATCH v4 4/4] arm64: dts: hisilicon: Add usb mux hub for hikey960

From: John Stultz <[email protected]>

Add dt bindings for Kirin 960 USB HUB. Such board comes with an
integrated USB HUB provided via a Microchip USB5734 4-port high-speed
hub controller.

[mchehab: modified it to adapt to the merged DT schema]
Signed-off-by: John Stultz <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
---
.../boot/dts/hisilicon/hi3660-hikey960.dts | 35 +++++++++++++++++--
1 file changed, 33 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts b/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts
index f68580dc87d8..135501e57f86 100644
--- a/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts
+++ b/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts
@@ -197,6 +197,37 @@ optee {
method = "smc";
};
};
+
+ usb_hub_vdd: usb_hub_vdd {
+ compatible = "regulator-fixed";
+ regulator-name = "hub-vdd";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ gpio = <&gpio5 6 0>;
+ enable-active-high;
+ };
+
+ usb-hub {
+ compatible = "hisilicon,usbhub";
+ typec-vbus-gpios = <&gpio25 2 GPIO_ACTIVE_HIGH>;
+ otg-switch-gpios = <&gpio25 6 GPIO_ACTIVE_HIGH>;
+ hub-vdd-supply = <&usb_hub_vdd>;
+ usb-role-switch;
+
+ port {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ hikey_usb_ep0: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&dwc3_role_switch>;
+ };
+ hikey_usb_ep1: endpoint@1 {
+ reg = <1>;
+ remote-endpoint = <&rt1711h_ep>;
+ };
+ };
+ };
};

/*
@@ -564,7 +595,7 @@ port {

rt1711h_ep: endpoint@0 {
reg = <0>;
- remote-endpoint = <&dwc3_role_switch>;
+ remote-endpoint = <&hikey_usb_ep1>;
};
};
};
@@ -686,7 +717,7 @@ port {
#size-cells = <0>;
dwc3_role_switch: endpoint@0 {
reg = <0>;
- remote-endpoint = <&rt1711h_ep>;
+ remote-endpoint = <&hikey_usb_ep0>;
};

dwc3_ss: endpoint@1 {
--
2.31.1

2021-09-09 23:13:56

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v4 3/4] arm64: dts: hisilicon: Add usb mux hub for hikey970

Hi Mauro,

I love your patch! Yet something to improve:

[auto build test ERROR on robh/for-next]
[also build test ERROR on char-misc/char-misc-testing v5.14 next-20210909]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/0day-ci/linux/commits/Mauro-Carvalho-Chehab/Make-USB-ports-to-work-on-HiKey960-970/20210903-173102
base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
config: arm64-buildonly-randconfig-r001-20210908 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/b8b9096981afc8389783e87cd0342002d4aeed94
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Mauro-Carvalho-Chehab/Make-USB-ports-to-work-on-HiKey960-970/20210903-173102
git checkout b8b9096981afc8389783e87cd0342002d4aeed94
# save the attached .config to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=arm64 SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

>> ERROR: Input tree has errors, aborting (use -f to force output)

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]


Attachments:
(No filename) (1.71 kB)
.config.gz (42.90 kB)
Download all attachments

2021-09-15 13:14:38

by Mauro Carvalho Chehab

[permalink] [raw]
Subject: Re: [PATCH v4 0/4] Make USB ports to work on HiKey960/970

Hi Rob,

Em Fri, 3 Sep 2021 11:28:31 +0200
Mauro Carvalho Chehab <[email protected]> escreveu:

> Hi Rob,
>
> It follows the patchset adding a DT schema needed to power on and to
> use the integrated USB hub found on HiKey 960 and Hikey 970 boards.
>
> Besides each board use a different chip for the hub, on both they're
> controlled the same way. Such boards come with an integrated 4-port
> USB hub on it, set on what it seems to be a non-standard way: on both
> implementations, the USB type-C port is used to detect the USB role.
>
> When in host mode, the 3.3V power supply (VDD33 pins) for the hub
> are disabled. That disables the USB I/O on type-A ports.
>
> When USB type-C is on device mode, the OTG is switched via a GPIO pin
> to device mode, and the hub is powered on.
>
> A Type-C power supply line is also controlled depending on the role.

Gentile ping.

Regards,
Mauro
>
> -
>
> The entire series which contains the remaining patches to support
> PCI and USB on HiKey970, and USB on HiKey960 is at:
>
> https://github.com/mchehab/linux/commits/linux-master
>
> The patches needed by the USB on HiKey970 were already merged
> upstream. So, the above branch applies on the top of Linux master
> branch.
>
> Tested on HiKey 960:
>
> $ lsusb
> Bus 002 Device 002: ID 0424:5734 Standard Microsystems Corp.
> Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
> Bus 001 Device 004: ID 0424:2740 Standard Microsystems Corp.
> Bus 001 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver
> Bus 001 Device 002: ID 0424:2734 Standard Microsystems Corp.
> Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
>
> Tested on HiKey 970:
>
> $ lsusb
> Bus 002 Device 002: ID 0451:8140 Texas Instruments, Inc. TUSB8041 4-Port Hub
> Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
> Bus 001 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
> Bus 001 Device 002: ID 0451:8142 Texas Instruments, Inc. TUSB8041 4-Port Hub
> Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
>
> v4:
> - Improved description at the DT schema;
> - Use just one compatible, as there's no difference between
> HiKey 960 and 970 with regards to how the hub should be
> controlled;
> - parse usb-role-switch property at the driver;
> - make the properties that depends on usb-role-switch optional.
>
> v3:
> - The examples at the dt-bindings were updated to reflect
> the actual DTS content and won't produce any warnings;
> - Added John Stultz SoB to Hikey960 DTS patch;
> - Added a patch for the mux hub driver for it to work with
> the newer schema;
>
> John Stultz (1):
> arm64: dts: hisilicon: Add usb mux hub for hikey960
>
> Mauro Carvalho Chehab (2):
> misc: hisi_hikey_usb: change the DT schema
> arm64: dts: hisilicon: Add usb mux hub for hikey970
>
> Yu Chen (1):
> dt-bindings: misc: add schema for USB hub on Kirin devices
>
> .../bindings/misc/hisilicon,hikey-usb.yaml | 87 +++++++++++++
> .../boot/dts/hisilicon/hi3660-hikey960.dts | 35 +++++-
> .../boot/dts/hisilicon/hi3670-hikey970.dts | 23 ++++
> drivers/misc/hisi_hikey_usb.c | 119 +++++++++---------
> 4 files changed, 206 insertions(+), 58 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/misc/hisilicon,hikey-usb.yaml
>



Thanks,
Mauro