mirror of
https://github.com/openwrt/openwrt.git
synced 2026-10-13 06:48:43 +04:00
mpc85xx: use regulator for USB power
Use upstream solution for managing GPIO power for USB devices. A small patch is needed to make the whole thing work as this is an older USB driver that does not use the PHY framework. Signed-off-by: Rosen Penev <rosenp@gmail.com> Link: https://github.com/openwrt/openwrt/pull/16842 Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
This commit is contained in:
1 parent
867c857b93
commit
9e43544bc6
4 files changed
+108
-9
No files matched your search
@@ -119,6 +119,8 @@
|
||||
phy_type = "utmi";
|
||||
dr_mode = "host";
|
||||
|
||||
vbus-supply = <®_power_usb>;
|
||||
|
||||
port@1 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
@@ -435,15 +437,15 @@
|
||||
};
|
||||
};
|
||||
|
||||
gpio_export {
|
||||
compatible = "gpio-export";
|
||||
|
||||
usb-pwr {
|
||||
gpio-export,name = "usb_pwr";
|
||||
gpio-export,output = <1>;
|
||||
gpios = <&gpio0 10 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
reg_power_usb: regulator {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "power_usb";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
gpios = <&gpio0 10 GPIO_ACTIVE_HIGH>;
|
||||
enable-active-high;
|
||||
regulator-boot-on;
|
||||
};
|
||||
|
||||
buttons {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
@@ -36,6 +36,7 @@ CONFIG_REALTEK_PHY=y
|
||||
CONFIG_RED_15W_REV1=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_REGULATOR=y
|
||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||
CONFIG_SGL_ALLOC=y
|
||||
CONFIG_SPI_BITBANG=y
|
||||
CONFIG_SPI_GPIO=y
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
From 04c30383e668da328ceec9f10d6437a8aa9c5b8f Mon Sep 17 00:00:00 2001
|
||||
From: Rosen Penev <rosenp@gmail.com>
|
||||
Date: Tue, 3 Dec 2024 13:53:31 -0800
|
||||
Subject: [PATCH] usb: fsl-mph-dr-of: add regulator support
|
||||
|
||||
Some devices have a GPIO that controls power to the USB bus. Add
|
||||
support for a vbus regulator to have the kernel control it automatically
|
||||
instead of having to rely on userspace.
|
||||
|
||||
Acquire the regulator in the common probe path so that it works for
|
||||
all fsl-usb2-dr compatible controllers, not just MPC5121.
|
||||
|
||||
Assisted-by: opencode:big-pickle
|
||||
Signed-off-by: Rosen Penev <rosenp@gmail.com>
|
||||
---
|
||||
drivers/usb/host/fsl-mph-dr-of.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/usb/host/fsl-mph-dr-of.c
|
||||
+++ b/drivers/usb/host/fsl-mph-dr-of.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/clk.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
+#include <linux/regulator/consumer.h>
|
||||
|
||||
struct fsl_usb2_dev_data {
|
||||
char *dr_mode; /* controller mode */
|
||||
@@ -183,7 +184,7 @@ static int fsl_usb2_mph_dr_of_probe(stru
|
||||
const struct of_device_id *match;
|
||||
const unsigned char *prop;
|
||||
static unsigned int idx;
|
||||
- int i;
|
||||
+ int i, err;
|
||||
|
||||
if (!of_device_is_available(np))
|
||||
return -ENODEV;
|
||||
@@ -246,6 +247,10 @@ static int fsl_usb2_mph_dr_of_probe(stru
|
||||
}
|
||||
}
|
||||
|
||||
+ err = devm_regulator_get_enable_optional(&ofdev->dev, "vbus");
|
||||
+ if (err)
|
||||
+ return dev_err_probe(&ofdev->dev, err, "failed to get vbus regulator\n");
|
||||
+
|
||||
for (i = 0; i < ARRAY_SIZE(dev_data->drivers); i++) {
|
||||
if (!dev_data->drivers[i])
|
||||
continue;
|
||||
@@ -0,0 +1,48 @@
|
||||
From 04c30383e668da328ceec9f10d6437a8aa9c5b8f Mon Sep 17 00:00:00 2001
|
||||
From: Rosen Penev <rosenp@gmail.com>
|
||||
Date: Tue, 3 Dec 2024 13:53:31 -0800
|
||||
Subject: [PATCH] usb: fsl-mph-dr-of: add regulator support
|
||||
|
||||
Some devices have a GPIO that controls power to the USB bus. Add
|
||||
support for a vbus regulator to have the kernel control it automatically
|
||||
instead of having to rely on userspace.
|
||||
|
||||
Acquire the regulator in the common probe path so that it works for
|
||||
all fsl-usb2-dr compatible controllers, not just MPC5121.
|
||||
|
||||
Assisted-by: opencode:big-pickle
|
||||
Signed-off-by: Rosen Penev <rosenp@gmail.com>
|
||||
---
|
||||
drivers/usb/host/fsl-mph-dr-of.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/usb/host/fsl-mph-dr-of.c
|
||||
+++ b/drivers/usb/host/fsl-mph-dr-of.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/clk.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
+#include <linux/regulator/consumer.h>
|
||||
|
||||
struct fsl_usb2_dev_data {
|
||||
char *dr_mode; /* controller mode */
|
||||
@@ -183,7 +184,7 @@ static int fsl_usb2_mph_dr_of_probe(stru
|
||||
const struct of_device_id *match;
|
||||
const unsigned char *prop;
|
||||
static unsigned int idx;
|
||||
- int i;
|
||||
+ int i, err;
|
||||
|
||||
if (!of_device_is_available(np))
|
||||
return -ENODEV;
|
||||
@@ -246,6 +247,10 @@ static int fsl_usb2_mph_dr_of_probe(stru
|
||||
}
|
||||
}
|
||||
|
||||
+ err = devm_regulator_get_enable_optional(&ofdev->dev, "vbus");
|
||||
+ if (err)
|
||||
+ return dev_err_probe(&ofdev->dev, err, "failed to get vbus regulator\n");
|
||||
+
|
||||
for (i = 0; i < ARRAY_SIZE(dev_data->drivers); i++) {
|
||||
if (!dev_data->drivers[i])
|
||||
continue;
|
||||
Reference in new issue
Block a user