diff mbox series

[8/8,v2] ARM: dts: ux500: declare GPADC IIO ADC channels

Message ID 20190822145233.18222-9-linus.walleij@linaro.org (mailing list archive)
State New, archived
Headers show
Series AB8500 GPADC MFD to IIO conversion | expand

Commit Message

Linus Walleij Aug. 22, 2019, 2:52 p.m. UTC
This adds the IIO channels for the GPADC after converting it
to using the standard IIO ADC bindings and moving the driver
over to the IIO subsystem. We also add IIO hwmon standard
driver node to support reading channels in a standard manner.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
ChangeLog v1->v2:
- Rebased on v5.3-rc5
---
 arch/arm/boot/dts/ste-dbx5x0.dtsi | 102 +++++++++++++++++++++++++++++-
 1 file changed, 101 insertions(+), 1 deletion(-)

Comments

Jonathan Cameron Aug. 26, 2019, 8:51 a.m. UTC | #1
On Thu, 22 Aug 2019 16:52:33 +0200
Linus Walleij <linus.walleij@linaro.org> wrote:

> This adds the IIO channels for the GPADC after converting it
> to using the standard IIO ADC bindings and moving the driver
> over to the IIO subsystem. We also add IIO hwmon standard
> driver node to support reading channels in a standard manner.
> 
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

I'll ask the 'stupid' question. Doesn't this break compatibility
with old DTs?

One comment inline to do with IIO standardization that occurred in
the meantime.

Thanks,

Jonathan
> ---
> ChangeLog v1->v2:
> - Rebased on v5.3-rc5
> ---
>  arch/arm/boot/dts/ste-dbx5x0.dtsi | 102 +++++++++++++++++++++++++++++-
>  1 file changed, 101 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/boot/dts/ste-dbx5x0.dtsi b/arch/arm/boot/dts/ste-dbx5x0.dtsi
> index b1a31134f860..80016521333b 100644
> --- a/arch/arm/boot/dts/ste-dbx5x0.dtsi
> +++ b/arch/arm/boot/dts/ste-dbx5x0.dtsi
> @@ -52,6 +52,20 @@
>  		};
>  	};
>  
> +	/* Essential housekeeping hardware monitors */
> +	iio-hwmon {
> +		compatible = "iio-hwmon";
> +		io-channels = <&gpadc 0x02>, /* Battery temperature */
> +			    <&gpadc 0x03>, /* Main charger voltage */
> +			    <&gpadc 0x08>, /* Main battery voltage */
> +			    <&gpadc 0x09>, /* VBUS */
> +			    <&gpadc 0x0a>, /* Main charger current */
> +			    <&gpadc 0x0b>, /* USB charger current *
> +			    <&gpadc 0x0c>, /* Backup battery voltage */
> +			    <&gpadc 0x0d>, /* Die temperature */
> +			    <&gpadc 0x12>; /* Crystal temperature */
> +	};
> +
>  	soc {
>  		#address-cells = <1>;
>  		#size-cells = <1>;
> @@ -623,12 +637,84 @@
>  					interrupt-names = "60S", "ALARM";
>  				};
>  
> -				ab8500-gpadc {
> +				gpadc: ab8500-gpadc {
>  					compatible = "stericsson,ab8500-gpadc";
>  					interrupts = <32 IRQ_TYPE_LEVEL_HIGH
>  						      39 IRQ_TYPE_LEVEL_HIGH>;
>  					interrupt-names = "HW_CONV_END", "SW_CONV_END";
>  					vddadc-supply = <&ab8500_ldo_tvout_reg>;
> +					#address-cells = <1>;
> +					#size-cells = <0>;
> +					#io-channel-cells = <1>;
> +
> +					/* GPADC channels */
> +					bat_ctrl: adc-channel@01 {
> +						reg = <0x01>;

We standardised recently on just channel@01 etc
Curiously we didn't document a reg value for that in the shared doc
but we have used them in drivers so that is fine.

> +					};
> +					btemp_ball: adc-channel@02 {
> +						reg = <0x02>;
> +					};
> +					main_charger_v: adc-channel@03 {
> +						reg = <0x03>;
> +					};
> +					acc_detect1: adc-channel@04 {
> +						reg = <0x04>;
> +					};
> +					acc_detect2: adc-channel@05 {
> +						reg = <0x05>;
> +					};
> +					adc_aux1: adc-channel@06 {
> +						reg = <0x06>;
> +					};
> +					adc_aux2: adc-channel@07 {
> +						reg = <0x07>;
> +					};
> +					main_batt_v: adc-channel@08 {
> +						reg = <0x08>;
> +					};
> +					vbus_v: adc-channel@09 {
> +						reg = <0x09>;
> +					};
> +					main_charger_c: adc-channel@0a {
> +						reg = <0x0a>;
> +					};
> +					usb_charger_c: adc-channel@0b {
> +						reg = <0x0b>;
> +					};
> +					bk_bat_v: adc-channel@0c {
> +						reg = <0x0c>;
> +					};
> +					die_temp: adc-channel@0d {
> +						reg = <0x0d>;
> +					};
> +					usb_id: adc-channel@0e {
> +						reg = <0x0e>;
> +					};
> +					xtal_temp: adc-channel@12 {
> +						reg = <0x12>;
> +					};
> +					vbat_true_meas: adc-channel@13 {
> +						reg = <0x13>;
> +					};
> +					bat_ctrl_and_ibat: adc-channel@1c {
> +						reg = <0x1c>;
> +					};
> +					vbat_meas_and_ibat: adc-channel@1d {
> +						reg = <0x1d>;
> +					};
> +					vbat_true_meas_and_ibat: adc-channel@1e {
> +						reg = <0x1e>;
> +					};
> +					bat_temp_and_ibat: adc-channel@1f {
> +						reg = <0x1f>;
> +					};
> +				};
> +
> +				ab8500_temp {
> +					compatible = "stericsson,abx500-temp";
> +					io-channels = <&gpadc 0x06>,
> +						      <&gpadc 0x07>;
> +					io-channel-name = "aux1", "aux2";
>  				};
>  
>  				ab8500_battery: ab8500_battery {
> @@ -639,17 +725,31 @@
>  				ab8500_fg {
>  					compatible = "stericsson,ab8500-fg";
>  					battery	   = <&ab8500_battery>;
> +					io-channels = <&gpadc 0x08>;
> +					io-channel-name = "main_bat_v";
>  				};
>  
>  				ab8500_btemp {
>  					compatible = "stericsson,ab8500-btemp";
>  					battery	   = <&ab8500_battery>;
> +					io-channels = <&gpadc 0x02>,
> +						      <&gpadc 0x01>;
> +					io-channel-name = "btemp_ball",
> +							"bat_ctrl";
>  				};
>  
>  				ab8500_charger {
>  					compatible	= "stericsson,ab8500-charger";
>  					battery		= <&ab8500_battery>;
>  					vddadc-supply	= <&ab8500_ldo_tvout_reg>;
> +					io-channels = <&gpadc 0x03>,
> +						      <&gpadc 0x0a>,
> +						      <&gpadc 0x09>,
> +						      <&gpadc 0x0b>;
> +					io-channel-name = "main_charger_v",
> +							"main_charger_c",
> +							"vbus_v",
> +							"usb_charger_c";
>  				};
>  
>  				ab8500_chargalg {
Linus Walleij Sept. 3, 2019, 1:36 p.m. UTC | #2
On Mon, Aug 26, 2019 at 10:51 AM Jonathan Cameron <jic23@kernel.org> wrote:
> On Thu, 22 Aug 2019 16:52:33 +0200
> Linus Walleij <linus.walleij@linaro.org> wrote:
>
> > This adds the IIO channels for the GPADC after converting it
> > to using the standard IIO ADC bindings and moving the driver
> > over to the IIO subsystem. We also add IIO hwmon standard
> > driver node to support reading channels in a standard manner.
> >
> > Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
>
> I'll ask the 'stupid' question. Doesn't this break compatibility
> with old DTs?

No we just add stuff, if the kernel *want* to, it can implement fallbacks
for old device trees (which I guess is to hardcode all the channels into the
drivers and not use IIO ADC, like we did before in Linux). I do not do that
however, but "some operating system" could very well do it, and that
is the DT design ambition.

> One comment inline to do with IIO standardization that occurred in
> the meantime.
(...)
> > +                                     /* GPADC channels */
> > +                                     bat_ctrl: adc-channel@01 {
> > +                                             reg = <0x01>;
>
> We standardised recently on just channel@01 etc

OK I fix this when applying.

Thanks!
Linus Walleij
diff mbox series

Patch

diff --git a/arch/arm/boot/dts/ste-dbx5x0.dtsi b/arch/arm/boot/dts/ste-dbx5x0.dtsi
index b1a31134f860..80016521333b 100644
--- a/arch/arm/boot/dts/ste-dbx5x0.dtsi
+++ b/arch/arm/boot/dts/ste-dbx5x0.dtsi
@@ -52,6 +52,20 @@ 
 		};
 	};
 
+	/* Essential housekeeping hardware monitors */
+	iio-hwmon {
+		compatible = "iio-hwmon";
+		io-channels = <&gpadc 0x02>, /* Battery temperature */
+			    <&gpadc 0x03>, /* Main charger voltage */
+			    <&gpadc 0x08>, /* Main battery voltage */
+			    <&gpadc 0x09>, /* VBUS */
+			    <&gpadc 0x0a>, /* Main charger current */
+			    <&gpadc 0x0b>, /* USB charger current *
+			    <&gpadc 0x0c>, /* Backup battery voltage */
+			    <&gpadc 0x0d>, /* Die temperature */
+			    <&gpadc 0x12>; /* Crystal temperature */
+	};
+
 	soc {
 		#address-cells = <1>;
 		#size-cells = <1>;
@@ -623,12 +637,84 @@ 
 					interrupt-names = "60S", "ALARM";
 				};
 
-				ab8500-gpadc {
+				gpadc: ab8500-gpadc {
 					compatible = "stericsson,ab8500-gpadc";
 					interrupts = <32 IRQ_TYPE_LEVEL_HIGH
 						      39 IRQ_TYPE_LEVEL_HIGH>;
 					interrupt-names = "HW_CONV_END", "SW_CONV_END";
 					vddadc-supply = <&ab8500_ldo_tvout_reg>;
+					#address-cells = <1>;
+					#size-cells = <0>;
+					#io-channel-cells = <1>;
+
+					/* GPADC channels */
+					bat_ctrl: adc-channel@01 {
+						reg = <0x01>;
+					};
+					btemp_ball: adc-channel@02 {
+						reg = <0x02>;
+					};
+					main_charger_v: adc-channel@03 {
+						reg = <0x03>;
+					};
+					acc_detect1: adc-channel@04 {
+						reg = <0x04>;
+					};
+					acc_detect2: adc-channel@05 {
+						reg = <0x05>;
+					};
+					adc_aux1: adc-channel@06 {
+						reg = <0x06>;
+					};
+					adc_aux2: adc-channel@07 {
+						reg = <0x07>;
+					};
+					main_batt_v: adc-channel@08 {
+						reg = <0x08>;
+					};
+					vbus_v: adc-channel@09 {
+						reg = <0x09>;
+					};
+					main_charger_c: adc-channel@0a {
+						reg = <0x0a>;
+					};
+					usb_charger_c: adc-channel@0b {
+						reg = <0x0b>;
+					};
+					bk_bat_v: adc-channel@0c {
+						reg = <0x0c>;
+					};
+					die_temp: adc-channel@0d {
+						reg = <0x0d>;
+					};
+					usb_id: adc-channel@0e {
+						reg = <0x0e>;
+					};
+					xtal_temp: adc-channel@12 {
+						reg = <0x12>;
+					};
+					vbat_true_meas: adc-channel@13 {
+						reg = <0x13>;
+					};
+					bat_ctrl_and_ibat: adc-channel@1c {
+						reg = <0x1c>;
+					};
+					vbat_meas_and_ibat: adc-channel@1d {
+						reg = <0x1d>;
+					};
+					vbat_true_meas_and_ibat: adc-channel@1e {
+						reg = <0x1e>;
+					};
+					bat_temp_and_ibat: adc-channel@1f {
+						reg = <0x1f>;
+					};
+				};
+
+				ab8500_temp {
+					compatible = "stericsson,abx500-temp";
+					io-channels = <&gpadc 0x06>,
+						      <&gpadc 0x07>;
+					io-channel-name = "aux1", "aux2";
 				};
 
 				ab8500_battery: ab8500_battery {
@@ -639,17 +725,31 @@ 
 				ab8500_fg {
 					compatible = "stericsson,ab8500-fg";
 					battery	   = <&ab8500_battery>;
+					io-channels = <&gpadc 0x08>;
+					io-channel-name = "main_bat_v";
 				};
 
 				ab8500_btemp {
 					compatible = "stericsson,ab8500-btemp";
 					battery	   = <&ab8500_battery>;
+					io-channels = <&gpadc 0x02>,
+						      <&gpadc 0x01>;
+					io-channel-name = "btemp_ball",
+							"bat_ctrl";
 				};
 
 				ab8500_charger {
 					compatible	= "stericsson,ab8500-charger";
 					battery		= <&ab8500_battery>;
 					vddadc-supply	= <&ab8500_ldo_tvout_reg>;
+					io-channels = <&gpadc 0x03>,
+						      <&gpadc 0x0a>,
+						      <&gpadc 0x09>,
+						      <&gpadc 0x0b>;
+					io-channel-name = "main_charger_v",
+							"main_charger_c",
+							"vbus_v",
+							"usb_charger_c";
 				};
 
 				ab8500_chargalg {