* [PATCH 0/2] usb: bcma: control VBUS via a regulator
@ 2026-09-20 21:13 Rosen Penev
2026-09-20 21:13 ` [PATCH 1/2] usb: bcma: control VBUS via a regulator instead of a GPIO Rosen Penev
2026-09-20 21:13 ` [PATCH 2/2] ARM: dts: broadcom: model USB VBUS power with regulator-fixed Rosen Penev
0 siblings, 2 replies; 3+ messages in thread
From: Rosen Penev @ 2026-09-20 21:13 UTC (permalink / raw)
To: devicetree
Cc: Florian Fainelli, Hauke Mehrtens, Rafał Miłecki,
Broadcom internal kernel review list, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Greg Kroah-Hartman,
Liam Girdwood, Mark Brown,
moderated list:BROADCOM BCM5301X ARM ARCHITECTURE, open list,
open list:USB SUBSYSTEM
bcma-hcd currently drives the USB power line by grabbing the
undocumented "vcc-gpio" property from the controller node and poking
it through gpiolib. Besides relying on a non-standard binding, this
cannot work on boards such as the NETGEAR R7000 and R8000 where one
chipcommon GPIO powers both the USB2 and USB3 cores: the two
controllers each request that GPIO exclusively, so the second one
fails with -EBUSY and its port stays dead.
Instead, switch the driver to the standard regulator interface and
express the power rails as regulator-fixed nodes bound to the
chipcommon GPIOs. The regulator core reference-counts enable/disable
requests, letting both controllers share one GPIO without conflicts.
Rosen Penev (2):
usb: bcma: control VBUS via a regulator instead of a GPIO
ARM: dts: broadcom: model USB VBUS power with regulator-fixed
.../broadcom/bcm4708-buffalo-wxr-1750dhp.dts | 14 +++++-
.../bcm4708-buffalo-wzr-1166dhp-common.dtsi | 25 ++++++++++-
.../broadcom/bcm4708-buffalo-wzr-1750dhp.dts | 25 ++++++++++-
.../broadcom/bcm4708-linksys-ea6300-v1.dts | 14 +++++-
.../broadcom/bcm4708-linksys-ea6500-v2.dts | 14 +++++-
.../dts/broadcom/bcm4708-netgear-r6250.dts | 14 +++++-
.../dts/broadcom/bcm4708-netgear-r6300-v2.dts | 14 +++++-
.../dts/broadcom/bcm47081-luxul-xwr-1200.dts | 14 +++++-
.../broadcom/bcm47081-tplink-archer-c5-v2.dts | 14 +++++-
.../dts/broadcom/bcm4709-asus-rt-ac3200.dts | 14 +++++-
.../broadcom/bcm4709-buffalo-wxr-1900dhp.dts | 14 +++++-
.../dts/broadcom/bcm4709-linksys-ea9200.dts | 26 ++++++++++-
.../dts/broadcom/bcm4709-netgear-r7000.dts | 16 ++++++-
.../dts/broadcom/bcm4709-netgear-r8000.dts | 16 ++++++-
.../broadcom/bcm4709-tplink-archer-c9-v1.dts | 26 ++++++++++-
.../dts/broadcom/bcm47094-asus-rt-ac3100.dtsi | 14 +++++-
.../dts/broadcom/bcm47094-asus-rt-ac5300.dts | 14 +++++-
.../dts/broadcom/bcm47094-dlink-dir-885l.dts | 14 +++++-
.../dts/broadcom/bcm47094-dlink-dir-890l.dts | 26 ++++++++++-
.../broadcom/bcm47094-linksys-panamera.dts | 26 ++++++++++-
.../dts/broadcom/bcm47094-luxul-abr-4500.dts | 14 +++++-
.../dts/broadcom/bcm47094-luxul-xbr-4500.dts | 14 +++++-
.../dts/broadcom/bcm47094-luxul-xwr-3100.dts | 14 +++++-
.../broadcom/bcm47094-luxul-xwr-3150-v1.dts | 14 +++++-
.../arm/boot/dts/broadcom/bcm947189acdbmr.dts | 14 +++++-
drivers/usb/host/bcma-hcd.c | 45 +++++++++++++------
26 files changed, 422 insertions(+), 47 deletions(-)
--
2.55.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 1/2] usb: bcma: control VBUS via a regulator instead of a GPIO
2026-09-20 21:13 [PATCH 0/2] usb: bcma: control VBUS via a regulator Rosen Penev
@ 2026-09-20 21:13 ` Rosen Penev
2026-09-20 21:13 ` [PATCH 2/2] ARM: dts: broadcom: model USB VBUS power with regulator-fixed Rosen Penev
1 sibling, 0 replies; 3+ messages in thread
From: Rosen Penev @ 2026-09-20 21:13 UTC (permalink / raw)
To: devicetree
Cc: Florian Fainelli, Hauke Mehrtens, Rafał Miłecki,
Broadcom internal kernel review list, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Greg Kroah-Hartman,
Liam Girdwood, Mark Brown,
moderated list:BROADCOM BCM5301X ARM ARCHITECTURE, open list,
open list:USB SUBSYSTEM
bcma-hcd drives the USB power line by grabbing the undocumented
"vcc-gpio" from the controller node and poking it through gpiolib.
Besides relying on a non-standard binding, this cannot work on boards
such as the NETGEAR R7000 and R8000 where one chipcommon GPIO powers
both the USB2 and USB3 cores: the two controllers each request that
GPIO exclusively, so the second one fails with -EBUSY and its port
stays dead.
Use the standard regulator interface instead. Each core obtains its
(shared) VBUS supply through devm_regulator_get_optional() and the
regulator core reference-counts the enable/disable requests, allowing
both controllers to drive one GPIO without conflicts.
Assisted-by: LLM
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/usb/host/bcma-hcd.c | 45 +++++++++++++++++++++++++------------
1 file changed, 31 insertions(+), 14 deletions(-)
diff --git a/drivers/usb/host/bcma-hcd.c b/drivers/usb/host/bcma-hcd.c
index 519386255886..394ba9e5a7f7 100644
--- a/drivers/usb/host/bcma-hcd.c
+++ b/drivers/usb/host/bcma-hcd.c
@@ -20,12 +20,12 @@
*/
#include <linux/bcma/bcma.h>
#include <linux/delay.h>
-#include <linux/gpio/consumer.h>
#include <linux/platform_device.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/of.h>
#include <linux/of_platform.h>
+#include <linux/regulator/consumer.h>
#include <linux/usb/ehci_pdriver.h>
#include <linux/usb/ohci_pdriver.h>
@@ -40,7 +40,7 @@ struct bcma_hcd_device {
struct bcma_device *core;
struct platform_device *ehci_dev;
struct platform_device *ohci_dev;
- struct gpio_desc *gpio_desc;
+ struct regulator *regulator;
};
/* Wait for bitmask in a register to get set or cleared.
@@ -280,14 +280,20 @@ static int bcma_hcd_usb20_ns_init(struct bcma_hcd_device *bcma_hcd)
return 0;
}
-static void bcma_hci_platform_power_gpio(struct bcma_device *dev, bool val)
+static int bcma_hci_platform_power(struct bcma_device *dev, bool on)
{
struct bcma_hcd_device *usb_dev = bcma_get_drvdata(dev);
+ int err;
+
+ if (!usb_dev->regulator)
+ return 0;
- if (!usb_dev->gpio_desc)
- return;
+ if (on)
+ err = regulator_enable(usb_dev->regulator);
+ else
+ err = regulator_disable(usb_dev->regulator);
- gpiod_set_value(usb_dev->gpio_desc, val);
+ return err;
}
static const struct usb_ehci_pdata ehci_pdata = {
@@ -405,11 +411,14 @@ static int bcma_hcd_probe(struct bcma_device *core)
return -ENOMEM;
usb_dev->core = core;
- usb_dev->gpio_desc = devm_gpiod_get_optional(&core->dev, "vcc",
- GPIOD_OUT_HIGH);
- if (IS_ERR(usb_dev->gpio_desc))
- return dev_err_probe(&core->dev, PTR_ERR(usb_dev->gpio_desc),
- "error obtaining VCC GPIO");
+ usb_dev->regulator = devm_regulator_get_optional(&core->dev, "vbus");
+ if (IS_ERR(usb_dev->regulator)) {
+ return PTR_ERR(usb_dev->regulator);
+
+ err = regulator_enable(usb_dev->regulator);
+ if (err)
+ return dev_err_probe(&core->dev, err,
+ "error enabling VCC regulator");
switch (core->id.id) {
case BCMA_CORE_USB20_HOST:
@@ -452,7 +461,7 @@ static void bcma_hcd_remove(struct bcma_device *dev)
static void bcma_hcd_shutdown(struct bcma_device *dev)
{
- bcma_hci_platform_power_gpio(dev, false);
+ bcma_hci_platform_power(dev, false);
bcma_core_disable(dev, 0);
}
@@ -460,7 +469,11 @@ static void bcma_hcd_shutdown(struct bcma_device *dev)
static int bcma_hcd_suspend(struct bcma_device *dev)
{
- bcma_hci_platform_power_gpio(dev, false);
+ int err;
+
+ err = bcma_hci_platform_power(dev, false);
+ if (err)
+ return err;
bcma_core_disable(dev, 0);
return 0;
@@ -468,7 +481,11 @@ static int bcma_hcd_suspend(struct bcma_device *dev)
static int bcma_hcd_resume(struct bcma_device *dev)
{
- bcma_hci_platform_power_gpio(dev, true);
+ int err;
+
+ err = bcma_hci_platform_power(dev, true);
+ if (err)
+ return err;
bcma_core_enable(dev, 0);
return 0;
--
2.55.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 2/2] ARM: dts: broadcom: model USB VBUS power with regulator-fixed
2026-09-20 21:13 [PATCH 0/2] usb: bcma: control VBUS via a regulator Rosen Penev
2026-09-20 21:13 ` [PATCH 1/2] usb: bcma: control VBUS via a regulator instead of a GPIO Rosen Penev
@ 2026-09-20 21:13 ` Rosen Penev
1 sibling, 0 replies; 3+ messages in thread
From: Rosen Penev @ 2026-09-20 21:13 UTC (permalink / raw)
To: devicetree
Cc: Florian Fainelli, Hauke Mehrtens, Rafał Miłecki,
Broadcom internal kernel review list, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Greg Kroah-Hartman,
Liam Girdwood, Mark Brown,
moderated list:BROADCOM BCM5301X ARM ARCHITECTURE, open list,
open list:USB SUBSYSTEM
Replace the undocumented "vcc-gpio" property on the usb2/usb3
controller nodes with the standard vbus-supply/regulator-fixed model.
Boards now declare a regulator bound to the chipcommon GPIO that
bcma-hcd used to poke directly, one per power rail.
Polarity is preserved: rails that used a GPIO_ACTIVE_HIGH are marked
enable-active-high, while the Buffalo usb3 rails keep GPIO_ACTIVE_LOW
and rely on the binding's active-low default. regulator-boot-on mirrors
the rail being left enabled by CFE so the power line is never toggled
during probe.
Assisted-by: LLM
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
.../broadcom/bcm4708-buffalo-wxr-1750dhp.dts | 14 +++++++++-
.../bcm4708-buffalo-wzr-1166dhp-common.dtsi | 25 ++++++++++++++++--
.../broadcom/bcm4708-buffalo-wzr-1750dhp.dts | 25 ++++++++++++++++--
.../broadcom/bcm4708-linksys-ea6300-v1.dts | 14 +++++++++-
.../broadcom/bcm4708-linksys-ea6500-v2.dts | 14 +++++++++-
.../dts/broadcom/bcm4708-netgear-r6250.dts | 14 +++++++++-
.../dts/broadcom/bcm4708-netgear-r6300-v2.dts | 14 +++++++++-
.../dts/broadcom/bcm47081-luxul-xwr-1200.dts | 14 +++++++++-
.../broadcom/bcm47081-tplink-archer-c5-v2.dts | 14 +++++++++-
.../dts/broadcom/bcm4709-asus-rt-ac3200.dts | 14 +++++++++-
.../broadcom/bcm4709-buffalo-wxr-1900dhp.dts | 14 +++++++++-
.../dts/broadcom/bcm4709-linksys-ea9200.dts | 26 +++++++++++++++++--
.../dts/broadcom/bcm4709-netgear-r7000.dts | 16 ++++++++++--
.../dts/broadcom/bcm4709-netgear-r8000.dts | 16 ++++++++++--
.../broadcom/bcm4709-tplink-archer-c9-v1.dts | 26 +++++++++++++++++--
.../dts/broadcom/bcm47094-asus-rt-ac3100.dtsi | 14 +++++++++-
.../dts/broadcom/bcm47094-asus-rt-ac5300.dts | 14 +++++++++-
.../dts/broadcom/bcm47094-dlink-dir-885l.dts | 14 +++++++++-
.../dts/broadcom/bcm47094-dlink-dir-890l.dts | 26 +++++++++++++++++--
.../broadcom/bcm47094-linksys-panamera.dts | 26 +++++++++++++++++--
.../dts/broadcom/bcm47094-luxul-abr-4500.dts | 14 +++++++++-
.../dts/broadcom/bcm47094-luxul-xbr-4500.dts | 14 +++++++++-
.../dts/broadcom/bcm47094-luxul-xwr-3100.dts | 14 +++++++++-
.../broadcom/bcm47094-luxul-xwr-3150-v1.dts | 14 +++++++++-
.../arm/boot/dts/broadcom/bcm947189acdbmr.dts | 14 +++++++++-
25 files changed, 391 insertions(+), 33 deletions(-)
diff --git a/arch/arm/boot/dts/broadcom/bcm4708-buffalo-wxr-1750dhp.dts b/arch/arm/boot/dts/broadcom/bcm4708-buffalo-wxr-1750dhp.dts
index f5c95c9a712e..1bedd74e40d0 100644
--- a/arch/arm/boot/dts/broadcom/bcm4708-buffalo-wxr-1750dhp.dts
+++ b/arch/arm/boot/dts/broadcom/bcm4708-buffalo-wxr-1750dhp.dts
@@ -129,8 +129,20 @@ port@4 {
};
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 10 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb3 {
- vcc-gpio = <&chipcommon 10 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
&usb3_phy {
diff --git a/arch/arm/boot/dts/broadcom/bcm4708-buffalo-wzr-1166dhp-common.dtsi b/arch/arm/boot/dts/broadcom/bcm4708-buffalo-wzr-1166dhp-common.dtsi
index 9f9084269ef5..faed5e0895c6 100644
--- a/arch/arm/boot/dts/broadcom/bcm4708-buffalo-wzr-1166dhp-common.dtsi
+++ b/arch/arm/boot/dts/broadcom/bcm4708-buffalo-wzr-1166dhp-common.dtsi
@@ -138,12 +138,33 @@ button-eject {
};
};
+/ {
+ usb2_power: regulator-usb2 {
+ compatible = "regulator-fixed";
+ regulator-name = "usb2-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ usb3_power: regulator-usb3 {
+ compatible = "regulator-fixed";
+ regulator-name = "usb3-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 10 GPIO_ACTIVE_LOW>;
+ };
+};
+
&usb2 {
- vcc-gpio = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb2_power>;
};
&usb3 {
- vcc-gpio = <&chipcommon 10 GPIO_ACTIVE_LOW>;
+ vbus-supply = <&usb3_power>;
};
&spi_nor {
diff --git a/arch/arm/boot/dts/broadcom/bcm4708-buffalo-wzr-1750dhp.dts b/arch/arm/boot/dts/broadcom/bcm4708-buffalo-wzr-1750dhp.dts
index 95ef6ca7210b..6dcfb273329d 100644
--- a/arch/arm/boot/dts/broadcom/bcm4708-buffalo-wzr-1750dhp.dts
+++ b/arch/arm/boot/dts/broadcom/bcm4708-buffalo-wzr-1750dhp.dts
@@ -134,12 +134,33 @@ button-eject {
};
};
+/ {
+ usb2_power: regulator-usb2 {
+ compatible = "regulator-fixed";
+ regulator-name = "usb2-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ usb3_power: regulator-usb3 {
+ compatible = "regulator-fixed";
+ regulator-name = "usb3-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 10 GPIO_ACTIVE_LOW>;
+ };
+};
+
&usb2 {
- vcc-gpio = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb2_power>;
};
&usb3 {
- vcc-gpio = <&chipcommon 10 GPIO_ACTIVE_LOW>;
+ vbus-supply = <&usb3_power>;
};
&spi_nor {
diff --git a/arch/arm/boot/dts/broadcom/bcm4708-linksys-ea6300-v1.dts b/arch/arm/boot/dts/broadcom/bcm4708-linksys-ea6300-v1.dts
index 03d5546a147c..41a02961763e 100644
--- a/arch/arm/boot/dts/broadcom/bcm4708-linksys-ea6300-v1.dts
+++ b/arch/arm/boot/dts/broadcom/bcm4708-linksys-ea6300-v1.dts
@@ -47,6 +47,18 @@ &usb3_phy {
status = "okay";
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 10 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb3 {
- vcc-gpio = <&chipcommon 10 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
diff --git a/arch/arm/boot/dts/broadcom/bcm4708-linksys-ea6500-v2.dts b/arch/arm/boot/dts/broadcom/bcm4708-linksys-ea6500-v2.dts
index ad246f9a734a..31aa34288d18 100644
--- a/arch/arm/boot/dts/broadcom/bcm4708-linksys-ea6500-v2.dts
+++ b/arch/arm/boot/dts/broadcom/bcm4708-linksys-ea6500-v2.dts
@@ -44,6 +44,18 @@ &usb3_phy {
status = "okay";
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 10 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb3 {
- vcc-gpio = <&chipcommon 10 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
diff --git a/arch/arm/boot/dts/broadcom/bcm4708-netgear-r6250.dts b/arch/arm/boot/dts/broadcom/bcm4708-netgear-r6250.dts
index 2bdbc7d18b0e..f8c8bb9e9661 100644
--- a/arch/arm/boot/dts/broadcom/bcm4708-netgear-r6250.dts
+++ b/arch/arm/boot/dts/broadcom/bcm4708-netgear-r6250.dts
@@ -83,8 +83,20 @@ button-restart {
};
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 0 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb3 {
- vcc-gpio = <&chipcommon 0 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
&spi_nor {
diff --git a/arch/arm/boot/dts/broadcom/bcm4708-netgear-r6300-v2.dts b/arch/arm/boot/dts/broadcom/bcm4708-netgear-r6300-v2.dts
index 55f0d9e90d5f..4c9b11c798bc 100644
--- a/arch/arm/boot/dts/broadcom/bcm4708-netgear-r6300-v2.dts
+++ b/arch/arm/boot/dts/broadcom/bcm4708-netgear-r6300-v2.dts
@@ -88,5 +88,17 @@ &usb3_phy {
};
&usb3 {
- vcc-gpio = <&chipcommon 0 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
+};
+
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 0 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
};
diff --git a/arch/arm/boot/dts/broadcom/bcm47081-luxul-xwr-1200.dts b/arch/arm/boot/dts/broadcom/bcm47081-luxul-xwr-1200.dts
index 73ff1694a4a0..87c4766d181c 100644
--- a/arch/arm/boot/dts/broadcom/bcm47081-luxul-xwr-1200.dts
+++ b/arch/arm/boot/dts/broadcom/bcm47081-luxul-xwr-1200.dts
@@ -106,8 +106,20 @@ button-restart {
};
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb2 {
- vcc-gpio = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
&gmac0 {
diff --git a/arch/arm/boot/dts/broadcom/bcm47081-tplink-archer-c5-v2.dts b/arch/arm/boot/dts/broadcom/bcm47081-tplink-archer-c5-v2.dts
index b6a5886698b2..3673d4b3c2b6 100644
--- a/arch/arm/boot/dts/broadcom/bcm47081-tplink-archer-c5-v2.dts
+++ b/arch/arm/boot/dts/broadcom/bcm47081-tplink-archer-c5-v2.dts
@@ -108,6 +108,18 @@ partition-file-system {
};
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb2 {
- vcc-gpio = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
diff --git a/arch/arm/boot/dts/broadcom/bcm4709-asus-rt-ac3200.dts b/arch/arm/boot/dts/broadcom/bcm4709-asus-rt-ac3200.dts
index 3da2daee0c84..e97a41d1a400 100644
--- a/arch/arm/boot/dts/broadcom/bcm4709-asus-rt-ac3200.dts
+++ b/arch/arm/boot/dts/broadcom/bcm4709-asus-rt-ac3200.dts
@@ -141,8 +141,20 @@ port@4 {
};
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb2 {
- vcc-gpio = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
&usb3_phy {
diff --git a/arch/arm/boot/dts/broadcom/bcm4709-buffalo-wxr-1900dhp.dts b/arch/arm/boot/dts/broadcom/bcm4709-buffalo-wxr-1900dhp.dts
index b7cd2faa30ce..66c141ef9f6d 100644
--- a/arch/arm/boot/dts/broadcom/bcm4709-buffalo-wxr-1900dhp.dts
+++ b/arch/arm/boot/dts/broadcom/bcm4709-buffalo-wxr-1900dhp.dts
@@ -119,8 +119,20 @@ button-eject {
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 13 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb2 {
- vcc-gpio = <&chipcommon 13 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
&spi_nor {
diff --git a/arch/arm/boot/dts/broadcom/bcm4709-linksys-ea9200.dts b/arch/arm/boot/dts/broadcom/bcm4709-linksys-ea9200.dts
index 37593e7582ba..4d2663627d08 100644
--- a/arch/arm/boot/dts/broadcom/bcm4709-linksys-ea9200.dts
+++ b/arch/arm/boot/dts/broadcom/bcm4709-linksys-ea9200.dts
@@ -154,12 +154,34 @@ &usb3_phy {
status = "okay";
};
+/ {
+ usb2_power: regulator-usb2 {
+ compatible = "regulator-fixed";
+ regulator-name = "usb2-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 13 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ usb3_power: regulator-usb3 {
+ compatible = "regulator-fixed";
+ regulator-name = "usb3-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 14 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb2 {
- vcc-gpios = <&chipcommon 13 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb2_power>;
};
&usb3 {
- vcc-gpios = <&chipcommon 14 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb3_power>;
};
&gmac2 {
diff --git a/arch/arm/boot/dts/broadcom/bcm4709-netgear-r7000.dts b/arch/arm/boot/dts/broadcom/bcm4709-netgear-r7000.dts
index 24ba8f8f9bf3..1911daa84b08 100644
--- a/arch/arm/boot/dts/broadcom/bcm4709-netgear-r7000.dts
+++ b/arch/arm/boot/dts/broadcom/bcm4709-netgear-r7000.dts
@@ -93,12 +93,24 @@ button-restart {
};
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 0 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb2 {
- vcc-gpio = <&chipcommon 0 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
&usb3 {
- vcc-gpio = <&chipcommon 0 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
&usb3_phy {
diff --git a/arch/arm/boot/dts/broadcom/bcm4709-netgear-r8000.dts b/arch/arm/boot/dts/broadcom/bcm4709-netgear-r8000.dts
index a4b135d37659..5940f052b77f 100644
--- a/arch/arm/boot/dts/broadcom/bcm4709-netgear-r8000.dts
+++ b/arch/arm/boot/dts/broadcom/bcm4709-netgear-r8000.dts
@@ -186,12 +186,24 @@ wifi@0,0 {
};
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 0 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb2 {
- vcc-gpio = <&chipcommon 0 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
&usb3 {
- vcc-gpio = <&chipcommon 0 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
&usb3_phy {
diff --git a/arch/arm/boot/dts/broadcom/bcm4709-tplink-archer-c9-v1.dts b/arch/arm/boot/dts/broadcom/bcm4709-tplink-archer-c9-v1.dts
index 5a8b2b1567e6..69ff4f14b89e 100644
--- a/arch/arm/boot/dts/broadcom/bcm4709-tplink-archer-c9-v1.dts
+++ b/arch/arm/boot/dts/broadcom/bcm4709-tplink-archer-c9-v1.dts
@@ -92,12 +92,34 @@ button-restart {
};
};
+/ {
+ usb2_power: regulator-usb2 {
+ compatible = "regulator-fixed";
+ regulator-name = "usb2-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 13 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ usb3_power: regulator-usb3 {
+ compatible = "regulator-fixed";
+ regulator-name = "usb3-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 12 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb2 {
- vcc-gpio = <&chipcommon 13 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb2_power>;
};
&usb3 {
- vcc-gpio = <&chipcommon 12 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb3_power>;
};
&spi_nor {
diff --git a/arch/arm/boot/dts/broadcom/bcm47094-asus-rt-ac3100.dtsi b/arch/arm/boot/dts/broadcom/bcm47094-asus-rt-ac3100.dtsi
index 2d2e7e581291..29f54169d072 100644
--- a/arch/arm/boot/dts/broadcom/bcm47094-asus-rt-ac3100.dtsi
+++ b/arch/arm/boot/dts/broadcom/bcm47094-asus-rt-ac3100.dtsi
@@ -166,8 +166,20 @@ port@8 {
};
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb2 {
- vcc-gpio = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
&usb3_phy {
diff --git a/arch/arm/boot/dts/broadcom/bcm47094-asus-rt-ac5300.dts b/arch/arm/boot/dts/broadcom/bcm47094-asus-rt-ac5300.dts
index 8bf623c67de0..0906c0ef8182 100644
--- a/arch/arm/boot/dts/broadcom/bcm47094-asus-rt-ac5300.dts
+++ b/arch/arm/boot/dts/broadcom/bcm47094-asus-rt-ac5300.dts
@@ -150,8 +150,20 @@ port@4 {
};
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb2 {
- vcc-gpio = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
&usb3_phy {
diff --git a/arch/arm/boot/dts/broadcom/bcm47094-dlink-dir-885l.dts b/arch/arm/boot/dts/broadcom/bcm47094-dlink-dir-885l.dts
index c5099defe9f9..046bca843e29 100644
--- a/arch/arm/boot/dts/broadcom/bcm47094-dlink-dir-885l.dts
+++ b/arch/arm/boot/dts/broadcom/bcm47094-dlink-dir-885l.dts
@@ -117,8 +117,20 @@ button-restart {
};
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb3 {
- vcc-gpio = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
&gmac0 {
diff --git a/arch/arm/boot/dts/broadcom/bcm47094-dlink-dir-890l.dts b/arch/arm/boot/dts/broadcom/bcm47094-dlink-dir-890l.dts
index 944d592dee2c..1816f636b293 100644
--- a/arch/arm/boot/dts/broadcom/bcm47094-dlink-dir-890l.dts
+++ b/arch/arm/boot/dts/broadcom/bcm47094-dlink-dir-890l.dts
@@ -157,12 +157,34 @@ firmware@0 {
};
};
+/ {
+ usb2_power: regulator-usb2 {
+ compatible = "regulator-fixed";
+ regulator-name = "usb2-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 21 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ usb3_power: regulator-usb3 {
+ compatible = "regulator-fixed";
+ regulator-name = "usb3-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb2 {
- vcc-gpios = <&chipcommon 21 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb2_power>;
};
&usb3 {
- vcc-gpios = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb3_power>;
};
&usb3_phy {
diff --git a/arch/arm/boot/dts/broadcom/bcm47094-linksys-panamera.dts b/arch/arm/boot/dts/broadcom/bcm47094-linksys-panamera.dts
index bdbd0f097925..b62ac448fe2d 100644
--- a/arch/arm/boot/dts/broadcom/bcm47094-linksys-panamera.dts
+++ b/arch/arm/boot/dts/broadcom/bcm47094-linksys-panamera.dts
@@ -197,12 +197,34 @@ fixed-link {
};
};
+/ {
+ usb2_power: regulator-usb2 {
+ compatible = "regulator-fixed";
+ regulator-name = "usb2-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 13 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ usb3_power: regulator-usb3 {
+ compatible = "regulator-fixed";
+ regulator-name = "usb3-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 14 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb2 {
- vcc-gpio = <&chipcommon 13 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb2_power>;
};
&usb3 {
- vcc-gpio = <&chipcommon 14 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb3_power>;
};
&srab {
diff --git a/arch/arm/boot/dts/broadcom/bcm47094-luxul-abr-4500.dts b/arch/arm/boot/dts/broadcom/bcm47094-luxul-abr-4500.dts
index e374062eb5b7..fbd362991e43 100644
--- a/arch/arm/boot/dts/broadcom/bcm47094-luxul-abr-4500.dts
+++ b/arch/arm/boot/dts/broadcom/bcm47094-luxul-abr-4500.dts
@@ -61,8 +61,20 @@ button-restart {
};
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb3 {
- vcc-gpio = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
&gmac0 {
diff --git a/arch/arm/boot/dts/broadcom/bcm47094-luxul-xbr-4500.dts b/arch/arm/boot/dts/broadcom/bcm47094-luxul-xbr-4500.dts
index cf95af9db1e6..f1f099a90997 100644
--- a/arch/arm/boot/dts/broadcom/bcm47094-luxul-xbr-4500.dts
+++ b/arch/arm/boot/dts/broadcom/bcm47094-luxul-xbr-4500.dts
@@ -61,8 +61,20 @@ button-restart {
};
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb3 {
- vcc-gpio = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
&gmac0 {
diff --git a/arch/arm/boot/dts/broadcom/bcm47094-luxul-xwr-3100.dts b/arch/arm/boot/dts/broadcom/bcm47094-luxul-xwr-3100.dts
index 4d0ba315a204..9420ae1367d8 100644
--- a/arch/arm/boot/dts/broadcom/bcm47094-luxul-xwr-3100.dts
+++ b/arch/arm/boot/dts/broadcom/bcm47094-luxul-xwr-3100.dts
@@ -101,8 +101,20 @@ button-restart {
};
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb3 {
- vcc-gpio = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
&gmac0 {
diff --git a/arch/arm/boot/dts/broadcom/bcm47094-luxul-xwr-3150-v1.dts b/arch/arm/boot/dts/broadcom/bcm47094-luxul-xwr-3150-v1.dts
index 8e487f60a2cc..f4f718b52c6f 100644
--- a/arch/arm/boot/dts/broadcom/bcm47094-luxul-xwr-3150-v1.dts
+++ b/arch/arm/boot/dts/broadcom/bcm47094-luxul-xwr-3150-v1.dts
@@ -97,8 +97,20 @@ wifi@0,0 {
};
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb3 {
- vcc-gpio = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
&usb3_phy {
diff --git a/arch/arm/boot/dts/broadcom/bcm947189acdbmr.dts b/arch/arm/boot/dts/broadcom/bcm947189acdbmr.dts
index 0b8727ae6f16..fcb0bb9f3942 100644
--- a/arch/arm/boot/dts/broadcom/bcm947189acdbmr.dts
+++ b/arch/arm/boot/dts/broadcom/bcm947189acdbmr.dts
@@ -91,6 +91,18 @@ wifi@0,1,0 {
};
};
+/ {
+ usb_power: regulator-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "usb-vcc";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ gpios = <&chipcommon 8 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
&usb2 {
- vcc-gpio = <&chipcommon 8 GPIO_ACTIVE_HIGH>;
+ vbus-supply = <&usb_power>;
};
--
2.55.0
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-09-20 21:14 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-20 21:13 [PATCH 0/2] usb: bcma: control VBUS via a regulator Rosen Penev
2026-09-20 21:13 ` [PATCH 1/2] usb: bcma: control VBUS via a regulator instead of a GPIO Rosen Penev
2026-09-20 21:13 ` [PATCH 2/2] ARM: dts: broadcom: model USB VBUS power with regulator-fixed Rosen Penev
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®