Our hardware has a FET that is switching power rail of the ethernet PHY
on and off. This switching enable signal is a clock from the SoC.
There is no possibility in regulator subsystem to have this hardware
reflected in software.
I already discussed with Mark Brown about possible solutions and he
suggested to create at least a new compatible. [1]
This discussion includes also a better explanation of our circuit as
well as schematics. So please refer to that link if you have questions
about that.
In this first attempt I created a new binding "regulator-fixed-clock"
that can take a clock from devicetree. This is a simple addition to
regulator-fixed. If the binding regulator-fixed-clock is given, the
clock is simply enabled on regulator enable and disabled on regulator
disable.
To be able to have multiple consumers a counter variable is also given
that tells how many consumers need power from this regulator.
Best regards,
Philippe
[1] https://lkml.org/lkml/2019/8/7/78
Philippe Schenker (3):
regulator: fixed: add possibility to enable by clock
ARM: dts: imx6ull-colibri: add phy-supply and respective regulator
dt-bindings: regulator: add regulator-fixed-clock binding
.../bindings/regulator/fixed-regulator.yaml | 18 +++-
arch/arm/boot/dts/imx6ull-colibri.dtsi | 12 +++
drivers/regulator/fixed.c | 86 ++++++++++++++++++-
3 files changed, 112 insertions(+), 4 deletions(-)
--
2.23.0
This adds regulator-fixed-clock, a fixed-regulator that turns on and
off with a clock and add it to the phy.
Signed-off-by: Philippe Schenker <[email protected]>
---
arch/arm/boot/dts/imx6ull-colibri.dtsi | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/arch/arm/boot/dts/imx6ull-colibri.dtsi b/arch/arm/boot/dts/imx6ull-colibri.dtsi
index d56728f03c35..76021b842a97 100644
--- a/arch/arm/boot/dts/imx6ull-colibri.dtsi
+++ b/arch/arm/boot/dts/imx6ull-colibri.dtsi
@@ -47,6 +47,17 @@
states = <1800000 0x1 3300000 0x0>;
vin-supply = <®_module_3v3>;
};
+
+ reg_eth_phy: regulator-eth-phy {
+ compatible = "regulator-fixed-clock";
+ regulator-boot-on;
+ regulator-name = "eth_phy";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ clocks = <&clks IMX6UL_CLK_ENET2_REF_125M>;
+ startup-delay-us = <150000>;
+ vin-supply = <®_module_3v3>;
+ };
};
&adc1 {
@@ -66,6 +77,7 @@
pinctrl-0 = <&pinctrl_enet2>;
phy-mode = "rmii";
phy-handle = <ðphy1>;
+ phy-supply = <®_eth_phy>;
status = "okay";
mdio {
--
2.23.0