[v3,3/3] ARM: dts: imx7d-remarkable2: Enable the rohm,bd71815

Message ID 20230225113712.340612-4-alistair@alistair23.me
State New
Headers
Series imx7d-remarkable2: Enable cyttsp5 and rohm,bd71815 |

Commit Message

Alistair Francis Feb. 25, 2023, 11:37 a.m. UTC
  Add support for the rohm,bd71815 power controller controller for the
reMarkable 2.

Signed-off-by: Alistair Francis <alistair@alistair23.me>
---
 arch/arm/boot/dts/imx7d-remarkable2.dts | 158 ++++++++++++++++++++++++
 1 file changed, 158 insertions(+)
  

Comments

Matti Vaittinen Feb. 25, 2023, 2:22 p.m. UTC | #1
Hi Alistair,

On 2/25/23 13:37, Alistair Francis wrote:
> Add support for the rohm,bd71815 power controller controller for the
> reMarkable 2.
> 
> Signed-off-by: Alistair Francis <alistair@alistair23.me>
> ---
>   arch/arm/boot/dts/imx7d-remarkable2.dts | 158 ++++++++++++++++++++++++
>   1 file changed, 158 insertions(+)
> 
> diff --git a/arch/arm/boot/dts/imx7d-remarkable2.dts b/arch/arm/boot/dts/imx7d-remarkable2.dts
> index 288fc8611117..9ecb733545cc 100644
> --- a/arch/arm/boot/dts/imx7d-remarkable2.dts
> +++ b/arch/arm/boot/dts/imx7d-remarkable2.dts
> @@ -91,6 +91,10 @@ wifi_pwrseq: wifi_pwrseq {
>   	};
>   };
>   
> +&cpu0 {
> +	cpu-supply = <&buck1_reg>;
> +};
> +
>   &clks {
>   	assigned-clocks = <&clks IMX7D_CLKO2_ROOT_SRC>,
>   			  <&clks IMX7D_CLKO2_ROOT_DIV>;
> @@ -118,6 +122,147 @@ wacom_digitizer: digitizer@9 {
>   	};
>   };
>   
> +&i2c2 {
> +	clock-frequency = <100000>;
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&pinctrl_i2c2>;
> +	status = "okay";
> +
> +	bd71815: pmic@4b {
> +		compatible = "rohm,bd71815";
> +		reg = <0x4b>;
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&pinctrl_bd71815>;
> +		interrupt-parent = <&gpio6>; /* PMIC_INT_B GPIO6_IO16 */
> +		interrupts = <16 IRQ_TYPE_LEVEL_LOW>;
> +		gpio-controller;
> +		clocks = <&clks IMX7D_CLKO2_ROOT_SRC>;
> +		clock-output-names = "bd71815-32k-out";
> +		#clock-cells = <0>;
> +		#gpio-cells = <1>;
> +
> +		regulators {
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +
> +			buck1_reg: regulator@0 {
> +				reg = <0>;
> +				regulator-compatible = "buck1";

I'm sure you have learned to regard my comments with certain care ;) (I 
think it was you for whom I gave an advice - which resulted a board to 
be bricked :| So, please treat my comment as if I did not know what I am 
talking about).

Anyways, I believe the "regulator-compatible" is deprecated and should 
no longer be used to match the node with the regulator? Instead, the 
regulator node name itself should be used for the matching.

ref. 
https://elixir.bootlin.com/linux/latest/source/drivers/regulator/of_regulator.c#L380

I don't think the regulator-compatible can even be found from the 
regulator.yaml binding list...

With this remark - (and what ever it is worth):
Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com>
  
Fabio Estevam Feb. 25, 2023, 8:37 p.m. UTC | #2
On Sat, Feb 25, 2023 at 8:37 AM Alistair Francis <alistair@alistair23.me> wrote:

> +&i2c2 {
> +       clock-frequency = <100000>;
> +       pinctrl-names = "default";
> +       pinctrl-0 = <&pinctrl_i2c2>;
> +       status = "okay";
> +
> +       bd71815: pmic@4b {
> +               compatible = "rohm,bd71815";
> +               reg = <0x4b>;
> +               pinctrl-names = "default";
> +               pinctrl-0 = <&pinctrl_bd71815>;
> +               interrupt-parent = <&gpio6>; /* PMIC_INT_B GPIO6_IO16 */
> +               interrupts = <16 IRQ_TYPE_LEVEL_LOW>;
> +               gpio-controller;
> +               clocks = <&clks IMX7D_CLKO2_ROOT_SRC>;
> +               clock-output-names = "bd71815-32k-out";
> +               #clock-cells = <0>;
> +               #gpio-cells = <1>;

The binding document says #gpio-cells = <2>;

> +
> +               regulators {
> +                       #address-cells = <1>;
> +                       #size-cells = <0>;
> +
> +                       buck1_reg: regulator@0 {
> +                               reg = <0>;

The regulator@0 and reg should not be present.

Please check Documentation/devicetree/bindings/mfd/rohm,bd71815-pmic.yaml
  
Alistair Francis Feb. 26, 2023, 5:50 a.m. UTC | #3
On Sun, Feb 26, 2023 at 12:22 AM Matti Vaittinen
<mazziesaccount@gmail.com> wrote:
>
> Hi Alistair,
>
> On 2/25/23 13:37, Alistair Francis wrote:
> > Add support for the rohm,bd71815 power controller controller for the
> > reMarkable 2.
> >
> > Signed-off-by: Alistair Francis <alistair@alistair23.me>
> > ---
> >   arch/arm/boot/dts/imx7d-remarkable2.dts | 158 ++++++++++++++++++++++++
> >   1 file changed, 158 insertions(+)
> >
> > diff --git a/arch/arm/boot/dts/imx7d-remarkable2.dts b/arch/arm/boot/dts/imx7d-remarkable2.dts
> > index 288fc8611117..9ecb733545cc 100644
> > --- a/arch/arm/boot/dts/imx7d-remarkable2.dts
> > +++ b/arch/arm/boot/dts/imx7d-remarkable2.dts
> > @@ -91,6 +91,10 @@ wifi_pwrseq: wifi_pwrseq {
> >       };
> >   };
> >
> > +&cpu0 {
> > +     cpu-supply = <&buck1_reg>;
> > +};
> > +
> >   &clks {
> >       assigned-clocks = <&clks IMX7D_CLKO2_ROOT_SRC>,
> >                         <&clks IMX7D_CLKO2_ROOT_DIV>;
> > @@ -118,6 +122,147 @@ wacom_digitizer: digitizer@9 {
> >       };
> >   };
> >
> > +&i2c2 {
> > +     clock-frequency = <100000>;
> > +     pinctrl-names = "default";
> > +     pinctrl-0 = <&pinctrl_i2c2>;
> > +     status = "okay";
> > +
> > +     bd71815: pmic@4b {
> > +             compatible = "rohm,bd71815";
> > +             reg = <0x4b>;
> > +             pinctrl-names = "default";
> > +             pinctrl-0 = <&pinctrl_bd71815>;
> > +             interrupt-parent = <&gpio6>; /* PMIC_INT_B GPIO6_IO16 */
> > +             interrupts = <16 IRQ_TYPE_LEVEL_LOW>;
> > +             gpio-controller;
> > +             clocks = <&clks IMX7D_CLKO2_ROOT_SRC>;
> > +             clock-output-names = "bd71815-32k-out";
> > +             #clock-cells = <0>;
> > +             #gpio-cells = <1>;
> > +
> > +             regulators {
> > +                     #address-cells = <1>;
> > +                     #size-cells = <0>;
> > +
> > +                     buck1_reg: regulator@0 {
> > +                             reg = <0>;
> > +                             regulator-compatible = "buck1";
>
> I'm sure you have learned to regard my comments with certain care ;) (I
> think it was you for whom I gave an advice - which resulted a board to
> be bricked :| So, please treat my comment as if I did not know what I am
> talking about).

That was me! The board wasn't bricked though, luckily as it's my only
device. It took a month of full battery discharge cycles but I managed
to replace the device tree with a working one :)

>
> Anyways, I believe the "regulator-compatible" is deprecated and should
> no longer be used to match the node with the regulator? Instead, the
> regulator node name itself should be used for the matching.
>
> ref.
> https://elixir.bootlin.com/linux/latest/source/drivers/regulator/of_regulator.c#L380
>
> I don't think the regulator-compatible can even be found from the
> regulator.yaml binding list...

You're right. Thanks for that, I have removed them and replaced them
with "regulator-name" to match the documentation.

>
> With this remark - (and what ever it is worth):
> Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com>

Thanks!

Alistair

>
> --
> Matti Vaittinen
> Linux kernel developer at ROHM Semiconductors
> Oulu Finland
>
> ~~ When things go utterly wrong vim users can always type :help! ~~
>
  
Alistair Francis Feb. 26, 2023, 5:52 a.m. UTC | #4
On Sun, Feb 26, 2023 at 6:37 AM Fabio Estevam <festevam@gmail.com> wrote:
>
> On Sat, Feb 25, 2023 at 8:37 AM Alistair Francis <alistair@alistair23.me> wrote:
>
> > +&i2c2 {
> > +       clock-frequency = <100000>;
> > +       pinctrl-names = "default";
> > +       pinctrl-0 = <&pinctrl_i2c2>;
> > +       status = "okay";
> > +
> > +       bd71815: pmic@4b {
> > +               compatible = "rohm,bd71815";
> > +               reg = <0x4b>;
> > +               pinctrl-names = "default";
> > +               pinctrl-0 = <&pinctrl_bd71815>;
> > +               interrupt-parent = <&gpio6>; /* PMIC_INT_B GPIO6_IO16 */
> > +               interrupts = <16 IRQ_TYPE_LEVEL_LOW>;
> > +               gpio-controller;
> > +               clocks = <&clks IMX7D_CLKO2_ROOT_SRC>;
> > +               clock-output-names = "bd71815-32k-out";
> > +               #clock-cells = <0>;
> > +               #gpio-cells = <1>;
>
> The binding document says #gpio-cells = <2>;

Fixed!

>
> > +
> > +               regulators {
> > +                       #address-cells = <1>;
> > +                       #size-cells = <0>;
> > +
> > +                       buck1_reg: regulator@0 {
> > +                               reg = <0>;
>
> The regulator@0 and reg should not be present.

Fixed

>
> Please check Documentation/devicetree/bindings/mfd/rohm,bd71815-pmic.yaml

Thanks, I double checked my latest code against the bindings.

Alistair
  

Patch

diff --git a/arch/arm/boot/dts/imx7d-remarkable2.dts b/arch/arm/boot/dts/imx7d-remarkable2.dts
index 288fc8611117..9ecb733545cc 100644
--- a/arch/arm/boot/dts/imx7d-remarkable2.dts
+++ b/arch/arm/boot/dts/imx7d-remarkable2.dts
@@ -91,6 +91,10 @@  wifi_pwrseq: wifi_pwrseq {
 	};
 };
 
+&cpu0 {
+	cpu-supply = <&buck1_reg>;
+};
+
 &clks {
 	assigned-clocks = <&clks IMX7D_CLKO2_ROOT_SRC>,
 			  <&clks IMX7D_CLKO2_ROOT_DIV>;
@@ -118,6 +122,147 @@  wacom_digitizer: digitizer@9 {
 	};
 };
 
+&i2c2 {
+	clock-frequency = <100000>;
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_i2c2>;
+	status = "okay";
+
+	bd71815: pmic@4b {
+		compatible = "rohm,bd71815";
+		reg = <0x4b>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&pinctrl_bd71815>;
+		interrupt-parent = <&gpio6>; /* PMIC_INT_B GPIO6_IO16 */
+		interrupts = <16 IRQ_TYPE_LEVEL_LOW>;
+		gpio-controller;
+		clocks = <&clks IMX7D_CLKO2_ROOT_SRC>;
+		clock-output-names = "bd71815-32k-out";
+		#clock-cells = <0>;
+		#gpio-cells = <1>;
+
+		regulators {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			buck1_reg: regulator@0 {
+				reg = <0>;
+				regulator-compatible = "buck1";
+				regulator-min-microvolt = <800000>;
+				regulator-max-microvolt = <2000000>;
+				regulator-boot-on;
+				regulator-always-on;
+				regulator-ramp-delay = <1250>;
+			};
+
+			buck2_reg: regulator@1 {
+				reg = <1>;
+				regulator-compatible = "buck2";
+				regulator-min-microvolt = <800000>;
+				regulator-max-microvolt = <2000000>;
+				regulator-boot-on;
+				regulator-always-on;
+				regulator-ramp-delay = <1250>;
+			};
+
+			buck3_reg: regulator@2 {
+				reg = <2>;
+				regulator-compatible = "buck3";
+				regulator-min-microvolt = <1200000>;
+				regulator-max-microvolt = <2700000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			buck4_reg: regulator@3 {
+				reg = <3>;
+				regulator-compatible = "buck4";
+				regulator-min-microvolt = <1100000>;
+				regulator-max-microvolt = <1850000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			buck5_reg: regulator@4 {
+				reg = <4>;
+				regulator-compatible = "buck5";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			ldo1_reg: regulator@5 {
+				reg = <5>;
+				regulator-compatible = "ldo1";
+				regulator-min-microvolt = <800000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			ldo2_reg: regulator@6 {
+				reg = <6>;
+				regulator-compatible = "ldo2";
+				regulator-min-microvolt = <800000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			ldo3_reg: regulator@7 {
+				reg = <7>;
+				regulator-compatible = "ldo3";
+				regulator-min-microvolt = <800000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			ldo4_reg: regulator@8 {
+				reg = <8>;
+				regulator-compatible = "ldo4";
+				regulator-min-microvolt = <800000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			ldo5_reg: regulator@9 {
+				reg = <9>;
+				regulator-compatible = "ldo5";
+				regulator-min-microvolt = <800000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			dvref_reg: regulator@a {
+				reg = <0xa>;
+				regulator-compatible = "ldodvref";
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			lpsr_reg: regulator@b {
+				reg = <0xb>;
+				regulator-compatible = "ldolpsr";
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			wled_reg: regulator@c {
+				reg = <0xc>;
+				regulator-compatible = "wled";
+				regulator-min-microamp = <10>;
+				regulator-max-microamp = <25000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+		};
+	};
+};
+
 &i2c3 {
 	clock-frequency = <100000>;
 	pinctrl-names = "default";
@@ -292,6 +437,12 @@  MX7D_PAD_LPSR_GPIO1_IO01__GPIO1_IO1	0x00000034 /* WACOM INT */
 };
 
 &iomuxc {
+	pinctrl_bd71815: bd71815grp {
+		fsl,pins = <
+			MX7D_PAD_SAI1_RX_SYNC__GPIO6_IO16	0x59
+		>;
+	};
+
 	pinctrl_brcm_reg: brcmreggrp {
 		fsl,pins = <
 			/* WIFI_PWR_EN */
@@ -322,6 +473,13 @@  MX7D_PAD_I2C1_SCL__I2C1_SCL		0x4000007f
 		>;
 	};
 
+	pinctrl_i2c2: i2c2grp {
+		fsl,pins = <
+			MX7D_PAD_I2C2_SDA__I2C2_SDA		0x4000007f
+			MX7D_PAD_I2C2_SCL__I2C2_SCL		0x4000007f
+		>;
+	};
+
 	pinctrl_i2c3: i2c3grp {
 		fsl,pins = <
 			MX7D_PAD_I2C3_SDA__I2C3_SDA		0x4000007f