All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v6 0/6] Add support for TI TPS65219 PMIC.
@ 2022-10-11 14:05 ` Jerome Neanne
  0 siblings, 0 replies; 50+ messages in thread
From: Jerome Neanne @ 2022-10-11 14:05 UTC (permalink / raw)
  To: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, lee, tony,
	vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, jneanne, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

Hi everyone,

bindings and regulator are already there as it is based on the regulator tree branch for-6.1:
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git
All review feedback except one have been integrated in v5. Waiting ack/nack for mfd part. 

Changes in v6:
- Remove not needed dev assignment reported by Dmitry Torokhov in Input. 

Regards,
Jerome

Previous versions:
v5 - https://lore.kernel.org/lkml/20220913121419.15420-1-jneanne@baylibre.com/
v4 - https://lore.kernel.org/lkml/20220825150224.826258-1-msp@baylibre.com/
v3 - https://lore.kernel.org/lkml/20220805121852.21254-1-jneanne@baylibre.com/
v2 - https://lore.kernel.org/lkml/20220726103355.17684-1-jneanne@baylibre.com/
v1 - https://lore.kernel.org/lkml/20220719091742.3221-1-jneanne@baylibre.com/

Jerome Neanne (5):
  DONOTMERGE: arm64: dts: ti: Add TI TPS65219 PMIC support for AM642 SK
    board.
  DONOTMERGE: arm64: dts: ti: Add pinmux and irq mapping for TPS65219
    external interrupts
  DONOTMERGE: arm64: dts: ti: k3-am642-sk: Enable tps65219 power-button
  mfd: tps65219: Add driver for TI TPS65219 PMIC
  arm64: defconfig: Add tps65219 as modules

Markus Schneider-Pargmann (1):
  Input: Add tps65219 interrupt driven powerbutton

 MAINTAINERS                             |   1 +
 arch/arm64/boot/dts/ti/k3-am642-sk.dts  | 115 ++++++++
 arch/arm64/configs/defconfig            |   3 +
 drivers/input/misc/Kconfig              |  10 +
 drivers/input/misc/Makefile             |   1 +
 drivers/input/misc/tps65219-pwrbutton.c | 148 ++++++++++
 drivers/mfd/Kconfig                     |  14 +
 drivers/mfd/Makefile                    |   1 +
 drivers/mfd/tps65219.c                  | 320 ++++++++++++++++++++++
 include/linux/mfd/tps65219.h            | 345 ++++++++++++++++++++++++
 10 files changed, 958 insertions(+)
 create mode 100644 drivers/input/misc/tps65219-pwrbutton.c
 create mode 100644 drivers/mfd/tps65219.c
 create mode 100644 include/linux/mfd/tps65219.h

-- 
2.17.1


^ permalink raw reply	[flat|nested] 50+ messages in thread

* [PATCH v6 0/6] Add support for TI TPS65219 PMIC.
@ 2022-10-11 14:05 ` Jerome Neanne
  0 siblings, 0 replies; 50+ messages in thread
From: Jerome Neanne @ 2022-10-11 14:05 UTC (permalink / raw)
  To: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, lee, tony,
	vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, jneanne, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

Hi everyone,

bindings and regulator are already there as it is based on the regulator tree branch for-6.1:
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git
All review feedback except one have been integrated in v5. Waiting ack/nack for mfd part. 

Changes in v6:
- Remove not needed dev assignment reported by Dmitry Torokhov in Input. 

Regards,
Jerome

Previous versions:
v5 - https://lore.kernel.org/lkml/20220913121419.15420-1-jneanne@baylibre.com/
v4 - https://lore.kernel.org/lkml/20220825150224.826258-1-msp@baylibre.com/
v3 - https://lore.kernel.org/lkml/20220805121852.21254-1-jneanne@baylibre.com/
v2 - https://lore.kernel.org/lkml/20220726103355.17684-1-jneanne@baylibre.com/
v1 - https://lore.kernel.org/lkml/20220719091742.3221-1-jneanne@baylibre.com/

Jerome Neanne (5):
  DONOTMERGE: arm64: dts: ti: Add TI TPS65219 PMIC support for AM642 SK
    board.
  DONOTMERGE: arm64: dts: ti: Add pinmux and irq mapping for TPS65219
    external interrupts
  DONOTMERGE: arm64: dts: ti: k3-am642-sk: Enable tps65219 power-button
  mfd: tps65219: Add driver for TI TPS65219 PMIC
  arm64: defconfig: Add tps65219 as modules

Markus Schneider-Pargmann (1):
  Input: Add tps65219 interrupt driven powerbutton

 MAINTAINERS                             |   1 +
 arch/arm64/boot/dts/ti/k3-am642-sk.dts  | 115 ++++++++
 arch/arm64/configs/defconfig            |   3 +
 drivers/input/misc/Kconfig              |  10 +
 drivers/input/misc/Makefile             |   1 +
 drivers/input/misc/tps65219-pwrbutton.c | 148 ++++++++++
 drivers/mfd/Kconfig                     |  14 +
 drivers/mfd/Makefile                    |   1 +
 drivers/mfd/tps65219.c                  | 320 ++++++++++++++++++++++
 include/linux/mfd/tps65219.h            | 345 ++++++++++++++++++++++++
 10 files changed, 958 insertions(+)
 create mode 100644 drivers/input/misc/tps65219-pwrbutton.c
 create mode 100644 drivers/mfd/tps65219.c
 create mode 100644 include/linux/mfd/tps65219.h

-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* [PATCH v6 1/6] DONOTMERGE: arm64: dts: ti: Add TI TPS65219 PMIC support for AM642 SK board.
  2022-10-11 14:05 ` Jerome Neanne
@ 2022-10-11 14:05   ` Jerome Neanne
  -1 siblings, 0 replies; 50+ messages in thread
From: Jerome Neanne @ 2022-10-11 14:05 UTC (permalink / raw)
  To: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, lee, tony,
	vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, jneanne, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

Add support fot the TI Power Management IC TPS65219
on the AM642 SKEVM board.

Needed for driver testing but official board support pending.
TI commitment is required before board upstream kick-off.

Signed-off-by: Jerome Neanne <jneanne@baylibre.com>
Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
---
 arch/arm64/boot/dts/ti/k3-am642-sk.dts | 104 +++++++++++++++++++++++++
 1 file changed, 104 insertions(+)

diff --git a/arch/arm64/boot/dts/ti/k3-am642-sk.dts b/arch/arm64/boot/dts/ti/k3-am642-sk.dts
index 2620469a7517..565b50810579 100644
--- a/arch/arm64/boot/dts/ti/k3-am642-sk.dts
+++ b/arch/arm64/boot/dts/ti/k3-am642-sk.dts
@@ -150,6 +150,20 @@
 		vin-supply = <&com8_ls_en>;
 		gpio = <&main_gpio0 48 GPIO_ACTIVE_HIGH>;
 	};
+
+	vsel_sd_nddr: gpio-regulator {
+		compatible = "regulator-gpio";
+		pinctrl-names = "default";
+		pinctrl-0 = <&vsel_sd_nddr_pins_default>;
+		regulator-name = "tps65219-LDO1-SEL-SD";
+		regulator-min-microvolt = <1800000>;
+		regulator-max-microvolt = <3300000>;
+		regulator-boot-on;
+		vin-supply = <&ldo1_reg>;
+		gpios = <&main_gpio0 45 GPIO_ACTIVE_HIGH>;
+		states = <1800000 0x0>,
+			 <3300000 0x1>;
+	};
 };
 
 &main_pmx0 {
@@ -181,6 +195,13 @@
 		>;
 	};
 
+	main_i2c0_pins_default: main-i2c0-pins-default {
+		pinctrl-single,pins = <
+			AM64X_IOPAD(0x0260, PIN_INPUT_PULLUP, 0) /* (A18) I2C0_SCL */
+			AM64X_IOPAD(0x0264, PIN_INPUT_PULLUP, 0) /* (B18) I2C0_SDA */
+		>;
+	};
+
 	main_i2c1_pins_default: main-i2c1-pins-default {
 		pinctrl-single,pins = <
 			AM64X_IOPAD(0x0268, PIN_INPUT_PULLUP, 0) /* (C18) I2C1_SCL */
@@ -267,6 +288,12 @@
 			AM64X_IOPAD(0x00bc, PIN_INPUT, 7) /* (U8) GPIO0_46 */
 		>;
 	};
+
+	vsel_sd_nddr_pins_default: vsel-sd-nddr-pins-default {
+		pinctrl-single,pins = <
+			AM64X_IOPAD(0x00b8, PIN_INPUT, 7) /* (Y7) PRG1_PRU0_GPO0.GPIO0_45 */
+		>;
+	};
 };
 
 &mcu_uart0 {
@@ -315,6 +342,83 @@
 	status = "disabled";
 };
 
+&main_i2c0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&main_i2c0_pins_default>;
+	clock-frequency = <400000>;
+	status = "okay";
+
+	tps65219: pmic@30 {
+		compatible = "ti,tps65219";
+		reg = <0x30>;
+		system-power-controller;
+
+		buck1-supply = <&vcc_3v3_sys>;
+		buck2-supply = <&vcc_3v3_sys>;
+		buck3-supply = <&vcc_3v3_sys>;
+		ldo1-supply = <&vcc_3v3_sys>;
+		ldo2-supply = <&buck2_reg>;
+		ldo3-supply = <&vcc_3v3_sys>;
+		ldo4-supply = <&vcc_3v3_sys>;
+
+		regulators {
+			buck1_reg: buck1 {
+				regulator-name = "VDD_CORE";
+				regulator-min-microvolt = <750000>;
+				regulator-max-microvolt = <1000000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			buck2_reg: buck2 {
+				regulator-name = "VCC1V8";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			buck3_reg: buck3 {
+				regulator-name = "VDD_LPDDR4";
+				regulator-min-microvolt = <1100000>;
+				regulator-max-microvolt = <1100000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			ldo1_reg: ldo1 {
+				regulator-name = "VDDSHV_SD_IO_PMIC";
+				regulator-min-microvolt = <1000000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-allow-bypass;
+			};
+
+			ldo2_reg: ldo2 {
+				regulator-name = "VDDAR_CORE";
+				regulator-min-microvolt = <850000>;
+				regulator-max-microvolt = <850000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			ldo3_reg: ldo3 {
+				regulator-name = "VDDA_1V8";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			ldo4_reg: ldo4 {
+				regulator-name = "VDD_PHY_2V5";
+				regulator-min-microvolt = <2500000>;
+				regulator-max-microvolt = <2500000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+		};
+	};
+};
 &main_i2c1 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&main_i2c1_pins_default>;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH v6 1/6] DONOTMERGE: arm64: dts: ti: Add TI TPS65219 PMIC support for AM642 SK board.
@ 2022-10-11 14:05   ` Jerome Neanne
  0 siblings, 0 replies; 50+ messages in thread
From: Jerome Neanne @ 2022-10-11 14:05 UTC (permalink / raw)
  To: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, lee, tony,
	vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, jneanne, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

Add support fot the TI Power Management IC TPS65219
on the AM642 SKEVM board.

Needed for driver testing but official board support pending.
TI commitment is required before board upstream kick-off.

Signed-off-by: Jerome Neanne <jneanne@baylibre.com>
Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
---
 arch/arm64/boot/dts/ti/k3-am642-sk.dts | 104 +++++++++++++++++++++++++
 1 file changed, 104 insertions(+)

diff --git a/arch/arm64/boot/dts/ti/k3-am642-sk.dts b/arch/arm64/boot/dts/ti/k3-am642-sk.dts
index 2620469a7517..565b50810579 100644
--- a/arch/arm64/boot/dts/ti/k3-am642-sk.dts
+++ b/arch/arm64/boot/dts/ti/k3-am642-sk.dts
@@ -150,6 +150,20 @@
 		vin-supply = <&com8_ls_en>;
 		gpio = <&main_gpio0 48 GPIO_ACTIVE_HIGH>;
 	};
+
+	vsel_sd_nddr: gpio-regulator {
+		compatible = "regulator-gpio";
+		pinctrl-names = "default";
+		pinctrl-0 = <&vsel_sd_nddr_pins_default>;
+		regulator-name = "tps65219-LDO1-SEL-SD";
+		regulator-min-microvolt = <1800000>;
+		regulator-max-microvolt = <3300000>;
+		regulator-boot-on;
+		vin-supply = <&ldo1_reg>;
+		gpios = <&main_gpio0 45 GPIO_ACTIVE_HIGH>;
+		states = <1800000 0x0>,
+			 <3300000 0x1>;
+	};
 };
 
 &main_pmx0 {
@@ -181,6 +195,13 @@
 		>;
 	};
 
+	main_i2c0_pins_default: main-i2c0-pins-default {
+		pinctrl-single,pins = <
+			AM64X_IOPAD(0x0260, PIN_INPUT_PULLUP, 0) /* (A18) I2C0_SCL */
+			AM64X_IOPAD(0x0264, PIN_INPUT_PULLUP, 0) /* (B18) I2C0_SDA */
+		>;
+	};
+
 	main_i2c1_pins_default: main-i2c1-pins-default {
 		pinctrl-single,pins = <
 			AM64X_IOPAD(0x0268, PIN_INPUT_PULLUP, 0) /* (C18) I2C1_SCL */
@@ -267,6 +288,12 @@
 			AM64X_IOPAD(0x00bc, PIN_INPUT, 7) /* (U8) GPIO0_46 */
 		>;
 	};
+
+	vsel_sd_nddr_pins_default: vsel-sd-nddr-pins-default {
+		pinctrl-single,pins = <
+			AM64X_IOPAD(0x00b8, PIN_INPUT, 7) /* (Y7) PRG1_PRU0_GPO0.GPIO0_45 */
+		>;
+	};
 };
 
 &mcu_uart0 {
@@ -315,6 +342,83 @@
 	status = "disabled";
 };
 
+&main_i2c0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&main_i2c0_pins_default>;
+	clock-frequency = <400000>;
+	status = "okay";
+
+	tps65219: pmic@30 {
+		compatible = "ti,tps65219";
+		reg = <0x30>;
+		system-power-controller;
+
+		buck1-supply = <&vcc_3v3_sys>;
+		buck2-supply = <&vcc_3v3_sys>;
+		buck3-supply = <&vcc_3v3_sys>;
+		ldo1-supply = <&vcc_3v3_sys>;
+		ldo2-supply = <&buck2_reg>;
+		ldo3-supply = <&vcc_3v3_sys>;
+		ldo4-supply = <&vcc_3v3_sys>;
+
+		regulators {
+			buck1_reg: buck1 {
+				regulator-name = "VDD_CORE";
+				regulator-min-microvolt = <750000>;
+				regulator-max-microvolt = <1000000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			buck2_reg: buck2 {
+				regulator-name = "VCC1V8";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			buck3_reg: buck3 {
+				regulator-name = "VDD_LPDDR4";
+				regulator-min-microvolt = <1100000>;
+				regulator-max-microvolt = <1100000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			ldo1_reg: ldo1 {
+				regulator-name = "VDDSHV_SD_IO_PMIC";
+				regulator-min-microvolt = <1000000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-allow-bypass;
+			};
+
+			ldo2_reg: ldo2 {
+				regulator-name = "VDDAR_CORE";
+				regulator-min-microvolt = <850000>;
+				regulator-max-microvolt = <850000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			ldo3_reg: ldo3 {
+				regulator-name = "VDDA_1V8";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			ldo4_reg: ldo4 {
+				regulator-name = "VDD_PHY_2V5";
+				regulator-min-microvolt = <2500000>;
+				regulator-max-microvolt = <2500000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+		};
+	};
+};
 &main_i2c1 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&main_i2c1_pins_default>;
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH v6 2/6] DONOTMERGE: arm64: dts: ti: Add pinmux and irq mapping for TPS65219 external interrupts
  2022-10-11 14:05 ` Jerome Neanne
@ 2022-10-11 14:05   ` Jerome Neanne
  -1 siblings, 0 replies; 50+ messages in thread
From: Jerome Neanne @ 2022-10-11 14:05 UTC (permalink / raw)
  To: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, lee, tony,
	vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, jneanne, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

Interrupt occurring on PMIC TPS65219 is propagated to SOC
through EXTINTn pin connected to gic500 interrupt controller

Needed for driver testing but official board support pending.
TI commitment is required before board upstream kick-off.

Signed-off-by: Jerome Neanne <jneanne@baylibre.com>
Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
---
 arch/arm64/boot/dts/ti/k3-am642-sk.dts | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/arch/arm64/boot/dts/ti/k3-am642-sk.dts b/arch/arm64/boot/dts/ti/k3-am642-sk.dts
index 565b50810579..1f7ce60ecb57 100644
--- a/arch/arm64/boot/dts/ti/k3-am642-sk.dts
+++ b/arch/arm64/boot/dts/ti/k3-am642-sk.dts
@@ -294,6 +294,12 @@
 			AM64X_IOPAD(0x00b8, PIN_INPUT, 7) /* (Y7) PRG1_PRU0_GPO0.GPIO0_45 */
 		>;
 	};
+
+	pmic_irq_pins_default: pmic-irq-pins-default {
+		pinctrl-single,pins = <
+			AM64X_IOPAD(0x0278, PIN_INPUT, 0) /* (C19) EXTINTn */
+		>;
+	};
 };
 
 &mcu_uart0 {
@@ -352,6 +358,10 @@
 		compatible = "ti,tps65219";
 		reg = <0x30>;
 		system-power-controller;
+		pinctrl-names = "default";
+		pinctrl-0 = <&pmic_irq_pins_default>;
+		interrupt-parent = <&gic500>;
+		interrupts = <GIC_SPI 224 IRQ_TYPE_LEVEL_HIGH>;
 
 		buck1-supply = <&vcc_3v3_sys>;
 		buck2-supply = <&vcc_3v3_sys>;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH v6 2/6] DONOTMERGE: arm64: dts: ti: Add pinmux and irq mapping for TPS65219 external interrupts
@ 2022-10-11 14:05   ` Jerome Neanne
  0 siblings, 0 replies; 50+ messages in thread
From: Jerome Neanne @ 2022-10-11 14:05 UTC (permalink / raw)
  To: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, lee, tony,
	vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, jneanne, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

Interrupt occurring on PMIC TPS65219 is propagated to SOC
through EXTINTn pin connected to gic500 interrupt controller

Needed for driver testing but official board support pending.
TI commitment is required before board upstream kick-off.

Signed-off-by: Jerome Neanne <jneanne@baylibre.com>
Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
---
 arch/arm64/boot/dts/ti/k3-am642-sk.dts | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/arch/arm64/boot/dts/ti/k3-am642-sk.dts b/arch/arm64/boot/dts/ti/k3-am642-sk.dts
index 565b50810579..1f7ce60ecb57 100644
--- a/arch/arm64/boot/dts/ti/k3-am642-sk.dts
+++ b/arch/arm64/boot/dts/ti/k3-am642-sk.dts
@@ -294,6 +294,12 @@
 			AM64X_IOPAD(0x00b8, PIN_INPUT, 7) /* (Y7) PRG1_PRU0_GPO0.GPIO0_45 */
 		>;
 	};
+
+	pmic_irq_pins_default: pmic-irq-pins-default {
+		pinctrl-single,pins = <
+			AM64X_IOPAD(0x0278, PIN_INPUT, 0) /* (C19) EXTINTn */
+		>;
+	};
 };
 
 &mcu_uart0 {
@@ -352,6 +358,10 @@
 		compatible = "ti,tps65219";
 		reg = <0x30>;
 		system-power-controller;
+		pinctrl-names = "default";
+		pinctrl-0 = <&pmic_irq_pins_default>;
+		interrupt-parent = <&gic500>;
+		interrupts = <GIC_SPI 224 IRQ_TYPE_LEVEL_HIGH>;
 
 		buck1-supply = <&vcc_3v3_sys>;
 		buck2-supply = <&vcc_3v3_sys>;
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH v6 3/6] DONOTMERGE: arm64: dts: ti: k3-am642-sk: Enable tps65219 power-button
  2022-10-11 14:05 ` Jerome Neanne
@ 2022-10-11 14:05   ` Jerome Neanne
  -1 siblings, 0 replies; 50+ messages in thread
From: Jerome Neanne @ 2022-10-11 14:05 UTC (permalink / raw)
  To: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, lee, tony,
	vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, jneanne, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

This board uses the pin as a power-button, enable it.

Needed for driver testing but official board support pending.
TI commitment is required before board upstream kick-off.

Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
Signed-off-by: Jerome Neanne <jneanne@baylibre.com>
---
 arch/arm64/boot/dts/ti/k3-am642-sk.dts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm64/boot/dts/ti/k3-am642-sk.dts b/arch/arm64/boot/dts/ti/k3-am642-sk.dts
index 1f7ce60ecb57..238798ea6a79 100644
--- a/arch/arm64/boot/dts/ti/k3-am642-sk.dts
+++ b/arch/arm64/boot/dts/ti/k3-am642-sk.dts
@@ -362,6 +362,7 @@
 		pinctrl-0 = <&pmic_irq_pins_default>;
 		interrupt-parent = <&gic500>;
 		interrupts = <GIC_SPI 224 IRQ_TYPE_LEVEL_HIGH>;
+		ti,power-button;
 
 		buck1-supply = <&vcc_3v3_sys>;
 		buck2-supply = <&vcc_3v3_sys>;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH v6 3/6] DONOTMERGE: arm64: dts: ti: k3-am642-sk: Enable tps65219 power-button
@ 2022-10-11 14:05   ` Jerome Neanne
  0 siblings, 0 replies; 50+ messages in thread
From: Jerome Neanne @ 2022-10-11 14:05 UTC (permalink / raw)
  To: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, lee, tony,
	vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, jneanne, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

This board uses the pin as a power-button, enable it.

Needed for driver testing but official board support pending.
TI commitment is required before board upstream kick-off.

Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
Signed-off-by: Jerome Neanne <jneanne@baylibre.com>
---
 arch/arm64/boot/dts/ti/k3-am642-sk.dts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm64/boot/dts/ti/k3-am642-sk.dts b/arch/arm64/boot/dts/ti/k3-am642-sk.dts
index 1f7ce60ecb57..238798ea6a79 100644
--- a/arch/arm64/boot/dts/ti/k3-am642-sk.dts
+++ b/arch/arm64/boot/dts/ti/k3-am642-sk.dts
@@ -362,6 +362,7 @@
 		pinctrl-0 = <&pmic_irq_pins_default>;
 		interrupt-parent = <&gic500>;
 		interrupts = <GIC_SPI 224 IRQ_TYPE_LEVEL_HIGH>;
+		ti,power-button;
 
 		buck1-supply = <&vcc_3v3_sys>;
 		buck2-supply = <&vcc_3v3_sys>;
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
  2022-10-11 14:05 ` Jerome Neanne
@ 2022-10-11 14:05   ` Jerome Neanne
  -1 siblings, 0 replies; 50+ messages in thread
From: Jerome Neanne @ 2022-10-11 14:05 UTC (permalink / raw)
  To: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, lee, tony,
	vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, jneanne, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

The TPS65219 is a power management IC PMIC designed to supply a wide
range of SoCs in both portable and stationary applications. Any SoC can
control TPS65219 over a standard I2C interface.

It contains the following components:
- Regulators.
- Over Temperature warning and Shut down.
- GPIOs
- Multi Function Pins (MFP)
- power-button

This patch adds support for tps65219 PMIC. At this time only
the functionalities listed below are made available:

- Regulators probe and functionalities
- warm and cold reset support
- SW shutdown support
- Regulator warnings via IRQs
- Power-button via IRQ

Signed-off-by: Jerome Neanne <jneanne@baylibre.com>
Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
---
 MAINTAINERS                  |   1 +
 drivers/mfd/Kconfig          |  14 ++
 drivers/mfd/Makefile         |   1 +
 drivers/mfd/tps65219.c       | 320 ++++++++++++++++++++++++++++++++
 include/linux/mfd/tps65219.h | 345 +++++++++++++++++++++++++++++++++++
 5 files changed, 681 insertions(+)
 create mode 100644 drivers/mfd/tps65219.c
 create mode 100644 include/linux/mfd/tps65219.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 14edacfeb1d4..f89e77959536 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -14931,6 +14931,7 @@ F:	drivers/mfd/menelaus.c
 F:	drivers/mfd/palmas.c
 F:	drivers/mfd/tps65217.c
 F:	drivers/mfd/tps65218.c
+F:	drivers/mfd/tps65219.c
 F:	drivers/mfd/tps65910.c
 F:	drivers/mfd/twl-core.[ch]
 F:	drivers/mfd/twl4030*.c
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index abb58ab1a1a4..1a846c7dd0c2 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -1576,6 +1576,20 @@ config MFD_TPS65218
 	  This driver can also be built as a module.  If so, the module
 	  will be called tps65218.
 
+config MFD_TPS65219
+	tristate "TI TPS65219 Power Management IC"
+	depends on I2C && OF
+	select MFD_CORE
+	select REGMAP_I2C
+	select REGMAP_IRQ
+	help
+	  If you say yes here you get support for the TPS65219 series of Power
+	  Management ICs. These include voltage regulators, GPIOs and
+	  push/power button that are often used in portable devices.
+
+	  This driver can also be built as a module. If so, the module
+	  will be called tps65219.
+
 config MFD_TPS6586X
 	bool "TI TPS6586x Power Management chips"
 	depends on I2C=y
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 858cacf659d6..a8ff3d6ea3ab 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -101,6 +101,7 @@ obj-$(CONFIG_TPS6507X)		+= tps6507x.o
 obj-$(CONFIG_MFD_TPS65086)	+= tps65086.o
 obj-$(CONFIG_MFD_TPS65217)	+= tps65217.o
 obj-$(CONFIG_MFD_TPS65218)	+= tps65218.o
+obj-$(CONFIG_MFD_TPS65219)	+= tps65219.o
 obj-$(CONFIG_MFD_TPS65910)	+= tps65910.o
 obj-$(CONFIG_MFD_TPS65912)	+= tps65912-core.o
 obj-$(CONFIG_MFD_TPS65912_I2C)	+= tps65912-i2c.o
diff --git a/drivers/mfd/tps65219.c b/drivers/mfd/tps65219.c
new file mode 100644
index 000000000000..c1638483e069
--- /dev/null
+++ b/drivers/mfd/tps65219.c
@@ -0,0 +1,320 @@
+// SPDX-License-Identifier: GPL-2.0
+//
+// Driver for TPS65219 Integrated Power Management Integrated Chips (PMIC)
+//
+// Copyright (C) 2022 BayLibre Incorporated - https://www.baylibre.com/
+
+#include <linux/device.h>
+#include <linux/err.h>
+#include <linux/i2c.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
+#include <linux/irq.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/reboot.h>
+#include <linux/regmap.h>
+#include <linux/slab.h>
+
+#include <linux/mfd/core.h>
+#include <linux/mfd/tps65219.h>
+
+static int tps65219_warm_reset(struct tps65219 *tps)
+{
+	return regmap_update_bits(tps->regmap, TPS65219_REG_MFP_CTRL,
+				  TPS65219_MFP_WARM_RESET_I2C_CTRL_MASK,
+				  TPS65219_MFP_WARM_RESET_I2C_CTRL_MASK);
+}
+
+static int tps65219_cold_reset(struct tps65219 *tps)
+{
+	return regmap_update_bits(tps->regmap, TPS65219_REG_MFP_CTRL,
+				  TPS65219_MFP_COLD_RESET_I2C_CTRL_MASK,
+				  TPS65219_MFP_COLD_RESET_I2C_CTRL_MASK);
+}
+
+static int tps65219_soft_shutdown(struct tps65219 *tps)
+{
+	return regmap_update_bits(tps->regmap, TPS65219_REG_MFP_CTRL,
+				  TPS65219_MFP_I2C_OFF_REQ_MASK,
+				  TPS65219_MFP_I2C_OFF_REQ_MASK);
+}
+
+static int tps65219_restart(struct notifier_block *this,
+			    unsigned long reboot_mode, void *cmd)
+{
+	struct tps65219 *tps;
+
+	tps = container_of(this, struct tps65219, nb);
+	if (!tps) {
+		pr_err("tps65219: Restarting failed because the pointer to tps65219 is invalid\n");
+		return -ENODEV;
+	}
+	if (reboot_mode == REBOOT_WARM)
+		tps65219_warm_reset(tps);
+	else
+		tps65219_cold_reset(tps);
+	return NOTIFY_DONE;
+}
+
+static struct notifier_block pmic_rst_restart_nb = {
+	.notifier_call = tps65219_restart,
+	.priority = 200,
+};
+
+static const struct resource tps65219_pwrbutton_resources[] = {
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_PB_FALLING_EDGE_DETECT, "falling"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_PB_RISING_EDGE_DETECT, "rising"),
+};
+
+static const struct resource tps65219_regulator_resources[] = {
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_SCG, "LDO3_SCG"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_OC, "LDO3_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_UV, "LDO3_UV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_SCG, "LDO4_SCG"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_OC, "LDO4_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_UV, "LDO4_UV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_SCG, "LDO1_SCG"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_OC, "LDO1_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_UV, "LDO1_UV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_SCG, "LDO2_SCG"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_OC, "LDO2_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_UV, "LDO2_UV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_SCG, "BUCK3_SCG"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_OC, "BUCK3_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_NEG_OC, "BUCK3_NEG_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_UV, "BUCK3_UV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_SCG, "BUCK1_SCG"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_OC, "BUCK1_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_NEG_OC, "BUCK1_NEG_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_UV, "BUCK1_UV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_SCG, "BUCK2_SCG"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_OC, "BUCK2_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_NEG_OC, "BUCK2_NEG_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_UV, "BUCK2_UV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_RV, "BUCK1_RV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_RV, "BUCK2_RV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_RV, "BUCK3_RV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_RV, "LDO1_RV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_RV, "LDO2_RV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_RV, "LDO3_RV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_RV, "LDO4_RV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_RV_SD, "BUCK1_RV_SD"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_RV_SD, "BUCK2_RV_SD"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_RV_SD, "BUCK3_RV_SD"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_RV_SD, "LDO1_RV_SD"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_RV_SD, "LDO2_RV_SD"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_RV_SD, "LDO3_RV_SD"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_RV_SD, "LDO4_RV_SD"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_TIMEOUT, "TIMEOUT"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_3_WARM, "SENSOR_3_WARM"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_2_WARM, "SENSOR_2_WARM"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_1_WARM, "SENSOR_1_WARM"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_0_WARM, "SENSOR_0_WARM"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_3_HOT, "SENSOR_3_HOT"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_2_HOT, "SENSOR_2_HOT"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_1_HOT, "SENSOR_1_HOT"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_0_HOT, "SENSOR_0_HOT"),
+};
+
+static const struct mfd_cell tps65219_cells[] = {
+	{
+		.name = "tps65219-regulator",
+		.resources = tps65219_regulator_resources,
+		.num_resources = ARRAY_SIZE(tps65219_regulator_resources),
+	}, {
+		.name = "tps65219-gpios",
+	},
+};
+
+static const struct mfd_cell tps65219_pwrbutton_cell = {
+	.name = "tps65219-pwrbutton",
+	.resources = tps65219_pwrbutton_resources,
+	.num_resources = ARRAY_SIZE(tps65219_pwrbutton_resources),
+};
+
+static const struct regmap_config tps65219_regmap_config = {
+	.reg_bits = 8,
+	.val_bits = 8,
+	.max_register = TPS65219_REG_FACTORY_CONFIG_2,
+};
+
+/*
+ * Mapping of main IRQ register bits to sub-IRQ register offsets so that we can
+ * access corect sub-IRQ registers based on bits that are set in main IRQ
+ * register.
+ */
+/* Timeout Residual Voltage Shutdown */
+static unsigned int bit0_offsets[] = { TPS65219_REG_INT_TO_RV_POS };
+static unsigned int bit1_offsets[] = { TPS65219_REG_INT_RV_POS };	/* Residual Voltage */
+static unsigned int bit2_offsets[] = { TPS65219_REG_INT_SYS_POS };	/* System */
+static unsigned int bit3_offsets[] = { TPS65219_REG_INT_BUCK_1_2_POS };	/* Buck 1-2 */
+static unsigned int bit4_offsets[] = { TPS65219_REG_INT_BUCK_3_POS };	/* Buck 3 */
+static unsigned int bit5_offsets[] = { TPS65219_REG_INT_LDO_1_2_POS };	/* LDO 1-2 */
+static unsigned int bit6_offsets[] = { TPS65219_REG_INT_LDO_3_4_POS };	/* LDO 3-4 */
+static unsigned int bit7_offsets[] = { TPS65219_REG_INT_PB_POS };	/* Power Button */
+
+static struct regmap_irq_sub_irq_map tps65219_sub_irq_offsets[] = {
+	REGMAP_IRQ_MAIN_REG_OFFSET(bit0_offsets),
+	REGMAP_IRQ_MAIN_REG_OFFSET(bit1_offsets),
+	REGMAP_IRQ_MAIN_REG_OFFSET(bit2_offsets),
+	REGMAP_IRQ_MAIN_REG_OFFSET(bit3_offsets),
+	REGMAP_IRQ_MAIN_REG_OFFSET(bit4_offsets),
+	REGMAP_IRQ_MAIN_REG_OFFSET(bit5_offsets),
+	REGMAP_IRQ_MAIN_REG_OFFSET(bit6_offsets),
+	REGMAP_IRQ_MAIN_REG_OFFSET(bit7_offsets),
+};
+
+#define TPS65219_REGMAP_IRQ_REG(int_name, register_position) \
+	REGMAP_IRQ_REG(int_name, register_position, int_name##_MASK)
+
+static struct regmap_irq tps65219_irqs[] = {
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_SCG, TPS65219_REG_INT_LDO_3_4_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_OC, TPS65219_REG_INT_LDO_3_4_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_UV, TPS65219_REG_INT_LDO_3_4_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_SCG, TPS65219_REG_INT_LDO_3_4_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_OC, TPS65219_REG_INT_LDO_3_4_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_UV, TPS65219_REG_INT_LDO_3_4_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_SCG, TPS65219_REG_INT_LDO_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_OC, TPS65219_REG_INT_LDO_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_UV, TPS65219_REG_INT_LDO_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_SCG, TPS65219_REG_INT_LDO_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_OC, TPS65219_REG_INT_LDO_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_UV, TPS65219_REG_INT_LDO_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_SCG, TPS65219_REG_INT_BUCK_3_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_OC, TPS65219_REG_INT_BUCK_3_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_NEG_OC, TPS65219_REG_INT_BUCK_3_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_UV, TPS65219_REG_INT_BUCK_3_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_SCG, TPS65219_REG_INT_BUCK_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_OC, TPS65219_REG_INT_BUCK_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_NEG_OC, TPS65219_REG_INT_BUCK_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_UV, TPS65219_REG_INT_BUCK_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_SCG, TPS65219_REG_INT_BUCK_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_OC, TPS65219_REG_INT_BUCK_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_NEG_OC, TPS65219_REG_INT_BUCK_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_UV, TPS65219_REG_INT_BUCK_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_3_WARM, TPS65219_REG_INT_SYS_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_2_WARM, TPS65219_REG_INT_SYS_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_1_WARM, TPS65219_REG_INT_SYS_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_0_WARM, TPS65219_REG_INT_SYS_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_3_HOT, TPS65219_REG_INT_SYS_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_2_HOT, TPS65219_REG_INT_SYS_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_1_HOT, TPS65219_REG_INT_SYS_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_0_HOT, TPS65219_REG_INT_SYS_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_RV, TPS65219_REG_INT_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_RV, TPS65219_REG_INT_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_RV, TPS65219_REG_INT_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_RV, TPS65219_REG_INT_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_RV, TPS65219_REG_INT_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_RV, TPS65219_REG_INT_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_RV, TPS65219_REG_INT_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_RV_SD, TPS65219_REG_INT_TO_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_RV_SD, TPS65219_REG_INT_TO_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_RV_SD, TPS65219_REG_INT_TO_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_RV_SD, TPS65219_REG_INT_TO_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_RV_SD, TPS65219_REG_INT_TO_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_RV_SD, TPS65219_REG_INT_TO_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_RV_SD, TPS65219_REG_INT_TO_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_TIMEOUT, TPS65219_REG_INT_TO_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_PB_FALLING_EDGE_DETECT, TPS65219_REG_INT_PB_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_PB_RISING_EDGE_DETECT, TPS65219_REG_INT_PB_POS),
+};
+
+static struct regmap_irq_chip tps65219_irq_chip = {
+	.name = "tps65219_irq",
+	.main_status = TPS65219_REG_INT_SOURCE,
+	.num_main_regs = 1,
+	.num_main_status_bits = 8,
+	.irqs = tps65219_irqs,
+	.num_irqs = ARRAY_SIZE(tps65219_irqs),
+	.status_base = TPS65219_REG_INT_LDO_3_4,
+	.ack_base = TPS65219_REG_INT_LDO_3_4,
+	.clear_ack = 1,
+	.num_regs = 8,
+	.sub_reg_offsets = tps65219_sub_irq_offsets,
+};
+
+static int tps65219_probe(struct i2c_client *client)
+{
+	struct tps65219 *tps;
+	unsigned int chipid;
+	bool pwr_button;
+	int ret;
+
+	tps = devm_kzalloc(&client->dev, sizeof(*tps), GFP_KERNEL);
+	if (!tps)
+		return -ENOMEM;
+
+	i2c_set_clientdata(client, tps);
+
+	tps->dev = &client->dev;
+
+	tps->regmap = devm_regmap_init_i2c(client, &tps65219_regmap_config);
+	if (IS_ERR(tps->regmap)) {
+		ret = PTR_ERR(tps->regmap);
+		dev_err(tps->dev, "Failed to allocate register map: %d\n", ret);
+		return ret;
+	}
+
+	ret = devm_regmap_add_irq_chip(&client->dev, tps->regmap, client->irq,
+				       IRQF_ONESHOT, 0, &tps65219_irq_chip,
+				       &tps->irq_data);
+	if (ret)
+		return ret;
+
+	ret = regmap_read(tps->regmap, TPS65219_REG_TI_DEV_ID, &chipid);
+	if (ret) {
+		dev_err(tps->dev, "Failed to read device ID: %d\n", ret);
+		return ret;
+	}
+
+	ret = devm_mfd_add_devices(tps->dev, PLATFORM_DEVID_AUTO,
+				   tps65219_cells, ARRAY_SIZE(tps65219_cells),
+				   NULL, 0, regmap_irq_get_domain(tps->irq_data));
+	if (ret) {
+		dev_err(tps->dev, "Failed to add child devices: %d\n", ret);
+		return ret;
+	}
+
+	pwr_button = of_property_read_bool(tps->dev->of_node, "ti,power-button");
+	if (pwr_button) {
+		ret = devm_mfd_add_devices(tps->dev, PLATFORM_DEVID_AUTO,
+					   &tps65219_pwrbutton_cell, 1, NULL, 0,
+					   regmap_irq_get_domain(tps->irq_data));
+		if (ret) {
+			dev_err(tps->dev, "Failed to add power-button: %d\n", ret);
+			return ret;
+		}
+	}
+
+	tps->nb = pmic_rst_restart_nb;
+	ret = register_restart_handler(&tps->nb);
+	if (ret) {
+		dev_err(tps->dev, "cannot register restart handler, %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
+static const struct of_device_id of_tps65219_match_table[] = {
+	{ .compatible = "ti,tps65219", },
+	{}
+};
+MODULE_DEVICE_TABLE(of, of_tps65219_match_table);
+
+static struct i2c_driver tps65219_driver = {
+	.driver		= {
+		.name	= "tps65219",
+		.of_match_table = of_tps65219_match_table,
+	},
+	.probe_new	= tps65219_probe,
+};
+module_i2c_driver(tps65219_driver);
+
+MODULE_AUTHOR("Jerome Neanne <jneanne@baylibre.com>");
+MODULE_DESCRIPTION("TPS65219 power management IC driver");
+MODULE_LICENSE("GPL");
diff --git a/include/linux/mfd/tps65219.h b/include/linux/mfd/tps65219.h
new file mode 100644
index 000000000000..2c1cf92e92ac
--- /dev/null
+++ b/include/linux/mfd/tps65219.h
@@ -0,0 +1,345 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Functions to access TPS65219 power management IC.
+ *
+ * Copyright (C) 2022 BayLibre Incorporated - https://www.baylibre.com/
+ */
+
+#ifndef MFD_TPS65219_H
+#define MFD_TPS65219_H
+
+#include <linux/bitops.h>
+#include <linux/notifier.h>
+#include <linux/regulator/driver.h>
+
+struct regmap;
+struct regmap_irq_chip_data;
+
+#define TPS65219_1V35					1350000
+#define TPS65219_1V8					1800000
+
+/* TPS chip id list */
+#define TPS65219					0xF0
+
+/* I2C ID for TPS65219 part */
+#define TPS65219_I2C_ID					0x24
+
+/* All register addresses */
+#define TPS65219_REG_TI_DEV_ID				0x00
+#define TPS65219_REG_NVM_ID				0x01
+#define TPS65219_REG_ENABLE_CTRL			0x02
+#define TPS65219_REG_BUCKS_CONFIG			0x03
+#define TPS65219_REG_LDO4_VOUT				0x04
+#define TPS65219_REG_LDO3_VOUT				0x05
+#define TPS65219_REG_LDO2_VOUT				0x06
+#define TPS65219_REG_LDO1_VOUT				0x07
+#define TPS65219_REG_BUCK3_VOUT				0x8
+#define TPS65219_REG_BUCK2_VOUT				0x9
+#define TPS65219_REG_BUCK1_VOUT				0xA
+#define TPS65219_REG_LDO4_SEQUENCE_SLOT			0xB
+#define TPS65219_REG_LDO3_SEQUENCE_SLOT			0xC
+#define TPS65219_REG_LDO2_SEQUENCE_SLOT			0xD
+#define TPS65219_REG_LDO1_SEQUENCE_SLOT			0xE
+#define TPS65219_REG_BUCK3_SEQUENCE_SLOT		0xF
+#define TPS65219_REG_BUCK2_SEQUENCE_SLOT		0x10
+#define TPS65219_REG_BUCK1_SEQUENCE_SLOT		0x11
+#define TPS65219_REG_nRST_SEQUENCE_SLOT			0x12
+#define TPS65219_REG_GPIO_SEQUENCE_SLOT			0x13
+#define TPS65219_REG_GPO2_SEQUENCE_SLOT			0x14
+#define TPS65219_REG_GPO1_SEQUENCE_SLOT			0x15
+#define TPS65219_REG_POWER_UP_SLOT_DURATION_1		0x16
+#define TPS65219_REG_POWER_UP_SLOT_DURATION_2		0x17
+#define TPS65219_REG_POWER_UP_SLOT_DURATION_3		0x18
+#define TPS65219_REG_POWER_UP_SLOT_DURATION_4		0x19
+#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_1		0x1A
+#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_2		0x1B
+#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_3		0x1C
+#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_4		0x1D
+#define TPS65219_REG_GENERAL_CONFIG			0x1E
+#define TPS65219_REG_MFP_1_CONFIG			0x1F
+#define TPS65219_REG_MFP_2_CONFIG			0x20
+#define TPS65219_REG_STBY_1_CONFIG			0x21
+#define TPS65219_REG_STBY_2_CONFIG			0x22
+#define TPS65219_REG_OC_DEGL_CONFIG			0x23
+/* 'sub irq' MASK registers */
+#define TPS65219_REG_INT_MASK_UV			0x24
+#define TPS65219_REG_MASK_CONFIG			0x25
+
+#define TPS65219_REG_I2C_ADDRESS_REG			0x26
+#define TPS65219_REG_USER_GENERAL_NVM_STORAGE		0x27
+#define TPS65219_REG_MANUFACTURING_VER			0x28
+#define TPS65219_REG_MFP_CTRL				0x29
+#define TPS65219_REG_DISCHARGE_CONFIG			0x2A
+/* main irq registers */
+#define TPS65219_REG_INT_SOURCE				0x2B
+/* 'sub irq' registers */
+#define TPS65219_REG_INT_LDO_3_4			0x2C
+#define TPS65219_REG_INT_LDO_1_2			0x2D
+#define TPS65219_REG_INT_BUCK_3				0x2E
+#define TPS65219_REG_INT_BUCK_1_2			0x2F
+#define TPS65219_REG_INT_SYSTEM				0x30
+#define TPS65219_REG_INT_RV				0x31
+#define TPS65219_REG_INT_TIMEOUT_RV_SD			0x32
+#define TPS65219_REG_INT_PB				0x33
+
+#define TPS65219_REG_INT_LDO_3_4_POS			0
+#define TPS65219_REG_INT_LDO_1_2_POS			1
+#define TPS65219_REG_INT_BUCK_3_POS			2
+#define TPS65219_REG_INT_BUCK_1_2_POS			3
+#define TPS65219_REG_INT_SYS_POS			4
+#define TPS65219_REG_INT_RV_POS				5
+#define TPS65219_REG_INT_TO_RV_POS			6
+#define TPS65219_REG_INT_PB_POS				7
+
+#define TPS65219_REG_USER_NVM_CMD			0x34
+#define TPS65219_REG_POWER_UP_STATUS			0x35
+#define TPS65219_REG_SPARE_2				0x36
+#define TPS65219_REG_SPARE_3				0x37
+#define TPS65219_REG_FACTORY_CONFIG_2			0x41
+
+/* Register field definitions */
+#define TPS65219_DEVID_REV_MASK				GENMASK(7, 0)
+#define TPS65219_BUCKS_LDOS_VOUT_VSET_MASK		GENMASK(5, 0)
+#define TPS65219_BUCKS_UV_THR_SEL_MASK			BIT(6)
+#define TPS65219_BUCKS_BW_SEL_MASK			BIT(7)
+#define LDO_BYP_SHIFT					6
+#define TPS65219_LDOS_BYP_CONFIG_MASK			BIT(LDO_BYP_SHIFT)
+#define TPS65219_LDOS_LSW_CONFIG_MASK			BIT(7)
+/* Regulators enable control */
+#define TPS65219_ENABLE_BUCK1_EN_MASK			BIT(0)
+#define TPS65219_ENABLE_BUCK2_EN_MASK			BIT(1)
+#define TPS65219_ENABLE_BUCK3_EN_MASK			BIT(2)
+#define TPS65219_ENABLE_LDO1_EN_MASK			BIT(3)
+#define TPS65219_ENABLE_LDO2_EN_MASK			BIT(4)
+#define TPS65219_ENABLE_LDO3_EN_MASK			BIT(5)
+#define TPS65219_ENABLE_LDO4_EN_MASK			BIT(6)
+/* power ON-OFF sequence slot */
+#define TPS65219_BUCKS_LDOS_SEQUENCE_OFF_SLOT_MASK	GENMASK(3, 0)
+#define TPS65219_BUCKS_LDOS_SEQUENCE_ON_SLOT_MASK	GENMASK(7, 4)
+/* TODO: Not needed, same mapping as TPS65219_ENABLE_REGNAME_EN, factorize */
+#define TPS65219_STBY1_BUCK1_STBY_EN_MASK		BIT(0)
+#define TPS65219_STBY1_BUCK2_STBY_EN_MASK		BIT(1)
+#define TPS65219_STBY1_BUCK3_STBY_EN_MASK		BIT(2)
+#define TPS65219_STBY1_LDO1_STBY_EN_MASK		BIT(3)
+#define TPS65219_STBY1_LDO2_STBY_EN_MASK		BIT(4)
+#define TPS65219_STBY1_LDO3_STBY_EN_MASK		BIT(5)
+#define TPS65219_STBY1_LDO4_STBY_EN_MASK		BIT(6)
+/* STBY_2 config */
+#define TPS65219_STBY2_GPO1_STBY_EN_MASK		BIT(0)
+#define TPS65219_STBY2_GPO2_STBY_EN_MASK		BIT(1)
+#define TPS65219_STBY2_GPIO_STBY_EN_MASK		BIT(2)
+/* MFP Control */
+#define TPS65219_MFP_I2C_OFF_REQ_MASK			BIT(0)
+#define TPS65219_MFP_STBY_I2C_CTRL_MASK			BIT(1)
+#define TPS65219_MFP_COLD_RESET_I2C_CTRL_MASK		BIT(2)
+#define TPS65219_MFP_WARM_RESET_I2C_CTRL_MASK		BIT(3)
+#define TPS65219_MFP_GPIO_STATUS_MASK			BIT(4)
+/* MFP_1 Config */
+#define TPS65219_MFP_1_VSEL_DDR_SEL_MASK		BIT(0)
+#define TPS65219_MFP_1_VSEL_SD_POL_MASK			BIT(1)
+#define TPS65219_MFP_1_VSEL_RAIL_MASK			BIT(2)
+/* MFP_2 Config */
+#define TPS65219_MFP_2_MODE_STBY_MASK			GENMASK(1, 0)
+#define TPS65219_MFP_2_MODE_RESET_MASK			BIT(2)
+#define TPS65219_MFP_2_EN_PB_VSENSE_DEGL_MASK		BIT(3)
+#define TPS65219_MFP_2_EN_PB_VSENSE_MASK		GENMASK(5, 4)
+#define TPS65219_MFP_2_WARM_COLD_RESET_MASK		BIT(6)
+#define TPS65219_MFP_2_PU_ON_FSD_MASK			BIT(7)
+#define TPS65219_MFP_2_EN				0
+#define TPS65219_MFP_2_PB				BIT(4)
+#define TPS65219_MFP_2_VSENSE				BIT(5)
+/* MASK_UV Config */
+#define TPS65219_REG_MASK_UV_LDO1_UV_MASK		BIT(0)
+#define TPS65219_REG_MASK_UV_LDO2_UV_MASK		BIT(1)
+#define TPS65219_REG_MASK_UV_LDO3_UV_MASK		BIT(2)
+#define TPS65219_REG_MASK_UV_LDO4_UV_MASK		BIT(3)
+#define TPS65219_REG_MASK_UV_BUCK1_UV_MASK		BIT(4)
+#define TPS65219_REG_MASK_UV_BUCK2_UV_MASK		BIT(5)
+#define TPS65219_REG_MASK_UV_BUCK3_UV_MASK		BIT(6)
+#define TPS65219_REG_MASK_UV_RETRY_MASK			BIT(7)
+/* MASK Config */
+// SENSOR_N_WARM_MASK already defined in Thermal
+#define TPS65219_REG_MASK_INT_FOR_RV_MASK		BIT(4)
+#define TPS65219_REG_MASK_EFFECT_MASK			GENMASK(2, 1)
+#define TPS65219_REG_MASK_INT_FOR_PB_MASK		BIT(7)
+/* UnderVoltage - Short to GND - OverCurrent*/
+/* LDO3-4 */
+#define TPS65219_INT_LDO3_SCG_MASK			BIT(0)
+#define TPS65219_INT_LDO3_OC_MASK			BIT(1)
+#define TPS65219_INT_LDO3_UV_MASK			BIT(2)
+#define TPS65219_INT_LDO4_SCG_MASK			BIT(3)
+#define TPS65219_INT_LDO4_OC_MASK			BIT(4)
+#define TPS65219_INT_LDO4_UV_MASK			BIT(5)
+/* LDO1-2 */
+#define TPS65219_INT_LDO1_SCG_MASK			BIT(0)
+#define TPS65219_INT_LDO1_OC_MASK			BIT(1)
+#define TPS65219_INT_LDO1_UV_MASK			BIT(2)
+#define TPS65219_INT_LDO2_SCG_MASK			BIT(3)
+#define TPS65219_INT_LDO2_OC_MASK			BIT(4)
+#define TPS65219_INT_LDO2_UV_MASK			BIT(5)
+/* BUCK3 */
+#define TPS65219_INT_BUCK3_SCG_MASK			BIT(0)
+#define TPS65219_INT_BUCK3_OC_MASK			BIT(1)
+#define TPS65219_INT_BUCK3_NEG_OC_MASK			BIT(2)
+#define TPS65219_INT_BUCK3_UV_MASK			BIT(3)
+/* BUCK1-2 */
+#define TPS65219_INT_BUCK1_SCG_MASK			BIT(0)
+#define TPS65219_INT_BUCK1_OC_MASK			BIT(1)
+#define TPS65219_INT_BUCK1_NEG_OC_MASK			BIT(2)
+#define TPS65219_INT_BUCK1_UV_MASK			BIT(3)
+#define TPS65219_INT_BUCK2_SCG_MASK			BIT(4)
+#define TPS65219_INT_BUCK2_OC_MASK			BIT(5)
+#define TPS65219_INT_BUCK2_NEG_OC_MASK			BIT(6)
+#define TPS65219_INT_BUCK2_UV_MASK			BIT(7)
+/* Thermal Sensor  */
+#define TPS65219_INT_SENSOR_3_WARM_MASK			BIT(0)
+#define TPS65219_INT_SENSOR_2_WARM_MASK			BIT(1)
+#define TPS65219_INT_SENSOR_1_WARM_MASK			BIT(2)
+#define TPS65219_INT_SENSOR_0_WARM_MASK			BIT(3)
+#define TPS65219_INT_SENSOR_3_HOT_MASK			BIT(4)
+#define TPS65219_INT_SENSOR_2_HOT_MASK			BIT(5)
+#define TPS65219_INT_SENSOR_1_HOT_MASK			BIT(6)
+#define TPS65219_INT_SENSOR_0_HOT_MASK			BIT(7)
+/* Residual Voltage */
+#define TPS65219_INT_BUCK1_RV_MASK			BIT(0)
+#define TPS65219_INT_BUCK2_RV_MASK			BIT(1)
+#define TPS65219_INT_BUCK3_RV_MASK			BIT(2)
+#define TPS65219_INT_LDO1_RV_MASK			BIT(3)
+#define TPS65219_INT_LDO2_RV_MASK			BIT(4)
+#define TPS65219_INT_LDO3_RV_MASK			BIT(5)
+#define TPS65219_INT_LDO4_RV_MASK			BIT(6)
+/* Residual Voltage ShutDown */
+#define TPS65219_INT_BUCK1_RV_SD_MASK			BIT(0)
+#define TPS65219_INT_BUCK2_RV_SD_MASK			BIT(1)
+#define TPS65219_INT_BUCK3_RV_SD_MASK			BIT(2)
+#define TPS65219_INT_LDO1_RV_SD_MASK			BIT(3)
+#define TPS65219_INT_LDO2_RV_SD_MASK			BIT(4)
+#define TPS65219_INT_LDO3_RV_SD_MASK			BIT(5)
+#define TPS65219_INT_LDO4_RV_SD_MASK			BIT(6)
+#define TPS65219_INT_TIMEOUT_MASK			BIT(7)
+/* Power Button */
+#define TPS65219_INT_PB_FALLING_EDGE_DETECT_MASK	BIT(0)
+#define TPS65219_INT_PB_RISING_EDGE_DETECT_MASK		BIT(1)
+#define TPS65219_INT_PB_REAL_TIME_STATUS_MASK		BIT(2)
+
+#define TPS65219_PB_POS					7
+#define TPS65219_TO_RV_POS				6
+#define TPS65219_RV_POS					5
+#define TPS65219_SYS_POS				4
+#define TPS65219_BUCK_1_2_POS				3
+#define TPS65219_BUCK_3_POS				2
+#define TPS65219_LDO_1_2_POS				1
+#define TPS65219_LDO_3_4_POS				0
+
+/* IRQs */
+enum {
+	/* LDO3-4 register IRQs */
+	TPS65219_INT_LDO3_SCG,
+	TPS65219_INT_LDO3_OC,
+	TPS65219_INT_LDO3_UV,
+	TPS65219_INT_LDO4_SCG,
+	TPS65219_INT_LDO4_OC,
+	TPS65219_INT_LDO4_UV,
+	/* LDO1-2 */
+	TPS65219_INT_LDO1_SCG,
+	TPS65219_INT_LDO1_OC,
+	TPS65219_INT_LDO1_UV,
+	TPS65219_INT_LDO2_SCG,
+	TPS65219_INT_LDO2_OC,
+	TPS65219_INT_LDO2_UV,
+	/* BUCK3 */
+	TPS65219_INT_BUCK3_SCG,
+	TPS65219_INT_BUCK3_OC,
+	TPS65219_INT_BUCK3_NEG_OC,
+	TPS65219_INT_BUCK3_UV,
+	/* BUCK1-2 */
+	TPS65219_INT_BUCK1_SCG,
+	TPS65219_INT_BUCK1_OC,
+	TPS65219_INT_BUCK1_NEG_OC,
+	TPS65219_INT_BUCK1_UV,
+	TPS65219_INT_BUCK2_SCG,
+	TPS65219_INT_BUCK2_OC,
+	TPS65219_INT_BUCK2_NEG_OC,
+	TPS65219_INT_BUCK2_UV,
+	/* Thermal Sensor  */
+	TPS65219_INT_SENSOR_3_WARM,
+	TPS65219_INT_SENSOR_2_WARM,
+	TPS65219_INT_SENSOR_1_WARM,
+	TPS65219_INT_SENSOR_0_WARM,
+	TPS65219_INT_SENSOR_3_HOT,
+	TPS65219_INT_SENSOR_2_HOT,
+	TPS65219_INT_SENSOR_1_HOT,
+	TPS65219_INT_SENSOR_0_HOT,
+	/* Residual Voltage */
+	TPS65219_INT_BUCK1_RV,
+	TPS65219_INT_BUCK2_RV,
+	TPS65219_INT_BUCK3_RV,
+	TPS65219_INT_LDO1_RV,
+	TPS65219_INT_LDO2_RV,
+	TPS65219_INT_LDO3_RV,
+	TPS65219_INT_LDO4_RV,
+	/* Residual Voltage ShutDown */
+	TPS65219_INT_BUCK1_RV_SD,
+	TPS65219_INT_BUCK2_RV_SD,
+	TPS65219_INT_BUCK3_RV_SD,
+	TPS65219_INT_LDO1_RV_SD,
+	TPS65219_INT_LDO2_RV_SD,
+	TPS65219_INT_LDO3_RV_SD,
+	TPS65219_INT_LDO4_RV_SD,
+	TPS65219_INT_TIMEOUT,
+	/* Power Button */
+	TPS65219_INT_PB_FALLING_EDGE_DETECT,
+	TPS65219_INT_PB_RISING_EDGE_DETECT,
+};
+
+enum tps65219_regulator_id {
+	/* DCDC's */
+	TPS65219_BUCK_1,
+	TPS65219_BUCK_2,
+	TPS65219_BUCK_3,
+	/* LDOs */
+	TPS65219_LDO_1,
+	TPS65219_LDO_2,
+	TPS65219_LDO_3,
+	TPS65219_LDO_4,
+};
+
+/* Number of step-down converters available */
+#define TPS65219_NUM_DCDC		3
+/* Number of LDO voltage regulators available */
+#define TPS65219_NUM_LDO		4
+/* Number of total regulators available */
+#define TPS65219_NUM_REGULATOR		(TPS65219_NUM_DCDC + TPS65219_NUM_LDO)
+
+/* Define the TPS65219 IRQ numbers */
+enum tps65219_irqs {
+	/* INT source registers */
+	TPS65219_TO_RV_SD_SET_IRQ,
+	TPS65219_RV_SET_IRQ,
+	TPS65219_SYS_SET_IRQ,
+	TPS65219_BUCK_1_2_SET_IRQ,
+	TPS65219_BUCK_3_SET_IRQ,
+	TPS65219_LDO_1_2_SET_IRQ,
+	TPS65219_LDO_3_4_SET_IRQ,
+	TPS65219_PB_SET_IRQ,
+};
+
+/**
+ * struct tps65219 - tps65219 sub-driver chip access routines
+ *
+ * Device data may be used to access the TPS65219 chip
+ *
+ * @dev MFD device
+ * @regmap Regmap for accessing the device registers
+ * @irq_data Regmap irq data used for the irq chip
+ * @nb notifier block for the restart handler
+ */
+struct tps65219 {
+	struct device *dev;
+	struct regmap *regmap;
+
+	struct regmap_irq_chip_data *irq_data;
+	struct notifier_block nb;
+};
+
+#endif /*  MFD_TPS65219_H */
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
@ 2022-10-11 14:05   ` Jerome Neanne
  0 siblings, 0 replies; 50+ messages in thread
From: Jerome Neanne @ 2022-10-11 14:05 UTC (permalink / raw)
  To: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, lee, tony,
	vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, jneanne, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

The TPS65219 is a power management IC PMIC designed to supply a wide
range of SoCs in both portable and stationary applications. Any SoC can
control TPS65219 over a standard I2C interface.

It contains the following components:
- Regulators.
- Over Temperature warning and Shut down.
- GPIOs
- Multi Function Pins (MFP)
- power-button

This patch adds support for tps65219 PMIC. At this time only
the functionalities listed below are made available:

- Regulators probe and functionalities
- warm and cold reset support
- SW shutdown support
- Regulator warnings via IRQs
- Power-button via IRQ

Signed-off-by: Jerome Neanne <jneanne@baylibre.com>
Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
---
 MAINTAINERS                  |   1 +
 drivers/mfd/Kconfig          |  14 ++
 drivers/mfd/Makefile         |   1 +
 drivers/mfd/tps65219.c       | 320 ++++++++++++++++++++++++++++++++
 include/linux/mfd/tps65219.h | 345 +++++++++++++++++++++++++++++++++++
 5 files changed, 681 insertions(+)
 create mode 100644 drivers/mfd/tps65219.c
 create mode 100644 include/linux/mfd/tps65219.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 14edacfeb1d4..f89e77959536 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -14931,6 +14931,7 @@ F:	drivers/mfd/menelaus.c
 F:	drivers/mfd/palmas.c
 F:	drivers/mfd/tps65217.c
 F:	drivers/mfd/tps65218.c
+F:	drivers/mfd/tps65219.c
 F:	drivers/mfd/tps65910.c
 F:	drivers/mfd/twl-core.[ch]
 F:	drivers/mfd/twl4030*.c
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index abb58ab1a1a4..1a846c7dd0c2 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -1576,6 +1576,20 @@ config MFD_TPS65218
 	  This driver can also be built as a module.  If so, the module
 	  will be called tps65218.
 
+config MFD_TPS65219
+	tristate "TI TPS65219 Power Management IC"
+	depends on I2C && OF
+	select MFD_CORE
+	select REGMAP_I2C
+	select REGMAP_IRQ
+	help
+	  If you say yes here you get support for the TPS65219 series of Power
+	  Management ICs. These include voltage regulators, GPIOs and
+	  push/power button that are often used in portable devices.
+
+	  This driver can also be built as a module. If so, the module
+	  will be called tps65219.
+
 config MFD_TPS6586X
 	bool "TI TPS6586x Power Management chips"
 	depends on I2C=y
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 858cacf659d6..a8ff3d6ea3ab 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -101,6 +101,7 @@ obj-$(CONFIG_TPS6507X)		+= tps6507x.o
 obj-$(CONFIG_MFD_TPS65086)	+= tps65086.o
 obj-$(CONFIG_MFD_TPS65217)	+= tps65217.o
 obj-$(CONFIG_MFD_TPS65218)	+= tps65218.o
+obj-$(CONFIG_MFD_TPS65219)	+= tps65219.o
 obj-$(CONFIG_MFD_TPS65910)	+= tps65910.o
 obj-$(CONFIG_MFD_TPS65912)	+= tps65912-core.o
 obj-$(CONFIG_MFD_TPS65912_I2C)	+= tps65912-i2c.o
diff --git a/drivers/mfd/tps65219.c b/drivers/mfd/tps65219.c
new file mode 100644
index 000000000000..c1638483e069
--- /dev/null
+++ b/drivers/mfd/tps65219.c
@@ -0,0 +1,320 @@
+// SPDX-License-Identifier: GPL-2.0
+//
+// Driver for TPS65219 Integrated Power Management Integrated Chips (PMIC)
+//
+// Copyright (C) 2022 BayLibre Incorporated - https://www.baylibre.com/
+
+#include <linux/device.h>
+#include <linux/err.h>
+#include <linux/i2c.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
+#include <linux/irq.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/reboot.h>
+#include <linux/regmap.h>
+#include <linux/slab.h>
+
+#include <linux/mfd/core.h>
+#include <linux/mfd/tps65219.h>
+
+static int tps65219_warm_reset(struct tps65219 *tps)
+{
+	return regmap_update_bits(tps->regmap, TPS65219_REG_MFP_CTRL,
+				  TPS65219_MFP_WARM_RESET_I2C_CTRL_MASK,
+				  TPS65219_MFP_WARM_RESET_I2C_CTRL_MASK);
+}
+
+static int tps65219_cold_reset(struct tps65219 *tps)
+{
+	return regmap_update_bits(tps->regmap, TPS65219_REG_MFP_CTRL,
+				  TPS65219_MFP_COLD_RESET_I2C_CTRL_MASK,
+				  TPS65219_MFP_COLD_RESET_I2C_CTRL_MASK);
+}
+
+static int tps65219_soft_shutdown(struct tps65219 *tps)
+{
+	return regmap_update_bits(tps->regmap, TPS65219_REG_MFP_CTRL,
+				  TPS65219_MFP_I2C_OFF_REQ_MASK,
+				  TPS65219_MFP_I2C_OFF_REQ_MASK);
+}
+
+static int tps65219_restart(struct notifier_block *this,
+			    unsigned long reboot_mode, void *cmd)
+{
+	struct tps65219 *tps;
+
+	tps = container_of(this, struct tps65219, nb);
+	if (!tps) {
+		pr_err("tps65219: Restarting failed because the pointer to tps65219 is invalid\n");
+		return -ENODEV;
+	}
+	if (reboot_mode == REBOOT_WARM)
+		tps65219_warm_reset(tps);
+	else
+		tps65219_cold_reset(tps);
+	return NOTIFY_DONE;
+}
+
+static struct notifier_block pmic_rst_restart_nb = {
+	.notifier_call = tps65219_restart,
+	.priority = 200,
+};
+
+static const struct resource tps65219_pwrbutton_resources[] = {
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_PB_FALLING_EDGE_DETECT, "falling"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_PB_RISING_EDGE_DETECT, "rising"),
+};
+
+static const struct resource tps65219_regulator_resources[] = {
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_SCG, "LDO3_SCG"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_OC, "LDO3_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_UV, "LDO3_UV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_SCG, "LDO4_SCG"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_OC, "LDO4_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_UV, "LDO4_UV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_SCG, "LDO1_SCG"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_OC, "LDO1_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_UV, "LDO1_UV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_SCG, "LDO2_SCG"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_OC, "LDO2_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_UV, "LDO2_UV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_SCG, "BUCK3_SCG"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_OC, "BUCK3_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_NEG_OC, "BUCK3_NEG_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_UV, "BUCK3_UV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_SCG, "BUCK1_SCG"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_OC, "BUCK1_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_NEG_OC, "BUCK1_NEG_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_UV, "BUCK1_UV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_SCG, "BUCK2_SCG"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_OC, "BUCK2_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_NEG_OC, "BUCK2_NEG_OC"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_UV, "BUCK2_UV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_RV, "BUCK1_RV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_RV, "BUCK2_RV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_RV, "BUCK3_RV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_RV, "LDO1_RV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_RV, "LDO2_RV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_RV, "LDO3_RV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_RV, "LDO4_RV"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_RV_SD, "BUCK1_RV_SD"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_RV_SD, "BUCK2_RV_SD"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_RV_SD, "BUCK3_RV_SD"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_RV_SD, "LDO1_RV_SD"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_RV_SD, "LDO2_RV_SD"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_RV_SD, "LDO3_RV_SD"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_RV_SD, "LDO4_RV_SD"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_TIMEOUT, "TIMEOUT"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_3_WARM, "SENSOR_3_WARM"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_2_WARM, "SENSOR_2_WARM"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_1_WARM, "SENSOR_1_WARM"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_0_WARM, "SENSOR_0_WARM"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_3_HOT, "SENSOR_3_HOT"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_2_HOT, "SENSOR_2_HOT"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_1_HOT, "SENSOR_1_HOT"),
+	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_0_HOT, "SENSOR_0_HOT"),
+};
+
+static const struct mfd_cell tps65219_cells[] = {
+	{
+		.name = "tps65219-regulator",
+		.resources = tps65219_regulator_resources,
+		.num_resources = ARRAY_SIZE(tps65219_regulator_resources),
+	}, {
+		.name = "tps65219-gpios",
+	},
+};
+
+static const struct mfd_cell tps65219_pwrbutton_cell = {
+	.name = "tps65219-pwrbutton",
+	.resources = tps65219_pwrbutton_resources,
+	.num_resources = ARRAY_SIZE(tps65219_pwrbutton_resources),
+};
+
+static const struct regmap_config tps65219_regmap_config = {
+	.reg_bits = 8,
+	.val_bits = 8,
+	.max_register = TPS65219_REG_FACTORY_CONFIG_2,
+};
+
+/*
+ * Mapping of main IRQ register bits to sub-IRQ register offsets so that we can
+ * access corect sub-IRQ registers based on bits that are set in main IRQ
+ * register.
+ */
+/* Timeout Residual Voltage Shutdown */
+static unsigned int bit0_offsets[] = { TPS65219_REG_INT_TO_RV_POS };
+static unsigned int bit1_offsets[] = { TPS65219_REG_INT_RV_POS };	/* Residual Voltage */
+static unsigned int bit2_offsets[] = { TPS65219_REG_INT_SYS_POS };	/* System */
+static unsigned int bit3_offsets[] = { TPS65219_REG_INT_BUCK_1_2_POS };	/* Buck 1-2 */
+static unsigned int bit4_offsets[] = { TPS65219_REG_INT_BUCK_3_POS };	/* Buck 3 */
+static unsigned int bit5_offsets[] = { TPS65219_REG_INT_LDO_1_2_POS };	/* LDO 1-2 */
+static unsigned int bit6_offsets[] = { TPS65219_REG_INT_LDO_3_4_POS };	/* LDO 3-4 */
+static unsigned int bit7_offsets[] = { TPS65219_REG_INT_PB_POS };	/* Power Button */
+
+static struct regmap_irq_sub_irq_map tps65219_sub_irq_offsets[] = {
+	REGMAP_IRQ_MAIN_REG_OFFSET(bit0_offsets),
+	REGMAP_IRQ_MAIN_REG_OFFSET(bit1_offsets),
+	REGMAP_IRQ_MAIN_REG_OFFSET(bit2_offsets),
+	REGMAP_IRQ_MAIN_REG_OFFSET(bit3_offsets),
+	REGMAP_IRQ_MAIN_REG_OFFSET(bit4_offsets),
+	REGMAP_IRQ_MAIN_REG_OFFSET(bit5_offsets),
+	REGMAP_IRQ_MAIN_REG_OFFSET(bit6_offsets),
+	REGMAP_IRQ_MAIN_REG_OFFSET(bit7_offsets),
+};
+
+#define TPS65219_REGMAP_IRQ_REG(int_name, register_position) \
+	REGMAP_IRQ_REG(int_name, register_position, int_name##_MASK)
+
+static struct regmap_irq tps65219_irqs[] = {
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_SCG, TPS65219_REG_INT_LDO_3_4_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_OC, TPS65219_REG_INT_LDO_3_4_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_UV, TPS65219_REG_INT_LDO_3_4_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_SCG, TPS65219_REG_INT_LDO_3_4_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_OC, TPS65219_REG_INT_LDO_3_4_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_UV, TPS65219_REG_INT_LDO_3_4_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_SCG, TPS65219_REG_INT_LDO_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_OC, TPS65219_REG_INT_LDO_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_UV, TPS65219_REG_INT_LDO_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_SCG, TPS65219_REG_INT_LDO_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_OC, TPS65219_REG_INT_LDO_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_UV, TPS65219_REG_INT_LDO_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_SCG, TPS65219_REG_INT_BUCK_3_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_OC, TPS65219_REG_INT_BUCK_3_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_NEG_OC, TPS65219_REG_INT_BUCK_3_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_UV, TPS65219_REG_INT_BUCK_3_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_SCG, TPS65219_REG_INT_BUCK_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_OC, TPS65219_REG_INT_BUCK_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_NEG_OC, TPS65219_REG_INT_BUCK_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_UV, TPS65219_REG_INT_BUCK_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_SCG, TPS65219_REG_INT_BUCK_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_OC, TPS65219_REG_INT_BUCK_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_NEG_OC, TPS65219_REG_INT_BUCK_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_UV, TPS65219_REG_INT_BUCK_1_2_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_3_WARM, TPS65219_REG_INT_SYS_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_2_WARM, TPS65219_REG_INT_SYS_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_1_WARM, TPS65219_REG_INT_SYS_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_0_WARM, TPS65219_REG_INT_SYS_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_3_HOT, TPS65219_REG_INT_SYS_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_2_HOT, TPS65219_REG_INT_SYS_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_1_HOT, TPS65219_REG_INT_SYS_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_0_HOT, TPS65219_REG_INT_SYS_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_RV, TPS65219_REG_INT_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_RV, TPS65219_REG_INT_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_RV, TPS65219_REG_INT_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_RV, TPS65219_REG_INT_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_RV, TPS65219_REG_INT_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_RV, TPS65219_REG_INT_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_RV, TPS65219_REG_INT_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_RV_SD, TPS65219_REG_INT_TO_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_RV_SD, TPS65219_REG_INT_TO_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_RV_SD, TPS65219_REG_INT_TO_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_RV_SD, TPS65219_REG_INT_TO_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_RV_SD, TPS65219_REG_INT_TO_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_RV_SD, TPS65219_REG_INT_TO_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_RV_SD, TPS65219_REG_INT_TO_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_TIMEOUT, TPS65219_REG_INT_TO_RV_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_PB_FALLING_EDGE_DETECT, TPS65219_REG_INT_PB_POS),
+	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_PB_RISING_EDGE_DETECT, TPS65219_REG_INT_PB_POS),
+};
+
+static struct regmap_irq_chip tps65219_irq_chip = {
+	.name = "tps65219_irq",
+	.main_status = TPS65219_REG_INT_SOURCE,
+	.num_main_regs = 1,
+	.num_main_status_bits = 8,
+	.irqs = tps65219_irqs,
+	.num_irqs = ARRAY_SIZE(tps65219_irqs),
+	.status_base = TPS65219_REG_INT_LDO_3_4,
+	.ack_base = TPS65219_REG_INT_LDO_3_4,
+	.clear_ack = 1,
+	.num_regs = 8,
+	.sub_reg_offsets = tps65219_sub_irq_offsets,
+};
+
+static int tps65219_probe(struct i2c_client *client)
+{
+	struct tps65219 *tps;
+	unsigned int chipid;
+	bool pwr_button;
+	int ret;
+
+	tps = devm_kzalloc(&client->dev, sizeof(*tps), GFP_KERNEL);
+	if (!tps)
+		return -ENOMEM;
+
+	i2c_set_clientdata(client, tps);
+
+	tps->dev = &client->dev;
+
+	tps->regmap = devm_regmap_init_i2c(client, &tps65219_regmap_config);
+	if (IS_ERR(tps->regmap)) {
+		ret = PTR_ERR(tps->regmap);
+		dev_err(tps->dev, "Failed to allocate register map: %d\n", ret);
+		return ret;
+	}
+
+	ret = devm_regmap_add_irq_chip(&client->dev, tps->regmap, client->irq,
+				       IRQF_ONESHOT, 0, &tps65219_irq_chip,
+				       &tps->irq_data);
+	if (ret)
+		return ret;
+
+	ret = regmap_read(tps->regmap, TPS65219_REG_TI_DEV_ID, &chipid);
+	if (ret) {
+		dev_err(tps->dev, "Failed to read device ID: %d\n", ret);
+		return ret;
+	}
+
+	ret = devm_mfd_add_devices(tps->dev, PLATFORM_DEVID_AUTO,
+				   tps65219_cells, ARRAY_SIZE(tps65219_cells),
+				   NULL, 0, regmap_irq_get_domain(tps->irq_data));
+	if (ret) {
+		dev_err(tps->dev, "Failed to add child devices: %d\n", ret);
+		return ret;
+	}
+
+	pwr_button = of_property_read_bool(tps->dev->of_node, "ti,power-button");
+	if (pwr_button) {
+		ret = devm_mfd_add_devices(tps->dev, PLATFORM_DEVID_AUTO,
+					   &tps65219_pwrbutton_cell, 1, NULL, 0,
+					   regmap_irq_get_domain(tps->irq_data));
+		if (ret) {
+			dev_err(tps->dev, "Failed to add power-button: %d\n", ret);
+			return ret;
+		}
+	}
+
+	tps->nb = pmic_rst_restart_nb;
+	ret = register_restart_handler(&tps->nb);
+	if (ret) {
+		dev_err(tps->dev, "cannot register restart handler, %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
+static const struct of_device_id of_tps65219_match_table[] = {
+	{ .compatible = "ti,tps65219", },
+	{}
+};
+MODULE_DEVICE_TABLE(of, of_tps65219_match_table);
+
+static struct i2c_driver tps65219_driver = {
+	.driver		= {
+		.name	= "tps65219",
+		.of_match_table = of_tps65219_match_table,
+	},
+	.probe_new	= tps65219_probe,
+};
+module_i2c_driver(tps65219_driver);
+
+MODULE_AUTHOR("Jerome Neanne <jneanne@baylibre.com>");
+MODULE_DESCRIPTION("TPS65219 power management IC driver");
+MODULE_LICENSE("GPL");
diff --git a/include/linux/mfd/tps65219.h b/include/linux/mfd/tps65219.h
new file mode 100644
index 000000000000..2c1cf92e92ac
--- /dev/null
+++ b/include/linux/mfd/tps65219.h
@@ -0,0 +1,345 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Functions to access TPS65219 power management IC.
+ *
+ * Copyright (C) 2022 BayLibre Incorporated - https://www.baylibre.com/
+ */
+
+#ifndef MFD_TPS65219_H
+#define MFD_TPS65219_H
+
+#include <linux/bitops.h>
+#include <linux/notifier.h>
+#include <linux/regulator/driver.h>
+
+struct regmap;
+struct regmap_irq_chip_data;
+
+#define TPS65219_1V35					1350000
+#define TPS65219_1V8					1800000
+
+/* TPS chip id list */
+#define TPS65219					0xF0
+
+/* I2C ID for TPS65219 part */
+#define TPS65219_I2C_ID					0x24
+
+/* All register addresses */
+#define TPS65219_REG_TI_DEV_ID				0x00
+#define TPS65219_REG_NVM_ID				0x01
+#define TPS65219_REG_ENABLE_CTRL			0x02
+#define TPS65219_REG_BUCKS_CONFIG			0x03
+#define TPS65219_REG_LDO4_VOUT				0x04
+#define TPS65219_REG_LDO3_VOUT				0x05
+#define TPS65219_REG_LDO2_VOUT				0x06
+#define TPS65219_REG_LDO1_VOUT				0x07
+#define TPS65219_REG_BUCK3_VOUT				0x8
+#define TPS65219_REG_BUCK2_VOUT				0x9
+#define TPS65219_REG_BUCK1_VOUT				0xA
+#define TPS65219_REG_LDO4_SEQUENCE_SLOT			0xB
+#define TPS65219_REG_LDO3_SEQUENCE_SLOT			0xC
+#define TPS65219_REG_LDO2_SEQUENCE_SLOT			0xD
+#define TPS65219_REG_LDO1_SEQUENCE_SLOT			0xE
+#define TPS65219_REG_BUCK3_SEQUENCE_SLOT		0xF
+#define TPS65219_REG_BUCK2_SEQUENCE_SLOT		0x10
+#define TPS65219_REG_BUCK1_SEQUENCE_SLOT		0x11
+#define TPS65219_REG_nRST_SEQUENCE_SLOT			0x12
+#define TPS65219_REG_GPIO_SEQUENCE_SLOT			0x13
+#define TPS65219_REG_GPO2_SEQUENCE_SLOT			0x14
+#define TPS65219_REG_GPO1_SEQUENCE_SLOT			0x15
+#define TPS65219_REG_POWER_UP_SLOT_DURATION_1		0x16
+#define TPS65219_REG_POWER_UP_SLOT_DURATION_2		0x17
+#define TPS65219_REG_POWER_UP_SLOT_DURATION_3		0x18
+#define TPS65219_REG_POWER_UP_SLOT_DURATION_4		0x19
+#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_1		0x1A
+#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_2		0x1B
+#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_3		0x1C
+#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_4		0x1D
+#define TPS65219_REG_GENERAL_CONFIG			0x1E
+#define TPS65219_REG_MFP_1_CONFIG			0x1F
+#define TPS65219_REG_MFP_2_CONFIG			0x20
+#define TPS65219_REG_STBY_1_CONFIG			0x21
+#define TPS65219_REG_STBY_2_CONFIG			0x22
+#define TPS65219_REG_OC_DEGL_CONFIG			0x23
+/* 'sub irq' MASK registers */
+#define TPS65219_REG_INT_MASK_UV			0x24
+#define TPS65219_REG_MASK_CONFIG			0x25
+
+#define TPS65219_REG_I2C_ADDRESS_REG			0x26
+#define TPS65219_REG_USER_GENERAL_NVM_STORAGE		0x27
+#define TPS65219_REG_MANUFACTURING_VER			0x28
+#define TPS65219_REG_MFP_CTRL				0x29
+#define TPS65219_REG_DISCHARGE_CONFIG			0x2A
+/* main irq registers */
+#define TPS65219_REG_INT_SOURCE				0x2B
+/* 'sub irq' registers */
+#define TPS65219_REG_INT_LDO_3_4			0x2C
+#define TPS65219_REG_INT_LDO_1_2			0x2D
+#define TPS65219_REG_INT_BUCK_3				0x2E
+#define TPS65219_REG_INT_BUCK_1_2			0x2F
+#define TPS65219_REG_INT_SYSTEM				0x30
+#define TPS65219_REG_INT_RV				0x31
+#define TPS65219_REG_INT_TIMEOUT_RV_SD			0x32
+#define TPS65219_REG_INT_PB				0x33
+
+#define TPS65219_REG_INT_LDO_3_4_POS			0
+#define TPS65219_REG_INT_LDO_1_2_POS			1
+#define TPS65219_REG_INT_BUCK_3_POS			2
+#define TPS65219_REG_INT_BUCK_1_2_POS			3
+#define TPS65219_REG_INT_SYS_POS			4
+#define TPS65219_REG_INT_RV_POS				5
+#define TPS65219_REG_INT_TO_RV_POS			6
+#define TPS65219_REG_INT_PB_POS				7
+
+#define TPS65219_REG_USER_NVM_CMD			0x34
+#define TPS65219_REG_POWER_UP_STATUS			0x35
+#define TPS65219_REG_SPARE_2				0x36
+#define TPS65219_REG_SPARE_3				0x37
+#define TPS65219_REG_FACTORY_CONFIG_2			0x41
+
+/* Register field definitions */
+#define TPS65219_DEVID_REV_MASK				GENMASK(7, 0)
+#define TPS65219_BUCKS_LDOS_VOUT_VSET_MASK		GENMASK(5, 0)
+#define TPS65219_BUCKS_UV_THR_SEL_MASK			BIT(6)
+#define TPS65219_BUCKS_BW_SEL_MASK			BIT(7)
+#define LDO_BYP_SHIFT					6
+#define TPS65219_LDOS_BYP_CONFIG_MASK			BIT(LDO_BYP_SHIFT)
+#define TPS65219_LDOS_LSW_CONFIG_MASK			BIT(7)
+/* Regulators enable control */
+#define TPS65219_ENABLE_BUCK1_EN_MASK			BIT(0)
+#define TPS65219_ENABLE_BUCK2_EN_MASK			BIT(1)
+#define TPS65219_ENABLE_BUCK3_EN_MASK			BIT(2)
+#define TPS65219_ENABLE_LDO1_EN_MASK			BIT(3)
+#define TPS65219_ENABLE_LDO2_EN_MASK			BIT(4)
+#define TPS65219_ENABLE_LDO3_EN_MASK			BIT(5)
+#define TPS65219_ENABLE_LDO4_EN_MASK			BIT(6)
+/* power ON-OFF sequence slot */
+#define TPS65219_BUCKS_LDOS_SEQUENCE_OFF_SLOT_MASK	GENMASK(3, 0)
+#define TPS65219_BUCKS_LDOS_SEQUENCE_ON_SLOT_MASK	GENMASK(7, 4)
+/* TODO: Not needed, same mapping as TPS65219_ENABLE_REGNAME_EN, factorize */
+#define TPS65219_STBY1_BUCK1_STBY_EN_MASK		BIT(0)
+#define TPS65219_STBY1_BUCK2_STBY_EN_MASK		BIT(1)
+#define TPS65219_STBY1_BUCK3_STBY_EN_MASK		BIT(2)
+#define TPS65219_STBY1_LDO1_STBY_EN_MASK		BIT(3)
+#define TPS65219_STBY1_LDO2_STBY_EN_MASK		BIT(4)
+#define TPS65219_STBY1_LDO3_STBY_EN_MASK		BIT(5)
+#define TPS65219_STBY1_LDO4_STBY_EN_MASK		BIT(6)
+/* STBY_2 config */
+#define TPS65219_STBY2_GPO1_STBY_EN_MASK		BIT(0)
+#define TPS65219_STBY2_GPO2_STBY_EN_MASK		BIT(1)
+#define TPS65219_STBY2_GPIO_STBY_EN_MASK		BIT(2)
+/* MFP Control */
+#define TPS65219_MFP_I2C_OFF_REQ_MASK			BIT(0)
+#define TPS65219_MFP_STBY_I2C_CTRL_MASK			BIT(1)
+#define TPS65219_MFP_COLD_RESET_I2C_CTRL_MASK		BIT(2)
+#define TPS65219_MFP_WARM_RESET_I2C_CTRL_MASK		BIT(3)
+#define TPS65219_MFP_GPIO_STATUS_MASK			BIT(4)
+/* MFP_1 Config */
+#define TPS65219_MFP_1_VSEL_DDR_SEL_MASK		BIT(0)
+#define TPS65219_MFP_1_VSEL_SD_POL_MASK			BIT(1)
+#define TPS65219_MFP_1_VSEL_RAIL_MASK			BIT(2)
+/* MFP_2 Config */
+#define TPS65219_MFP_2_MODE_STBY_MASK			GENMASK(1, 0)
+#define TPS65219_MFP_2_MODE_RESET_MASK			BIT(2)
+#define TPS65219_MFP_2_EN_PB_VSENSE_DEGL_MASK		BIT(3)
+#define TPS65219_MFP_2_EN_PB_VSENSE_MASK		GENMASK(5, 4)
+#define TPS65219_MFP_2_WARM_COLD_RESET_MASK		BIT(6)
+#define TPS65219_MFP_2_PU_ON_FSD_MASK			BIT(7)
+#define TPS65219_MFP_2_EN				0
+#define TPS65219_MFP_2_PB				BIT(4)
+#define TPS65219_MFP_2_VSENSE				BIT(5)
+/* MASK_UV Config */
+#define TPS65219_REG_MASK_UV_LDO1_UV_MASK		BIT(0)
+#define TPS65219_REG_MASK_UV_LDO2_UV_MASK		BIT(1)
+#define TPS65219_REG_MASK_UV_LDO3_UV_MASK		BIT(2)
+#define TPS65219_REG_MASK_UV_LDO4_UV_MASK		BIT(3)
+#define TPS65219_REG_MASK_UV_BUCK1_UV_MASK		BIT(4)
+#define TPS65219_REG_MASK_UV_BUCK2_UV_MASK		BIT(5)
+#define TPS65219_REG_MASK_UV_BUCK3_UV_MASK		BIT(6)
+#define TPS65219_REG_MASK_UV_RETRY_MASK			BIT(7)
+/* MASK Config */
+// SENSOR_N_WARM_MASK already defined in Thermal
+#define TPS65219_REG_MASK_INT_FOR_RV_MASK		BIT(4)
+#define TPS65219_REG_MASK_EFFECT_MASK			GENMASK(2, 1)
+#define TPS65219_REG_MASK_INT_FOR_PB_MASK		BIT(7)
+/* UnderVoltage - Short to GND - OverCurrent*/
+/* LDO3-4 */
+#define TPS65219_INT_LDO3_SCG_MASK			BIT(0)
+#define TPS65219_INT_LDO3_OC_MASK			BIT(1)
+#define TPS65219_INT_LDO3_UV_MASK			BIT(2)
+#define TPS65219_INT_LDO4_SCG_MASK			BIT(3)
+#define TPS65219_INT_LDO4_OC_MASK			BIT(4)
+#define TPS65219_INT_LDO4_UV_MASK			BIT(5)
+/* LDO1-2 */
+#define TPS65219_INT_LDO1_SCG_MASK			BIT(0)
+#define TPS65219_INT_LDO1_OC_MASK			BIT(1)
+#define TPS65219_INT_LDO1_UV_MASK			BIT(2)
+#define TPS65219_INT_LDO2_SCG_MASK			BIT(3)
+#define TPS65219_INT_LDO2_OC_MASK			BIT(4)
+#define TPS65219_INT_LDO2_UV_MASK			BIT(5)
+/* BUCK3 */
+#define TPS65219_INT_BUCK3_SCG_MASK			BIT(0)
+#define TPS65219_INT_BUCK3_OC_MASK			BIT(1)
+#define TPS65219_INT_BUCK3_NEG_OC_MASK			BIT(2)
+#define TPS65219_INT_BUCK3_UV_MASK			BIT(3)
+/* BUCK1-2 */
+#define TPS65219_INT_BUCK1_SCG_MASK			BIT(0)
+#define TPS65219_INT_BUCK1_OC_MASK			BIT(1)
+#define TPS65219_INT_BUCK1_NEG_OC_MASK			BIT(2)
+#define TPS65219_INT_BUCK1_UV_MASK			BIT(3)
+#define TPS65219_INT_BUCK2_SCG_MASK			BIT(4)
+#define TPS65219_INT_BUCK2_OC_MASK			BIT(5)
+#define TPS65219_INT_BUCK2_NEG_OC_MASK			BIT(6)
+#define TPS65219_INT_BUCK2_UV_MASK			BIT(7)
+/* Thermal Sensor  */
+#define TPS65219_INT_SENSOR_3_WARM_MASK			BIT(0)
+#define TPS65219_INT_SENSOR_2_WARM_MASK			BIT(1)
+#define TPS65219_INT_SENSOR_1_WARM_MASK			BIT(2)
+#define TPS65219_INT_SENSOR_0_WARM_MASK			BIT(3)
+#define TPS65219_INT_SENSOR_3_HOT_MASK			BIT(4)
+#define TPS65219_INT_SENSOR_2_HOT_MASK			BIT(5)
+#define TPS65219_INT_SENSOR_1_HOT_MASK			BIT(6)
+#define TPS65219_INT_SENSOR_0_HOT_MASK			BIT(7)
+/* Residual Voltage */
+#define TPS65219_INT_BUCK1_RV_MASK			BIT(0)
+#define TPS65219_INT_BUCK2_RV_MASK			BIT(1)
+#define TPS65219_INT_BUCK3_RV_MASK			BIT(2)
+#define TPS65219_INT_LDO1_RV_MASK			BIT(3)
+#define TPS65219_INT_LDO2_RV_MASK			BIT(4)
+#define TPS65219_INT_LDO3_RV_MASK			BIT(5)
+#define TPS65219_INT_LDO4_RV_MASK			BIT(6)
+/* Residual Voltage ShutDown */
+#define TPS65219_INT_BUCK1_RV_SD_MASK			BIT(0)
+#define TPS65219_INT_BUCK2_RV_SD_MASK			BIT(1)
+#define TPS65219_INT_BUCK3_RV_SD_MASK			BIT(2)
+#define TPS65219_INT_LDO1_RV_SD_MASK			BIT(3)
+#define TPS65219_INT_LDO2_RV_SD_MASK			BIT(4)
+#define TPS65219_INT_LDO3_RV_SD_MASK			BIT(5)
+#define TPS65219_INT_LDO4_RV_SD_MASK			BIT(6)
+#define TPS65219_INT_TIMEOUT_MASK			BIT(7)
+/* Power Button */
+#define TPS65219_INT_PB_FALLING_EDGE_DETECT_MASK	BIT(0)
+#define TPS65219_INT_PB_RISING_EDGE_DETECT_MASK		BIT(1)
+#define TPS65219_INT_PB_REAL_TIME_STATUS_MASK		BIT(2)
+
+#define TPS65219_PB_POS					7
+#define TPS65219_TO_RV_POS				6
+#define TPS65219_RV_POS					5
+#define TPS65219_SYS_POS				4
+#define TPS65219_BUCK_1_2_POS				3
+#define TPS65219_BUCK_3_POS				2
+#define TPS65219_LDO_1_2_POS				1
+#define TPS65219_LDO_3_4_POS				0
+
+/* IRQs */
+enum {
+	/* LDO3-4 register IRQs */
+	TPS65219_INT_LDO3_SCG,
+	TPS65219_INT_LDO3_OC,
+	TPS65219_INT_LDO3_UV,
+	TPS65219_INT_LDO4_SCG,
+	TPS65219_INT_LDO4_OC,
+	TPS65219_INT_LDO4_UV,
+	/* LDO1-2 */
+	TPS65219_INT_LDO1_SCG,
+	TPS65219_INT_LDO1_OC,
+	TPS65219_INT_LDO1_UV,
+	TPS65219_INT_LDO2_SCG,
+	TPS65219_INT_LDO2_OC,
+	TPS65219_INT_LDO2_UV,
+	/* BUCK3 */
+	TPS65219_INT_BUCK3_SCG,
+	TPS65219_INT_BUCK3_OC,
+	TPS65219_INT_BUCK3_NEG_OC,
+	TPS65219_INT_BUCK3_UV,
+	/* BUCK1-2 */
+	TPS65219_INT_BUCK1_SCG,
+	TPS65219_INT_BUCK1_OC,
+	TPS65219_INT_BUCK1_NEG_OC,
+	TPS65219_INT_BUCK1_UV,
+	TPS65219_INT_BUCK2_SCG,
+	TPS65219_INT_BUCK2_OC,
+	TPS65219_INT_BUCK2_NEG_OC,
+	TPS65219_INT_BUCK2_UV,
+	/* Thermal Sensor  */
+	TPS65219_INT_SENSOR_3_WARM,
+	TPS65219_INT_SENSOR_2_WARM,
+	TPS65219_INT_SENSOR_1_WARM,
+	TPS65219_INT_SENSOR_0_WARM,
+	TPS65219_INT_SENSOR_3_HOT,
+	TPS65219_INT_SENSOR_2_HOT,
+	TPS65219_INT_SENSOR_1_HOT,
+	TPS65219_INT_SENSOR_0_HOT,
+	/* Residual Voltage */
+	TPS65219_INT_BUCK1_RV,
+	TPS65219_INT_BUCK2_RV,
+	TPS65219_INT_BUCK3_RV,
+	TPS65219_INT_LDO1_RV,
+	TPS65219_INT_LDO2_RV,
+	TPS65219_INT_LDO3_RV,
+	TPS65219_INT_LDO4_RV,
+	/* Residual Voltage ShutDown */
+	TPS65219_INT_BUCK1_RV_SD,
+	TPS65219_INT_BUCK2_RV_SD,
+	TPS65219_INT_BUCK3_RV_SD,
+	TPS65219_INT_LDO1_RV_SD,
+	TPS65219_INT_LDO2_RV_SD,
+	TPS65219_INT_LDO3_RV_SD,
+	TPS65219_INT_LDO4_RV_SD,
+	TPS65219_INT_TIMEOUT,
+	/* Power Button */
+	TPS65219_INT_PB_FALLING_EDGE_DETECT,
+	TPS65219_INT_PB_RISING_EDGE_DETECT,
+};
+
+enum tps65219_regulator_id {
+	/* DCDC's */
+	TPS65219_BUCK_1,
+	TPS65219_BUCK_2,
+	TPS65219_BUCK_3,
+	/* LDOs */
+	TPS65219_LDO_1,
+	TPS65219_LDO_2,
+	TPS65219_LDO_3,
+	TPS65219_LDO_4,
+};
+
+/* Number of step-down converters available */
+#define TPS65219_NUM_DCDC		3
+/* Number of LDO voltage regulators available */
+#define TPS65219_NUM_LDO		4
+/* Number of total regulators available */
+#define TPS65219_NUM_REGULATOR		(TPS65219_NUM_DCDC + TPS65219_NUM_LDO)
+
+/* Define the TPS65219 IRQ numbers */
+enum tps65219_irqs {
+	/* INT source registers */
+	TPS65219_TO_RV_SD_SET_IRQ,
+	TPS65219_RV_SET_IRQ,
+	TPS65219_SYS_SET_IRQ,
+	TPS65219_BUCK_1_2_SET_IRQ,
+	TPS65219_BUCK_3_SET_IRQ,
+	TPS65219_LDO_1_2_SET_IRQ,
+	TPS65219_LDO_3_4_SET_IRQ,
+	TPS65219_PB_SET_IRQ,
+};
+
+/**
+ * struct tps65219 - tps65219 sub-driver chip access routines
+ *
+ * Device data may be used to access the TPS65219 chip
+ *
+ * @dev MFD device
+ * @regmap Regmap for accessing the device registers
+ * @irq_data Regmap irq data used for the irq chip
+ * @nb notifier block for the restart handler
+ */
+struct tps65219 {
+	struct device *dev;
+	struct regmap *regmap;
+
+	struct regmap_irq_chip_data *irq_data;
+	struct notifier_block nb;
+};
+
+#endif /*  MFD_TPS65219_H */
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH v6 5/6] Input: Add tps65219 interrupt driven powerbutton
  2022-10-11 14:05 ` Jerome Neanne
@ 2022-10-11 14:05   ` Jerome Neanne
  -1 siblings, 0 replies; 50+ messages in thread
From: Jerome Neanne @ 2022-10-11 14:05 UTC (permalink / raw)
  To: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, lee, tony,
	vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, jneanne, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

From: Markus Schneider-Pargmann <msp@baylibre.com>

TPS65219 has different interrupts compared to other TPS6521* chips.
TPS65219 defines two interrupts for the powerbutton one for push and one
for release.

This driver is very simple in that it maps the push interrupt to a key
input and the release interrupt to a key release.

Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
Signed-off-by: Jerome Neanne <jneanne@baylibre.com>
---
 drivers/input/misc/Kconfig              |  10 ++
 drivers/input/misc/Makefile             |   1 +
 drivers/input/misc/tps65219-pwrbutton.c | 148 ++++++++++++++++++++++++
 3 files changed, 159 insertions(+)
 create mode 100644 drivers/input/misc/tps65219-pwrbutton.c

diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
index a18ab7358d8f..18d4a321e7ff 100644
--- a/drivers/input/misc/Kconfig
+++ b/drivers/input/misc/Kconfig
@@ -468,6 +468,16 @@ config INPUT_TPS65218_PWRBUTTON
 	  To compile this driver as a module, choose M here. The module will
 	  be called tps65218-pwrbutton.
 
+config INPUT_TPS65219_PWRBUTTON
+	tristate "TPS65219 Power button driver"
+	depends on MFD_TPS65219
+	help
+	  Say Y here if you want to enable power button reporting for
+	  TPS65219 Power Management IC devices.
+
+	  To compile this driver as a module, choose M here. The module will
+	  be called tps65219-pwrbutton.
+
 config INPUT_AXP20X_PEK
 	tristate "X-Powers AXP20X power button driver"
 	depends on MFD_AXP20X
diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
index 28dfc444f0a9..fe8f47402d12 100644
--- a/drivers/input/misc/Makefile
+++ b/drivers/input/misc/Makefile
@@ -78,6 +78,7 @@ obj-$(CONFIG_INPUT_SOC_BUTTON_ARRAY)	+= soc_button_array.o
 obj-$(CONFIG_INPUT_SPARCSPKR)		+= sparcspkr.o
 obj-$(CONFIG_INPUT_STPMIC1_ONKEY)  	+= stpmic1_onkey.o
 obj-$(CONFIG_INPUT_TPS65218_PWRBUTTON)	+= tps65218-pwrbutton.o
+obj-$(CONFIG_INPUT_TPS65219_PWRBUTTON)	+= tps65219-pwrbutton.o
 obj-$(CONFIG_INPUT_TWL4030_PWRBUTTON)	+= twl4030-pwrbutton.o
 obj-$(CONFIG_INPUT_TWL4030_VIBRA)	+= twl4030-vibra.o
 obj-$(CONFIG_INPUT_TWL6040_VIBRA)	+= twl6040-vibra.o
diff --git a/drivers/input/misc/tps65219-pwrbutton.c b/drivers/input/misc/tps65219-pwrbutton.c
new file mode 100644
index 000000000000..245134bdb59e
--- /dev/null
+++ b/drivers/input/misc/tps65219-pwrbutton.c
@@ -0,0 +1,148 @@
+// SPDX-License-Identifier: GPL-2.0
+//
+// Driver for TPS65219 Push Button
+//
+// Copyright (C) 2022 BayLibre Incorporated - https://www.baylibre.com/
+
+#include <linux/init.h>
+#include <linux/input.h>
+#include <linux/interrupt.h>
+#include <linux/kernel.h>
+#include <linux/mfd/tps65219.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+#include <linux/slab.h>
+
+struct tps65219_pwrbutton {
+	struct device *dev;
+	struct input_dev *idev;
+	char phys[32];
+};
+
+static irqreturn_t tps65219_pb_push_irq(int irq, void *_pwr)
+{
+	struct tps65219_pwrbutton *pwr = _pwr;
+
+	input_report_key(pwr->idev, KEY_POWER, 1);
+	pm_wakeup_event(pwr->dev, 0);
+	input_sync(pwr->idev);
+
+	return IRQ_HANDLED;
+}
+
+static irqreturn_t tps65219_pb_release_irq(int irq, void *_pwr)
+{
+	struct tps65219_pwrbutton *pwr = _pwr;
+
+	input_report_key(pwr->idev, KEY_POWER, 0);
+	input_sync(pwr->idev);
+
+	return IRQ_HANDLED;
+}
+
+static int tps65219_pb_probe(struct platform_device *pdev)
+{
+	struct tps65219 *tps = dev_get_drvdata(pdev->dev.parent);
+	struct device *dev = &pdev->dev;
+	struct tps65219_pwrbutton *pwr;
+	struct input_dev *idev;
+	int error;
+	int push_irq;
+	int release_irq;
+
+	pwr = devm_kzalloc(dev, sizeof(*pwr), GFP_KERNEL);
+	if (!pwr)
+		return -ENOMEM;
+
+	idev = devm_input_allocate_device(dev);
+	if (!idev)
+		return -ENOMEM;
+
+	idev->name = pdev->name;
+	snprintf(pwr->phys, sizeof(pwr->phys), "%s/input0",
+		 pdev->name);
+	idev->phys = pwr->phys;
+	idev->id.bustype = BUS_I2C;
+
+	input_set_capability(idev, EV_KEY, KEY_POWER);
+
+	pwr->dev = dev;
+	pwr->idev = idev;
+	device_init_wakeup(dev, true);
+
+	push_irq = platform_get_irq(pdev, 0);
+	if (push_irq < 0)
+		return -EINVAL;
+
+	release_irq = platform_get_irq(pdev, 1);
+	if (release_irq < 0)
+		return -EINVAL;
+
+	error = devm_request_threaded_irq(dev, push_irq, NULL,
+					  tps65219_pb_push_irq,
+					  IRQF_ONESHOT,
+					  dev->init_name, pwr);
+	if (error) {
+		dev_err(dev, "failed to request push IRQ #%d: %d\n", push_irq,
+			error);
+		return error;
+	}
+
+	error = devm_request_threaded_irq(dev, release_irq, NULL,
+					  tps65219_pb_release_irq,
+					  IRQF_ONESHOT,
+					  dev->init_name, pwr);
+	if (error) {
+		dev_err(dev, "failed to request release IRQ #%d: %d\n",
+			release_irq, error);
+		return error;
+	}
+
+	error = input_register_device(idev);
+	if (error) {
+		dev_err(dev, "Can't register power button: %d\n", error);
+		return error;
+	}
+
+	/* Enable interrupts for the pushbutton */
+	regmap_clear_bits(tps->regmap, TPS65219_REG_MASK_CONFIG,
+			  TPS65219_REG_MASK_INT_FOR_PB_MASK);
+
+	/* Set PB/EN/VSENSE pin to be a pushbutton */
+	regmap_update_bits(tps->regmap, TPS65219_REG_MFP_2_CONFIG,
+			   TPS65219_MFP_2_EN_PB_VSENSE_MASK, TPS65219_MFP_2_PB);
+
+	return 0;
+}
+
+static int tps65219_pb_remove(struct platform_device *pdev)
+{
+	struct tps65219 *tps = dev_get_drvdata(pdev->dev.parent);
+
+	/* Disable interrupt for the pushbutton */
+	return regmap_update_bits(tps->regmap, TPS65219_REG_MASK_CONFIG,
+				  TPS65219_REG_MASK_INT_FOR_PB_MASK,
+				  TPS65219_REG_MASK_INT_FOR_PB_MASK);
+}
+
+static const struct platform_device_id tps65219_pwrbtn_id_table[] = {
+	{ "tps65219-pwrbutton", },
+	{ /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(platform, tps65219_pwrbtn_id_table);
+
+static struct platform_driver tps65219_pb_driver = {
+	.probe = tps65219_pb_probe,
+	.remove = tps65219_pb_remove,
+	.driver = {
+		.name = "tps65219_pwrbutton",
+	},
+	.id_table = tps65219_pwrbtn_id_table,
+};
+module_platform_driver(tps65219_pb_driver);
+
+MODULE_DESCRIPTION("TPS65219 Power Button");
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Markus Schneider-Pargmann <msp@baylibre.com");
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH v6 5/6] Input: Add tps65219 interrupt driven powerbutton
@ 2022-10-11 14:05   ` Jerome Neanne
  0 siblings, 0 replies; 50+ messages in thread
From: Jerome Neanne @ 2022-10-11 14:05 UTC (permalink / raw)
  To: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, lee, tony,
	vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, jneanne, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

From: Markus Schneider-Pargmann <msp@baylibre.com>

TPS65219 has different interrupts compared to other TPS6521* chips.
TPS65219 defines two interrupts for the powerbutton one for push and one
for release.

This driver is very simple in that it maps the push interrupt to a key
input and the release interrupt to a key release.

Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
Signed-off-by: Jerome Neanne <jneanne@baylibre.com>
---
 drivers/input/misc/Kconfig              |  10 ++
 drivers/input/misc/Makefile             |   1 +
 drivers/input/misc/tps65219-pwrbutton.c | 148 ++++++++++++++++++++++++
 3 files changed, 159 insertions(+)
 create mode 100644 drivers/input/misc/tps65219-pwrbutton.c

diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
index a18ab7358d8f..18d4a321e7ff 100644
--- a/drivers/input/misc/Kconfig
+++ b/drivers/input/misc/Kconfig
@@ -468,6 +468,16 @@ config INPUT_TPS65218_PWRBUTTON
 	  To compile this driver as a module, choose M here. The module will
 	  be called tps65218-pwrbutton.
 
+config INPUT_TPS65219_PWRBUTTON
+	tristate "TPS65219 Power button driver"
+	depends on MFD_TPS65219
+	help
+	  Say Y here if you want to enable power button reporting for
+	  TPS65219 Power Management IC devices.
+
+	  To compile this driver as a module, choose M here. The module will
+	  be called tps65219-pwrbutton.
+
 config INPUT_AXP20X_PEK
 	tristate "X-Powers AXP20X power button driver"
 	depends on MFD_AXP20X
diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
index 28dfc444f0a9..fe8f47402d12 100644
--- a/drivers/input/misc/Makefile
+++ b/drivers/input/misc/Makefile
@@ -78,6 +78,7 @@ obj-$(CONFIG_INPUT_SOC_BUTTON_ARRAY)	+= soc_button_array.o
 obj-$(CONFIG_INPUT_SPARCSPKR)		+= sparcspkr.o
 obj-$(CONFIG_INPUT_STPMIC1_ONKEY)  	+= stpmic1_onkey.o
 obj-$(CONFIG_INPUT_TPS65218_PWRBUTTON)	+= tps65218-pwrbutton.o
+obj-$(CONFIG_INPUT_TPS65219_PWRBUTTON)	+= tps65219-pwrbutton.o
 obj-$(CONFIG_INPUT_TWL4030_PWRBUTTON)	+= twl4030-pwrbutton.o
 obj-$(CONFIG_INPUT_TWL4030_VIBRA)	+= twl4030-vibra.o
 obj-$(CONFIG_INPUT_TWL6040_VIBRA)	+= twl6040-vibra.o
diff --git a/drivers/input/misc/tps65219-pwrbutton.c b/drivers/input/misc/tps65219-pwrbutton.c
new file mode 100644
index 000000000000..245134bdb59e
--- /dev/null
+++ b/drivers/input/misc/tps65219-pwrbutton.c
@@ -0,0 +1,148 @@
+// SPDX-License-Identifier: GPL-2.0
+//
+// Driver for TPS65219 Push Button
+//
+// Copyright (C) 2022 BayLibre Incorporated - https://www.baylibre.com/
+
+#include <linux/init.h>
+#include <linux/input.h>
+#include <linux/interrupt.h>
+#include <linux/kernel.h>
+#include <linux/mfd/tps65219.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+#include <linux/slab.h>
+
+struct tps65219_pwrbutton {
+	struct device *dev;
+	struct input_dev *idev;
+	char phys[32];
+};
+
+static irqreturn_t tps65219_pb_push_irq(int irq, void *_pwr)
+{
+	struct tps65219_pwrbutton *pwr = _pwr;
+
+	input_report_key(pwr->idev, KEY_POWER, 1);
+	pm_wakeup_event(pwr->dev, 0);
+	input_sync(pwr->idev);
+
+	return IRQ_HANDLED;
+}
+
+static irqreturn_t tps65219_pb_release_irq(int irq, void *_pwr)
+{
+	struct tps65219_pwrbutton *pwr = _pwr;
+
+	input_report_key(pwr->idev, KEY_POWER, 0);
+	input_sync(pwr->idev);
+
+	return IRQ_HANDLED;
+}
+
+static int tps65219_pb_probe(struct platform_device *pdev)
+{
+	struct tps65219 *tps = dev_get_drvdata(pdev->dev.parent);
+	struct device *dev = &pdev->dev;
+	struct tps65219_pwrbutton *pwr;
+	struct input_dev *idev;
+	int error;
+	int push_irq;
+	int release_irq;
+
+	pwr = devm_kzalloc(dev, sizeof(*pwr), GFP_KERNEL);
+	if (!pwr)
+		return -ENOMEM;
+
+	idev = devm_input_allocate_device(dev);
+	if (!idev)
+		return -ENOMEM;
+
+	idev->name = pdev->name;
+	snprintf(pwr->phys, sizeof(pwr->phys), "%s/input0",
+		 pdev->name);
+	idev->phys = pwr->phys;
+	idev->id.bustype = BUS_I2C;
+
+	input_set_capability(idev, EV_KEY, KEY_POWER);
+
+	pwr->dev = dev;
+	pwr->idev = idev;
+	device_init_wakeup(dev, true);
+
+	push_irq = platform_get_irq(pdev, 0);
+	if (push_irq < 0)
+		return -EINVAL;
+
+	release_irq = platform_get_irq(pdev, 1);
+	if (release_irq < 0)
+		return -EINVAL;
+
+	error = devm_request_threaded_irq(dev, push_irq, NULL,
+					  tps65219_pb_push_irq,
+					  IRQF_ONESHOT,
+					  dev->init_name, pwr);
+	if (error) {
+		dev_err(dev, "failed to request push IRQ #%d: %d\n", push_irq,
+			error);
+		return error;
+	}
+
+	error = devm_request_threaded_irq(dev, release_irq, NULL,
+					  tps65219_pb_release_irq,
+					  IRQF_ONESHOT,
+					  dev->init_name, pwr);
+	if (error) {
+		dev_err(dev, "failed to request release IRQ #%d: %d\n",
+			release_irq, error);
+		return error;
+	}
+
+	error = input_register_device(idev);
+	if (error) {
+		dev_err(dev, "Can't register power button: %d\n", error);
+		return error;
+	}
+
+	/* Enable interrupts for the pushbutton */
+	regmap_clear_bits(tps->regmap, TPS65219_REG_MASK_CONFIG,
+			  TPS65219_REG_MASK_INT_FOR_PB_MASK);
+
+	/* Set PB/EN/VSENSE pin to be a pushbutton */
+	regmap_update_bits(tps->regmap, TPS65219_REG_MFP_2_CONFIG,
+			   TPS65219_MFP_2_EN_PB_VSENSE_MASK, TPS65219_MFP_2_PB);
+
+	return 0;
+}
+
+static int tps65219_pb_remove(struct platform_device *pdev)
+{
+	struct tps65219 *tps = dev_get_drvdata(pdev->dev.parent);
+
+	/* Disable interrupt for the pushbutton */
+	return regmap_update_bits(tps->regmap, TPS65219_REG_MASK_CONFIG,
+				  TPS65219_REG_MASK_INT_FOR_PB_MASK,
+				  TPS65219_REG_MASK_INT_FOR_PB_MASK);
+}
+
+static const struct platform_device_id tps65219_pwrbtn_id_table[] = {
+	{ "tps65219-pwrbutton", },
+	{ /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(platform, tps65219_pwrbtn_id_table);
+
+static struct platform_driver tps65219_pb_driver = {
+	.probe = tps65219_pb_probe,
+	.remove = tps65219_pb_remove,
+	.driver = {
+		.name = "tps65219_pwrbutton",
+	},
+	.id_table = tps65219_pwrbtn_id_table,
+};
+module_platform_driver(tps65219_pb_driver);
+
+MODULE_DESCRIPTION("TPS65219 Power Button");
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Markus Schneider-Pargmann <msp@baylibre.com");
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH v6 6/6] arm64: defconfig: Add tps65219 as modules
  2022-10-11 14:05 ` Jerome Neanne
@ 2022-10-11 14:05   ` Jerome Neanne
  -1 siblings, 0 replies; 50+ messages in thread
From: Jerome Neanne @ 2022-10-11 14:05 UTC (permalink / raw)
  To: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, lee, tony,
	vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, jneanne, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

This adds defconfig option to support TPS65219 PMIC, MFD, Regulators
and power-button.

Signed-off-by: Jerome Neanne <jneanne@baylibre.com>
Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
---
 arch/arm64/configs/defconfig | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
index d5b2d2dd4904..d64e00355fcd 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@ -406,6 +406,7 @@ CONFIG_TOUCHSCREEN_GOODIX=m
 CONFIG_TOUCHSCREEN_EDT_FT5X06=m
 CONFIG_INPUT_MISC=y
 CONFIG_INPUT_PM8941_PWRKEY=y
+CONFIG_INPUT_TPS65219_PWRBUTTON=m
 CONFIG_INPUT_PM8XXX_VIBRATOR=m
 CONFIG_INPUT_PWM_BEEPER=m
 CONFIG_INPUT_PWM_VIBRA=m
@@ -639,6 +640,7 @@ CONFIG_MFD_SPMI_PMIC=y
 CONFIG_MFD_RK808=y
 CONFIG_MFD_SEC_CORE=y
 CONFIG_MFD_SL28CPLD=y
+CONFIG_MFD_TPS65219=m
 CONFIG_MFD_ROHM_BD718XX=y
 CONFIG_MFD_WCD934X=m
 CONFIG_REGULATOR_FIXED_VOLTAGE=y
@@ -666,6 +668,7 @@ CONFIG_REGULATOR_QCOM_SPMI=y
 CONFIG_REGULATOR_RK808=y
 CONFIG_REGULATOR_S2MPS11=y
 CONFIG_REGULATOR_TPS65132=m
+CONFIG_REGULATOR_TPS65219=m
 CONFIG_REGULATOR_VCTRL=m
 CONFIG_RC_CORE=m
 CONFIG_RC_DECODERS=y
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH v6 6/6] arm64: defconfig: Add tps65219 as modules
@ 2022-10-11 14:05   ` Jerome Neanne
  0 siblings, 0 replies; 50+ messages in thread
From: Jerome Neanne @ 2022-10-11 14:05 UTC (permalink / raw)
  To: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, lee, tony,
	vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, jneanne, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

This adds defconfig option to support TPS65219 PMIC, MFD, Regulators
and power-button.

Signed-off-by: Jerome Neanne <jneanne@baylibre.com>
Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
---
 arch/arm64/configs/defconfig | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
index d5b2d2dd4904..d64e00355fcd 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@ -406,6 +406,7 @@ CONFIG_TOUCHSCREEN_GOODIX=m
 CONFIG_TOUCHSCREEN_EDT_FT5X06=m
 CONFIG_INPUT_MISC=y
 CONFIG_INPUT_PM8941_PWRKEY=y
+CONFIG_INPUT_TPS65219_PWRBUTTON=m
 CONFIG_INPUT_PM8XXX_VIBRATOR=m
 CONFIG_INPUT_PWM_BEEPER=m
 CONFIG_INPUT_PWM_VIBRA=m
@@ -639,6 +640,7 @@ CONFIG_MFD_SPMI_PMIC=y
 CONFIG_MFD_RK808=y
 CONFIG_MFD_SEC_CORE=y
 CONFIG_MFD_SL28CPLD=y
+CONFIG_MFD_TPS65219=m
 CONFIG_MFD_ROHM_BD718XX=y
 CONFIG_MFD_WCD934X=m
 CONFIG_REGULATOR_FIXED_VOLTAGE=y
@@ -666,6 +668,7 @@ CONFIG_REGULATOR_QCOM_SPMI=y
 CONFIG_REGULATOR_RK808=y
 CONFIG_REGULATOR_S2MPS11=y
 CONFIG_REGULATOR_TPS65132=m
+CONFIG_REGULATOR_TPS65219=m
 CONFIG_REGULATOR_VCTRL=m
 CONFIG_RC_CORE=m
 CONFIG_RC_DECODERS=y
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 6/6] arm64: defconfig: Add tps65219 as modules
  2022-10-11 14:05   ` Jerome Neanne
@ 2022-10-11 14:48     ` Krzysztof Kozlowski
  -1 siblings, 0 replies; 50+ messages in thread
From: Krzysztof Kozlowski @ 2022-10-11 14:48 UTC (permalink / raw)
  To: Jerome Neanne, lgirdwood, broonie, robh+dt, nm, kristo,
	dmitry.torokhov, krzysztof.kozlowski+dt, catalin.marinas, will,
	lee, tony, vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

On 11/10/2022 10:05, Jerome Neanne wrote:
> This adds defconfig option to support TPS65219 PMIC, MFD, Regulators

Do not use "This commit/patch".
https://elixir.bootlin.com/linux/v5.17.1/source/Documentation/process/submitting-patches.rst#L95

> and power-button.

You explained what you did, which is easily visible. You did not explain
why you are doing it.

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 6/6] arm64: defconfig: Add tps65219 as modules
@ 2022-10-11 14:48     ` Krzysztof Kozlowski
  0 siblings, 0 replies; 50+ messages in thread
From: Krzysztof Kozlowski @ 2022-10-11 14:48 UTC (permalink / raw)
  To: Jerome Neanne, lgirdwood, broonie, robh+dt, nm, kristo,
	dmitry.torokhov, krzysztof.kozlowski+dt, catalin.marinas, will,
	lee, tony, vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

On 11/10/2022 10:05, Jerome Neanne wrote:
> This adds defconfig option to support TPS65219 PMIC, MFD, Regulators

Do not use "This commit/patch".
https://elixir.bootlin.com/linux/v5.17.1/source/Documentation/process/submitting-patches.rst#L95

> and power-button.

You explained what you did, which is easily visible. You did not explain
why you are doing it.

Best regards,
Krzysztof


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 6/6] arm64: defconfig: Add tps65219 as modules
  2022-10-11 14:48     ` Krzysztof Kozlowski
@ 2022-10-12  8:39       ` jerome Neanne
  -1 siblings, 0 replies; 50+ messages in thread
From: jerome Neanne @ 2022-10-12  8:39 UTC (permalink / raw)
  To: Krzysztof Kozlowski, lgirdwood, broonie, robh+dt, nm, kristo,
	dmitry.torokhov, krzysztof.kozlowski+dt, catalin.marinas, will,
	lee, tony, vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

On 11/10/2022 16:48, Krzysztof Kozlowski wrote:
> On 11/10/2022 10:05, Jerome Neanne wrote:
>> This adds defconfig option to support TPS65219 PMIC, MFD, Regulators
> 
> Do not use "This commit/patch".
> https://elixir.bootlin.com/linux/v5.17.1/source/Documentation/process/submitting-patches.rst#L95
> 
>> and power-button.
> 
> You explained what you did, which is easily visible. You did not explain
> why you are doing it.
> 
> Best regards,
> Krzysztof
> 
Thanks for pointing me to the detailed guidelines
I'm new to upstream and not well aware of all good practices.

Would below commit message be more suitable:

Add support for the TPS65219 PMIC by enabling MFD, regulator and 
power-button drivers.  All drivers enabled as modules.

Best regards
Jerome

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 6/6] arm64: defconfig: Add tps65219 as modules
@ 2022-10-12  8:39       ` jerome Neanne
  0 siblings, 0 replies; 50+ messages in thread
From: jerome Neanne @ 2022-10-12  8:39 UTC (permalink / raw)
  To: Krzysztof Kozlowski, lgirdwood, broonie, robh+dt, nm, kristo,
	dmitry.torokhov, krzysztof.kozlowski+dt, catalin.marinas, will,
	lee, tony, vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

On 11/10/2022 16:48, Krzysztof Kozlowski wrote:
> On 11/10/2022 10:05, Jerome Neanne wrote:
>> This adds defconfig option to support TPS65219 PMIC, MFD, Regulators
> 
> Do not use "This commit/patch".
> https://elixir.bootlin.com/linux/v5.17.1/source/Documentation/process/submitting-patches.rst#L95
> 
>> and power-button.
> 
> You explained what you did, which is easily visible. You did not explain
> why you are doing it.
> 
> Best regards,
> Krzysztof
> 
Thanks for pointing me to the detailed guidelines
I'm new to upstream and not well aware of all good practices.

Would below commit message be more suitable:

Add support for the TPS65219 PMIC by enabling MFD, regulator and 
power-button drivers.  All drivers enabled as modules.

Best regards
Jerome

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 5/6] Input: Add tps65219 interrupt driven powerbutton
  2022-10-11 14:05   ` Jerome Neanne
@ 2022-10-12  9:48     ` jerome Neanne
  -1 siblings, 0 replies; 50+ messages in thread
From: jerome Neanne @ 2022-10-12  9:48 UTC (permalink / raw)
  To: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, lee, tony,
	vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

I forgot to add the Acked-by in the commit message:
Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

Please feel free to merge through MFD tree.

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 5/6] Input: Add tps65219 interrupt driven powerbutton
@ 2022-10-12  9:48     ` jerome Neanne
  0 siblings, 0 replies; 50+ messages in thread
From: jerome Neanne @ 2022-10-12  9:48 UTC (permalink / raw)
  To: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, lee, tony,
	vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

I forgot to add the Acked-by in the commit message:
Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

Please feel free to merge through MFD tree.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 6/6] arm64: defconfig: Add tps65219 as modules
  2022-10-12  8:39       ` jerome Neanne
@ 2022-10-12 13:00         ` Krzysztof Kozlowski
  -1 siblings, 0 replies; 50+ messages in thread
From: Krzysztof Kozlowski @ 2022-10-12 13:00 UTC (permalink / raw)
  To: jerome Neanne, lgirdwood, broonie, robh+dt, nm, kristo,
	dmitry.torokhov, krzysztof.kozlowski+dt, catalin.marinas, will,
	lee, tony, vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

On 12/10/2022 04:39, jerome Neanne wrote:
>> You explained what you did, which is easily visible. You did not explain
>> why you are doing it.
>>
>> Best regards,
>> Krzysztof
>>
> Thanks for pointing me to the detailed guidelines
> I'm new to upstream and not well aware of all good practices.
> 
> Would below commit message be more suitable:
> 
> Add support for the TPS65219 PMIC by enabling MFD, regulator and 
> power-button drivers.  All drivers enabled as modules.

This still says only what you did. I still does not explain why.

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 6/6] arm64: defconfig: Add tps65219 as modules
@ 2022-10-12 13:00         ` Krzysztof Kozlowski
  0 siblings, 0 replies; 50+ messages in thread
From: Krzysztof Kozlowski @ 2022-10-12 13:00 UTC (permalink / raw)
  To: jerome Neanne, lgirdwood, broonie, robh+dt, nm, kristo,
	dmitry.torokhov, krzysztof.kozlowski+dt, catalin.marinas, will,
	lee, tony, vigneshr, bjorn.andersson, shawnguo, geert+renesas,
	dmitry.baryshkov, marcel.ziswiler, vkoul, biju.das.jz, arnd,
	jeff
  Cc: afd, khilman, narmstrong, msp, j-keerthy, linux-kernel,
	devicetree, linux-arm-kernel, linux-input, linux-omap

On 12/10/2022 04:39, jerome Neanne wrote:
>> You explained what you did, which is easily visible. You did not explain
>> why you are doing it.
>>
>> Best regards,
>> Krzysztof
>>
> Thanks for pointing me to the detailed guidelines
> I'm new to upstream and not well aware of all good practices.
> 
> Would below commit message be more suitable:
> 
> Add support for the TPS65219 PMIC by enabling MFD, regulator and 
> power-button drivers.  All drivers enabled as modules.

This still says only what you did. I still does not explain why.

Best regards,
Krzysztof


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 6/6] arm64: defconfig: Add tps65219 as modules
  2022-10-12 13:00         ` Krzysztof Kozlowski
@ 2022-10-12 17:56           ` Kevin Hilman
  -1 siblings, 0 replies; 50+ messages in thread
From: Kevin Hilman @ 2022-10-12 17:56 UTC (permalink / raw)
  To: Krzysztof Kozlowski, jerome Neanne, lgirdwood, broonie, robh+dt,
	nm, kristo, dmitry.torokhov, krzysztof.kozlowski+dt,
	catalin.marinas, will, lee, tony, vigneshr, bjorn.andersson,
	shawnguo, geert+renesas, dmitry.baryshkov, marcel.ziswiler,
	vkoul, biju.das.jz, arnd, jeff
  Cc: afd, narmstrong, msp, j-keerthy, linux-kernel, devicetree,
	linux-arm-kernel, linux-input, linux-omap

Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> writes:

> On 12/10/2022 04:39, jerome Neanne wrote:
>>> You explained what you did, which is easily visible. You did not explain
>>> why you are doing it.
>>>
>>> Best regards,
>>> Krzysztof
>>>
>> Thanks for pointing me to the detailed guidelines
>> I'm new to upstream and not well aware of all good practices.
>> 
>> Would below commit message be more suitable:
>> 
>> Add support for the TPS65219 PMIC by enabling MFD, regulator and 
>> power-button drivers.  All drivers enabled as modules.
>
> This still says only what you did. I still does not explain why.

Jerome, maybe adding a bit of preamble like:

"Development boards from TI include the TPS65219 PMIC.  Add support..."

Krzysztof, I'm the first to argue for descriptive/verbose changelogs,
but IMO, this is getting a little bit nit-picky.

The series adds a new driver, DTS and defconfig patches to enable
support the new driver.  The "why" for changes to defconfig changes like
this are kind of implied/obvious, and there is lots of precedent for
changelogs of defconfig changes for simple drivers to simply say "enable
X and Y".

If my above suggesion is not enough, please make a suggestion for what
you think would qualify as an appropritate changelong that answers "why"
for a simple driver change.

Kevin





^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 6/6] arm64: defconfig: Add tps65219 as modules
@ 2022-10-12 17:56           ` Kevin Hilman
  0 siblings, 0 replies; 50+ messages in thread
From: Kevin Hilman @ 2022-10-12 17:56 UTC (permalink / raw)
  To: Krzysztof Kozlowski, jerome Neanne, lgirdwood, broonie, robh+dt,
	nm, kristo, dmitry.torokhov, krzysztof.kozlowski+dt,
	catalin.marinas, will, lee, tony, vigneshr, bjorn.andersson,
	shawnguo, geert+renesas, dmitry.baryshkov, marcel.ziswiler,
	vkoul, biju.das.jz, arnd, jeff
  Cc: afd, narmstrong, msp, j-keerthy, linux-kernel, devicetree,
	linux-arm-kernel, linux-input, linux-omap

Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> writes:

> On 12/10/2022 04:39, jerome Neanne wrote:
>>> You explained what you did, which is easily visible. You did not explain
>>> why you are doing it.
>>>
>>> Best regards,
>>> Krzysztof
>>>
>> Thanks for pointing me to the detailed guidelines
>> I'm new to upstream and not well aware of all good practices.
>> 
>> Would below commit message be more suitable:
>> 
>> Add support for the TPS65219 PMIC by enabling MFD, regulator and 
>> power-button drivers.  All drivers enabled as modules.
>
> This still says only what you did. I still does not explain why.

Jerome, maybe adding a bit of preamble like:

"Development boards from TI include the TPS65219 PMIC.  Add support..."

Krzysztof, I'm the first to argue for descriptive/verbose changelogs,
but IMO, this is getting a little bit nit-picky.

The series adds a new driver, DTS and defconfig patches to enable
support the new driver.  The "why" for changes to defconfig changes like
this are kind of implied/obvious, and there is lots of precedent for
changelogs of defconfig changes for simple drivers to simply say "enable
X and Y".

If my above suggesion is not enough, please make a suggestion for what
you think would qualify as an appropritate changelong that answers "why"
for a simple driver change.

Kevin





_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 6/6] arm64: defconfig: Add tps65219 as modules
  2022-10-12 17:56           ` Kevin Hilman
@ 2022-10-13 12:32             ` Krzysztof Kozlowski
  -1 siblings, 0 replies; 50+ messages in thread
From: Krzysztof Kozlowski @ 2022-10-13 12:32 UTC (permalink / raw)
  To: Kevin Hilman, jerome Neanne, lgirdwood, broonie, robh+dt, nm,
	kristo, dmitry.torokhov, krzysztof.kozlowski+dt, catalin.marinas,
	will, lee, tony, vigneshr, bjorn.andersson, shawnguo,
	geert+renesas, dmitry.baryshkov, marcel.ziswiler, vkoul,
	biju.das.jz, arnd, jeff
  Cc: afd, narmstrong, msp, j-keerthy, linux-kernel, devicetree,
	linux-arm-kernel, linux-input, linux-omap

On 12/10/2022 13:56, Kevin Hilman wrote:
> Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> writes:
> 
>> On 12/10/2022 04:39, jerome Neanne wrote:
>>>> You explained what you did, which is easily visible. You did not explain
>>>> why you are doing it.
>>>>
>>>> Best regards,
>>>> Krzysztof
>>>>
>>> Thanks for pointing me to the detailed guidelines
>>> I'm new to upstream and not well aware of all good practices.
>>>
>>> Would below commit message be more suitable:
>>>
>>> Add support for the TPS65219 PMIC by enabling MFD, regulator and 
>>> power-button drivers.  All drivers enabled as modules.
>>
>> This still says only what you did. I still does not explain why.
> 
> Jerome, maybe adding a bit of preamble like:
> 
> "Development boards from TI include the TPS65219 PMIC.  Add support..."

I would propose: "Development boards from TI with xxx SoC include the
..." because the point is that you use this defconfig for boards for
given SoC (supported by upstream).

Other way would be "Foo-bar development board includes the TP..."

> 
> Krzysztof, I'm the first to argue for descriptive/verbose changelogs,
> but IMO, this is getting a little bit nit-picky.
> 
> The series adds a new driver, DTS and defconfig patches to enable
> support the new driver.  The "why" for changes to defconfig changes like
> this are kind of implied/obvious, and there is lots of precedent for
> changelogs of defconfig changes for simple drivers to simply say "enable
> X and Y".

While I understand the entire patchset, the defconfig goes via separate
tree/branch and must stand on its own. Later (one month, one year, one
decade) someone will look at history and wonder why the heck we enabled
TPS65219.

> 
> If my above suggesion is not enough, please make a suggestion for what
> you think would qualify as an appropritate changelong that answers "why"
> for a simple driver change.

It is enough :)

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 6/6] arm64: defconfig: Add tps65219 as modules
@ 2022-10-13 12:32             ` Krzysztof Kozlowski
  0 siblings, 0 replies; 50+ messages in thread
From: Krzysztof Kozlowski @ 2022-10-13 12:32 UTC (permalink / raw)
  To: Kevin Hilman, jerome Neanne, lgirdwood, broonie, robh+dt, nm,
	kristo, dmitry.torokhov, krzysztof.kozlowski+dt, catalin.marinas,
	will, lee, tony, vigneshr, bjorn.andersson, shawnguo,
	geert+renesas, dmitry.baryshkov, marcel.ziswiler, vkoul,
	biju.das.jz, arnd, jeff
  Cc: afd, narmstrong, msp, j-keerthy, linux-kernel, devicetree,
	linux-arm-kernel, linux-input, linux-omap

On 12/10/2022 13:56, Kevin Hilman wrote:
> Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> writes:
> 
>> On 12/10/2022 04:39, jerome Neanne wrote:
>>>> You explained what you did, which is easily visible. You did not explain
>>>> why you are doing it.
>>>>
>>>> Best regards,
>>>> Krzysztof
>>>>
>>> Thanks for pointing me to the detailed guidelines
>>> I'm new to upstream and not well aware of all good practices.
>>>
>>> Would below commit message be more suitable:
>>>
>>> Add support for the TPS65219 PMIC by enabling MFD, regulator and 
>>> power-button drivers.  All drivers enabled as modules.
>>
>> This still says only what you did. I still does not explain why.
> 
> Jerome, maybe adding a bit of preamble like:
> 
> "Development boards from TI include the TPS65219 PMIC.  Add support..."

I would propose: "Development boards from TI with xxx SoC include the
..." because the point is that you use this defconfig for boards for
given SoC (supported by upstream).

Other way would be "Foo-bar development board includes the TP..."

> 
> Krzysztof, I'm the first to argue for descriptive/verbose changelogs,
> but IMO, this is getting a little bit nit-picky.
> 
> The series adds a new driver, DTS and defconfig patches to enable
> support the new driver.  The "why" for changes to defconfig changes like
> this are kind of implied/obvious, and there is lots of precedent for
> changelogs of defconfig changes for simple drivers to simply say "enable
> X and Y".

While I understand the entire patchset, the defconfig goes via separate
tree/branch and must stand on its own. Later (one month, one year, one
decade) someone will look at history and wonder why the heck we enabled
TPS65219.

> 
> If my above suggesion is not enough, please make a suggestion for what
> you think would qualify as an appropritate changelong that answers "why"
> for a simple driver change.

It is enough :)

Best regards,
Krzysztof


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 6/6] arm64: defconfig: Add tps65219 as modules
  2022-10-13 12:32             ` Krzysztof Kozlowski
@ 2022-10-13 13:22               ` jerome Neanne
  -1 siblings, 0 replies; 50+ messages in thread
From: jerome Neanne @ 2022-10-13 13:22 UTC (permalink / raw)
  To: Krzysztof Kozlowski, Kevin Hilman, lgirdwood, broonie, robh+dt,
	nm, kristo, dmitry.torokhov, krzysztof.kozlowski+dt,
	catalin.marinas, will, lee, tony, vigneshr, bjorn.andersson,
	shawnguo, geert+renesas, dmitry.baryshkov, marcel.ziswiler,
	vkoul, biju.das.jz, arnd, jeff
  Cc: afd, narmstrong, msp, j-keerthy, linux-kernel, devicetree,
	linux-arm-kernel, linux-input, linux-omap



On 13/10/2022 14:32, Krzysztof Kozlowski wrote:
> On 12/10/2022 13:56, Kevin Hilman wrote:
>> Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> writes:
>>
>>> On 12/10/2022 04:39, jerome Neanne wrote:
>>>>> You explained what you did, which is easily visible. You did not explain
>>>>> why you are doing it.
>>>>>
>>>>> Best regards,
>>>>> Krzysztof
>>>>>
>>>> Thanks for pointing me to the detailed guidelines
>>>> I'm new to upstream and not well aware of all good practices.
>>>>
>>>> Would below commit message be more suitable:
>>>>
>>>> Add support for the TPS65219 PMIC by enabling MFD, regulator and
>>>> power-button drivers.  All drivers enabled as modules.
>>>
>>> This still says only what you did. I still does not explain why.
>>
>> Jerome, maybe adding a bit of preamble like:
>>
>> "Development boards from TI include the TPS65219 PMIC.  Add support..."
> 
> I would propose: "Development boards from TI with xxx SoC include the
> ..." because the point is that you use this defconfig for boards for
> given SoC (supported by upstream).
> 
> Other way would be "Foo-bar development board includes the TP..."
> 
>>
>> Krzysztof, I'm the first to argue for descriptive/verbose changelogs,
>> but IMO, this is getting a little bit nit-picky.
>>
>> The series adds a new driver, DTS and defconfig patches to enable
>> support the new driver.  The "why" for changes to defconfig changes like
>> this are kind of implied/obvious, and there is lots of precedent for
>> changelogs of defconfig changes for simple drivers to simply say "enable
>> X and Y".
> 
> While I understand the entire patchset, the defconfig goes via separate
> tree/branch and must stand on its own. Later (one month, one year, one
> decade) someone will look at history and wonder why the heck we enabled
> TPS65219.
> 
>>
>> If my above suggesion is not enough, please make a suggestion for what
>> you think would qualify as an appropritate changelong that answers "why"
>> for a simple driver change.
> 
> It is enough :)
> 
> Best regards,
> Krzysztof
> 
Got it! I'll rephrase following your suggestion

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 6/6] arm64: defconfig: Add tps65219 as modules
@ 2022-10-13 13:22               ` jerome Neanne
  0 siblings, 0 replies; 50+ messages in thread
From: jerome Neanne @ 2022-10-13 13:22 UTC (permalink / raw)
  To: Krzysztof Kozlowski, Kevin Hilman, lgirdwood, broonie, robh+dt,
	nm, kristo, dmitry.torokhov, krzysztof.kozlowski+dt,
	catalin.marinas, will, lee, tony, vigneshr, bjorn.andersson,
	shawnguo, geert+renesas, dmitry.baryshkov, marcel.ziswiler,
	vkoul, biju.das.jz, arnd, jeff
  Cc: afd, narmstrong, msp, j-keerthy, linux-kernel, devicetree,
	linux-arm-kernel, linux-input, linux-omap



On 13/10/2022 14:32, Krzysztof Kozlowski wrote:
> On 12/10/2022 13:56, Kevin Hilman wrote:
>> Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> writes:
>>
>>> On 12/10/2022 04:39, jerome Neanne wrote:
>>>>> You explained what you did, which is easily visible. You did not explain
>>>>> why you are doing it.
>>>>>
>>>>> Best regards,
>>>>> Krzysztof
>>>>>
>>>> Thanks for pointing me to the detailed guidelines
>>>> I'm new to upstream and not well aware of all good practices.
>>>>
>>>> Would below commit message be more suitable:
>>>>
>>>> Add support for the TPS65219 PMIC by enabling MFD, regulator and
>>>> power-button drivers.  All drivers enabled as modules.
>>>
>>> This still says only what you did. I still does not explain why.
>>
>> Jerome, maybe adding a bit of preamble like:
>>
>> "Development boards from TI include the TPS65219 PMIC.  Add support..."
> 
> I would propose: "Development boards from TI with xxx SoC include the
> ..." because the point is that you use this defconfig for boards for
> given SoC (supported by upstream).
> 
> Other way would be "Foo-bar development board includes the TP..."
> 
>>
>> Krzysztof, I'm the first to argue for descriptive/verbose changelogs,
>> but IMO, this is getting a little bit nit-picky.
>>
>> The series adds a new driver, DTS and defconfig patches to enable
>> support the new driver.  The "why" for changes to defconfig changes like
>> this are kind of implied/obvious, and there is lots of precedent for
>> changelogs of defconfig changes for simple drivers to simply say "enable
>> X and Y".
> 
> While I understand the entire patchset, the defconfig goes via separate
> tree/branch and must stand on its own. Later (one month, one year, one
> decade) someone will look at history and wonder why the heck we enabled
> TPS65219.
> 
>>
>> If my above suggesion is not enough, please make a suggestion for what
>> you think would qualify as an appropritate changelong that answers "why"
>> for a simple driver change.
> 
> It is enough :)
> 
> Best regards,
> Krzysztof
> 
Got it! I'll rephrase following your suggestion

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
  2022-10-11 14:05   ` Jerome Neanne
@ 2022-10-31 11:00     ` Lee Jones
  -1 siblings, 0 replies; 50+ messages in thread
From: Lee Jones @ 2022-10-31 11:00 UTC (permalink / raw)
  To: Jerome Neanne
  Cc: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, afd, khilman,
	narmstrong, msp, j-keerthy, linux-kernel, devicetree,
	linux-arm-kernel, linux-input, linux-omap

On Tue, 11 Oct 2022, Jerome Neanne wrote:

> The TPS65219 is a power management IC PMIC designed to supply a wide
> range of SoCs in both portable and stationary applications. Any SoC can
> control TPS65219 over a standard I2C interface.
> 
> It contains the following components:
> - Regulators.
> - Over Temperature warning and Shut down.
> - GPIOs
> - Multi Function Pins (MFP)
> - power-button
> 
> This patch adds support for tps65219 PMIC. At this time only
> the functionalities listed below are made available:
> 
> - Regulators probe and functionalities
> - warm and cold reset support
> - SW shutdown support
> - Regulator warnings via IRQs
> - Power-button via IRQ
> 
> Signed-off-by: Jerome Neanne <jneanne@baylibre.com>
> Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
> ---

v6 and no change-log?  Please ensure you keep a change-log here in the
future.  Else reviewers are essentially forced to conduct full reviews
over and over.

>  MAINTAINERS                  |   1 +
>  drivers/mfd/Kconfig          |  14 ++
>  drivers/mfd/Makefile         |   1 +
>  drivers/mfd/tps65219.c       | 320 ++++++++++++++++++++++++++++++++
>  include/linux/mfd/tps65219.h | 345 +++++++++++++++++++++++++++++++++++
>  5 files changed, 681 insertions(+)
>  create mode 100644 drivers/mfd/tps65219.c
>  create mode 100644 include/linux/mfd/tps65219.h

Just a few nits going forward.  It's shaping up nicely.

Once fixed, please submit with this added:

For my own reference (apply this as-is to your sign-off block):

  Acked-for-MFD-by: Lee Jones <lee@kernel.org>

> diff --git a/MAINTAINERS b/MAINTAINERS
> index 14edacfeb1d4..f89e77959536 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -14931,6 +14931,7 @@ F:	drivers/mfd/menelaus.c
>  F:	drivers/mfd/palmas.c
>  F:	drivers/mfd/tps65217.c
>  F:	drivers/mfd/tps65218.c
> +F:	drivers/mfd/tps65219.c
>  F:	drivers/mfd/tps65910.c
>  F:	drivers/mfd/twl-core.[ch]
>  F:	drivers/mfd/twl4030*.c
> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> index abb58ab1a1a4..1a846c7dd0c2 100644
> --- a/drivers/mfd/Kconfig
> +++ b/drivers/mfd/Kconfig
> @@ -1576,6 +1576,20 @@ config MFD_TPS65218
>  	  This driver can also be built as a module.  If so, the module
>  	  will be called tps65218.
>  
> +config MFD_TPS65219
> +	tristate "TI TPS65219 Power Management IC"
> +	depends on I2C && OF
> +	select MFD_CORE
> +	select REGMAP_I2C
> +	select REGMAP_IRQ
> +	help
> +	  If you say yes here you get support for the TPS65219 series of Power
> +	  Management ICs. These include voltage regulators, GPIOs and
> +	  push/power button that are often used in portable devices.

Nit: buttons

> +	  This driver can also be built as a module. If so, the module
> +	  will be called tps65219.
> +
>  config MFD_TPS6586X
>  	bool "TI TPS6586x Power Management chips"
>  	depends on I2C=y
> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> index 858cacf659d6..a8ff3d6ea3ab 100644
> --- a/drivers/mfd/Makefile
> +++ b/drivers/mfd/Makefile
> @@ -101,6 +101,7 @@ obj-$(CONFIG_TPS6507X)		+= tps6507x.o
>  obj-$(CONFIG_MFD_TPS65086)	+= tps65086.o
>  obj-$(CONFIG_MFD_TPS65217)	+= tps65217.o
>  obj-$(CONFIG_MFD_TPS65218)	+= tps65218.o
> +obj-$(CONFIG_MFD_TPS65219)	+= tps65219.o
>  obj-$(CONFIG_MFD_TPS65910)	+= tps65910.o
>  obj-$(CONFIG_MFD_TPS65912)	+= tps65912-core.o
>  obj-$(CONFIG_MFD_TPS65912_I2C)	+= tps65912-i2c.o
> diff --git a/drivers/mfd/tps65219.c b/drivers/mfd/tps65219.c
> new file mode 100644
> index 000000000000..c1638483e069
> --- /dev/null
> +++ b/drivers/mfd/tps65219.c
> @@ -0,0 +1,320 @@
> +// SPDX-License-Identifier: GPL-2.0
> +//
> +// Driver for TPS65219 Integrated Power Management Integrated Chips (PMIC)
> +//
> +// Copyright (C) 2022 BayLibre Incorporated - https://www.baylibre.com/
> +
> +#include <linux/device.h>
> +#include <linux/err.h>
> +#include <linux/i2c.h>
> +#include <linux/init.h>
> +#include <linux/interrupt.h>
> +#include <linux/irq.h>
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/of_device.h>
> +#include <linux/of.h>
> +#include <linux/platform_device.h>
> +#include <linux/reboot.h>
> +#include <linux/regmap.h>
> +#include <linux/slab.h>
> +
> +#include <linux/mfd/core.h>
> +#include <linux/mfd/tps65219.h>
> +
> +static int tps65219_warm_reset(struct tps65219 *tps)
> +{
> +	return regmap_update_bits(tps->regmap, TPS65219_REG_MFP_CTRL,
> +				  TPS65219_MFP_WARM_RESET_I2C_CTRL_MASK,
> +				  TPS65219_MFP_WARM_RESET_I2C_CTRL_MASK);
> +}
> +
> +static int tps65219_cold_reset(struct tps65219 *tps)
> +{
> +	return regmap_update_bits(tps->regmap, TPS65219_REG_MFP_CTRL,
> +				  TPS65219_MFP_COLD_RESET_I2C_CTRL_MASK,
> +				  TPS65219_MFP_COLD_RESET_I2C_CTRL_MASK);
> +}
> +
> +static int tps65219_soft_shutdown(struct tps65219 *tps)
> +{
> +	return regmap_update_bits(tps->regmap, TPS65219_REG_MFP_CTRL,
> +				  TPS65219_MFP_I2C_OFF_REQ_MASK,
> +				  TPS65219_MFP_I2C_OFF_REQ_MASK);
> +}
> +
> +static int tps65219_restart(struct notifier_block *this,
> +			    unsigned long reboot_mode, void *cmd)
> +{
> +	struct tps65219 *tps;
> +
> +	tps = container_of(this, struct tps65219, nb);
> +	if (!tps) {
> +		pr_err("tps65219: Restarting failed because the pointer to tps65219 is invalid\n");
> +		return -ENODEV;
> +	}

Nit: '\n'

> +	if (reboot_mode == REBOOT_WARM)
> +		tps65219_warm_reset(tps);
> +	else
> +		tps65219_cold_reset(tps);

Nit: '\n'

> +	return NOTIFY_DONE;
> +}
> +
> +static struct notifier_block pmic_rst_restart_nb = {
> +	.notifier_call = tps65219_restart,
> +	.priority = 200,
> +};
> +
> +static const struct resource tps65219_pwrbutton_resources[] = {
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_PB_FALLING_EDGE_DETECT, "falling"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_PB_RISING_EDGE_DETECT, "rising"),
> +};
> +
> +static const struct resource tps65219_regulator_resources[] = {
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_SCG, "LDO3_SCG"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_OC, "LDO3_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_UV, "LDO3_UV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_SCG, "LDO4_SCG"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_OC, "LDO4_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_UV, "LDO4_UV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_SCG, "LDO1_SCG"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_OC, "LDO1_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_UV, "LDO1_UV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_SCG, "LDO2_SCG"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_OC, "LDO2_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_UV, "LDO2_UV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_SCG, "BUCK3_SCG"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_OC, "BUCK3_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_NEG_OC, "BUCK3_NEG_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_UV, "BUCK3_UV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_SCG, "BUCK1_SCG"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_OC, "BUCK1_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_NEG_OC, "BUCK1_NEG_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_UV, "BUCK1_UV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_SCG, "BUCK2_SCG"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_OC, "BUCK2_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_NEG_OC, "BUCK2_NEG_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_UV, "BUCK2_UV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_RV, "BUCK1_RV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_RV, "BUCK2_RV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_RV, "BUCK3_RV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_RV, "LDO1_RV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_RV, "LDO2_RV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_RV, "LDO3_RV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_RV, "LDO4_RV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_RV_SD, "BUCK1_RV_SD"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_RV_SD, "BUCK2_RV_SD"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_RV_SD, "BUCK3_RV_SD"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_RV_SD, "LDO1_RV_SD"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_RV_SD, "LDO2_RV_SD"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_RV_SD, "LDO3_RV_SD"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_RV_SD, "LDO4_RV_SD"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_TIMEOUT, "TIMEOUT"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_3_WARM, "SENSOR_3_WARM"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_2_WARM, "SENSOR_2_WARM"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_1_WARM, "SENSOR_1_WARM"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_0_WARM, "SENSOR_0_WARM"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_3_HOT, "SENSOR_3_HOT"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_2_HOT, "SENSOR_2_HOT"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_1_HOT, "SENSOR_1_HOT"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_0_HOT, "SENSOR_0_HOT"),
> +};
> +
> +static const struct mfd_cell tps65219_cells[] = {
> +	{
> +		.name = "tps65219-regulator",
> +		.resources = tps65219_regulator_resources,
> +		.num_resources = ARRAY_SIZE(tps65219_regulator_resources),
> +	}, {
> +		.name = "tps65219-gpios",
> +	},

Nit: Like this please:

     { .name = "tps65219-gpios", },

> +};
> +
> +static const struct mfd_cell tps65219_pwrbutton_cell = {
> +	.name = "tps65219-pwrbutton",
> +	.resources = tps65219_pwrbutton_resources,
> +	.num_resources = ARRAY_SIZE(tps65219_pwrbutton_resources),
> +};
> +
> +static const struct regmap_config tps65219_regmap_config = {
> +	.reg_bits = 8,
> +	.val_bits = 8,
> +	.max_register = TPS65219_REG_FACTORY_CONFIG_2,
> +};
> +
> +/*
> + * Mapping of main IRQ register bits to sub-IRQ register offsets so that we can
> + * access corect sub-IRQ registers based on bits that are set in main IRQ
> + * register.
> + */
> +/* Timeout Residual Voltage Shutdown */
> +static unsigned int bit0_offsets[] = { TPS65219_REG_INT_TO_RV_POS };
> +static unsigned int bit1_offsets[] = { TPS65219_REG_INT_RV_POS };	/* Residual Voltage */
> +static unsigned int bit2_offsets[] = { TPS65219_REG_INT_SYS_POS };	/* System */
> +static unsigned int bit3_offsets[] = { TPS65219_REG_INT_BUCK_1_2_POS };	/* Buck 1-2 */
> +static unsigned int bit4_offsets[] = { TPS65219_REG_INT_BUCK_3_POS };	/* Buck 3 */
> +static unsigned int bit5_offsets[] = { TPS65219_REG_INT_LDO_1_2_POS };	/* LDO 1-2 */
> +static unsigned int bit6_offsets[] = { TPS65219_REG_INT_LDO_3_4_POS };	/* LDO 3-4 */
> +static unsigned int bit7_offsets[] = { TPS65219_REG_INT_PB_POS };	/* Power Button */
> +
> +static struct regmap_irq_sub_irq_map tps65219_sub_irq_offsets[] = {
> +	REGMAP_IRQ_MAIN_REG_OFFSET(bit0_offsets),
> +	REGMAP_IRQ_MAIN_REG_OFFSET(bit1_offsets),
> +	REGMAP_IRQ_MAIN_REG_OFFSET(bit2_offsets),
> +	REGMAP_IRQ_MAIN_REG_OFFSET(bit3_offsets),
> +	REGMAP_IRQ_MAIN_REG_OFFSET(bit4_offsets),
> +	REGMAP_IRQ_MAIN_REG_OFFSET(bit5_offsets),
> +	REGMAP_IRQ_MAIN_REG_OFFSET(bit6_offsets),
> +	REGMAP_IRQ_MAIN_REG_OFFSET(bit7_offsets),
> +};
> +
> +#define TPS65219_REGMAP_IRQ_REG(int_name, register_position) \
> +	REGMAP_IRQ_REG(int_name, register_position, int_name##_MASK)
> +
> +static struct regmap_irq tps65219_irqs[] = {
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_SCG, TPS65219_REG_INT_LDO_3_4_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_OC, TPS65219_REG_INT_LDO_3_4_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_UV, TPS65219_REG_INT_LDO_3_4_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_SCG, TPS65219_REG_INT_LDO_3_4_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_OC, TPS65219_REG_INT_LDO_3_4_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_UV, TPS65219_REG_INT_LDO_3_4_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_SCG, TPS65219_REG_INT_LDO_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_OC, TPS65219_REG_INT_LDO_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_UV, TPS65219_REG_INT_LDO_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_SCG, TPS65219_REG_INT_LDO_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_OC, TPS65219_REG_INT_LDO_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_UV, TPS65219_REG_INT_LDO_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_SCG, TPS65219_REG_INT_BUCK_3_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_OC, TPS65219_REG_INT_BUCK_3_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_NEG_OC, TPS65219_REG_INT_BUCK_3_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_UV, TPS65219_REG_INT_BUCK_3_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_SCG, TPS65219_REG_INT_BUCK_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_OC, TPS65219_REG_INT_BUCK_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_NEG_OC, TPS65219_REG_INT_BUCK_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_UV, TPS65219_REG_INT_BUCK_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_SCG, TPS65219_REG_INT_BUCK_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_OC, TPS65219_REG_INT_BUCK_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_NEG_OC, TPS65219_REG_INT_BUCK_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_UV, TPS65219_REG_INT_BUCK_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_3_WARM, TPS65219_REG_INT_SYS_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_2_WARM, TPS65219_REG_INT_SYS_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_1_WARM, TPS65219_REG_INT_SYS_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_0_WARM, TPS65219_REG_INT_SYS_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_3_HOT, TPS65219_REG_INT_SYS_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_2_HOT, TPS65219_REG_INT_SYS_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_1_HOT, TPS65219_REG_INT_SYS_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_0_HOT, TPS65219_REG_INT_SYS_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_RV, TPS65219_REG_INT_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_RV, TPS65219_REG_INT_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_RV, TPS65219_REG_INT_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_RV, TPS65219_REG_INT_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_RV, TPS65219_REG_INT_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_RV, TPS65219_REG_INT_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_RV, TPS65219_REG_INT_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_RV_SD, TPS65219_REG_INT_TO_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_RV_SD, TPS65219_REG_INT_TO_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_RV_SD, TPS65219_REG_INT_TO_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_RV_SD, TPS65219_REG_INT_TO_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_RV_SD, TPS65219_REG_INT_TO_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_RV_SD, TPS65219_REG_INT_TO_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_RV_SD, TPS65219_REG_INT_TO_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_TIMEOUT, TPS65219_REG_INT_TO_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_PB_FALLING_EDGE_DETECT, TPS65219_REG_INT_PB_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_PB_RISING_EDGE_DETECT, TPS65219_REG_INT_PB_POS),
> +};
> +
> +static struct regmap_irq_chip tps65219_irq_chip = {
> +	.name = "tps65219_irq",
> +	.main_status = TPS65219_REG_INT_SOURCE,
> +	.num_main_regs = 1,
> +	.num_main_status_bits = 8,
> +	.irqs = tps65219_irqs,
> +	.num_irqs = ARRAY_SIZE(tps65219_irqs),
> +	.status_base = TPS65219_REG_INT_LDO_3_4,
> +	.ack_base = TPS65219_REG_INT_LDO_3_4,
> +	.clear_ack = 1,
> +	.num_regs = 8,
> +	.sub_reg_offsets = tps65219_sub_irq_offsets,
> +};
> +
> +static int tps65219_probe(struct i2c_client *client)
> +{
> +	struct tps65219 *tps;
> +	unsigned int chipid;
> +	bool pwr_button;
> +	int ret;
> +
> +	tps = devm_kzalloc(&client->dev, sizeof(*tps), GFP_KERNEL);
> +	if (!tps)
> +		return -ENOMEM;
> +
> +	i2c_set_clientdata(client, tps);
> +
> +	tps->dev = &client->dev;
> +
> +	tps->regmap = devm_regmap_init_i2c(client, &tps65219_regmap_config);
> +	if (IS_ERR(tps->regmap)) {
> +		ret = PTR_ERR(tps->regmap);
> +		dev_err(tps->dev, "Failed to allocate register map: %d\n", ret);
> +		return ret;
> +	}
> +
> +	ret = devm_regmap_add_irq_chip(&client->dev, tps->regmap, client->irq,
> +				       IRQF_ONESHOT, 0, &tps65219_irq_chip,
> +				       &tps->irq_data);
> +	if (ret)
> +		return ret;
> +
> +	ret = regmap_read(tps->regmap, TPS65219_REG_TI_DEV_ID, &chipid);
> +	if (ret) {
> +		dev_err(tps->dev, "Failed to read device ID: %d\n", ret);
> +		return ret;
> +	}
> +
> +	ret = devm_mfd_add_devices(tps->dev, PLATFORM_DEVID_AUTO,
> +				   tps65219_cells, ARRAY_SIZE(tps65219_cells),
> +				   NULL, 0, regmap_irq_get_domain(tps->irq_data));
> +	if (ret) {
> +		dev_err(tps->dev, "Failed to add child devices: %d\n", ret);
> +		return ret;
> +	}
> +
> +	pwr_button = of_property_read_bool(tps->dev->of_node, "ti,power-button");
> +	if (pwr_button) {
> +		ret = devm_mfd_add_devices(tps->dev, PLATFORM_DEVID_AUTO,
> +					   &tps65219_pwrbutton_cell, 1, NULL, 0,
> +					   regmap_irq_get_domain(tps->irq_data));
> +		if (ret) {
> +			dev_err(tps->dev, "Failed to add power-button: %d\n", ret);
> +			return ret;
> +		}
> +	}
> +
> +	tps->nb = pmic_rst_restart_nb;
> +	ret = register_restart_handler(&tps->nb);
> +	if (ret) {
> +		dev_err(tps->dev, "cannot register restart handler, %d\n", ret);
> +		return ret;
> +	}
> +
> +	return 0;
> +}
> +
> +static const struct of_device_id of_tps65219_match_table[] = {
> +	{ .compatible = "ti,tps65219", },
> +	{}
> +};
> +MODULE_DEVICE_TABLE(of, of_tps65219_match_table);
> +
> +static struct i2c_driver tps65219_driver = {
> +	.driver		= {
> +		.name	= "tps65219",
> +		.of_match_table = of_tps65219_match_table,
> +	},
> +	.probe_new	= tps65219_probe,
> +};
> +module_i2c_driver(tps65219_driver);
> +
> +MODULE_AUTHOR("Jerome Neanne <jneanne@baylibre.com>");
> +MODULE_DESCRIPTION("TPS65219 power management IC driver");
> +MODULE_LICENSE("GPL");
> diff --git a/include/linux/mfd/tps65219.h b/include/linux/mfd/tps65219.h
> new file mode 100644
> index 000000000000..2c1cf92e92ac
> --- /dev/null
> +++ b/include/linux/mfd/tps65219.h
> @@ -0,0 +1,345 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/*
> + * Functions to access TPS65219 power management IC.

Nit: Power Management IC

> + * Copyright (C) 2022 BayLibre Incorporated - https://www.baylibre.com/
> + */
> +
> +#ifndef MFD_TPS65219_H
> +#define MFD_TPS65219_H
> +
> +#include <linux/bitops.h>
> +#include <linux/notifier.h>
> +#include <linux/regulator/driver.h>
> +
> +struct regmap;
> +struct regmap_irq_chip_data;
> +
> +#define TPS65219_1V35					1350000
> +#define TPS65219_1V8					1800000
> +
> +/* TPS chip id list */
> +#define TPS65219					0xF0
> +
> +/* I2C ID for TPS65219 part */
> +#define TPS65219_I2C_ID					0x24
> +
> +/* All register addresses */
> +#define TPS65219_REG_TI_DEV_ID				0x00
> +#define TPS65219_REG_NVM_ID				0x01
> +#define TPS65219_REG_ENABLE_CTRL			0x02
> +#define TPS65219_REG_BUCKS_CONFIG			0x03
> +#define TPS65219_REG_LDO4_VOUT				0x04
> +#define TPS65219_REG_LDO3_VOUT				0x05
> +#define TPS65219_REG_LDO2_VOUT				0x06
> +#define TPS65219_REG_LDO1_VOUT				0x07
> +#define TPS65219_REG_BUCK3_VOUT				0x8
> +#define TPS65219_REG_BUCK2_VOUT				0x9
> +#define TPS65219_REG_BUCK1_VOUT				0xA
> +#define TPS65219_REG_LDO4_SEQUENCE_SLOT			0xB
> +#define TPS65219_REG_LDO3_SEQUENCE_SLOT			0xC
> +#define TPS65219_REG_LDO2_SEQUENCE_SLOT			0xD
> +#define TPS65219_REG_LDO1_SEQUENCE_SLOT			0xE
> +#define TPS65219_REG_BUCK3_SEQUENCE_SLOT		0xF
> +#define TPS65219_REG_BUCK2_SEQUENCE_SLOT		0x10
> +#define TPS65219_REG_BUCK1_SEQUENCE_SLOT		0x11
> +#define TPS65219_REG_nRST_SEQUENCE_SLOT			0x12
> +#define TPS65219_REG_GPIO_SEQUENCE_SLOT			0x13
> +#define TPS65219_REG_GPO2_SEQUENCE_SLOT			0x14
> +#define TPS65219_REG_GPO1_SEQUENCE_SLOT			0x15
> +#define TPS65219_REG_POWER_UP_SLOT_DURATION_1		0x16
> +#define TPS65219_REG_POWER_UP_SLOT_DURATION_2		0x17
> +#define TPS65219_REG_POWER_UP_SLOT_DURATION_3		0x18
> +#define TPS65219_REG_POWER_UP_SLOT_DURATION_4		0x19
> +#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_1		0x1A
> +#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_2		0x1B
> +#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_3		0x1C
> +#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_4		0x1D
> +#define TPS65219_REG_GENERAL_CONFIG			0x1E
> +#define TPS65219_REG_MFP_1_CONFIG			0x1F
> +#define TPS65219_REG_MFP_2_CONFIG			0x20
> +#define TPS65219_REG_STBY_1_CONFIG			0x21
> +#define TPS65219_REG_STBY_2_CONFIG			0x22
> +#define TPS65219_REG_OC_DEGL_CONFIG			0x23
> +/* 'sub irq' MASK registers */
> +#define TPS65219_REG_INT_MASK_UV			0x24
> +#define TPS65219_REG_MASK_CONFIG			0x25
> +
> +#define TPS65219_REG_I2C_ADDRESS_REG			0x26
> +#define TPS65219_REG_USER_GENERAL_NVM_STORAGE		0x27
> +#define TPS65219_REG_MANUFACTURING_VER			0x28
> +#define TPS65219_REG_MFP_CTRL				0x29
> +#define TPS65219_REG_DISCHARGE_CONFIG			0x2A
> +/* main irq registers */
> +#define TPS65219_REG_INT_SOURCE				0x2B
> +/* 'sub irq' registers */
> +#define TPS65219_REG_INT_LDO_3_4			0x2C
> +#define TPS65219_REG_INT_LDO_1_2			0x2D
> +#define TPS65219_REG_INT_BUCK_3				0x2E
> +#define TPS65219_REG_INT_BUCK_1_2			0x2F
> +#define TPS65219_REG_INT_SYSTEM				0x30
> +#define TPS65219_REG_INT_RV				0x31
> +#define TPS65219_REG_INT_TIMEOUT_RV_SD			0x32
> +#define TPS65219_REG_INT_PB				0x33
> +
> +#define TPS65219_REG_INT_LDO_3_4_POS			0
> +#define TPS65219_REG_INT_LDO_1_2_POS			1
> +#define TPS65219_REG_INT_BUCK_3_POS			2
> +#define TPS65219_REG_INT_BUCK_1_2_POS			3
> +#define TPS65219_REG_INT_SYS_POS			4
> +#define TPS65219_REG_INT_RV_POS				5
> +#define TPS65219_REG_INT_TO_RV_POS			6
> +#define TPS65219_REG_INT_PB_POS				7
> +
> +#define TPS65219_REG_USER_NVM_CMD			0x34
> +#define TPS65219_REG_POWER_UP_STATUS			0x35
> +#define TPS65219_REG_SPARE_2				0x36
> +#define TPS65219_REG_SPARE_3				0x37
> +#define TPS65219_REG_FACTORY_CONFIG_2			0x41
> +
> +/* Register field definitions */
> +#define TPS65219_DEVID_REV_MASK				GENMASK(7, 0)
> +#define TPS65219_BUCKS_LDOS_VOUT_VSET_MASK		GENMASK(5, 0)
> +#define TPS65219_BUCKS_UV_THR_SEL_MASK			BIT(6)
> +#define TPS65219_BUCKS_BW_SEL_MASK			BIT(7)
> +#define LDO_BYP_SHIFT					6
> +#define TPS65219_LDOS_BYP_CONFIG_MASK			BIT(LDO_BYP_SHIFT)
> +#define TPS65219_LDOS_LSW_CONFIG_MASK			BIT(7)
> +/* Regulators enable control */
> +#define TPS65219_ENABLE_BUCK1_EN_MASK			BIT(0)
> +#define TPS65219_ENABLE_BUCK2_EN_MASK			BIT(1)
> +#define TPS65219_ENABLE_BUCK3_EN_MASK			BIT(2)
> +#define TPS65219_ENABLE_LDO1_EN_MASK			BIT(3)
> +#define TPS65219_ENABLE_LDO2_EN_MASK			BIT(4)
> +#define TPS65219_ENABLE_LDO3_EN_MASK			BIT(5)
> +#define TPS65219_ENABLE_LDO4_EN_MASK			BIT(6)
> +/* power ON-OFF sequence slot */
> +#define TPS65219_BUCKS_LDOS_SEQUENCE_OFF_SLOT_MASK	GENMASK(3, 0)
> +#define TPS65219_BUCKS_LDOS_SEQUENCE_ON_SLOT_MASK	GENMASK(7, 4)
> +/* TODO: Not needed, same mapping as TPS65219_ENABLE_REGNAME_EN, factorize */
> +#define TPS65219_STBY1_BUCK1_STBY_EN_MASK		BIT(0)
> +#define TPS65219_STBY1_BUCK2_STBY_EN_MASK		BIT(1)
> +#define TPS65219_STBY1_BUCK3_STBY_EN_MASK		BIT(2)
> +#define TPS65219_STBY1_LDO1_STBY_EN_MASK		BIT(3)
> +#define TPS65219_STBY1_LDO2_STBY_EN_MASK		BIT(4)
> +#define TPS65219_STBY1_LDO3_STBY_EN_MASK		BIT(5)
> +#define TPS65219_STBY1_LDO4_STBY_EN_MASK		BIT(6)
> +/* STBY_2 config */
> +#define TPS65219_STBY2_GPO1_STBY_EN_MASK		BIT(0)
> +#define TPS65219_STBY2_GPO2_STBY_EN_MASK		BIT(1)
> +#define TPS65219_STBY2_GPIO_STBY_EN_MASK		BIT(2)
> +/* MFP Control */
> +#define TPS65219_MFP_I2C_OFF_REQ_MASK			BIT(0)
> +#define TPS65219_MFP_STBY_I2C_CTRL_MASK			BIT(1)
> +#define TPS65219_MFP_COLD_RESET_I2C_CTRL_MASK		BIT(2)
> +#define TPS65219_MFP_WARM_RESET_I2C_CTRL_MASK		BIT(3)
> +#define TPS65219_MFP_GPIO_STATUS_MASK			BIT(4)
> +/* MFP_1 Config */
> +#define TPS65219_MFP_1_VSEL_DDR_SEL_MASK		BIT(0)
> +#define TPS65219_MFP_1_VSEL_SD_POL_MASK			BIT(1)
> +#define TPS65219_MFP_1_VSEL_RAIL_MASK			BIT(2)
> +/* MFP_2 Config */
> +#define TPS65219_MFP_2_MODE_STBY_MASK			GENMASK(1, 0)
> +#define TPS65219_MFP_2_MODE_RESET_MASK			BIT(2)
> +#define TPS65219_MFP_2_EN_PB_VSENSE_DEGL_MASK		BIT(3)
> +#define TPS65219_MFP_2_EN_PB_VSENSE_MASK		GENMASK(5, 4)
> +#define TPS65219_MFP_2_WARM_COLD_RESET_MASK		BIT(6)
> +#define TPS65219_MFP_2_PU_ON_FSD_MASK			BIT(7)
> +#define TPS65219_MFP_2_EN				0
> +#define TPS65219_MFP_2_PB				BIT(4)
> +#define TPS65219_MFP_2_VSENSE				BIT(5)
> +/* MASK_UV Config */
> +#define TPS65219_REG_MASK_UV_LDO1_UV_MASK		BIT(0)
> +#define TPS65219_REG_MASK_UV_LDO2_UV_MASK		BIT(1)
> +#define TPS65219_REG_MASK_UV_LDO3_UV_MASK		BIT(2)
> +#define TPS65219_REG_MASK_UV_LDO4_UV_MASK		BIT(3)
> +#define TPS65219_REG_MASK_UV_BUCK1_UV_MASK		BIT(4)
> +#define TPS65219_REG_MASK_UV_BUCK2_UV_MASK		BIT(5)
> +#define TPS65219_REG_MASK_UV_BUCK3_UV_MASK		BIT(6)
> +#define TPS65219_REG_MASK_UV_RETRY_MASK			BIT(7)
> +/* MASK Config */
> +// SENSOR_N_WARM_MASK already defined in Thermal
> +#define TPS65219_REG_MASK_INT_FOR_RV_MASK		BIT(4)
> +#define TPS65219_REG_MASK_EFFECT_MASK			GENMASK(2, 1)
> +#define TPS65219_REG_MASK_INT_FOR_PB_MASK		BIT(7)
> +/* UnderVoltage - Short to GND - OverCurrent*/
> +/* LDO3-4 */
> +#define TPS65219_INT_LDO3_SCG_MASK			BIT(0)
> +#define TPS65219_INT_LDO3_OC_MASK			BIT(1)
> +#define TPS65219_INT_LDO3_UV_MASK			BIT(2)
> +#define TPS65219_INT_LDO4_SCG_MASK			BIT(3)
> +#define TPS65219_INT_LDO4_OC_MASK			BIT(4)
> +#define TPS65219_INT_LDO4_UV_MASK			BIT(5)
> +/* LDO1-2 */
> +#define TPS65219_INT_LDO1_SCG_MASK			BIT(0)
> +#define TPS65219_INT_LDO1_OC_MASK			BIT(1)
> +#define TPS65219_INT_LDO1_UV_MASK			BIT(2)
> +#define TPS65219_INT_LDO2_SCG_MASK			BIT(3)
> +#define TPS65219_INT_LDO2_OC_MASK			BIT(4)
> +#define TPS65219_INT_LDO2_UV_MASK			BIT(5)
> +/* BUCK3 */
> +#define TPS65219_INT_BUCK3_SCG_MASK			BIT(0)
> +#define TPS65219_INT_BUCK3_OC_MASK			BIT(1)
> +#define TPS65219_INT_BUCK3_NEG_OC_MASK			BIT(2)
> +#define TPS65219_INT_BUCK3_UV_MASK			BIT(3)
> +/* BUCK1-2 */
> +#define TPS65219_INT_BUCK1_SCG_MASK			BIT(0)
> +#define TPS65219_INT_BUCK1_OC_MASK			BIT(1)
> +#define TPS65219_INT_BUCK1_NEG_OC_MASK			BIT(2)
> +#define TPS65219_INT_BUCK1_UV_MASK			BIT(3)
> +#define TPS65219_INT_BUCK2_SCG_MASK			BIT(4)
> +#define TPS65219_INT_BUCK2_OC_MASK			BIT(5)
> +#define TPS65219_INT_BUCK2_NEG_OC_MASK			BIT(6)
> +#define TPS65219_INT_BUCK2_UV_MASK			BIT(7)
> +/* Thermal Sensor  */
> +#define TPS65219_INT_SENSOR_3_WARM_MASK			BIT(0)
> +#define TPS65219_INT_SENSOR_2_WARM_MASK			BIT(1)
> +#define TPS65219_INT_SENSOR_1_WARM_MASK			BIT(2)
> +#define TPS65219_INT_SENSOR_0_WARM_MASK			BIT(3)
> +#define TPS65219_INT_SENSOR_3_HOT_MASK			BIT(4)
> +#define TPS65219_INT_SENSOR_2_HOT_MASK			BIT(5)
> +#define TPS65219_INT_SENSOR_1_HOT_MASK			BIT(6)
> +#define TPS65219_INT_SENSOR_0_HOT_MASK			BIT(7)
> +/* Residual Voltage */
> +#define TPS65219_INT_BUCK1_RV_MASK			BIT(0)
> +#define TPS65219_INT_BUCK2_RV_MASK			BIT(1)
> +#define TPS65219_INT_BUCK3_RV_MASK			BIT(2)
> +#define TPS65219_INT_LDO1_RV_MASK			BIT(3)
> +#define TPS65219_INT_LDO2_RV_MASK			BIT(4)
> +#define TPS65219_INT_LDO3_RV_MASK			BIT(5)
> +#define TPS65219_INT_LDO4_RV_MASK			BIT(6)
> +/* Residual Voltage ShutDown */
> +#define TPS65219_INT_BUCK1_RV_SD_MASK			BIT(0)
> +#define TPS65219_INT_BUCK2_RV_SD_MASK			BIT(1)
> +#define TPS65219_INT_BUCK3_RV_SD_MASK			BIT(2)
> +#define TPS65219_INT_LDO1_RV_SD_MASK			BIT(3)
> +#define TPS65219_INT_LDO2_RV_SD_MASK			BIT(4)
> +#define TPS65219_INT_LDO3_RV_SD_MASK			BIT(5)
> +#define TPS65219_INT_LDO4_RV_SD_MASK			BIT(6)
> +#define TPS65219_INT_TIMEOUT_MASK			BIT(7)
> +/* Power Button */
> +#define TPS65219_INT_PB_FALLING_EDGE_DETECT_MASK	BIT(0)
> +#define TPS65219_INT_PB_RISING_EDGE_DETECT_MASK		BIT(1)
> +#define TPS65219_INT_PB_REAL_TIME_STATUS_MASK		BIT(2)
> +
> +#define TPS65219_PB_POS					7
> +#define TPS65219_TO_RV_POS				6
> +#define TPS65219_RV_POS					5
> +#define TPS65219_SYS_POS				4
> +#define TPS65219_BUCK_1_2_POS				3
> +#define TPS65219_BUCK_3_POS				2
> +#define TPS65219_LDO_1_2_POS				1
> +#define TPS65219_LDO_3_4_POS				0
> +
> +/* IRQs */
> +enum {
> +	/* LDO3-4 register IRQs */
> +	TPS65219_INT_LDO3_SCG,
> +	TPS65219_INT_LDO3_OC,
> +	TPS65219_INT_LDO3_UV,
> +	TPS65219_INT_LDO4_SCG,
> +	TPS65219_INT_LDO4_OC,
> +	TPS65219_INT_LDO4_UV,
> +	/* LDO1-2 */
> +	TPS65219_INT_LDO1_SCG,
> +	TPS65219_INT_LDO1_OC,
> +	TPS65219_INT_LDO1_UV,
> +	TPS65219_INT_LDO2_SCG,
> +	TPS65219_INT_LDO2_OC,
> +	TPS65219_INT_LDO2_UV,
> +	/* BUCK3 */
> +	TPS65219_INT_BUCK3_SCG,
> +	TPS65219_INT_BUCK3_OC,
> +	TPS65219_INT_BUCK3_NEG_OC,
> +	TPS65219_INT_BUCK3_UV,
> +	/* BUCK1-2 */
> +	TPS65219_INT_BUCK1_SCG,
> +	TPS65219_INT_BUCK1_OC,
> +	TPS65219_INT_BUCK1_NEG_OC,
> +	TPS65219_INT_BUCK1_UV,
> +	TPS65219_INT_BUCK2_SCG,
> +	TPS65219_INT_BUCK2_OC,
> +	TPS65219_INT_BUCK2_NEG_OC,
> +	TPS65219_INT_BUCK2_UV,
> +	/* Thermal Sensor  */
> +	TPS65219_INT_SENSOR_3_WARM,
> +	TPS65219_INT_SENSOR_2_WARM,
> +	TPS65219_INT_SENSOR_1_WARM,
> +	TPS65219_INT_SENSOR_0_WARM,
> +	TPS65219_INT_SENSOR_3_HOT,
> +	TPS65219_INT_SENSOR_2_HOT,
> +	TPS65219_INT_SENSOR_1_HOT,
> +	TPS65219_INT_SENSOR_0_HOT,
> +	/* Residual Voltage */
> +	TPS65219_INT_BUCK1_RV,
> +	TPS65219_INT_BUCK2_RV,
> +	TPS65219_INT_BUCK3_RV,
> +	TPS65219_INT_LDO1_RV,
> +	TPS65219_INT_LDO2_RV,
> +	TPS65219_INT_LDO3_RV,
> +	TPS65219_INT_LDO4_RV,
> +	/* Residual Voltage ShutDown */
> +	TPS65219_INT_BUCK1_RV_SD,
> +	TPS65219_INT_BUCK2_RV_SD,
> +	TPS65219_INT_BUCK3_RV_SD,
> +	TPS65219_INT_LDO1_RV_SD,
> +	TPS65219_INT_LDO2_RV_SD,
> +	TPS65219_INT_LDO3_RV_SD,
> +	TPS65219_INT_LDO4_RV_SD,
> +	TPS65219_INT_TIMEOUT,
> +	/* Power Button */
> +	TPS65219_INT_PB_FALLING_EDGE_DETECT,
> +	TPS65219_INT_PB_RISING_EDGE_DETECT,
> +};
> +
> +enum tps65219_regulator_id {
> +	/* DCDC's */
> +	TPS65219_BUCK_1,
> +	TPS65219_BUCK_2,
> +	TPS65219_BUCK_3,
> +	/* LDOs */
> +	TPS65219_LDO_1,
> +	TPS65219_LDO_2,
> +	TPS65219_LDO_3,
> +	TPS65219_LDO_4,
> +};
> +
> +/* Number of step-down converters available */
> +#define TPS65219_NUM_DCDC		3
> +/* Number of LDO voltage regulators available */
> +#define TPS65219_NUM_LDO		4
> +/* Number of total regulators available */
> +#define TPS65219_NUM_REGULATOR		(TPS65219_NUM_DCDC + TPS65219_NUM_LDO)
> +
> +/* Define the TPS65219 IRQ numbers */
> +enum tps65219_irqs {
> +	/* INT source registers */
> +	TPS65219_TO_RV_SD_SET_IRQ,
> +	TPS65219_RV_SET_IRQ,
> +	TPS65219_SYS_SET_IRQ,
> +	TPS65219_BUCK_1_2_SET_IRQ,
> +	TPS65219_BUCK_3_SET_IRQ,
> +	TPS65219_LDO_1_2_SET_IRQ,
> +	TPS65219_LDO_3_4_SET_IRQ,
> +	TPS65219_PB_SET_IRQ,
> +};
> +
> +/**
> + * struct tps65219 - tps65219 sub-driver chip access routines
> + *
> + * Device data may be used to access the TPS65219 chip
> + *
> + * @dev MFD device
> + * @regmap Regmap for accessing the device registers
> + * @irq_data Regmap irq data used for the irq chip
> + * @nb notifier block for the restart handler
> + */

This header needs work.

Can you try an compile with W=1 please.

> +struct tps65219 {
> +	struct device *dev;
> +	struct regmap *regmap;
> +
> +	struct regmap_irq_chip_data *irq_data;
> +	struct notifier_block nb;
> +};
> +
> +#endif /*  MFD_TPS65219_H */

Superfluous " ".

-- 
Lee Jones [李琼斯]

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
@ 2022-10-31 11:00     ` Lee Jones
  0 siblings, 0 replies; 50+ messages in thread
From: Lee Jones @ 2022-10-31 11:00 UTC (permalink / raw)
  To: Jerome Neanne
  Cc: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, afd, khilman,
	narmstrong, msp, j-keerthy, linux-kernel, devicetree,
	linux-arm-kernel, linux-input, linux-omap

On Tue, 11 Oct 2022, Jerome Neanne wrote:

> The TPS65219 is a power management IC PMIC designed to supply a wide
> range of SoCs in both portable and stationary applications. Any SoC can
> control TPS65219 over a standard I2C interface.
> 
> It contains the following components:
> - Regulators.
> - Over Temperature warning and Shut down.
> - GPIOs
> - Multi Function Pins (MFP)
> - power-button
> 
> This patch adds support for tps65219 PMIC. At this time only
> the functionalities listed below are made available:
> 
> - Regulators probe and functionalities
> - warm and cold reset support
> - SW shutdown support
> - Regulator warnings via IRQs
> - Power-button via IRQ
> 
> Signed-off-by: Jerome Neanne <jneanne@baylibre.com>
> Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
> ---

v6 and no change-log?  Please ensure you keep a change-log here in the
future.  Else reviewers are essentially forced to conduct full reviews
over and over.

>  MAINTAINERS                  |   1 +
>  drivers/mfd/Kconfig          |  14 ++
>  drivers/mfd/Makefile         |   1 +
>  drivers/mfd/tps65219.c       | 320 ++++++++++++++++++++++++++++++++
>  include/linux/mfd/tps65219.h | 345 +++++++++++++++++++++++++++++++++++
>  5 files changed, 681 insertions(+)
>  create mode 100644 drivers/mfd/tps65219.c
>  create mode 100644 include/linux/mfd/tps65219.h

Just a few nits going forward.  It's shaping up nicely.

Once fixed, please submit with this added:

For my own reference (apply this as-is to your sign-off block):

  Acked-for-MFD-by: Lee Jones <lee@kernel.org>

> diff --git a/MAINTAINERS b/MAINTAINERS
> index 14edacfeb1d4..f89e77959536 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -14931,6 +14931,7 @@ F:	drivers/mfd/menelaus.c
>  F:	drivers/mfd/palmas.c
>  F:	drivers/mfd/tps65217.c
>  F:	drivers/mfd/tps65218.c
> +F:	drivers/mfd/tps65219.c
>  F:	drivers/mfd/tps65910.c
>  F:	drivers/mfd/twl-core.[ch]
>  F:	drivers/mfd/twl4030*.c
> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> index abb58ab1a1a4..1a846c7dd0c2 100644
> --- a/drivers/mfd/Kconfig
> +++ b/drivers/mfd/Kconfig
> @@ -1576,6 +1576,20 @@ config MFD_TPS65218
>  	  This driver can also be built as a module.  If so, the module
>  	  will be called tps65218.
>  
> +config MFD_TPS65219
> +	tristate "TI TPS65219 Power Management IC"
> +	depends on I2C && OF
> +	select MFD_CORE
> +	select REGMAP_I2C
> +	select REGMAP_IRQ
> +	help
> +	  If you say yes here you get support for the TPS65219 series of Power
> +	  Management ICs. These include voltage regulators, GPIOs and
> +	  push/power button that are often used in portable devices.

Nit: buttons

> +	  This driver can also be built as a module. If so, the module
> +	  will be called tps65219.
> +
>  config MFD_TPS6586X
>  	bool "TI TPS6586x Power Management chips"
>  	depends on I2C=y
> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> index 858cacf659d6..a8ff3d6ea3ab 100644
> --- a/drivers/mfd/Makefile
> +++ b/drivers/mfd/Makefile
> @@ -101,6 +101,7 @@ obj-$(CONFIG_TPS6507X)		+= tps6507x.o
>  obj-$(CONFIG_MFD_TPS65086)	+= tps65086.o
>  obj-$(CONFIG_MFD_TPS65217)	+= tps65217.o
>  obj-$(CONFIG_MFD_TPS65218)	+= tps65218.o
> +obj-$(CONFIG_MFD_TPS65219)	+= tps65219.o
>  obj-$(CONFIG_MFD_TPS65910)	+= tps65910.o
>  obj-$(CONFIG_MFD_TPS65912)	+= tps65912-core.o
>  obj-$(CONFIG_MFD_TPS65912_I2C)	+= tps65912-i2c.o
> diff --git a/drivers/mfd/tps65219.c b/drivers/mfd/tps65219.c
> new file mode 100644
> index 000000000000..c1638483e069
> --- /dev/null
> +++ b/drivers/mfd/tps65219.c
> @@ -0,0 +1,320 @@
> +// SPDX-License-Identifier: GPL-2.0
> +//
> +// Driver for TPS65219 Integrated Power Management Integrated Chips (PMIC)
> +//
> +// Copyright (C) 2022 BayLibre Incorporated - https://www.baylibre.com/
> +
> +#include <linux/device.h>
> +#include <linux/err.h>
> +#include <linux/i2c.h>
> +#include <linux/init.h>
> +#include <linux/interrupt.h>
> +#include <linux/irq.h>
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/of_device.h>
> +#include <linux/of.h>
> +#include <linux/platform_device.h>
> +#include <linux/reboot.h>
> +#include <linux/regmap.h>
> +#include <linux/slab.h>
> +
> +#include <linux/mfd/core.h>
> +#include <linux/mfd/tps65219.h>
> +
> +static int tps65219_warm_reset(struct tps65219 *tps)
> +{
> +	return regmap_update_bits(tps->regmap, TPS65219_REG_MFP_CTRL,
> +				  TPS65219_MFP_WARM_RESET_I2C_CTRL_MASK,
> +				  TPS65219_MFP_WARM_RESET_I2C_CTRL_MASK);
> +}
> +
> +static int tps65219_cold_reset(struct tps65219 *tps)
> +{
> +	return regmap_update_bits(tps->regmap, TPS65219_REG_MFP_CTRL,
> +				  TPS65219_MFP_COLD_RESET_I2C_CTRL_MASK,
> +				  TPS65219_MFP_COLD_RESET_I2C_CTRL_MASK);
> +}
> +
> +static int tps65219_soft_shutdown(struct tps65219 *tps)
> +{
> +	return regmap_update_bits(tps->regmap, TPS65219_REG_MFP_CTRL,
> +				  TPS65219_MFP_I2C_OFF_REQ_MASK,
> +				  TPS65219_MFP_I2C_OFF_REQ_MASK);
> +}
> +
> +static int tps65219_restart(struct notifier_block *this,
> +			    unsigned long reboot_mode, void *cmd)
> +{
> +	struct tps65219 *tps;
> +
> +	tps = container_of(this, struct tps65219, nb);
> +	if (!tps) {
> +		pr_err("tps65219: Restarting failed because the pointer to tps65219 is invalid\n");
> +		return -ENODEV;
> +	}

Nit: '\n'

> +	if (reboot_mode == REBOOT_WARM)
> +		tps65219_warm_reset(tps);
> +	else
> +		tps65219_cold_reset(tps);

Nit: '\n'

> +	return NOTIFY_DONE;
> +}
> +
> +static struct notifier_block pmic_rst_restart_nb = {
> +	.notifier_call = tps65219_restart,
> +	.priority = 200,
> +};
> +
> +static const struct resource tps65219_pwrbutton_resources[] = {
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_PB_FALLING_EDGE_DETECT, "falling"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_PB_RISING_EDGE_DETECT, "rising"),
> +};
> +
> +static const struct resource tps65219_regulator_resources[] = {
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_SCG, "LDO3_SCG"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_OC, "LDO3_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_UV, "LDO3_UV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_SCG, "LDO4_SCG"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_OC, "LDO4_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_UV, "LDO4_UV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_SCG, "LDO1_SCG"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_OC, "LDO1_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_UV, "LDO1_UV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_SCG, "LDO2_SCG"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_OC, "LDO2_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_UV, "LDO2_UV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_SCG, "BUCK3_SCG"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_OC, "BUCK3_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_NEG_OC, "BUCK3_NEG_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_UV, "BUCK3_UV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_SCG, "BUCK1_SCG"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_OC, "BUCK1_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_NEG_OC, "BUCK1_NEG_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_UV, "BUCK1_UV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_SCG, "BUCK2_SCG"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_OC, "BUCK2_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_NEG_OC, "BUCK2_NEG_OC"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_UV, "BUCK2_UV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_RV, "BUCK1_RV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_RV, "BUCK2_RV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_RV, "BUCK3_RV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_RV, "LDO1_RV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_RV, "LDO2_RV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_RV, "LDO3_RV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_RV, "LDO4_RV"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_RV_SD, "BUCK1_RV_SD"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_RV_SD, "BUCK2_RV_SD"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_RV_SD, "BUCK3_RV_SD"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_RV_SD, "LDO1_RV_SD"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_RV_SD, "LDO2_RV_SD"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_RV_SD, "LDO3_RV_SD"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_RV_SD, "LDO4_RV_SD"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_TIMEOUT, "TIMEOUT"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_3_WARM, "SENSOR_3_WARM"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_2_WARM, "SENSOR_2_WARM"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_1_WARM, "SENSOR_1_WARM"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_0_WARM, "SENSOR_0_WARM"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_3_HOT, "SENSOR_3_HOT"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_2_HOT, "SENSOR_2_HOT"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_1_HOT, "SENSOR_1_HOT"),
> +	DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_0_HOT, "SENSOR_0_HOT"),
> +};
> +
> +static const struct mfd_cell tps65219_cells[] = {
> +	{
> +		.name = "tps65219-regulator",
> +		.resources = tps65219_regulator_resources,
> +		.num_resources = ARRAY_SIZE(tps65219_regulator_resources),
> +	}, {
> +		.name = "tps65219-gpios",
> +	},

Nit: Like this please:

     { .name = "tps65219-gpios", },

> +};
> +
> +static const struct mfd_cell tps65219_pwrbutton_cell = {
> +	.name = "tps65219-pwrbutton",
> +	.resources = tps65219_pwrbutton_resources,
> +	.num_resources = ARRAY_SIZE(tps65219_pwrbutton_resources),
> +};
> +
> +static const struct regmap_config tps65219_regmap_config = {
> +	.reg_bits = 8,
> +	.val_bits = 8,
> +	.max_register = TPS65219_REG_FACTORY_CONFIG_2,
> +};
> +
> +/*
> + * Mapping of main IRQ register bits to sub-IRQ register offsets so that we can
> + * access corect sub-IRQ registers based on bits that are set in main IRQ
> + * register.
> + */
> +/* Timeout Residual Voltage Shutdown */
> +static unsigned int bit0_offsets[] = { TPS65219_REG_INT_TO_RV_POS };
> +static unsigned int bit1_offsets[] = { TPS65219_REG_INT_RV_POS };	/* Residual Voltage */
> +static unsigned int bit2_offsets[] = { TPS65219_REG_INT_SYS_POS };	/* System */
> +static unsigned int bit3_offsets[] = { TPS65219_REG_INT_BUCK_1_2_POS };	/* Buck 1-2 */
> +static unsigned int bit4_offsets[] = { TPS65219_REG_INT_BUCK_3_POS };	/* Buck 3 */
> +static unsigned int bit5_offsets[] = { TPS65219_REG_INT_LDO_1_2_POS };	/* LDO 1-2 */
> +static unsigned int bit6_offsets[] = { TPS65219_REG_INT_LDO_3_4_POS };	/* LDO 3-4 */
> +static unsigned int bit7_offsets[] = { TPS65219_REG_INT_PB_POS };	/* Power Button */
> +
> +static struct regmap_irq_sub_irq_map tps65219_sub_irq_offsets[] = {
> +	REGMAP_IRQ_MAIN_REG_OFFSET(bit0_offsets),
> +	REGMAP_IRQ_MAIN_REG_OFFSET(bit1_offsets),
> +	REGMAP_IRQ_MAIN_REG_OFFSET(bit2_offsets),
> +	REGMAP_IRQ_MAIN_REG_OFFSET(bit3_offsets),
> +	REGMAP_IRQ_MAIN_REG_OFFSET(bit4_offsets),
> +	REGMAP_IRQ_MAIN_REG_OFFSET(bit5_offsets),
> +	REGMAP_IRQ_MAIN_REG_OFFSET(bit6_offsets),
> +	REGMAP_IRQ_MAIN_REG_OFFSET(bit7_offsets),
> +};
> +
> +#define TPS65219_REGMAP_IRQ_REG(int_name, register_position) \
> +	REGMAP_IRQ_REG(int_name, register_position, int_name##_MASK)
> +
> +static struct regmap_irq tps65219_irqs[] = {
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_SCG, TPS65219_REG_INT_LDO_3_4_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_OC, TPS65219_REG_INT_LDO_3_4_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_UV, TPS65219_REG_INT_LDO_3_4_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_SCG, TPS65219_REG_INT_LDO_3_4_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_OC, TPS65219_REG_INT_LDO_3_4_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_UV, TPS65219_REG_INT_LDO_3_4_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_SCG, TPS65219_REG_INT_LDO_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_OC, TPS65219_REG_INT_LDO_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_UV, TPS65219_REG_INT_LDO_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_SCG, TPS65219_REG_INT_LDO_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_OC, TPS65219_REG_INT_LDO_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_UV, TPS65219_REG_INT_LDO_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_SCG, TPS65219_REG_INT_BUCK_3_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_OC, TPS65219_REG_INT_BUCK_3_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_NEG_OC, TPS65219_REG_INT_BUCK_3_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_UV, TPS65219_REG_INT_BUCK_3_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_SCG, TPS65219_REG_INT_BUCK_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_OC, TPS65219_REG_INT_BUCK_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_NEG_OC, TPS65219_REG_INT_BUCK_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_UV, TPS65219_REG_INT_BUCK_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_SCG, TPS65219_REG_INT_BUCK_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_OC, TPS65219_REG_INT_BUCK_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_NEG_OC, TPS65219_REG_INT_BUCK_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_UV, TPS65219_REG_INT_BUCK_1_2_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_3_WARM, TPS65219_REG_INT_SYS_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_2_WARM, TPS65219_REG_INT_SYS_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_1_WARM, TPS65219_REG_INT_SYS_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_0_WARM, TPS65219_REG_INT_SYS_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_3_HOT, TPS65219_REG_INT_SYS_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_2_HOT, TPS65219_REG_INT_SYS_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_1_HOT, TPS65219_REG_INT_SYS_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_SENSOR_0_HOT, TPS65219_REG_INT_SYS_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_RV, TPS65219_REG_INT_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_RV, TPS65219_REG_INT_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_RV, TPS65219_REG_INT_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_RV, TPS65219_REG_INT_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_RV, TPS65219_REG_INT_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_RV, TPS65219_REG_INT_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_RV, TPS65219_REG_INT_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK1_RV_SD, TPS65219_REG_INT_TO_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK2_RV_SD, TPS65219_REG_INT_TO_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_BUCK3_RV_SD, TPS65219_REG_INT_TO_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO1_RV_SD, TPS65219_REG_INT_TO_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO2_RV_SD, TPS65219_REG_INT_TO_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO3_RV_SD, TPS65219_REG_INT_TO_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_LDO4_RV_SD, TPS65219_REG_INT_TO_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_TIMEOUT, TPS65219_REG_INT_TO_RV_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_PB_FALLING_EDGE_DETECT, TPS65219_REG_INT_PB_POS),
> +	TPS65219_REGMAP_IRQ_REG(TPS65219_INT_PB_RISING_EDGE_DETECT, TPS65219_REG_INT_PB_POS),
> +};
> +
> +static struct regmap_irq_chip tps65219_irq_chip = {
> +	.name = "tps65219_irq",
> +	.main_status = TPS65219_REG_INT_SOURCE,
> +	.num_main_regs = 1,
> +	.num_main_status_bits = 8,
> +	.irqs = tps65219_irqs,
> +	.num_irqs = ARRAY_SIZE(tps65219_irqs),
> +	.status_base = TPS65219_REG_INT_LDO_3_4,
> +	.ack_base = TPS65219_REG_INT_LDO_3_4,
> +	.clear_ack = 1,
> +	.num_regs = 8,
> +	.sub_reg_offsets = tps65219_sub_irq_offsets,
> +};
> +
> +static int tps65219_probe(struct i2c_client *client)
> +{
> +	struct tps65219 *tps;
> +	unsigned int chipid;
> +	bool pwr_button;
> +	int ret;
> +
> +	tps = devm_kzalloc(&client->dev, sizeof(*tps), GFP_KERNEL);
> +	if (!tps)
> +		return -ENOMEM;
> +
> +	i2c_set_clientdata(client, tps);
> +
> +	tps->dev = &client->dev;
> +
> +	tps->regmap = devm_regmap_init_i2c(client, &tps65219_regmap_config);
> +	if (IS_ERR(tps->regmap)) {
> +		ret = PTR_ERR(tps->regmap);
> +		dev_err(tps->dev, "Failed to allocate register map: %d\n", ret);
> +		return ret;
> +	}
> +
> +	ret = devm_regmap_add_irq_chip(&client->dev, tps->regmap, client->irq,
> +				       IRQF_ONESHOT, 0, &tps65219_irq_chip,
> +				       &tps->irq_data);
> +	if (ret)
> +		return ret;
> +
> +	ret = regmap_read(tps->regmap, TPS65219_REG_TI_DEV_ID, &chipid);
> +	if (ret) {
> +		dev_err(tps->dev, "Failed to read device ID: %d\n", ret);
> +		return ret;
> +	}
> +
> +	ret = devm_mfd_add_devices(tps->dev, PLATFORM_DEVID_AUTO,
> +				   tps65219_cells, ARRAY_SIZE(tps65219_cells),
> +				   NULL, 0, regmap_irq_get_domain(tps->irq_data));
> +	if (ret) {
> +		dev_err(tps->dev, "Failed to add child devices: %d\n", ret);
> +		return ret;
> +	}
> +
> +	pwr_button = of_property_read_bool(tps->dev->of_node, "ti,power-button");
> +	if (pwr_button) {
> +		ret = devm_mfd_add_devices(tps->dev, PLATFORM_DEVID_AUTO,
> +					   &tps65219_pwrbutton_cell, 1, NULL, 0,
> +					   regmap_irq_get_domain(tps->irq_data));
> +		if (ret) {
> +			dev_err(tps->dev, "Failed to add power-button: %d\n", ret);
> +			return ret;
> +		}
> +	}
> +
> +	tps->nb = pmic_rst_restart_nb;
> +	ret = register_restart_handler(&tps->nb);
> +	if (ret) {
> +		dev_err(tps->dev, "cannot register restart handler, %d\n", ret);
> +		return ret;
> +	}
> +
> +	return 0;
> +}
> +
> +static const struct of_device_id of_tps65219_match_table[] = {
> +	{ .compatible = "ti,tps65219", },
> +	{}
> +};
> +MODULE_DEVICE_TABLE(of, of_tps65219_match_table);
> +
> +static struct i2c_driver tps65219_driver = {
> +	.driver		= {
> +		.name	= "tps65219",
> +		.of_match_table = of_tps65219_match_table,
> +	},
> +	.probe_new	= tps65219_probe,
> +};
> +module_i2c_driver(tps65219_driver);
> +
> +MODULE_AUTHOR("Jerome Neanne <jneanne@baylibre.com>");
> +MODULE_DESCRIPTION("TPS65219 power management IC driver");
> +MODULE_LICENSE("GPL");
> diff --git a/include/linux/mfd/tps65219.h b/include/linux/mfd/tps65219.h
> new file mode 100644
> index 000000000000..2c1cf92e92ac
> --- /dev/null
> +++ b/include/linux/mfd/tps65219.h
> @@ -0,0 +1,345 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/*
> + * Functions to access TPS65219 power management IC.

Nit: Power Management IC

> + * Copyright (C) 2022 BayLibre Incorporated - https://www.baylibre.com/
> + */
> +
> +#ifndef MFD_TPS65219_H
> +#define MFD_TPS65219_H
> +
> +#include <linux/bitops.h>
> +#include <linux/notifier.h>
> +#include <linux/regulator/driver.h>
> +
> +struct regmap;
> +struct regmap_irq_chip_data;
> +
> +#define TPS65219_1V35					1350000
> +#define TPS65219_1V8					1800000
> +
> +/* TPS chip id list */
> +#define TPS65219					0xF0
> +
> +/* I2C ID for TPS65219 part */
> +#define TPS65219_I2C_ID					0x24
> +
> +/* All register addresses */
> +#define TPS65219_REG_TI_DEV_ID				0x00
> +#define TPS65219_REG_NVM_ID				0x01
> +#define TPS65219_REG_ENABLE_CTRL			0x02
> +#define TPS65219_REG_BUCKS_CONFIG			0x03
> +#define TPS65219_REG_LDO4_VOUT				0x04
> +#define TPS65219_REG_LDO3_VOUT				0x05
> +#define TPS65219_REG_LDO2_VOUT				0x06
> +#define TPS65219_REG_LDO1_VOUT				0x07
> +#define TPS65219_REG_BUCK3_VOUT				0x8
> +#define TPS65219_REG_BUCK2_VOUT				0x9
> +#define TPS65219_REG_BUCK1_VOUT				0xA
> +#define TPS65219_REG_LDO4_SEQUENCE_SLOT			0xB
> +#define TPS65219_REG_LDO3_SEQUENCE_SLOT			0xC
> +#define TPS65219_REG_LDO2_SEQUENCE_SLOT			0xD
> +#define TPS65219_REG_LDO1_SEQUENCE_SLOT			0xE
> +#define TPS65219_REG_BUCK3_SEQUENCE_SLOT		0xF
> +#define TPS65219_REG_BUCK2_SEQUENCE_SLOT		0x10
> +#define TPS65219_REG_BUCK1_SEQUENCE_SLOT		0x11
> +#define TPS65219_REG_nRST_SEQUENCE_SLOT			0x12
> +#define TPS65219_REG_GPIO_SEQUENCE_SLOT			0x13
> +#define TPS65219_REG_GPO2_SEQUENCE_SLOT			0x14
> +#define TPS65219_REG_GPO1_SEQUENCE_SLOT			0x15
> +#define TPS65219_REG_POWER_UP_SLOT_DURATION_1		0x16
> +#define TPS65219_REG_POWER_UP_SLOT_DURATION_2		0x17
> +#define TPS65219_REG_POWER_UP_SLOT_DURATION_3		0x18
> +#define TPS65219_REG_POWER_UP_SLOT_DURATION_4		0x19
> +#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_1		0x1A
> +#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_2		0x1B
> +#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_3		0x1C
> +#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_4		0x1D
> +#define TPS65219_REG_GENERAL_CONFIG			0x1E
> +#define TPS65219_REG_MFP_1_CONFIG			0x1F
> +#define TPS65219_REG_MFP_2_CONFIG			0x20
> +#define TPS65219_REG_STBY_1_CONFIG			0x21
> +#define TPS65219_REG_STBY_2_CONFIG			0x22
> +#define TPS65219_REG_OC_DEGL_CONFIG			0x23
> +/* 'sub irq' MASK registers */
> +#define TPS65219_REG_INT_MASK_UV			0x24
> +#define TPS65219_REG_MASK_CONFIG			0x25
> +
> +#define TPS65219_REG_I2C_ADDRESS_REG			0x26
> +#define TPS65219_REG_USER_GENERAL_NVM_STORAGE		0x27
> +#define TPS65219_REG_MANUFACTURING_VER			0x28
> +#define TPS65219_REG_MFP_CTRL				0x29
> +#define TPS65219_REG_DISCHARGE_CONFIG			0x2A
> +/* main irq registers */
> +#define TPS65219_REG_INT_SOURCE				0x2B
> +/* 'sub irq' registers */
> +#define TPS65219_REG_INT_LDO_3_4			0x2C
> +#define TPS65219_REG_INT_LDO_1_2			0x2D
> +#define TPS65219_REG_INT_BUCK_3				0x2E
> +#define TPS65219_REG_INT_BUCK_1_2			0x2F
> +#define TPS65219_REG_INT_SYSTEM				0x30
> +#define TPS65219_REG_INT_RV				0x31
> +#define TPS65219_REG_INT_TIMEOUT_RV_SD			0x32
> +#define TPS65219_REG_INT_PB				0x33
> +
> +#define TPS65219_REG_INT_LDO_3_4_POS			0
> +#define TPS65219_REG_INT_LDO_1_2_POS			1
> +#define TPS65219_REG_INT_BUCK_3_POS			2
> +#define TPS65219_REG_INT_BUCK_1_2_POS			3
> +#define TPS65219_REG_INT_SYS_POS			4
> +#define TPS65219_REG_INT_RV_POS				5
> +#define TPS65219_REG_INT_TO_RV_POS			6
> +#define TPS65219_REG_INT_PB_POS				7
> +
> +#define TPS65219_REG_USER_NVM_CMD			0x34
> +#define TPS65219_REG_POWER_UP_STATUS			0x35
> +#define TPS65219_REG_SPARE_2				0x36
> +#define TPS65219_REG_SPARE_3				0x37
> +#define TPS65219_REG_FACTORY_CONFIG_2			0x41
> +
> +/* Register field definitions */
> +#define TPS65219_DEVID_REV_MASK				GENMASK(7, 0)
> +#define TPS65219_BUCKS_LDOS_VOUT_VSET_MASK		GENMASK(5, 0)
> +#define TPS65219_BUCKS_UV_THR_SEL_MASK			BIT(6)
> +#define TPS65219_BUCKS_BW_SEL_MASK			BIT(7)
> +#define LDO_BYP_SHIFT					6
> +#define TPS65219_LDOS_BYP_CONFIG_MASK			BIT(LDO_BYP_SHIFT)
> +#define TPS65219_LDOS_LSW_CONFIG_MASK			BIT(7)
> +/* Regulators enable control */
> +#define TPS65219_ENABLE_BUCK1_EN_MASK			BIT(0)
> +#define TPS65219_ENABLE_BUCK2_EN_MASK			BIT(1)
> +#define TPS65219_ENABLE_BUCK3_EN_MASK			BIT(2)
> +#define TPS65219_ENABLE_LDO1_EN_MASK			BIT(3)
> +#define TPS65219_ENABLE_LDO2_EN_MASK			BIT(4)
> +#define TPS65219_ENABLE_LDO3_EN_MASK			BIT(5)
> +#define TPS65219_ENABLE_LDO4_EN_MASK			BIT(6)
> +/* power ON-OFF sequence slot */
> +#define TPS65219_BUCKS_LDOS_SEQUENCE_OFF_SLOT_MASK	GENMASK(3, 0)
> +#define TPS65219_BUCKS_LDOS_SEQUENCE_ON_SLOT_MASK	GENMASK(7, 4)
> +/* TODO: Not needed, same mapping as TPS65219_ENABLE_REGNAME_EN, factorize */
> +#define TPS65219_STBY1_BUCK1_STBY_EN_MASK		BIT(0)
> +#define TPS65219_STBY1_BUCK2_STBY_EN_MASK		BIT(1)
> +#define TPS65219_STBY1_BUCK3_STBY_EN_MASK		BIT(2)
> +#define TPS65219_STBY1_LDO1_STBY_EN_MASK		BIT(3)
> +#define TPS65219_STBY1_LDO2_STBY_EN_MASK		BIT(4)
> +#define TPS65219_STBY1_LDO3_STBY_EN_MASK		BIT(5)
> +#define TPS65219_STBY1_LDO4_STBY_EN_MASK		BIT(6)
> +/* STBY_2 config */
> +#define TPS65219_STBY2_GPO1_STBY_EN_MASK		BIT(0)
> +#define TPS65219_STBY2_GPO2_STBY_EN_MASK		BIT(1)
> +#define TPS65219_STBY2_GPIO_STBY_EN_MASK		BIT(2)
> +/* MFP Control */
> +#define TPS65219_MFP_I2C_OFF_REQ_MASK			BIT(0)
> +#define TPS65219_MFP_STBY_I2C_CTRL_MASK			BIT(1)
> +#define TPS65219_MFP_COLD_RESET_I2C_CTRL_MASK		BIT(2)
> +#define TPS65219_MFP_WARM_RESET_I2C_CTRL_MASK		BIT(3)
> +#define TPS65219_MFP_GPIO_STATUS_MASK			BIT(4)
> +/* MFP_1 Config */
> +#define TPS65219_MFP_1_VSEL_DDR_SEL_MASK		BIT(0)
> +#define TPS65219_MFP_1_VSEL_SD_POL_MASK			BIT(1)
> +#define TPS65219_MFP_1_VSEL_RAIL_MASK			BIT(2)
> +/* MFP_2 Config */
> +#define TPS65219_MFP_2_MODE_STBY_MASK			GENMASK(1, 0)
> +#define TPS65219_MFP_2_MODE_RESET_MASK			BIT(2)
> +#define TPS65219_MFP_2_EN_PB_VSENSE_DEGL_MASK		BIT(3)
> +#define TPS65219_MFP_2_EN_PB_VSENSE_MASK		GENMASK(5, 4)
> +#define TPS65219_MFP_2_WARM_COLD_RESET_MASK		BIT(6)
> +#define TPS65219_MFP_2_PU_ON_FSD_MASK			BIT(7)
> +#define TPS65219_MFP_2_EN				0
> +#define TPS65219_MFP_2_PB				BIT(4)
> +#define TPS65219_MFP_2_VSENSE				BIT(5)
> +/* MASK_UV Config */
> +#define TPS65219_REG_MASK_UV_LDO1_UV_MASK		BIT(0)
> +#define TPS65219_REG_MASK_UV_LDO2_UV_MASK		BIT(1)
> +#define TPS65219_REG_MASK_UV_LDO3_UV_MASK		BIT(2)
> +#define TPS65219_REG_MASK_UV_LDO4_UV_MASK		BIT(3)
> +#define TPS65219_REG_MASK_UV_BUCK1_UV_MASK		BIT(4)
> +#define TPS65219_REG_MASK_UV_BUCK2_UV_MASK		BIT(5)
> +#define TPS65219_REG_MASK_UV_BUCK3_UV_MASK		BIT(6)
> +#define TPS65219_REG_MASK_UV_RETRY_MASK			BIT(7)
> +/* MASK Config */
> +// SENSOR_N_WARM_MASK already defined in Thermal
> +#define TPS65219_REG_MASK_INT_FOR_RV_MASK		BIT(4)
> +#define TPS65219_REG_MASK_EFFECT_MASK			GENMASK(2, 1)
> +#define TPS65219_REG_MASK_INT_FOR_PB_MASK		BIT(7)
> +/* UnderVoltage - Short to GND - OverCurrent*/
> +/* LDO3-4 */
> +#define TPS65219_INT_LDO3_SCG_MASK			BIT(0)
> +#define TPS65219_INT_LDO3_OC_MASK			BIT(1)
> +#define TPS65219_INT_LDO3_UV_MASK			BIT(2)
> +#define TPS65219_INT_LDO4_SCG_MASK			BIT(3)
> +#define TPS65219_INT_LDO4_OC_MASK			BIT(4)
> +#define TPS65219_INT_LDO4_UV_MASK			BIT(5)
> +/* LDO1-2 */
> +#define TPS65219_INT_LDO1_SCG_MASK			BIT(0)
> +#define TPS65219_INT_LDO1_OC_MASK			BIT(1)
> +#define TPS65219_INT_LDO1_UV_MASK			BIT(2)
> +#define TPS65219_INT_LDO2_SCG_MASK			BIT(3)
> +#define TPS65219_INT_LDO2_OC_MASK			BIT(4)
> +#define TPS65219_INT_LDO2_UV_MASK			BIT(5)
> +/* BUCK3 */
> +#define TPS65219_INT_BUCK3_SCG_MASK			BIT(0)
> +#define TPS65219_INT_BUCK3_OC_MASK			BIT(1)
> +#define TPS65219_INT_BUCK3_NEG_OC_MASK			BIT(2)
> +#define TPS65219_INT_BUCK3_UV_MASK			BIT(3)
> +/* BUCK1-2 */
> +#define TPS65219_INT_BUCK1_SCG_MASK			BIT(0)
> +#define TPS65219_INT_BUCK1_OC_MASK			BIT(1)
> +#define TPS65219_INT_BUCK1_NEG_OC_MASK			BIT(2)
> +#define TPS65219_INT_BUCK1_UV_MASK			BIT(3)
> +#define TPS65219_INT_BUCK2_SCG_MASK			BIT(4)
> +#define TPS65219_INT_BUCK2_OC_MASK			BIT(5)
> +#define TPS65219_INT_BUCK2_NEG_OC_MASK			BIT(6)
> +#define TPS65219_INT_BUCK2_UV_MASK			BIT(7)
> +/* Thermal Sensor  */
> +#define TPS65219_INT_SENSOR_3_WARM_MASK			BIT(0)
> +#define TPS65219_INT_SENSOR_2_WARM_MASK			BIT(1)
> +#define TPS65219_INT_SENSOR_1_WARM_MASK			BIT(2)
> +#define TPS65219_INT_SENSOR_0_WARM_MASK			BIT(3)
> +#define TPS65219_INT_SENSOR_3_HOT_MASK			BIT(4)
> +#define TPS65219_INT_SENSOR_2_HOT_MASK			BIT(5)
> +#define TPS65219_INT_SENSOR_1_HOT_MASK			BIT(6)
> +#define TPS65219_INT_SENSOR_0_HOT_MASK			BIT(7)
> +/* Residual Voltage */
> +#define TPS65219_INT_BUCK1_RV_MASK			BIT(0)
> +#define TPS65219_INT_BUCK2_RV_MASK			BIT(1)
> +#define TPS65219_INT_BUCK3_RV_MASK			BIT(2)
> +#define TPS65219_INT_LDO1_RV_MASK			BIT(3)
> +#define TPS65219_INT_LDO2_RV_MASK			BIT(4)
> +#define TPS65219_INT_LDO3_RV_MASK			BIT(5)
> +#define TPS65219_INT_LDO4_RV_MASK			BIT(6)
> +/* Residual Voltage ShutDown */
> +#define TPS65219_INT_BUCK1_RV_SD_MASK			BIT(0)
> +#define TPS65219_INT_BUCK2_RV_SD_MASK			BIT(1)
> +#define TPS65219_INT_BUCK3_RV_SD_MASK			BIT(2)
> +#define TPS65219_INT_LDO1_RV_SD_MASK			BIT(3)
> +#define TPS65219_INT_LDO2_RV_SD_MASK			BIT(4)
> +#define TPS65219_INT_LDO3_RV_SD_MASK			BIT(5)
> +#define TPS65219_INT_LDO4_RV_SD_MASK			BIT(6)
> +#define TPS65219_INT_TIMEOUT_MASK			BIT(7)
> +/* Power Button */
> +#define TPS65219_INT_PB_FALLING_EDGE_DETECT_MASK	BIT(0)
> +#define TPS65219_INT_PB_RISING_EDGE_DETECT_MASK		BIT(1)
> +#define TPS65219_INT_PB_REAL_TIME_STATUS_MASK		BIT(2)
> +
> +#define TPS65219_PB_POS					7
> +#define TPS65219_TO_RV_POS				6
> +#define TPS65219_RV_POS					5
> +#define TPS65219_SYS_POS				4
> +#define TPS65219_BUCK_1_2_POS				3
> +#define TPS65219_BUCK_3_POS				2
> +#define TPS65219_LDO_1_2_POS				1
> +#define TPS65219_LDO_3_4_POS				0
> +
> +/* IRQs */
> +enum {
> +	/* LDO3-4 register IRQs */
> +	TPS65219_INT_LDO3_SCG,
> +	TPS65219_INT_LDO3_OC,
> +	TPS65219_INT_LDO3_UV,
> +	TPS65219_INT_LDO4_SCG,
> +	TPS65219_INT_LDO4_OC,
> +	TPS65219_INT_LDO4_UV,
> +	/* LDO1-2 */
> +	TPS65219_INT_LDO1_SCG,
> +	TPS65219_INT_LDO1_OC,
> +	TPS65219_INT_LDO1_UV,
> +	TPS65219_INT_LDO2_SCG,
> +	TPS65219_INT_LDO2_OC,
> +	TPS65219_INT_LDO2_UV,
> +	/* BUCK3 */
> +	TPS65219_INT_BUCK3_SCG,
> +	TPS65219_INT_BUCK3_OC,
> +	TPS65219_INT_BUCK3_NEG_OC,
> +	TPS65219_INT_BUCK3_UV,
> +	/* BUCK1-2 */
> +	TPS65219_INT_BUCK1_SCG,
> +	TPS65219_INT_BUCK1_OC,
> +	TPS65219_INT_BUCK1_NEG_OC,
> +	TPS65219_INT_BUCK1_UV,
> +	TPS65219_INT_BUCK2_SCG,
> +	TPS65219_INT_BUCK2_OC,
> +	TPS65219_INT_BUCK2_NEG_OC,
> +	TPS65219_INT_BUCK2_UV,
> +	/* Thermal Sensor  */
> +	TPS65219_INT_SENSOR_3_WARM,
> +	TPS65219_INT_SENSOR_2_WARM,
> +	TPS65219_INT_SENSOR_1_WARM,
> +	TPS65219_INT_SENSOR_0_WARM,
> +	TPS65219_INT_SENSOR_3_HOT,
> +	TPS65219_INT_SENSOR_2_HOT,
> +	TPS65219_INT_SENSOR_1_HOT,
> +	TPS65219_INT_SENSOR_0_HOT,
> +	/* Residual Voltage */
> +	TPS65219_INT_BUCK1_RV,
> +	TPS65219_INT_BUCK2_RV,
> +	TPS65219_INT_BUCK3_RV,
> +	TPS65219_INT_LDO1_RV,
> +	TPS65219_INT_LDO2_RV,
> +	TPS65219_INT_LDO3_RV,
> +	TPS65219_INT_LDO4_RV,
> +	/* Residual Voltage ShutDown */
> +	TPS65219_INT_BUCK1_RV_SD,
> +	TPS65219_INT_BUCK2_RV_SD,
> +	TPS65219_INT_BUCK3_RV_SD,
> +	TPS65219_INT_LDO1_RV_SD,
> +	TPS65219_INT_LDO2_RV_SD,
> +	TPS65219_INT_LDO3_RV_SD,
> +	TPS65219_INT_LDO4_RV_SD,
> +	TPS65219_INT_TIMEOUT,
> +	/* Power Button */
> +	TPS65219_INT_PB_FALLING_EDGE_DETECT,
> +	TPS65219_INT_PB_RISING_EDGE_DETECT,
> +};
> +
> +enum tps65219_regulator_id {
> +	/* DCDC's */
> +	TPS65219_BUCK_1,
> +	TPS65219_BUCK_2,
> +	TPS65219_BUCK_3,
> +	/* LDOs */
> +	TPS65219_LDO_1,
> +	TPS65219_LDO_2,
> +	TPS65219_LDO_3,
> +	TPS65219_LDO_4,
> +};
> +
> +/* Number of step-down converters available */
> +#define TPS65219_NUM_DCDC		3
> +/* Number of LDO voltage regulators available */
> +#define TPS65219_NUM_LDO		4
> +/* Number of total regulators available */
> +#define TPS65219_NUM_REGULATOR		(TPS65219_NUM_DCDC + TPS65219_NUM_LDO)
> +
> +/* Define the TPS65219 IRQ numbers */
> +enum tps65219_irqs {
> +	/* INT source registers */
> +	TPS65219_TO_RV_SD_SET_IRQ,
> +	TPS65219_RV_SET_IRQ,
> +	TPS65219_SYS_SET_IRQ,
> +	TPS65219_BUCK_1_2_SET_IRQ,
> +	TPS65219_BUCK_3_SET_IRQ,
> +	TPS65219_LDO_1_2_SET_IRQ,
> +	TPS65219_LDO_3_4_SET_IRQ,
> +	TPS65219_PB_SET_IRQ,
> +};
> +
> +/**
> + * struct tps65219 - tps65219 sub-driver chip access routines
> + *
> + * Device data may be used to access the TPS65219 chip
> + *
> + * @dev MFD device
> + * @regmap Regmap for accessing the device registers
> + * @irq_data Regmap irq data used for the irq chip
> + * @nb notifier block for the restart handler
> + */

This header needs work.

Can you try an compile with W=1 please.

> +struct tps65219 {
> +	struct device *dev;
> +	struct regmap *regmap;
> +
> +	struct regmap_irq_chip_data *irq_data;
> +	struct notifier_block nb;
> +};
> +
> +#endif /*  MFD_TPS65219_H */

Superfluous " ".

-- 
Lee Jones [李琼斯]

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
  2022-10-31 11:00     ` Lee Jones
@ 2022-11-04 12:58       ` jerome Neanne
  -1 siblings, 0 replies; 50+ messages in thread
From: jerome Neanne @ 2022-11-04 12:58 UTC (permalink / raw)
  To: Lee Jones
  Cc: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, afd, khilman,
	narmstrong, msp, j-keerthy, linux-kernel, devicetree,
	linux-arm-kernel, linux-input, linux-omap



On 31/10/2022 12:00, Lee Jones wrote:
>> diff --git a/include/linux/mfd/tps65219.h b/include/linux/mfd/tps65219.h
>> new file mode 100644
>> index 000000000000..2c1cf92e92ac
>> --- /dev/null
>> +++ b/include/linux/mfd/tps65219.h

>> +/**
>> + * struct tps65219 - tps65219 sub-driver chip access routines
>> + *
>> + * Device data may be used to access the TPS65219 chip
>> + *
>> + * @dev MFD device
>> + * @regmap Regmap for accessing the device registers
>> + * @irq_data Regmap irq data used for the irq chip
>> + * @nb notifier block for the restart handler
>> + */
> 
> This header needs work.
I'm not sure to get your point here. Just something like below to match 
format or do you expect more:

/**
  * struct tps65219 - tps65219 sub-driver chip access routines
  *
  * Device data may be used to access the TPS65219 chip
  *
  * @dev: MFD device
  * @regmap: Regmap for accessing the device registers
  * @irq_data: Regmap irq data used for the irq chip
  * @nb: notifier block for the restart handler
  */

> 
> Can you try an compile with W=1 please.
This raise one warning on mfd:
drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’ defined 
but not used [-Wunused-function]
    28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
       |            ^~~~~~~~~~~~~~~~~~~~~~
soft_shutdown has been validated and is used in TI baseline even if not 
hooked in upstream version further to this review:
https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/

It was a TI requirement to implement it...
Let me know if you want me to remove this function or if we can keep it 
like this.


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
@ 2022-11-04 12:58       ` jerome Neanne
  0 siblings, 0 replies; 50+ messages in thread
From: jerome Neanne @ 2022-11-04 12:58 UTC (permalink / raw)
  To: Lee Jones
  Cc: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, afd, khilman,
	narmstrong, msp, j-keerthy, linux-kernel, devicetree,
	linux-arm-kernel, linux-input, linux-omap



On 31/10/2022 12:00, Lee Jones wrote:
>> diff --git a/include/linux/mfd/tps65219.h b/include/linux/mfd/tps65219.h
>> new file mode 100644
>> index 000000000000..2c1cf92e92ac
>> --- /dev/null
>> +++ b/include/linux/mfd/tps65219.h

>> +/**
>> + * struct tps65219 - tps65219 sub-driver chip access routines
>> + *
>> + * Device data may be used to access the TPS65219 chip
>> + *
>> + * @dev MFD device
>> + * @regmap Regmap for accessing the device registers
>> + * @irq_data Regmap irq data used for the irq chip
>> + * @nb notifier block for the restart handler
>> + */
> 
> This header needs work.
I'm not sure to get your point here. Just something like below to match 
format or do you expect more:

/**
  * struct tps65219 - tps65219 sub-driver chip access routines
  *
  * Device data may be used to access the TPS65219 chip
  *
  * @dev: MFD device
  * @regmap: Regmap for accessing the device registers
  * @irq_data: Regmap irq data used for the irq chip
  * @nb: notifier block for the restart handler
  */

> 
> Can you try an compile with W=1 please.
This raise one warning on mfd:
drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’ defined 
but not used [-Wunused-function]
    28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
       |            ^~~~~~~~~~~~~~~~~~~~~~
soft_shutdown has been validated and is used in TI baseline even if not 
hooked in upstream version further to this review:
https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/

It was a TI requirement to implement it...
Let me know if you want me to remove this function or if we can keep it 
like this.


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
  2022-11-04 12:58       ` jerome Neanne
@ 2022-11-04 13:56         ` Lee Jones
  -1 siblings, 0 replies; 50+ messages in thread
From: Lee Jones @ 2022-11-04 13:56 UTC (permalink / raw)
  To: jerome Neanne
  Cc: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, afd, khilman,
	narmstrong, msp, j-keerthy, linux-kernel, devicetree,
	linux-arm-kernel, linux-input, linux-omap

On Fri, 04 Nov 2022, jerome Neanne wrote:

> 
> 
> On 31/10/2022 12:00, Lee Jones wrote:
> > > diff --git a/include/linux/mfd/tps65219.h b/include/linux/mfd/tps65219.h
> > > new file mode 100644
> > > index 000000000000..2c1cf92e92ac
> > > --- /dev/null
> > > +++ b/include/linux/mfd/tps65219.h
> 
> > > +/**
> > > + * struct tps65219 - tps65219 sub-driver chip access routines
> > > + *
> > > + * Device data may be used to access the TPS65219 chip
> > > + *
> > > + * @dev MFD device
> > > + * @regmap Regmap for accessing the device registers
> > > + * @irq_data Regmap irq data used for the irq chip
> > > + * @nb notifier block for the restart handler
> > > + */
> > 
> > This header needs work.
> I'm not sure to get your point here. Just something like below to match
> format or do you expect more:
> 
> /**
>  * struct tps65219 - tps65219 sub-driver chip access routines
>  *
>  * Device data may be used to access the TPS65219 chip
>  *
>  * @dev: MFD device
>  * @regmap: Regmap for accessing the device registers
>  * @irq_data: Regmap irq data used for the irq chip
>  * @nb: notifier block for the restart handler
>  */
> 
> > 
> > Can you try an compile with W=1 please.
> This raise one warning on mfd:

Is that before or after the header was fixed-up?

> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’ defined but
> not used [-Wunused-function]
>    28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>       |            ^~~~~~~~~~~~~~~~~~~~~~
> soft_shutdown has been validated and is used in TI baseline even if not
> hooked in upstream version further to this review:
> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/

Will tps65219_soft_shutdown() be used?

I think it should be removed until it's utilised in Mainline.

> It was a TI requirement to implement it...
> Let me know if you want me to remove this function or if we can keep it like
> this.
> 

-- 
Lee Jones [李琼斯]

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
@ 2022-11-04 13:56         ` Lee Jones
  0 siblings, 0 replies; 50+ messages in thread
From: Lee Jones @ 2022-11-04 13:56 UTC (permalink / raw)
  To: jerome Neanne
  Cc: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, afd, khilman,
	narmstrong, msp, j-keerthy, linux-kernel, devicetree,
	linux-arm-kernel, linux-input, linux-omap

On Fri, 04 Nov 2022, jerome Neanne wrote:

> 
> 
> On 31/10/2022 12:00, Lee Jones wrote:
> > > diff --git a/include/linux/mfd/tps65219.h b/include/linux/mfd/tps65219.h
> > > new file mode 100644
> > > index 000000000000..2c1cf92e92ac
> > > --- /dev/null
> > > +++ b/include/linux/mfd/tps65219.h
> 
> > > +/**
> > > + * struct tps65219 - tps65219 sub-driver chip access routines
> > > + *
> > > + * Device data may be used to access the TPS65219 chip
> > > + *
> > > + * @dev MFD device
> > > + * @regmap Regmap for accessing the device registers
> > > + * @irq_data Regmap irq data used for the irq chip
> > > + * @nb notifier block for the restart handler
> > > + */
> > 
> > This header needs work.
> I'm not sure to get your point here. Just something like below to match
> format or do you expect more:
> 
> /**
>  * struct tps65219 - tps65219 sub-driver chip access routines
>  *
>  * Device data may be used to access the TPS65219 chip
>  *
>  * @dev: MFD device
>  * @regmap: Regmap for accessing the device registers
>  * @irq_data: Regmap irq data used for the irq chip
>  * @nb: notifier block for the restart handler
>  */
> 
> > 
> > Can you try an compile with W=1 please.
> This raise one warning on mfd:

Is that before or after the header was fixed-up?

> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’ defined but
> not used [-Wunused-function]
>    28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>       |            ^~~~~~~~~~~~~~~~~~~~~~
> soft_shutdown has been validated and is used in TI baseline even if not
> hooked in upstream version further to this review:
> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/

Will tps65219_soft_shutdown() be used?

I think it should be removed until it's utilised in Mainline.

> It was a TI requirement to implement it...
> Let me know if you want me to remove this function or if we can keep it like
> this.
> 

-- 
Lee Jones [李琼斯]

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
  2022-11-04 13:56         ` Lee Jones
@ 2022-11-04 14:04           ` jerome Neanne
  -1 siblings, 0 replies; 50+ messages in thread
From: jerome Neanne @ 2022-11-04 14:04 UTC (permalink / raw)
  To: Lee Jones
  Cc: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, afd, khilman,
	narmstrong, msp, j-keerthy, linux-kernel, devicetree,
	linux-arm-kernel, linux-input, linux-omap



On 04/11/2022 14:56, Lee Jones wrote:
> On Fri, 04 Nov 2022, jerome Neanne wrote:
> 
>>
>>
>> On 31/10/2022 12:00, Lee Jones wrote:
>>>> diff --git a/include/linux/mfd/tps65219.h b/include/linux/mfd/tps65219.h
>>>> new file mode 100644
>>>> index 000000000000..2c1cf92e92ac
>>>> --- /dev/null
>>>> +++ b/include/linux/mfd/tps65219.h
>>
>>>> +/**
>>>> + * struct tps65219 - tps65219 sub-driver chip access routines
>>>> + *
>>>> + * Device data may be used to access the TPS65219 chip
>>>> + *
>>>> + * @dev MFD device
>>>> + * @regmap Regmap for accessing the device registers
>>>> + * @irq_data Regmap irq data used for the irq chip
>>>> + * @nb notifier block for the restart handler
>>>> + */
>>>
>>> This header needs work.
>> I'm not sure to get your point here. Just something like below to match
>> format or do you expect more:
>>
>> /**
>>   * struct tps65219 - tps65219 sub-driver chip access routines
>>   *
>>   * Device data may be used to access the TPS65219 chip
>>   *
>>   * @dev: MFD device
>>   * @regmap: Regmap for accessing the device registers
>>   * @irq_data: Regmap irq data used for the irq chip
>>   * @nb: notifier block for the restart handler
>>   */
>>
>>>
>>> Can you try an compile with W=1 please.
>> This raise one warning on mfd:
> 
> Is that before or after the header was fixed-up?
After the header was fixed-up.
> 
>> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’ defined but
>> not used [-Wunused-function]
>>     28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>>        |            ^~~~~~~~~~~~~~~~~~~~~~
>> soft_shutdown has been validated and is used in TI baseline even if not
>> hooked in upstream version further to this review:
>> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/
> 
> Will tps65219_soft_shutdown() be used?
> 
> I think it should be removed until it's utilised in Mainline.
> 
I'll remove then

Thanks for your feedback

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
@ 2022-11-04 14:04           ` jerome Neanne
  0 siblings, 0 replies; 50+ messages in thread
From: jerome Neanne @ 2022-11-04 14:04 UTC (permalink / raw)
  To: Lee Jones
  Cc: lgirdwood, broonie, robh+dt, nm, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, afd, khilman,
	narmstrong, msp, j-keerthy, linux-kernel, devicetree,
	linux-arm-kernel, linux-input, linux-omap



On 04/11/2022 14:56, Lee Jones wrote:
> On Fri, 04 Nov 2022, jerome Neanne wrote:
> 
>>
>>
>> On 31/10/2022 12:00, Lee Jones wrote:
>>>> diff --git a/include/linux/mfd/tps65219.h b/include/linux/mfd/tps65219.h
>>>> new file mode 100644
>>>> index 000000000000..2c1cf92e92ac
>>>> --- /dev/null
>>>> +++ b/include/linux/mfd/tps65219.h
>>
>>>> +/**
>>>> + * struct tps65219 - tps65219 sub-driver chip access routines
>>>> + *
>>>> + * Device data may be used to access the TPS65219 chip
>>>> + *
>>>> + * @dev MFD device
>>>> + * @regmap Regmap for accessing the device registers
>>>> + * @irq_data Regmap irq data used for the irq chip
>>>> + * @nb notifier block for the restart handler
>>>> + */
>>>
>>> This header needs work.
>> I'm not sure to get your point here. Just something like below to match
>> format or do you expect more:
>>
>> /**
>>   * struct tps65219 - tps65219 sub-driver chip access routines
>>   *
>>   * Device data may be used to access the TPS65219 chip
>>   *
>>   * @dev: MFD device
>>   * @regmap: Regmap for accessing the device registers
>>   * @irq_data: Regmap irq data used for the irq chip
>>   * @nb: notifier block for the restart handler
>>   */
>>
>>>
>>> Can you try an compile with W=1 please.
>> This raise one warning on mfd:
> 
> Is that before or after the header was fixed-up?
After the header was fixed-up.
> 
>> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’ defined but
>> not used [-Wunused-function]
>>     28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>>        |            ^~~~~~~~~~~~~~~~~~~~~~
>> soft_shutdown has been validated and is used in TI baseline even if not
>> hooked in upstream version further to this review:
>> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/
> 
> Will tps65219_soft_shutdown() be used?
> 
> I think it should be removed until it's utilised in Mainline.
> 
I'll remove then

Thanks for your feedback

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
  2022-11-04 12:58       ` jerome Neanne
@ 2022-11-05  0:01         ` Nishanth Menon
  -1 siblings, 0 replies; 50+ messages in thread
From: Nishanth Menon @ 2022-11-05  0:01 UTC (permalink / raw)
  To: jerome Neanne
  Cc: Lee Jones, lgirdwood, broonie, robh+dt, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, afd, khilman,
	narmstrong, msp, j-keerthy, linux-kernel, devicetree,
	linux-arm-kernel, linux-input, linux-omap

On 13:58-20221104, jerome Neanne wrote:
> 
[...]

> 
> > 
> > Can you try an compile with W=1 please.
> This raise one warning on mfd:
> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’ defined but
> not used [-Wunused-function]
>    28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>       |            ^~~~~~~~~~~~~~~~~~~~~~
> soft_shutdown has been validated and is used in TI baseline even if not
> hooked in upstream version further to this review:
> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/
> 
> It was a TI requirement to implement it...
> Let me know if you want me to remove this function or if we can keep it like
> this.

There are platforms without psci, correct? I think the comment was to
drop the force override with system-power-controller property,

if (!pm_power_off) {
	tps65219_i2c_client = client;
	pm_power_off = &tps65219_pm_power_off;
}

Could still be valid for such platforms, no? I do see that the
capability that the PMIC has - which is software shutdown is a valid
feature that we support in many different PMIC drivers. Is'nt the job of
the driver to introduce the functionality in a manner that is
appropriate to the OS framework?

-- 
Regards,
Nishanth Menon
Key (0xDDB5849D1736249D) / Fingerprint: F8A2 8693 54EB 8232 17A3  1A34 DDB5 849D 1736 249D

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
@ 2022-11-05  0:01         ` Nishanth Menon
  0 siblings, 0 replies; 50+ messages in thread
From: Nishanth Menon @ 2022-11-05  0:01 UTC (permalink / raw)
  To: jerome Neanne
  Cc: Lee Jones, lgirdwood, broonie, robh+dt, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, afd, khilman,
	narmstrong, msp, j-keerthy, linux-kernel, devicetree,
	linux-arm-kernel, linux-input, linux-omap

On 13:58-20221104, jerome Neanne wrote:
> 
[...]

> 
> > 
> > Can you try an compile with W=1 please.
> This raise one warning on mfd:
> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’ defined but
> not used [-Wunused-function]
>    28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>       |            ^~~~~~~~~~~~~~~~~~~~~~
> soft_shutdown has been validated and is used in TI baseline even if not
> hooked in upstream version further to this review:
> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/
> 
> It was a TI requirement to implement it...
> Let me know if you want me to remove this function or if we can keep it like
> this.

There are platforms without psci, correct? I think the comment was to
drop the force override with system-power-controller property,

if (!pm_power_off) {
	tps65219_i2c_client = client;
	pm_power_off = &tps65219_pm_power_off;
}

Could still be valid for such platforms, no? I do see that the
capability that the PMIC has - which is software shutdown is a valid
feature that we support in many different PMIC drivers. Is'nt the job of
the driver to introduce the functionality in a manner that is
appropriate to the OS framework?

-- 
Regards,
Nishanth Menon
Key (0xDDB5849D1736249D) / Fingerprint: F8A2 8693 54EB 8232 17A3  1A34 DDB5 849D 1736 249D

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
  2022-11-05  0:01         ` Nishanth Menon
@ 2022-11-07 21:14           ` Kevin Hilman
  -1 siblings, 0 replies; 50+ messages in thread
From: Kevin Hilman @ 2022-11-07 21:14 UTC (permalink / raw)
  To: Nishanth Menon, jerome Neanne
  Cc: Lee Jones, lgirdwood, broonie, robh+dt, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, afd, narmstrong,
	msp, j-keerthy, linux-kernel, devicetree, linux-arm-kernel,
	linux-input, linux-omap

Nishanth Menon <nm@ti.com> writes:

> On 13:58-20221104, jerome Neanne wrote:
>> 
> [...]
>
>> 
>> > 
>> > Can you try an compile with W=1 please.
>> This raise one warning on mfd:
>> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’ defined but
>> not used [-Wunused-function]
>>    28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>>       |            ^~~~~~~~~~~~~~~~~~~~~~
>> soft_shutdown has been validated and is used in TI baseline even if not
>> hooked in upstream version further to this review:
>> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/
>> 
>> It was a TI requirement to implement it...
>> Let me know if you want me to remove this function or if we can keep it like
>> this.
>
> There are platforms without psci, correct? I think the comment was to
> drop the force override with system-power-controller property,
>
> if (!pm_power_off) {
> 	tps65219_i2c_client = client;
> 	pm_power_off = &tps65219_pm_power_off;
> }
>
> Could still be valid for such platforms, no? I do see that the
> capability that the PMIC has - which is software shutdown is a valid
> feature that we support in many different PMIC drivers. Is'nt the job of
> the driver to introduce the functionality in a manner that is
> appropriate to the OS framework?

Yeah, I think Nishanth is right here.

We should probably keep the `if (!pm_power_off)` part so the PMIC will
be used if PSCI is not, but it also allows an easy way to test/use the PMIC
shutdown functionality downstream if needed.

Kevin

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
@ 2022-11-07 21:14           ` Kevin Hilman
  0 siblings, 0 replies; 50+ messages in thread
From: Kevin Hilman @ 2022-11-07 21:14 UTC (permalink / raw)
  To: Nishanth Menon, jerome Neanne
  Cc: Lee Jones, lgirdwood, broonie, robh+dt, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, afd, narmstrong,
	msp, j-keerthy, linux-kernel, devicetree, linux-arm-kernel,
	linux-input, linux-omap

Nishanth Menon <nm@ti.com> writes:

> On 13:58-20221104, jerome Neanne wrote:
>> 
> [...]
>
>> 
>> > 
>> > Can you try an compile with W=1 please.
>> This raise one warning on mfd:
>> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’ defined but
>> not used [-Wunused-function]
>>    28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>>       |            ^~~~~~~~~~~~~~~~~~~~~~
>> soft_shutdown has been validated and is used in TI baseline even if not
>> hooked in upstream version further to this review:
>> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/
>> 
>> It was a TI requirement to implement it...
>> Let me know if you want me to remove this function or if we can keep it like
>> this.
>
> There are platforms without psci, correct? I think the comment was to
> drop the force override with system-power-controller property,
>
> if (!pm_power_off) {
> 	tps65219_i2c_client = client;
> 	pm_power_off = &tps65219_pm_power_off;
> }
>
> Could still be valid for such platforms, no? I do see that the
> capability that the PMIC has - which is software shutdown is a valid
> feature that we support in many different PMIC drivers. Is'nt the job of
> the driver to introduce the functionality in a manner that is
> appropriate to the OS framework?

Yeah, I think Nishanth is right here.

We should probably keep the `if (!pm_power_off)` part so the PMIC will
be used if PSCI is not, but it also allows an easy way to test/use the PMIC
shutdown functionality downstream if needed.

Kevin

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
  2022-11-07 21:14           ` Kevin Hilman
@ 2022-11-09 21:59             ` Andrew Davis
  -1 siblings, 0 replies; 50+ messages in thread
From: Andrew Davis @ 2022-11-09 21:59 UTC (permalink / raw)
  To: Kevin Hilman, Nishanth Menon, jerome Neanne
  Cc: Lee Jones, lgirdwood, broonie, robh+dt, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, narmstrong, msp,
	j-keerthy, linux-kernel, devicetree, linux-arm-kernel,
	linux-input, linux-omap

On 11/7/22 3:14 PM, Kevin Hilman wrote:
> Nishanth Menon <nm@ti.com> writes:
> 
>> On 13:58-20221104, jerome Neanne wrote:
>>>
>> [...]
>>
>>>
>>>>
>>>> Can you try an compile with W=1 please.
>>> This raise one warning on mfd:
>>> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’ defined but
>>> not used [-Wunused-function]
>>>     28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>>>        |            ^~~~~~~~~~~~~~~~~~~~~~
>>> soft_shutdown has been validated and is used in TI baseline even if not
>>> hooked in upstream version further to this review:
>>> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/
>>>
>>> It was a TI requirement to implement it...
>>> Let me know if you want me to remove this function or if we can keep it like
>>> this.
>>
>> There are platforms without psci, correct? I think the comment was to
>> drop the force override with system-power-controller property,
>>
>> if (!pm_power_off) {
>> 	tps65219_i2c_client = client;
>> 	pm_power_off = &tps65219_pm_power_off;
>> }
>>
>> Could still be valid for such platforms, no? I do see that the
>> capability that the PMIC has - which is software shutdown is a valid
>> feature that we support in many different PMIC drivers. Is'nt the job of
>> the driver to introduce the functionality in a manner that is
>> appropriate to the OS framework?
> 
> Yeah, I think Nishanth is right here.
> 
> We should probably keep the `if (!pm_power_off)` part so the PMIC will
> be used if PSCI is not, but it also allows an easy way to test/use the PMIC
> shutdown functionality downstream if needed.
> 

Then should be using the sys-off handler API[0] so it doesn't block PSCI
which is also switching over[1].

Andrew

[0] https://lwn.net/Articles/894511/
[1] https://www.spinics.net/lists/arm-kernel/msg1024127.html

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
@ 2022-11-09 21:59             ` Andrew Davis
  0 siblings, 0 replies; 50+ messages in thread
From: Andrew Davis @ 2022-11-09 21:59 UTC (permalink / raw)
  To: Kevin Hilman, Nishanth Menon, jerome Neanne
  Cc: Lee Jones, lgirdwood, broonie, robh+dt, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, narmstrong, msp,
	j-keerthy, linux-kernel, devicetree, linux-arm-kernel,
	linux-input, linux-omap

On 11/7/22 3:14 PM, Kevin Hilman wrote:
> Nishanth Menon <nm@ti.com> writes:
> 
>> On 13:58-20221104, jerome Neanne wrote:
>>>
>> [...]
>>
>>>
>>>>
>>>> Can you try an compile with W=1 please.
>>> This raise one warning on mfd:
>>> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’ defined but
>>> not used [-Wunused-function]
>>>     28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>>>        |            ^~~~~~~~~~~~~~~~~~~~~~
>>> soft_shutdown has been validated and is used in TI baseline even if not
>>> hooked in upstream version further to this review:
>>> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/
>>>
>>> It was a TI requirement to implement it...
>>> Let me know if you want me to remove this function or if we can keep it like
>>> this.
>>
>> There are platforms without psci, correct? I think the comment was to
>> drop the force override with system-power-controller property,
>>
>> if (!pm_power_off) {
>> 	tps65219_i2c_client = client;
>> 	pm_power_off = &tps65219_pm_power_off;
>> }
>>
>> Could still be valid for such platforms, no? I do see that the
>> capability that the PMIC has - which is software shutdown is a valid
>> feature that we support in many different PMIC drivers. Is'nt the job of
>> the driver to introduce the functionality in a manner that is
>> appropriate to the OS framework?
> 
> Yeah, I think Nishanth is right here.
> 
> We should probably keep the `if (!pm_power_off)` part so the PMIC will
> be used if PSCI is not, but it also allows an easy way to test/use the PMIC
> shutdown functionality downstream if needed.
> 

Then should be using the sys-off handler API[0] so it doesn't block PSCI
which is also switching over[1].

Andrew

[0] https://lwn.net/Articles/894511/
[1] https://www.spinics.net/lists/arm-kernel/msg1024127.html

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
  2022-11-09 21:59             ` Andrew Davis
@ 2022-11-10  7:12               ` jerome Neanne
  -1 siblings, 0 replies; 50+ messages in thread
From: jerome Neanne @ 2022-11-10  7:12 UTC (permalink / raw)
  To: Andrew Davis, Kevin Hilman, Nishanth Menon
  Cc: Lee Jones, lgirdwood, broonie, robh+dt, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, narmstrong, msp,
	j-keerthy, linux-kernel, devicetree, linux-arm-kernel,
	linux-input, linux-omap



On 09/11/2022 22:59, Andrew Davis wrote:
> On 11/7/22 3:14 PM, Kevin Hilman wrote:
>> Nishanth Menon <nm@ti.com> writes:
>>
>>> On 13:58-20221104, jerome Neanne wrote:
>>>>
>>> [...]
>>>
>>>>
>>>>>
>>>>> Can you try an compile with W=1 please.
>>>> This raise one warning on mfd:
>>>> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’ 
>>>> defined but
>>>> not used [-Wunused-function]
>>>>     28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>>>>        |            ^~~~~~~~~~~~~~~~~~~~~~
>>>> soft_shutdown has been validated and is used in TI baseline even if not
>>>> hooked in upstream version further to this review:
>>>> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/
>>>>
>>>> It was a TI requirement to implement it...
>>>> Let me know if you want me to remove this function or if we can keep 
>>>> it like
>>>> this.
>>>
>>> There are platforms without psci, correct? I think the comment was to
>>> drop the force override with system-power-controller property,
>>>
>>> if (!pm_power_off) {
>>>     tps65219_i2c_client = client;
>>>     pm_power_off = &tps65219_pm_power_off;
>>> }
>>>
>>> Could still be valid for such platforms, no? I do see that the
>>> capability that the PMIC has - which is software shutdown is a valid
>>> feature that we support in many different PMIC drivers. Is'nt the job of
>>> the driver to introduce the functionality in a manner that is
>>> appropriate to the OS framework?
>>
>> Yeah, I think Nishanth is right here.
>>
>> We should probably keep the `if (!pm_power_off)` part so the PMIC will
>> be used if PSCI is not, but it also allows an easy way to test/use the 
>> PMIC
>> shutdown functionality downstream if needed.
>>
> 
> Then should be using the sys-off handler API[0] so it doesn't block PSCI
> which is also switching over[1].
> 
> Andrew
> 
> [0] https://lwn.net/Articles/894511/
> [1] https://www.spinics.net/lists/arm-kernel/msg1024127.html
Can we go for upstream with v7 without tps65219_soft_shutdown. Then if 
everyone agrees with Andrew proposal, I'll submit a separate patch which 
adds implementation of tps65219_soft_shutdown support through sys-off 
handler.

So that we are not blocking upstream in case further 
discussions/alignment are required.

Jerome

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
@ 2022-11-10  7:12               ` jerome Neanne
  0 siblings, 0 replies; 50+ messages in thread
From: jerome Neanne @ 2022-11-10  7:12 UTC (permalink / raw)
  To: Andrew Davis, Kevin Hilman, Nishanth Menon
  Cc: Lee Jones, lgirdwood, broonie, robh+dt, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, narmstrong, msp,
	j-keerthy, linux-kernel, devicetree, linux-arm-kernel,
	linux-input, linux-omap



On 09/11/2022 22:59, Andrew Davis wrote:
> On 11/7/22 3:14 PM, Kevin Hilman wrote:
>> Nishanth Menon <nm@ti.com> writes:
>>
>>> On 13:58-20221104, jerome Neanne wrote:
>>>>
>>> [...]
>>>
>>>>
>>>>>
>>>>> Can you try an compile with W=1 please.
>>>> This raise one warning on mfd:
>>>> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’ 
>>>> defined but
>>>> not used [-Wunused-function]
>>>>     28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>>>>        |            ^~~~~~~~~~~~~~~~~~~~~~
>>>> soft_shutdown has been validated and is used in TI baseline even if not
>>>> hooked in upstream version further to this review:
>>>> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/
>>>>
>>>> It was a TI requirement to implement it...
>>>> Let me know if you want me to remove this function or if we can keep 
>>>> it like
>>>> this.
>>>
>>> There are platforms without psci, correct? I think the comment was to
>>> drop the force override with system-power-controller property,
>>>
>>> if (!pm_power_off) {
>>>     tps65219_i2c_client = client;
>>>     pm_power_off = &tps65219_pm_power_off;
>>> }
>>>
>>> Could still be valid for such platforms, no? I do see that the
>>> capability that the PMIC has - which is software shutdown is a valid
>>> feature that we support in many different PMIC drivers. Is'nt the job of
>>> the driver to introduce the functionality in a manner that is
>>> appropriate to the OS framework?
>>
>> Yeah, I think Nishanth is right here.
>>
>> We should probably keep the `if (!pm_power_off)` part so the PMIC will
>> be used if PSCI is not, but it also allows an easy way to test/use the 
>> PMIC
>> shutdown functionality downstream if needed.
>>
> 
> Then should be using the sys-off handler API[0] so it doesn't block PSCI
> which is also switching over[1].
> 
> Andrew
> 
> [0] https://lwn.net/Articles/894511/
> [1] https://www.spinics.net/lists/arm-kernel/msg1024127.html
Can we go for upstream with v7 without tps65219_soft_shutdown. Then if 
everyone agrees with Andrew proposal, I'll submit a separate patch which 
adds implementation of tps65219_soft_shutdown support through sys-off 
handler.

So that we are not blocking upstream in case further 
discussions/alignment are required.

Jerome

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
  2022-11-10  7:12               ` jerome Neanne
@ 2022-11-10 17:00                 ` Kevin Hilman
  -1 siblings, 0 replies; 50+ messages in thread
From: Kevin Hilman @ 2022-11-10 17:00 UTC (permalink / raw)
  To: jerome Neanne, Andrew Davis, Nishanth Menon
  Cc: Lee Jones, lgirdwood, broonie, robh+dt, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, narmstrong, msp,
	j-keerthy, linux-kernel, devicetree, linux-arm-kernel,
	linux-input, linux-omap

jerome Neanne <jneanne@baylibre.com> writes:

> On 09/11/2022 22:59, Andrew Davis wrote:
>> On 11/7/22 3:14 PM, Kevin Hilman wrote:
>>> Nishanth Menon <nm@ti.com> writes:
>>>
>>>> On 13:58-20221104, jerome Neanne wrote:
>>>>>
>>>> [...]
>>>>
>>>>>
>>>>>>
>>>>>> Can you try an compile with W=1 please.
>>>>> This raise one warning on mfd:
>>>>> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’ 
>>>>> defined but
>>>>> not used [-Wunused-function]
>>>>>     28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>>>>>        |            ^~~~~~~~~~~~~~~~~~~~~~
>>>>> soft_shutdown has been validated and is used in TI baseline even if not
>>>>> hooked in upstream version further to this review:
>>>>> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/
>>>>>
>>>>> It was a TI requirement to implement it...
>>>>> Let me know if you want me to remove this function or if we can keep 
>>>>> it like
>>>>> this.
>>>>
>>>> There are platforms without psci, correct? I think the comment was to
>>>> drop the force override with system-power-controller property,
>>>>
>>>> if (!pm_power_off) {
>>>>     tps65219_i2c_client = client;
>>>>     pm_power_off = &tps65219_pm_power_off;
>>>> }
>>>>
>>>> Could still be valid for such platforms, no? I do see that the
>>>> capability that the PMIC has - which is software shutdown is a valid
>>>> feature that we support in many different PMIC drivers. Is'nt the job of
>>>> the driver to introduce the functionality in a manner that is
>>>> appropriate to the OS framework?
>>>
>>> Yeah, I think Nishanth is right here.
>>>
>>> We should probably keep the `if (!pm_power_off)` part so the PMIC will
>>> be used if PSCI is not, but it also allows an easy way to test/use the 
>>> PMIC
>>> shutdown functionality downstream if needed.
>>>
>> 
>> Then should be using the sys-off handler API[0] so it doesn't block PSCI
>> which is also switching over[1].
>> 
>> Andrew
>> 
>> [0] https://lwn.net/Articles/894511/
>> [1] https://www.spinics.net/lists/arm-kernel/msg1024127.html
> Can we go for upstream with v7 without tps65219_soft_shutdown. Then if 
> everyone agrees with Andrew proposal, I'll submit a separate patch which 
> adds implementation of tps65219_soft_shutdown support through sys-off 
> handler.
>
> So that we are not blocking upstream in case further 
> discussions/alignment are required.

Seems OK to me.  Nishanth?  Andrew?

But I think you'll need to at least submit a v8 without the unused
code/dead code that Lee pointed out.

Kevin

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
@ 2022-11-10 17:00                 ` Kevin Hilman
  0 siblings, 0 replies; 50+ messages in thread
From: Kevin Hilman @ 2022-11-10 17:00 UTC (permalink / raw)
  To: jerome Neanne, Andrew Davis, Nishanth Menon
  Cc: Lee Jones, lgirdwood, broonie, robh+dt, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, narmstrong, msp,
	j-keerthy, linux-kernel, devicetree, linux-arm-kernel,
	linux-input, linux-omap

jerome Neanne <jneanne@baylibre.com> writes:

> On 09/11/2022 22:59, Andrew Davis wrote:
>> On 11/7/22 3:14 PM, Kevin Hilman wrote:
>>> Nishanth Menon <nm@ti.com> writes:
>>>
>>>> On 13:58-20221104, jerome Neanne wrote:
>>>>>
>>>> [...]
>>>>
>>>>>
>>>>>>
>>>>>> Can you try an compile with W=1 please.
>>>>> This raise one warning on mfd:
>>>>> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’ 
>>>>> defined but
>>>>> not used [-Wunused-function]
>>>>>     28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>>>>>        |            ^~~~~~~~~~~~~~~~~~~~~~
>>>>> soft_shutdown has been validated and is used in TI baseline even if not
>>>>> hooked in upstream version further to this review:
>>>>> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/
>>>>>
>>>>> It was a TI requirement to implement it...
>>>>> Let me know if you want me to remove this function or if we can keep 
>>>>> it like
>>>>> this.
>>>>
>>>> There are platforms without psci, correct? I think the comment was to
>>>> drop the force override with system-power-controller property,
>>>>
>>>> if (!pm_power_off) {
>>>>     tps65219_i2c_client = client;
>>>>     pm_power_off = &tps65219_pm_power_off;
>>>> }
>>>>
>>>> Could still be valid for such platforms, no? I do see that the
>>>> capability that the PMIC has - which is software shutdown is a valid
>>>> feature that we support in many different PMIC drivers. Is'nt the job of
>>>> the driver to introduce the functionality in a manner that is
>>>> appropriate to the OS framework?
>>>
>>> Yeah, I think Nishanth is right here.
>>>
>>> We should probably keep the `if (!pm_power_off)` part so the PMIC will
>>> be used if PSCI is not, but it also allows an easy way to test/use the 
>>> PMIC
>>> shutdown functionality downstream if needed.
>>>
>> 
>> Then should be using the sys-off handler API[0] so it doesn't block PSCI
>> which is also switching over[1].
>> 
>> Andrew
>> 
>> [0] https://lwn.net/Articles/894511/
>> [1] https://www.spinics.net/lists/arm-kernel/msg1024127.html
> Can we go for upstream with v7 without tps65219_soft_shutdown. Then if 
> everyone agrees with Andrew proposal, I'll submit a separate patch which 
> adds implementation of tps65219_soft_shutdown support through sys-off 
> handler.
>
> So that we are not blocking upstream in case further 
> discussions/alignment are required.

Seems OK to me.  Nishanth?  Andrew?

But I think you'll need to at least submit a v8 without the unused
code/dead code that Lee pointed out.

Kevin

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
  2022-11-10 17:00                 ` Kevin Hilman
@ 2022-11-10 17:44                   ` Andrew Davis
  -1 siblings, 0 replies; 50+ messages in thread
From: Andrew Davis @ 2022-11-10 17:44 UTC (permalink / raw)
  To: Kevin Hilman, jerome Neanne, Nishanth Menon
  Cc: Lee Jones, lgirdwood, broonie, robh+dt, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, narmstrong, msp,
	j-keerthy, linux-kernel, devicetree, linux-arm-kernel,
	linux-input, linux-omap

On 11/10/22 11:00 AM, Kevin Hilman wrote:
> jerome Neanne <jneanne@baylibre.com> writes:
> 
>> On 09/11/2022 22:59, Andrew Davis wrote:
>>> On 11/7/22 3:14 PM, Kevin Hilman wrote:
>>>> Nishanth Menon <nm@ti.com> writes:
>>>>
>>>>> On 13:58-20221104, jerome Neanne wrote:
>>>>>>
>>>>> [...]
>>>>>
>>>>>>
>>>>>>>
>>>>>>> Can you try an compile with W=1 please.
>>>>>> This raise one warning on mfd:
>>>>>> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’
>>>>>> defined but
>>>>>> not used [-Wunused-function]
>>>>>>      28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>>>>>>         |            ^~~~~~~~~~~~~~~~~~~~~~
>>>>>> soft_shutdown has been validated and is used in TI baseline even if not
>>>>>> hooked in upstream version further to this review:
>>>>>> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/
>>>>>>
>>>>>> It was a TI requirement to implement it...
>>>>>> Let me know if you want me to remove this function or if we can keep
>>>>>> it like
>>>>>> this.
>>>>>
>>>>> There are platforms without psci, correct? I think the comment was to
>>>>> drop the force override with system-power-controller property,
>>>>>
>>>>> if (!pm_power_off) {
>>>>>      tps65219_i2c_client = client;
>>>>>      pm_power_off = &tps65219_pm_power_off;
>>>>> }
>>>>>
>>>>> Could still be valid for such platforms, no? I do see that the
>>>>> capability that the PMIC has - which is software shutdown is a valid
>>>>> feature that we support in many different PMIC drivers. Is'nt the job of
>>>>> the driver to introduce the functionality in a manner that is
>>>>> appropriate to the OS framework?
>>>>
>>>> Yeah, I think Nishanth is right here.
>>>>
>>>> We should probably keep the `if (!pm_power_off)` part so the PMIC will
>>>> be used if PSCI is not, but it also allows an easy way to test/use the
>>>> PMIC
>>>> shutdown functionality downstream if needed.
>>>>
>>>
>>> Then should be using the sys-off handler API[0] so it doesn't block PSCI
>>> which is also switching over[1].
>>>
>>> Andrew
>>>
>>> [0] https://lwn.net/Articles/894511/
>>> [1] https://www.spinics.net/lists/arm-kernel/msg1024127.html
>> Can we go for upstream with v7 without tps65219_soft_shutdown. Then if
>> everyone agrees with Andrew proposal, I'll submit a separate patch which
>> adds implementation of tps65219_soft_shutdown support through sys-off
>> handler.
>>
>> So that we are not blocking upstream in case further
>> discussions/alignment are required.
> 
> Seems OK to me.  Nishanth?  Andrew?
> 
> But I think you'll need to at least submit a v8 without the unused
> code/dead code that Lee pointed out.
> 

If you need the v8 anyway, then add support through sys-off in
that spin, should only be a couple lines of change.

Andrew

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
@ 2022-11-10 17:44                   ` Andrew Davis
  0 siblings, 0 replies; 50+ messages in thread
From: Andrew Davis @ 2022-11-10 17:44 UTC (permalink / raw)
  To: Kevin Hilman, jerome Neanne, Nishanth Menon
  Cc: Lee Jones, lgirdwood, broonie, robh+dt, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, narmstrong, msp,
	j-keerthy, linux-kernel, devicetree, linux-arm-kernel,
	linux-input, linux-omap

On 11/10/22 11:00 AM, Kevin Hilman wrote:
> jerome Neanne <jneanne@baylibre.com> writes:
> 
>> On 09/11/2022 22:59, Andrew Davis wrote:
>>> On 11/7/22 3:14 PM, Kevin Hilman wrote:
>>>> Nishanth Menon <nm@ti.com> writes:
>>>>
>>>>> On 13:58-20221104, jerome Neanne wrote:
>>>>>>
>>>>> [...]
>>>>>
>>>>>>
>>>>>>>
>>>>>>> Can you try an compile with W=1 please.
>>>>>> This raise one warning on mfd:
>>>>>> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’
>>>>>> defined but
>>>>>> not used [-Wunused-function]
>>>>>>      28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>>>>>>         |            ^~~~~~~~~~~~~~~~~~~~~~
>>>>>> soft_shutdown has been validated and is used in TI baseline even if not
>>>>>> hooked in upstream version further to this review:
>>>>>> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/
>>>>>>
>>>>>> It was a TI requirement to implement it...
>>>>>> Let me know if you want me to remove this function or if we can keep
>>>>>> it like
>>>>>> this.
>>>>>
>>>>> There are platforms without psci, correct? I think the comment was to
>>>>> drop the force override with system-power-controller property,
>>>>>
>>>>> if (!pm_power_off) {
>>>>>      tps65219_i2c_client = client;
>>>>>      pm_power_off = &tps65219_pm_power_off;
>>>>> }
>>>>>
>>>>> Could still be valid for such platforms, no? I do see that the
>>>>> capability that the PMIC has - which is software shutdown is a valid
>>>>> feature that we support in many different PMIC drivers. Is'nt the job of
>>>>> the driver to introduce the functionality in a manner that is
>>>>> appropriate to the OS framework?
>>>>
>>>> Yeah, I think Nishanth is right here.
>>>>
>>>> We should probably keep the `if (!pm_power_off)` part so the PMIC will
>>>> be used if PSCI is not, but it also allows an easy way to test/use the
>>>> PMIC
>>>> shutdown functionality downstream if needed.
>>>>
>>>
>>> Then should be using the sys-off handler API[0] so it doesn't block PSCI
>>> which is also switching over[1].
>>>
>>> Andrew
>>>
>>> [0] https://lwn.net/Articles/894511/
>>> [1] https://www.spinics.net/lists/arm-kernel/msg1024127.html
>> Can we go for upstream with v7 without tps65219_soft_shutdown. Then if
>> everyone agrees with Andrew proposal, I'll submit a separate patch which
>> adds implementation of tps65219_soft_shutdown support through sys-off
>> handler.
>>
>> So that we are not blocking upstream in case further
>> discussions/alignment are required.
> 
> Seems OK to me.  Nishanth?  Andrew?
> 
> But I think you'll need to at least submit a v8 without the unused
> code/dead code that Lee pointed out.
> 

If you need the v8 anyway, then add support through sys-off in
that spin, should only be a couple lines of change.

Andrew

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
  2022-11-10 17:44                   ` Andrew Davis
@ 2022-11-10 20:16                     ` Kevin Hilman
  -1 siblings, 0 replies; 50+ messages in thread
From: Kevin Hilman @ 2022-11-10 20:16 UTC (permalink / raw)
  To: Andrew Davis, jerome Neanne, Nishanth Menon
  Cc: Lee Jones, lgirdwood, broonie, robh+dt, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, narmstrong, msp,
	j-keerthy, linux-kernel, devicetree, linux-arm-kernel,
	linux-input, linux-omap

Andrew Davis <afd@ti.com> writes:

> On 11/10/22 11:00 AM, Kevin Hilman wrote:
>> jerome Neanne <jneanne@baylibre.com> writes:
>> 
>>> On 09/11/2022 22:59, Andrew Davis wrote:
>>>> On 11/7/22 3:14 PM, Kevin Hilman wrote:
>>>>> Nishanth Menon <nm@ti.com> writes:
>>>>>
>>>>>> On 13:58-20221104, jerome Neanne wrote:
>>>>>>>
>>>>>> [...]
>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Can you try an compile with W=1 please.
>>>>>>> This raise one warning on mfd:
>>>>>>> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’
>>>>>>> defined but
>>>>>>> not used [-Wunused-function]
>>>>>>>      28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>>>>>>>         |            ^~~~~~~~~~~~~~~~~~~~~~
>>>>>>> soft_shutdown has been validated and is used in TI baseline even if not
>>>>>>> hooked in upstream version further to this review:
>>>>>>> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/
>>>>>>>
>>>>>>> It was a TI requirement to implement it...
>>>>>>> Let me know if you want me to remove this function or if we can keep
>>>>>>> it like
>>>>>>> this.
>>>>>>
>>>>>> There are platforms without psci, correct? I think the comment was to
>>>>>> drop the force override with system-power-controller property,
>>>>>>
>>>>>> if (!pm_power_off) {
>>>>>>      tps65219_i2c_client = client;
>>>>>>      pm_power_off = &tps65219_pm_power_off;
>>>>>> }
>>>>>>
>>>>>> Could still be valid for such platforms, no? I do see that the
>>>>>> capability that the PMIC has - which is software shutdown is a valid
>>>>>> feature that we support in many different PMIC drivers. Is'nt the job of
>>>>>> the driver to introduce the functionality in a manner that is
>>>>>> appropriate to the OS framework?
>>>>>
>>>>> Yeah, I think Nishanth is right here.
>>>>>
>>>>> We should probably keep the `if (!pm_power_off)` part so the PMIC will
>>>>> be used if PSCI is not, but it also allows an easy way to test/use the
>>>>> PMIC
>>>>> shutdown functionality downstream if needed.
>>>>>
>>>>
>>>> Then should be using the sys-off handler API[0] so it doesn't block PSCI
>>>> which is also switching over[1].
>>>>
>>>> Andrew
>>>>
>>>> [0] https://lwn.net/Articles/894511/
>>>> [1] https://www.spinics.net/lists/arm-kernel/msg1024127.html
>>> Can we go for upstream with v7 without tps65219_soft_shutdown. Then if
>>> everyone agrees with Andrew proposal, I'll submit a separate patch which
>>> adds implementation of tps65219_soft_shutdown support through sys-off
>>> handler.
>>>
>>> So that we are not blocking upstream in case further
>>> discussions/alignment are required.
>> 
>> Seems OK to me.  Nishanth?  Andrew?
>> 
>> But I think you'll need to at least submit a v8 without the unused
>> code/dead code that Lee pointed out.
>> 
>
> If you need the v8 anyway, then add support through sys-off in
> that spin, should only be a couple lines of change.

Oops, my mistake.  I see v7 already has the dead code removed.  I got
confused because this thread is on v6.

IMO, I think v7 should be merged v7 (mfd part is already ack'd by Lee)
and then Jerome will follow up with the support for sys-off as an
additional series.

Kevin

^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC
@ 2022-11-10 20:16                     ` Kevin Hilman
  0 siblings, 0 replies; 50+ messages in thread
From: Kevin Hilman @ 2022-11-10 20:16 UTC (permalink / raw)
  To: Andrew Davis, jerome Neanne, Nishanth Menon
  Cc: Lee Jones, lgirdwood, broonie, robh+dt, kristo, dmitry.torokhov,
	krzysztof.kozlowski+dt, catalin.marinas, will, tony, vigneshr,
	bjorn.andersson, shawnguo, geert+renesas, dmitry.baryshkov,
	marcel.ziswiler, vkoul, biju.das.jz, arnd, jeff, narmstrong, msp,
	j-keerthy, linux-kernel, devicetree, linux-arm-kernel,
	linux-input, linux-omap

Andrew Davis <afd@ti.com> writes:

> On 11/10/22 11:00 AM, Kevin Hilman wrote:
>> jerome Neanne <jneanne@baylibre.com> writes:
>> 
>>> On 09/11/2022 22:59, Andrew Davis wrote:
>>>> On 11/7/22 3:14 PM, Kevin Hilman wrote:
>>>>> Nishanth Menon <nm@ti.com> writes:
>>>>>
>>>>>> On 13:58-20221104, jerome Neanne wrote:
>>>>>>>
>>>>>> [...]
>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Can you try an compile with W=1 please.
>>>>>>> This raise one warning on mfd:
>>>>>>> drivers/mfd/tps65219.c:28:12: warning: ‘tps65219_soft_shutdown’
>>>>>>> defined but
>>>>>>> not used [-Wunused-function]
>>>>>>>      28 | static int tps65219_soft_shutdown(struct tps65219 *tps)
>>>>>>>         |            ^~~~~~~~~~~~~~~~~~~~~~
>>>>>>> soft_shutdown has been validated and is used in TI baseline even if not
>>>>>>> hooked in upstream version further to this review:
>>>>>>> https://lore.kernel.org/lkml/20220825150224.826258-5-msp@baylibre.com/
>>>>>>>
>>>>>>> It was a TI requirement to implement it...
>>>>>>> Let me know if you want me to remove this function or if we can keep
>>>>>>> it like
>>>>>>> this.
>>>>>>
>>>>>> There are platforms without psci, correct? I think the comment was to
>>>>>> drop the force override with system-power-controller property,
>>>>>>
>>>>>> if (!pm_power_off) {
>>>>>>      tps65219_i2c_client = client;
>>>>>>      pm_power_off = &tps65219_pm_power_off;
>>>>>> }
>>>>>>
>>>>>> Could still be valid for such platforms, no? I do see that the
>>>>>> capability that the PMIC has - which is software shutdown is a valid
>>>>>> feature that we support in many different PMIC drivers. Is'nt the job of
>>>>>> the driver to introduce the functionality in a manner that is
>>>>>> appropriate to the OS framework?
>>>>>
>>>>> Yeah, I think Nishanth is right here.
>>>>>
>>>>> We should probably keep the `if (!pm_power_off)` part so the PMIC will
>>>>> be used if PSCI is not, but it also allows an easy way to test/use the
>>>>> PMIC
>>>>> shutdown functionality downstream if needed.
>>>>>
>>>>
>>>> Then should be using the sys-off handler API[0] so it doesn't block PSCI
>>>> which is also switching over[1].
>>>>
>>>> Andrew
>>>>
>>>> [0] https://lwn.net/Articles/894511/
>>>> [1] https://www.spinics.net/lists/arm-kernel/msg1024127.html
>>> Can we go for upstream with v7 without tps65219_soft_shutdown. Then if
>>> everyone agrees with Andrew proposal, I'll submit a separate patch which
>>> adds implementation of tps65219_soft_shutdown support through sys-off
>>> handler.
>>>
>>> So that we are not blocking upstream in case further
>>> discussions/alignment are required.
>> 
>> Seems OK to me.  Nishanth?  Andrew?
>> 
>> But I think you'll need to at least submit a v8 without the unused
>> code/dead code that Lee pointed out.
>> 
>
> If you need the v8 anyway, then add support through sys-off in
> that spin, should only be a couple lines of change.

Oops, my mistake.  I see v7 already has the dead code removed.  I got
confused because this thread is on v6.

IMO, I think v7 should be merged v7 (mfd part is already ack'd by Lee)
and then Jerome will follow up with the support for sys-off as an
additional series.

Kevin

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 50+ messages in thread

end of thread, other threads:[~2022-11-10 20:17 UTC | newest]

Thread overview: 50+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-11 14:05 [PATCH v6 0/6] Add support for TI TPS65219 PMIC Jerome Neanne
2022-10-11 14:05 ` Jerome Neanne
2022-10-11 14:05 ` [PATCH v6 1/6] DONOTMERGE: arm64: dts: ti: Add TI TPS65219 PMIC support for AM642 SK board Jerome Neanne
2022-10-11 14:05   ` Jerome Neanne
2022-10-11 14:05 ` [PATCH v6 2/6] DONOTMERGE: arm64: dts: ti: Add pinmux and irq mapping for TPS65219 external interrupts Jerome Neanne
2022-10-11 14:05   ` Jerome Neanne
2022-10-11 14:05 ` [PATCH v6 3/6] DONOTMERGE: arm64: dts: ti: k3-am642-sk: Enable tps65219 power-button Jerome Neanne
2022-10-11 14:05   ` Jerome Neanne
2022-10-11 14:05 ` [PATCH v6 4/6] mfd: tps65219: Add driver for TI TPS65219 PMIC Jerome Neanne
2022-10-11 14:05   ` Jerome Neanne
2022-10-31 11:00   ` Lee Jones
2022-10-31 11:00     ` Lee Jones
2022-11-04 12:58     ` jerome Neanne
2022-11-04 12:58       ` jerome Neanne
2022-11-04 13:56       ` Lee Jones
2022-11-04 13:56         ` Lee Jones
2022-11-04 14:04         ` jerome Neanne
2022-11-04 14:04           ` jerome Neanne
2022-11-05  0:01       ` Nishanth Menon
2022-11-05  0:01         ` Nishanth Menon
2022-11-07 21:14         ` Kevin Hilman
2022-11-07 21:14           ` Kevin Hilman
2022-11-09 21:59           ` Andrew Davis
2022-11-09 21:59             ` Andrew Davis
2022-11-10  7:12             ` jerome Neanne
2022-11-10  7:12               ` jerome Neanne
2022-11-10 17:00               ` Kevin Hilman
2022-11-10 17:00                 ` Kevin Hilman
2022-11-10 17:44                 ` Andrew Davis
2022-11-10 17:44                   ` Andrew Davis
2022-11-10 20:16                   ` Kevin Hilman
2022-11-10 20:16                     ` Kevin Hilman
2022-10-11 14:05 ` [PATCH v6 5/6] Input: Add tps65219 interrupt driven powerbutton Jerome Neanne
2022-10-11 14:05   ` Jerome Neanne
2022-10-12  9:48   ` jerome Neanne
2022-10-12  9:48     ` jerome Neanne
2022-10-11 14:05 ` [PATCH v6 6/6] arm64: defconfig: Add tps65219 as modules Jerome Neanne
2022-10-11 14:05   ` Jerome Neanne
2022-10-11 14:48   ` Krzysztof Kozlowski
2022-10-11 14:48     ` Krzysztof Kozlowski
2022-10-12  8:39     ` jerome Neanne
2022-10-12  8:39       ` jerome Neanne
2022-10-12 13:00       ` Krzysztof Kozlowski
2022-10-12 13:00         ` Krzysztof Kozlowski
2022-10-12 17:56         ` Kevin Hilman
2022-10-12 17:56           ` Kevin Hilman
2022-10-13 12:32           ` Krzysztof Kozlowski
2022-10-13 12:32             ` Krzysztof Kozlowski
2022-10-13 13:22             ` jerome Neanne
2022-10-13 13:22               ` jerome Neanne

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.