Skip to contentSkip to conversation

BeagleV Starlight reset support

PATCH Superseded Emil Renner Berthing 4 participants 19 messages Jun 25, 2021 – Jul 20, 2021

Subsystems (3)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

cover BeagleV Starlight reset support

This series adds reset support to the BeagleV Starlight board[1], and converts the TPS65086 PMIC device tree binding to YAML while at it.

Support for the StarFive JH7100 RISC-V SoC on there is not yet upstreamed, but early feedback on this part would be very welcome.

[1] https://github.com/beagleboard/beaglev-starlight

Emil Renner Berthing (3):
dt-bindings: mfd: convert tps65086.txt to YAML
mfd: tps65086: Make interrupt line optional
power: reset: Add TPS65086 restart driver

 .../devicetree/bindings/mfd/ti,tps65086.yaml  | 124 ++++++++++++++++++
 .../devicetree/bindings/mfd/tps65086.txt      |  54 --------
 drivers/mfd/tps65086.c                        |  22 ++--
 drivers/power/reset/Kconfig                   |   6 +
 drivers/power/reset/Makefile                  |   1 +
 drivers/power/reset/tps65086-restart.c        |  99 ++++++++++++++
 6 files changed, 242 insertions(+), 64 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mfd/ti,tps65086.yaml
 delete mode 100644 Documentation/devicetree/bindings/mfd/tps65086.txt
 create mode 100644 drivers/power/reset/tps65086-restart.c
Signature · 1 line
2.32.0
#1 lore raw

PATCH 1/3 dt-bindings: mfd: convert tps65086.txt to YAML

This converts the tps65086.txt binding description to YAML schema so dts files can be verified automatically.

---
@Andrew: The dt-bindings meta schema requires a maintainer entry. I hope it's ok that I've added you, otherwise I don't know who should be listed.

 .../devicetree/bindings/mfd/ti,tps65086.yaml  | 127 ++++++++++++++++++
 .../devicetree/bindings/mfd/tps65086.txt      |  54 --------
 2 files changed, 127 insertions(+), 54 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mfd/ti,tps65086.yaml
 delete mode 100644 Documentation/devicetree/bindings/mfd/tps65086.txt
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml new file +127 -0
new file mode 100644
index 000000000000..ba638bd10a58
@@ -0,0 +1,127 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mfd/ti,tps65086.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: TPS65086 Power Management Integrated Circuit (PMIC)
+
+maintainers:
+  - Andrew F. Davis <[email protected]>
+
+properties:
+  compatible:
+    const: ti,tps65086
+
+  reg:
+    const: 0x5e
+    description: I2C slave address
+
+  interrupts:
+    maxItems: 1
+
+  interrupt-controller: true
+
+  '#interrupt-cells':
+    const: 2
+    description: |
+      The first cell is the IRQ number. The second cell is the flags,
+      encoded as trigger masks from ../interrupt-controller/interrupts.txt.
+
+  gpio-controller: true
+
+  '#gpio-cells':
+    const: 2
+    description: |
+      The first cell is the pin number and the second cell is used to specify
+      flags.  See ../gpio/gpio.txt for more information.
+
+  regulators:
+    type: object
+    description: |
+      List of child nodes that specify the regulator initialization data.
+      Child nodes must be named after their hardware counterparts:
+      buck[1-6], ldoa[1-3], swa1, swb[1-2], and vtt.
+      Each child node is defined using the standard binding for regulators and
+      the optional regulator properties defined below.
+
+    patternProperties:
+      "^buck[1-6]$":
+        type: object
+        $ref: ../regulator/regulator.yaml
+
+        properties:
+          regulator-name: true
+          regulator-boot-on: true
+          regulator-always-on: true
+          regulator-min-microvolt: true
+          regulator-max-microvolt: true
+          ti,regulator-step-size-25mv:
+            type: boolean
+            description: |
+              Set this if the regulator is factory set with a 25mv step voltage
+              mapping.
+          ti,regulator-decay:
+            type: boolean
+            description: |
+              Set this if the output needs to decay, default is for the output
+              to slew down.
+
+        additionalProperties: false
+
+      "^(ldoa[1-3]|swa1|swb[1-2]|vtt)$":
+        type: object
+        $ref: ../regulator/regulator.yaml
+
+        properties:
+          regulator-name: true
+          regulator-boot-on: true
+          regulator-always-on: true
+          regulator-min-microvolt: true
+          regulator-max-microvolt: true
+
+        additionalProperties: false
+
+additionalProperties: false
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - interrupt-controller
+  - '#interrupt-cells'
+  - gpio-controller
+  - '#gpio-cells'
+  - regulators
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/irq.h>
+    i2c0 {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        pmic: tps65086@5e {
+            compatible = "ti,tps65086";
+            reg = <0x5e>;
+            interrupt-parent = <&gpio1>;
+            interrupts = <28 IRQ_TYPE_LEVEL_LOW>;
+            interrupt-controller;
+            #interrupt-cells = <2>;
+            gpio-controller;
+            #gpio-cells = <2>;
+
+            regulators {
+                buck1 {
+                    regulator-name = "vcc1";
+                    regulator-min-microvolt = <1600000>;
+                    regulator-max-microvolt = <1600000>;
+                    regulator-boot-on;
+                    ti,regulator-decay;
+                    ti,regulator-step-size-25mv;
+                };
+            };
+        };
+    };
+
+...
Documentation/devicetree/bindings/mfd/tps65086.txt deleted +0 -54

54 lines not on this page · raw message

Signature · 1 line
2.32.0
maintainer
#2 lore raw

Re: [PATCH v1 1/3] dt-bindings: mfd: convert tps65086.txt to YAML

Quoted 8 lines · Emil Renner Berthing

This converts the tps65086.txt binding description to YAML schema so dts files can be verified automatically.

---
@Andrew: The dt-bindings meta schema requires a maintainer entry. I hope it's ok that I've added you, otherwise I don't know who should be listed.

Anyone that knows the h/w and/or cares if the binding is changed or deleted. If you can't find anyone, then good, one less binding. :)

Quoted 13 lines
 .../devicetree/bindings/mfd/ti,tps65086.yaml  | 127 ++++++++++++++++++
 .../devicetree/bindings/mfd/tps65086.txt      |  54 --------
 2 files changed, 127 insertions(+), 54 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mfd/ti,tps65086.yaml
 delete mode 100644 Documentation/devicetree/bindings/mfd/tps65086.txt
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml new file +0 -0
new file mode 100644
index 000000000000..ba638bd10a58

Documentation/devicetree/bindings/mfd/ti,tps65086.yaml line 10

Quoted 10 lines
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml new file +10 -0
@@ -0,0 +1,127 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mfd/ti,tps65086.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: TPS65086 Power Management Integrated Circuit (PMIC)
+
+maintainers:
+  - Andrew F. Davis <[email protected]>

Not a valid email any more.

Quoted 84 lines
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml new file +84 -0
+
+properties:
+  compatible:
+    const: ti,tps65086
+
+  reg:
+    const: 0x5e
+    description: I2C slave address
+
+  interrupts:
+    maxItems: 1
+
+  interrupt-controller: true
+
+  '#interrupt-cells':
+    const: 2
+    description: |
+      The first cell is the IRQ number. The second cell is the flags,
+      encoded as trigger masks from ../interrupt-controller/interrupts.txt.
+
+  gpio-controller: true
+
+  '#gpio-cells':
+    const: 2
+    description: |
+      The first cell is the pin number and the second cell is used to specify
+      flags.  See ../gpio/gpio.txt for more information.
+
+  regulators:
+    type: object
+    description: |
+      List of child nodes that specify the regulator initialization data.
+      Child nodes must be named after their hardware counterparts:
+      buck[1-6], ldoa[1-3], swa1, swb[1-2], and vtt.
+      Each child node is defined using the standard binding for regulators and
+      the optional regulator properties defined below.
+
+    patternProperties:
+      "^buck[1-6]$":
+        type: object
+        $ref: ../regulator/regulator.yaml
+
+        properties:
+          regulator-name: true
+          regulator-boot-on: true
+          regulator-always-on: true
+          regulator-min-microvolt: true
+          regulator-max-microvolt: true
+          ti,regulator-step-size-25mv:
+            type: boolean
+            description: |
+              Set this if the regulator is factory set with a 25mv step voltage
+              mapping.
+          ti,regulator-decay:
+            type: boolean
+            description: |
+              Set this if the output needs to decay, default is for the output
+              to slew down.
+
+        additionalProperties: false
+
+      "^(ldoa[1-3]|swa1|swb[1-2]|vtt)$":
+        type: object
+        $ref: ../regulator/regulator.yaml
+
+        properties:
+          regulator-name: true
+          regulator-boot-on: true
+          regulator-always-on: true
+          regulator-min-microvolt: true
+          regulator-max-microvolt: true
+
+        additionalProperties: false
+
+additionalProperties: false
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - interrupt-controller
+  - '#interrupt-cells'
+  - gpio-controller
+  - '#gpio-cells'

Documentation/devicetree/bindings/mfd/ti,tps65086.yaml line 104

Quoted 10 lines
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml new file +10 -0
+  - regulators
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/irq.h>
+    i2c0 {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        pmic: tps65086@5e {

pmic@5e

Quoted 87 lines
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml new file +23 -0
+            compatible = "ti,tps65086";
+            reg = <0x5e>;
+            interrupt-parent = <&gpio1>;
+            interrupts = <28 IRQ_TYPE_LEVEL_LOW>;
+            interrupt-controller;
+            #interrupt-cells = <2>;
+            gpio-controller;
+            #gpio-cells = <2>;
+
+            regulators {
+                buck1 {
+                    regulator-name = "vcc1";
+                    regulator-min-microvolt = <1600000>;
+                    regulator-max-microvolt = <1600000>;
+                    regulator-boot-on;
+                    ti,regulator-decay;
+                    ti,regulator-step-size-25mv;
+                };
+            };
+        };
+    };
+
+...
Documentation/devicetree/bindings/mfd/tps65086.txt deleted +0 -54
deleted file mode 100644
index 67eac0ed32df..000000000000
@@ -1,54 +0,0 @@
-* TPS65086 Power Management Integrated Circuit (PMIC) bindings
-
-Required properties:
- - compatible		: Should be "ti,tps65086".
- - reg			: I2C slave address.
- - interrupts		: The interrupt line the device is connected to.
- - interrupt-controller	: Marks the device node as an interrupt controller.
- - #interrupt-cells	: The number of cells to describe an IRQ, should be 2.
-			    The first cell is the IRQ number.
-			    The second cell is the flags, encoded as trigger
-			    masks from ../interrupt-controller/interrupts.txt.
- - gpio-controller      : Marks the device node as a GPIO Controller.
- - #gpio-cells          : Should be two.  The first cell is the pin number and
-                            the second cell is used to specify flags.
-                            See ../gpio/gpio.txt for more information.
- - regulators:          : List of child nodes that specify the regulator
-                            initialization data. Child nodes must be named
-                            after their hardware counterparts: buck[1-6],
-                            ldoa[1-3], swa1, swb[1-2], and vtt. Each child
-                            node is defined using the standard binding for
-                            regulators and the optional regulator properties
-                            defined below.
-
-Optional regulator properties:
- - ti,regulator-step-size-25mv	: This is applicable for buck[1-6], set this
-				    if the regulator is factory set with a 25mv
-				    step voltage mapping.
- - ti,regulator-decay		: This is applicable for buck[1-6], set this if
-				    the output needs to decay, default is for
-				    the output to slew down.
-
-Example:
-
-	pmic: tps65086@5e {
-		compatible = "ti,tps65086";
-		reg = <0x5e>;
-		interrupt-parent = <&gpio1>;
-		interrupts = <28 IRQ_TYPE_LEVEL_LOW>;
-		interrupt-controller;
-		#interrupt-cells = <2>;
-		gpio-controller;
-		#gpio-cells = <2>;
-
-		regulators {
-			buck1 {
-				regulator-name = "vcc1";
-				regulator-min-microvolt = <1600000>;
-				regulator-max-microvolt = <1600000>;
-				regulator-boot-on;
-				ti,regulator-decay;
-				ti,regulator-step-size-25mv;
-			};
-		};
-	};
Signature · 1 line
2.32.0
#3 lore raw

Re: [PATCH v1 1/3] dt-bindings: mfd: convert tps65086.txt to YAML

Quoted 4 lines · Rob Herring
Quoted 3 lines · Emil Renner Berthing

This converts the tps65086.txt binding description to YAML schema so dts files can be verified automatically.

Quoted 8 lines
Quoted 5 lines

---
@Andrew: The dt-bindings meta schema requires a maintainer entry. I hope it's ok that I've added you, otherwise I don't know who should be listed.

Anyone that knows the h/w and/or cares if the binding is changed or deleted. If you can't find anyone, then good, one less binding. :)

Hmm.. unless someone else responds I guess I'll just put myself then since I at least care that it isn't deleted.

Quoted 114 lines
Quoted 13 lines
 .../devicetree/bindings/mfd/ti,tps65086.yaml  | 127 ++++++++++++++++++
 .../devicetree/bindings/mfd/tps65086.txt      |  54 --------
 2 files changed, 127 insertions(+), 54 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mfd/ti,tps65086.yaml
 delete mode 100644 Documentation/devicetree/bindings/mfd/tps65086.txt
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml new file +0 -0
new file mode 100644
index 000000000000..ba638bd10a58

Documentation/devicetree/bindings/mfd/ti,tps65086.yaml line 10

Quoted 10 lines
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml new file +10 -0
@@ -0,0 +1,127 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mfd/ti,tps65086.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: TPS65086 Power Management Integrated Circuit (PMIC)
+
+maintainers:
+  - Andrew F. Davis <[email protected]>

Not a valid email any more.

Quoted 88 lines
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml new file +88 -0
+
+properties:
+  compatible:
+    const: ti,tps65086
+
+  reg:
+    const: 0x5e
+    description: I2C slave address
+
+  interrupts:
+    maxItems: 1
+
+  interrupt-controller: true
+
+  '#interrupt-cells':
+    const: 2
+    description: |
+      The first cell is the IRQ number. The second cell is the flags,
+      encoded as trigger masks from ../interrupt-controller/interrupts.txt.
+
+  gpio-controller: true
+
+  '#gpio-cells':
+    const: 2
+    description: |
+      The first cell is the pin number and the second cell is used to specify
+      flags.  See ../gpio/gpio.txt for more information.
+
+  regulators:
+    type: object
+    description: |
+      List of child nodes that specify the regulator initialization data.
+      Child nodes must be named after their hardware counterparts:
+      buck[1-6], ldoa[1-3], swa1, swb[1-2], and vtt.
+      Each child node is defined using the standard binding for regulators and
+      the optional regulator properties defined below.
+
+    patternProperties:
+      "^buck[1-6]$":
+        type: object
+        $ref: ../regulator/regulator.yaml
+
+        properties:
+          regulator-name: true
+          regulator-boot-on: true
+          regulator-always-on: true
+          regulator-min-microvolt: true
+          regulator-max-microvolt: true
+          ti,regulator-step-size-25mv:
+            type: boolean
+            description: |
+              Set this if the regulator is factory set with a 25mv step voltage
+              mapping.
+          ti,regulator-decay:
+            type: boolean
+            description: |
+              Set this if the output needs to decay, default is for the output
+              to slew down.
+
+        additionalProperties: false
+
+      "^(ldoa[1-3]|swa1|swb[1-2]|vtt)$":
+        type: object
+        $ref: ../regulator/regulator.yaml
+
+        properties:
+          regulator-name: true
+          regulator-boot-on: true
+          regulator-always-on: true
+          regulator-min-microvolt: true
+          regulator-max-microvolt: true
+
+        additionalProperties: false
+
+additionalProperties: false
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - interrupt-controller
+  - '#interrupt-cells'
+  - gpio-controller
+  - '#gpio-cells'
+  - regulators
+
+examples:
+  - |
Quoted 8 lines

Documentation/devicetree/bindings/mfd/ti,tps65086.yaml line 104

Quoted 6 lines
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml new file +6 -0
+    #include <dt-bindings/interrupt-controller/irq.h>
+    i2c0 {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        pmic: tps65086@5e {

pmic@5e

Will fix, thanks!

Quoted 87 lines
Quoted 87 lines
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml new file +23 -0
+            compatible = "ti,tps65086";
+            reg = <0x5e>;
+            interrupt-parent = <&gpio1>;
+            interrupts = <28 IRQ_TYPE_LEVEL_LOW>;
+            interrupt-controller;
+            #interrupt-cells = <2>;
+            gpio-controller;
+            #gpio-cells = <2>;
+
+            regulators {
+                buck1 {
+                    regulator-name = "vcc1";
+                    regulator-min-microvolt = <1600000>;
+                    regulator-max-microvolt = <1600000>;
+                    regulator-boot-on;
+                    ti,regulator-decay;
+                    ti,regulator-step-size-25mv;
+                };
+            };
+        };
+    };
+
+...
Documentation/devicetree/bindings/mfd/tps65086.txt deleted +0 -55
deleted file mode 100644
index 67eac0ed32df..000000000000
@@ -1,54 +0,0 @@
-* TPS65086 Power Management Integrated Circuit (PMIC) bindings
-
-Required properties:
- - compatible                : Should be "ti,tps65086".
- - reg                       : I2C slave address.
- - interrupts                : The interrupt line the device is connected to.
- - interrupt-controller      : Marks the device node as an interrupt controller.
- - #interrupt-cells  : The number of cells to describe an IRQ, should be 2.
-                         The first cell is the IRQ number.
-                         The second cell is the flags, encoded as trigger
-                         masks from ../interrupt-controller/interrupts.txt.
- - gpio-controller      : Marks the device node as a GPIO Controller.
- - #gpio-cells          : Should be two.  The first cell is the pin number and
-                            the second cell is used to specify flags.
-                            See ../gpio/gpio.txt for more information.
- - regulators:          : List of child nodes that specify the regulator
-                            initialization data. Child nodes must be named
-                            after their hardware counterparts: buck[1-6],
-                            ldoa[1-3], swa1, swb[1-2], and vtt. Each child
-                            node is defined using the standard binding for
-                            regulators and the optional regulator properties
-                            defined below.
-
-Optional regulator properties:
- - ti,regulator-step-size-25mv       : This is applicable for buck[1-6], set this
-                                 if the regulator is factory set with a 25mv
-                                 step voltage mapping.
- - ti,regulator-decay                : This is applicable for buck[1-6], set this if
-                                 the output needs to decay, default is for
-                                 the output to slew down.
-
-Example:
-
-     pmic: tps65086@5e {
-             compatible = "ti,tps65086";
-             reg = <0x5e>;
-             interrupt-parent = <&gpio1>;
-             interrupts = <28 IRQ_TYPE_LEVEL_LOW>;
-             interrupt-controller;
-             #interrupt-cells = <2>;
-             gpio-controller;
-             #gpio-cells = <2>;
-
-             regulators {
-                     buck1 {
-                             regulator-name = "vcc1";
-                             regulator-min-microvolt = <1600000>;
-                             regulator-max-microvolt = <1600000>;
-                             regulator-boot-on;
-                             ti,regulator-decay;
-                             ti,regulator-step-size-25mv;
-                     };
-             };
-     };
--

2.32.0

#4 lore raw

PATCH 2/3 mfd: tps65086: Make interrupt line optional

In reply to Emil Renner Berthing

The BeagleV Starlight v0.9 board[1] doesn't have the IRQB line routed to the SoC, but it is still useful to be able to reach the PMIC over I2C for the other functionality it provides.

[1] https://github.com/beagleboard/beaglev-starlight

---
 .../devicetree/bindings/mfd/ti,tps65086.yaml  |  3 ---
 drivers/mfd/tps65086.c                        | 21 ++++++++++---------
 2 files changed, 11 insertions(+), 13 deletions(-)
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml +0 -3
index ba638bd10a58..4b629fcc0df9 100644
@@ -87,9 +87,6 @@ additionalProperties: false
 required:
   - compatible
   - reg
-  - interrupts
-  - interrupt-controller
-  - '#interrupt-cells'
   - gpio-controller
   - '#gpio-cells'
   - regulators
drivers/mfd/tps65086.c +11 -10
index 341466ef20cc..cc3478ee9a64 100644
@@ -100,29 +100,30 @@ static int tps65086_probe(struct i2c_client *client,
 		 (char)((version & TPS65086_DEVICEID_OTP_MASK) >> 4) + 'A',
 		 (version & TPS65086_DEVICEID_REV_MASK) >> 6);
 
-	ret = regmap_add_irq_chip(tps->regmap, tps->irq, IRQF_ONESHOT, 0,
-				  &tps65086_irq_chip, &tps->irq_data);
-	if (ret) {
-		dev_err(tps->dev, "Failed to register IRQ chip\n");
-		return ret;
+	if (tps->irq > 0) {
+		ret = regmap_add_irq_chip(tps->regmap, tps->irq, IRQF_ONESHOT, 0,
+					  &tps65086_irq_chip, &tps->irq_data);
+		if (ret) {
+			dev_err(tps->dev, "Failed to register IRQ chip\n");
+			return ret;
+		}
 	}
 
 	ret = mfd_add_devices(tps->dev, PLATFORM_DEVID_AUTO, tps65086_cells,
 			      ARRAY_SIZE(tps65086_cells), NULL, 0,
 			      regmap_irq_get_domain(tps->irq_data));
-	if (ret) {
+	if (ret && tps->irq > 0)
 		regmap_del_irq_chip(tps->irq, tps->irq_data);
-		return ret;
-	}
 
-	return 0;
+	return ret;
 }
 
 static int tps65086_remove(struct i2c_client *client)
 {
 	struct tps65086 *tps = i2c_get_clientdata(client);
 
-	regmap_del_irq_chip(tps->irq, tps->irq_data);
+	if (tps->irq > 0)
+		regmap_del_irq_chip(tps->irq, tps->irq_data);
 
 	return 0;
 }
Signature · 1 line
2.32.0
#5 lore raw

Re: [PATCH v1 2/3] mfd: tps65086: Make interrupt line optional

Quoted 2 lines · Emil Renner Berthing

The BeagleV Starlight v0.9 board[1] doesn't have the IRQB line routed to the SoC, but it is still useful to be able to reach the PMIC over I2C

What is still useful?

The GPIO and Regulator drivers?

Quoted 15 lines

for the other functionality it provides.

[1] https://github.com/beagleboard/beaglev-starlight

---
 .../devicetree/bindings/mfd/ti,tps65086.yaml  |  3 ---
 drivers/mfd/tps65086.c                        | 21 ++++++++++---------
 2 files changed, 11 insertions(+), 13 deletions(-)
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml +0 -0
index ba638bd10a58..4b629fcc0df9 100644

Documentation/devicetree/bindings/mfd/ti,tps65086.yaml additionalProperties: false · line 92

Quoted 6 lines
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml +0 -3
@@ -87,9 +87,6 @@ additionalProperties: false
 required:
   - compatible
   - reg
-  - interrupts
-  - interrupt-controller
-  - '#interrupt-cells'

I can't say that I've been keeping up with the latest DT binding changes, but shouldn't these lines be relocated into some kind of optional listing?

Or are optional properties omitted from documentation?

Quoted 8 lines
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml +0 -0
   - gpio-controller
   - '#gpio-cells'
   - regulators
drivers/mfd/tps65086.c +0 -0
index 341466ef20cc..cc3478ee9a64 100644

drivers/mfd/tps65086.c static int tps65086_probe(struct i2c_client *client, · line 103

Quoted 9 lines
drivers/mfd/tps65086.c +1 -5
@@ -100,29 +100,30 @@ static int tps65086_probe(struct i2c_client *client,
 		 (char)((version & TPS65086_DEVICEID_OTP_MASK) >> 4) + 'A',
 		 (version & TPS65086_DEVICEID_REV_MASK) >> 6);
 
-	ret = regmap_add_irq_chip(tps->regmap, tps->irq, IRQF_ONESHOT, 0,
-				  &tps65086_irq_chip, &tps->irq_data);
-	if (ret) {
-		dev_err(tps->dev, "Failed to register IRQ chip\n");
-		return ret;
+	if (tps->irq > 0) {

Are you sure that the 0th line is not a valid IRQ?

Quoted 31 lines
drivers/mfd/tps65086.c +10 -5
+		ret = regmap_add_irq_chip(tps->regmap, tps->irq, IRQF_ONESHOT, 0,
+					  &tps65086_irq_chip, &tps->irq_data);
+		if (ret) {
+			dev_err(tps->dev, "Failed to register IRQ chip\n");
+			return ret;
+		}
 	}
 
 	ret = mfd_add_devices(tps->dev, PLATFORM_DEVID_AUTO, tps65086_cells,
 			      ARRAY_SIZE(tps65086_cells), NULL, 0,
 			      regmap_irq_get_domain(tps->irq_data));
-	if (ret) {
+	if (ret && tps->irq > 0)
 		regmap_del_irq_chip(tps->irq, tps->irq_data);
-		return ret;
-	}
 
-	return 0;
+	return ret;
 }
 
 static int tps65086_remove(struct i2c_client *client)
 {
 	struct tps65086 *tps = i2c_get_clientdata(client);
 
-	regmap_del_irq_chip(tps->irq, tps->irq_data);
+	if (tps->irq > 0)
+		regmap_del_irq_chip(tps->irq, tps->irq_data);
 
 	return 0;
 }
Signature · 4 lines
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog
maintainer
#6 lore raw

Re: [PATCH v1 2/3] mfd: tps65086: Make interrupt line optional

Quoted 35 lines · Lee Jones
Quoted 2 lines · Emil Renner Berthing

The BeagleV Starlight v0.9 board[1] doesn't have the IRQB line routed to the SoC, but it is still useful to be able to reach the PMIC over I2C

What is still useful?

The GPIO and Regulator drivers?

Quoted 15 lines

for the other functionality it provides.

[1] https://github.com/beagleboard/beaglev-starlight

---
 .../devicetree/bindings/mfd/ti,tps65086.yaml  |  3 ---
 drivers/mfd/tps65086.c                        | 21 ++++++++++---------
 2 files changed, 11 insertions(+), 13 deletions(-)
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml +0 -0
index ba638bd10a58..4b629fcc0df9 100644

Documentation/devicetree/bindings/mfd/ti,tps65086.yaml additionalProperties: false · line 92

Quoted 6 lines
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml +0 -3
@@ -87,9 +87,6 @@ additionalProperties: false
 required:
   - compatible
   - reg
-  - interrupts
-  - interrupt-controller
-  - '#interrupt-cells'

I can't say that I've been keeping up with the latest DT binding changes, but shouldn't these lines be relocated into some kind of optional listing?

Quoted 1 line

Or are optional properties omitted from documentation?

Optional properties are the ones not listed in the 'required' list.

Rob

#7 lore raw

Re: [PATCH v1 2/3] mfd: tps65086: Make interrupt line optional

Quoted 36 lines · Rob Herring
Quoted 35 lines · Lee Jones
Quoted 2 lines · Emil Renner Berthing

The BeagleV Starlight v0.9 board[1] doesn't have the IRQB line routed to the SoC, but it is still useful to be able to reach the PMIC over I2C

What is still useful?

The GPIO and Regulator drivers?

Quoted 15 lines

for the other functionality it provides.

[1] https://github.com/beagleboard/beaglev-starlight

---
 .../devicetree/bindings/mfd/ti,tps65086.yaml  |  3 ---
 drivers/mfd/tps65086.c                        | 21 ++++++++++---------
 2 files changed, 11 insertions(+), 13 deletions(-)
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml +0 -0
index ba638bd10a58..4b629fcc0df9 100644

Documentation/devicetree/bindings/mfd/ti,tps65086.yaml additionalProperties: false · line 92

Quoted 6 lines
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml +0 -3
@@ -87,9 +87,6 @@ additionalProperties: false
 required:
   - compatible
   - reg
-  - interrupts
-  - interrupt-controller
-  - '#interrupt-cells'

I can't say that I've been keeping up with the latest DT binding changes, but shouldn't these lines be relocated into some kind of optional listing?

Quoted 3 lines
Quoted 1 line

Or are optional properties omitted from documentation?

Optional properties are the ones not listed in the 'required' list.

Ah, so they are already documented somewhere else in the file?

Signature · 4 lines
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog
#8 lore raw

Re: [PATCH v1 2/3] mfd: tps65086: Make interrupt line optional

Quoted 37 lines · Lee Jones
Quoted 36 lines · Rob Herring
Quoted 35 lines · Lee Jones
Quoted 2 lines · Emil Renner Berthing

The BeagleV Starlight v0.9 board[1] doesn't have the IRQB line routed to the SoC, but it is still useful to be able to reach the PMIC over I2C

What is still useful?

The GPIO and Regulator drivers?

Quoted 15 lines

for the other functionality it provides.

[1] https://github.com/beagleboard/beaglev-starlight

---
 .../devicetree/bindings/mfd/ti,tps65086.yaml  |  3 ---
 drivers/mfd/tps65086.c                        | 21 ++++++++++---------
 2 files changed, 11 insertions(+), 13 deletions(-)
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml +0 -0
index ba638bd10a58..4b629fcc0df9 100644

Documentation/devicetree/bindings/mfd/ti,tps65086.yaml additionalProperties: false · line 92

Quoted 6 lines
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml +0 -3
@@ -87,9 +87,6 @@ additionalProperties: false
 required:
   - compatible
   - reg
-  - interrupts
-  - interrupt-controller
-  - '#interrupt-cells'

I can't say that I've been keeping up with the latest DT binding changes, but shouldn't these lines be relocated into some kind of optional listing?

Quoted 5 lines
Quoted 3 lines
Quoted 1 line

Or are optional properties omitted from documentation?

Optional properties are the ones not listed in the 'required' list.

Ah, so they are already documented somewhere else in the file?

Yes, just a few lines above.

maintainer Acked-by on v1 2/3
#9 lore raw

Re: [PATCH v1 2/3] mfd: tps65086: Make interrupt line optional

In reply to Emil Renner Berthing
Quoted 4 lines · Emil Renner Berthing

The BeagleV Starlight v0.9 board[1] doesn't have the IRQB line routed to the SoC, but it is still useful to be able to reach the PMIC over I2C for the other functionality it provides.

Quoted 8 lines

[1] https://github.com/beagleboard/beaglev-starlight

---
 .../devicetree/bindings/mfd/ti,tps65086.yaml  |  3 ---
 drivers/mfd/tps65086.c                        | 21 ++++++++++---------
 2 files changed, 11 insertions(+), 13 deletions(-)
#10 lore raw

Re: [PATCH v1 2/3] mfd: tps65086: Make interrupt line optional

In reply to Emil Renner Berthing
Quoted 9 lines · Emil Renner Berthing

The BeagleV Starlight v0.9 board[1] doesn't have the IRQB line routed to the SoC, but it is still useful to be able to reach the PMIC over I2C for the other functionality it provides.

[1] https://github.com/beagleboard/beaglev-starlight

---
 .../devicetree/bindings/mfd/ti,tps65086.yaml  |  3 ---

This is not present in my current tree.

Looks like it's still *.txt.

Am I missing a patch?

Quoted 62 lines
 drivers/mfd/tps65086.c                        | 21 ++++++++++---------
 2 files changed, 11 insertions(+), 13 deletions(-)
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml +0 -3
index ba638bd10a58..4b629fcc0df9 100644
@@ -87,9 +87,6 @@ additionalProperties: false
 required:
   - compatible
   - reg
-  - interrupts
-  - interrupt-controller
-  - '#interrupt-cells'
   - gpio-controller
   - '#gpio-cells'
   - regulators
drivers/mfd/tps65086.c +11 -10
index 341466ef20cc..cc3478ee9a64 100644
@@ -100,29 +100,30 @@ static int tps65086_probe(struct i2c_client *client,
 		 (char)((version & TPS65086_DEVICEID_OTP_MASK) >> 4) + 'A',
 		 (version & TPS65086_DEVICEID_REV_MASK) >> 6);
 
-	ret = regmap_add_irq_chip(tps->regmap, tps->irq, IRQF_ONESHOT, 0,
-				  &tps65086_irq_chip, &tps->irq_data);
-	if (ret) {
-		dev_err(tps->dev, "Failed to register IRQ chip\n");
-		return ret;
+	if (tps->irq > 0) {
+		ret = regmap_add_irq_chip(tps->regmap, tps->irq, IRQF_ONESHOT, 0,
+					  &tps65086_irq_chip, &tps->irq_data);
+		if (ret) {
+			dev_err(tps->dev, "Failed to register IRQ chip\n");
+			return ret;
+		}
 	}
 
 	ret = mfd_add_devices(tps->dev, PLATFORM_DEVID_AUTO, tps65086_cells,
 			      ARRAY_SIZE(tps65086_cells), NULL, 0,
 			      regmap_irq_get_domain(tps->irq_data));
-	if (ret) {
+	if (ret && tps->irq > 0)
 		regmap_del_irq_chip(tps->irq, tps->irq_data);
-		return ret;
-	}
 
-	return 0;
+	return ret;
 }
 
 static int tps65086_remove(struct i2c_client *client)
 {
 	struct tps65086 *tps = i2c_get_clientdata(client);
 
-	regmap_del_irq_chip(tps->irq, tps->irq_data);
+	if (tps->irq > 0)
+		regmap_del_irq_chip(tps->irq, tps->irq_data);
 
 	return 0;
 }
Signature · 4 lines
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog
#11 lore raw

Re: [PATCH v1 2/3] mfd: tps65086: Make interrupt line optional

Quoted 11 lines · Lee Jones
Quoted 9 lines · Emil Renner Berthing

The BeagleV Starlight v0.9 board[1] doesn't have the IRQB line routed to the SoC, but it is still useful to be able to reach the PMIC over I2C for the other functionality it provides.

[1] https://github.com/beagleboard/beaglev-starlight

---
 .../devicetree/bindings/mfd/ti,tps65086.yaml  |  3 ---
Quoted 5 lines

This is not present in my current tree.

Looks like it's still *.txt.

Am I missing a patch?

Yes, the first patch in the series converts that to yaml. I'm quite sure I had the same list of recipients on all 4 mails in the series, so don't know why that should be missing.

#12 lore raw

Re: [PATCH v1 2/3] mfd: tps65086: Make interrupt line optional

Quoted 14 lines · Emil Renner Berthing
Quoted 13 lines · Lee Jones
Quoted 9 lines · Emil Renner Berthing

The BeagleV Starlight v0.9 board[1] doesn't have the IRQB line routed to the SoC, but it is still useful to be able to reach the PMIC over I2C for the other functionality it provides.

[1] https://github.com/beagleboard/beaglev-starlight

---
 .../devicetree/bindings/mfd/ti,tps65086.yaml  |  3 ---

This is not present in my current tree.

Quoted 7 lines
Quoted 3 lines

Looks like it's still *.txt.

Am I missing a patch?

Yes, the first patch in the series converts that to yaml. I'm quite sure I had the same list of recipients on all 4 mails in the series, so don't know why that should be missing.

Oh, it's not marked as 'important' because it has open review comments on it.

Just have this for now then:

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

Signature · 4 lines
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog
#13 lore raw

Re: [PATCH v1 2/3] mfd: tps65086: Make interrupt line optional

Quoted 23 lines · Lee Jones
Quoted 14 lines · Emil Renner Berthing
Quoted 13 lines · Lee Jones
Quoted 9 lines · Emil Renner Berthing

The BeagleV Starlight v0.9 board[1] doesn't have the IRQB line routed to the SoC, but it is still useful to be able to reach the PMIC over I2C for the other functionality it provides.

[1] https://github.com/beagleboard/beaglev-starlight

---
 .../devicetree/bindings/mfd/ti,tps65086.yaml  |  3 ---

This is not present in my current tree.

Quoted 7 lines
Quoted 3 lines

Looks like it's still *.txt.

Am I missing a patch?

Yes, the first patch in the series converts that to yaml. I'm quite sure I had the same list of recipients on all 4 mails in the series, so don't know why that should be missing.

Quoted 8 lines

Oh, it's not marked as 'important' because it has open review comments on it.

Just have this for now then:

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

Thanks! Do you want to have a look at 3/3 or should I just send a v2 to fix the yaml conversion now?

/Emil

#14 lore raw

Re: [PATCH v1 2/3] mfd: tps65086: Make interrupt line optional

Quoted 27 lines · Emil Renner Berthing
Quoted 26 lines · Lee Jones
Quoted 14 lines · Emil Renner Berthing
Quoted 13 lines · Lee Jones
Quoted 9 lines · Emil Renner Berthing

The BeagleV Starlight v0.9 board[1] doesn't have the IRQB line routed to the SoC, but it is still useful to be able to reach the PMIC over I2C for the other functionality it provides.

[1] https://github.com/beagleboard/beaglev-starlight

---
 .../devicetree/bindings/mfd/ti,tps65086.yaml  |  3 ---

This is not present in my current tree.

Quoted 7 lines
Quoted 3 lines

Looks like it's still *.txt.

Am I missing a patch?

Yes, the first patch in the series converts that to yaml. I'm quite sure I had the same list of recipients on all 4 mails in the series, so don't know why that should be missing.

Oh, it's not marked as 'important' because it has open review comments on it.

Quoted 8 lines
Quoted 5 lines

Just have this for now then:

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

Thanks! Do you want to have a look at 3/3 or should I just send a v2 to fix the yaml conversion now?

Patch 3 should be split.

I think it should also s/restart/reset/.

Signature · 4 lines
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog
#15 lore raw

Re: [PATCH v1 2/3] mfd: tps65086: Make interrupt line optional

Quoted 30 lines · Lee Jones
Quoted 29 lines · Emil Renner Berthing
Quoted 28 lines · Lee Jones
Quoted 14 lines · Emil Renner Berthing
Quoted 13 lines · Lee Jones
Quoted 9 lines · Emil Renner Berthing

The BeagleV Starlight v0.9 board[1] doesn't have the IRQB line routed to the SoC, but it is still useful to be able to reach the PMIC over I2C for the other functionality it provides.

[1] https://github.com/beagleboard/beaglev-starlight

---
 .../devicetree/bindings/mfd/ti,tps65086.yaml  |  3 ---

This is not present in my current tree.

Quoted 7 lines
Quoted 3 lines

Looks like it's still *.txt.

Am I missing a patch?

Yes, the first patch in the series converts that to yaml. I'm quite sure I had the same list of recipients on all 4 mails in the series, so don't know why that should be missing.

Oh, it's not marked as 'important' because it has open review comments on it.

Just have this for now then:

Quoted 8 lines
Quoted 6 lines
Quoted 3 lines

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

Thanks! Do you want to have a look at 3/3 or should I just send a v2 to fix the yaml conversion now?

Patch 3 should be split.

Oh, how split? Split off the series or split into adding the "driver" and then add the cell to the parent?

Quoted 1 line

I think it should also s/restart/reset/.

Oh right yes. You mean the cell name needs to be .name = "tps65086-reset", right?
I'll fix that anyway.

Quoted 5 lines

--
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services

Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog
#16 lore raw

Re: [PATCH v1 2/3] mfd: tps65086: Make interrupt line optional

Quoted 35 lines · Emil Renner Berthing
Quoted 34 lines · Lee Jones
Quoted 33 lines · Emil Renner Berthing
Quoted 31 lines · Lee Jones
Quoted 14 lines · Emil Renner Berthing
Quoted 13 lines · Lee Jones
Quoted 9 lines · Emil Renner Berthing

The BeagleV Starlight v0.9 board[1] doesn't have the IRQB line routed to the SoC, but it is still useful to be able to reach the PMIC over I2C for the other functionality it provides.

[1] https://github.com/beagleboard/beaglev-starlight

---
 .../devicetree/bindings/mfd/ti,tps65086.yaml  |  3 ---

This is not present in my current tree.

Quoted 7 lines
Quoted 3 lines

Looks like it's still *.txt.

Am I missing a patch?

Yes, the first patch in the series converts that to yaml. I'm quite sure I had the same list of recipients on all 4 mails in the series, so don't know why that should be missing.

Oh, it's not marked as 'important' because it has open review comments on it.

Just have this for now then:

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

Quoted 7 lines
Quoted 4 lines
Quoted 2 lines

Thanks! Do you want to have a look at 3/3 or should I just send a v2 to fix the yaml conversion now?

Patch 3 should be split.

Oh, how split? Split off the series or split into adding the "driver" and then add the cell to the parent?

I'm not overly concerned about the ordering.

Just split out the patch per-subsystem.

Quoted 4 lines
Quoted 1 line

I think it should also s/restart/reset/.

Oh right yes. You mean the cell name needs to be .name = "tps65086-reset", right?

Right.

Quoted 1 line

I'll fix that anyway.

Ta.

Signature · 4 lines
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog
#17 lore raw

PATCH 3/3 power: reset: Add TPS65086 restart driver

In reply to Emil Renner Berthing

The only way to reset the BeagleV Starlight v0.9 board[1] properly is to tell the PMIC to reset itself which will then assert the external reset lines of the SoC, USB hub and ethernet phy.

This adds a driver to register a reset handler to do just that.

[1] https://github.com/beagleboard/beaglev-starlight

---
 drivers/mfd/tps65086.c                 |  1 +
 drivers/power/reset/Kconfig            |  6 ++
 drivers/power/reset/Makefile           |  1 +
 drivers/power/reset/tps65086-restart.c | 99 ++++++++++++++++++++++++++
 4 files changed, 107 insertions(+)
 create mode 100644 drivers/power/reset/tps65086-restart.c
drivers/mfd/tps65086.c +1 -0
index cc3478ee9a64..1bfba0758fcc 100644
@@ -24,6 +24,7 @@
 static const struct mfd_cell tps65086_cells[] = {
 	{ .name = "tps65086-regulator", },
 	{ .name = "tps65086-gpio", },
+	{ .name = "tps65086-restart", },
 };
 
 static const struct regmap_range tps65086_yes_ranges[] = {
drivers/power/reset/Kconfig +6 -0
index 4d1192062508..4b563db3ab3e 100644
@@ -204,6 +204,12 @@ config POWER_RESET_ST
 	help
 	  Reset support for STMicroelectronics boards.
 
+config POWER_RESET_TPS65086
+	bool "TPS65086 restart driver"
+	depends on MFD_TPS65086
+	help
+	  This driver adds support for resetting the TPS65086 PMIC on restart.
+
 config POWER_RESET_VERSATILE
 	bool "ARM Versatile family reboot driver"
 	depends on ARM
drivers/power/reset/Makefile +1 -0
index cf3f4d02d8a5..f606a2f60539 100644
@@ -23,6 +23,7 @@ obj-$(CONFIG_POWER_RESET_QNAP) += qnap-poweroff.o
 obj-$(CONFIG_POWER_RESET_REGULATOR) += regulator-poweroff.o
 obj-$(CONFIG_POWER_RESET_RESTART) += restart-poweroff.o
 obj-$(CONFIG_POWER_RESET_ST) += st-poweroff.o
+obj-$(CONFIG_POWER_RESET_TPS65086) += tps65086-restart.o
 obj-$(CONFIG_POWER_RESET_VERSATILE) += arm-versatile-reboot.o
 obj-$(CONFIG_POWER_RESET_VEXPRESS) += vexpress-poweroff.o
 obj-$(CONFIG_POWER_RESET_XGENE) += xgene-reboot.o
drivers/power/reset/tps65086-restart.c new file +99 -0

99 lines not on this page · raw message

Signature · 1 line
2.32.0
maintainer Acked-by on v1 3/3
#18 lore raw

Re: [PATCH v1 3/3] power: reset: Add TPS65086 restart driver

Hi,

Quoted 10 lines · Emil Renner Berthing

The only way to reset the BeagleV Starlight v0.9 board[1] properly is to tell the PMIC to reset itself which will then assert the external reset lines of the SoC, USB hub and ethernet phy.

This adds a driver to register a reset handler to do just that.

[1] https://github.com/beagleboard/beaglev-starlight

---

-- Sebastian

Quoted 156 lines
 drivers/mfd/tps65086.c                 |  1 +
 drivers/power/reset/Kconfig            |  6 ++
 drivers/power/reset/Makefile           |  1 +
 drivers/power/reset/tps65086-restart.c | 99 ++++++++++++++++++++++++++
 4 files changed, 107 insertions(+)
 create mode 100644 drivers/power/reset/tps65086-restart.c
drivers/mfd/tps65086.c +1 -0
index cc3478ee9a64..1bfba0758fcc 100644
@@ -24,6 +24,7 @@
 static const struct mfd_cell tps65086_cells[] = {
 	{ .name = "tps65086-regulator", },
 	{ .name = "tps65086-gpio", },
+	{ .name = "tps65086-restart", },
 };
 
 static const struct regmap_range tps65086_yes_ranges[] = {
drivers/power/reset/Kconfig +6 -0
index 4d1192062508..4b563db3ab3e 100644
@@ -204,6 +204,12 @@ config POWER_RESET_ST
 	help
 	  Reset support for STMicroelectronics boards.
 
+config POWER_RESET_TPS65086
+	bool "TPS65086 restart driver"
+	depends on MFD_TPS65086
+	help
+	  This driver adds support for resetting the TPS65086 PMIC on restart.
+
 config POWER_RESET_VERSATILE
 	bool "ARM Versatile family reboot driver"
 	depends on ARM
drivers/power/reset/Makefile +1 -0
index cf3f4d02d8a5..f606a2f60539 100644
@@ -23,6 +23,7 @@ obj-$(CONFIG_POWER_RESET_QNAP) += qnap-poweroff.o
 obj-$(CONFIG_POWER_RESET_REGULATOR) += regulator-poweroff.o
 obj-$(CONFIG_POWER_RESET_RESTART) += restart-poweroff.o
 obj-$(CONFIG_POWER_RESET_ST) += st-poweroff.o
+obj-$(CONFIG_POWER_RESET_TPS65086) += tps65086-restart.o
 obj-$(CONFIG_POWER_RESET_VERSATILE) += arm-versatile-reboot.o
 obj-$(CONFIG_POWER_RESET_VEXPRESS) += vexpress-poweroff.o
 obj-$(CONFIG_POWER_RESET_XGENE) += xgene-reboot.o
drivers/power/reset/tps65086-restart.c new file +99 -0
new file mode 100644
index 000000000000..ad9f2c5a84ac
@@ -0,0 +1,99 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2021 Emil Renner Berthing
+ */
+
+#include <linux/mfd/tps65086.h>
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/reboot.h>
+
+struct tps65086_restart {
+	struct notifier_block handler;
+	struct tps65086 *tps;
+	struct device *dev;
+};
+
+static int tps65086_restart_notify(struct notifier_block *this,
+				   unsigned long mode, void *cmd)
+{
+	struct tps65086_restart *tps65086_restart =
+		container_of(this, struct tps65086_restart, handler);
+	int ret;
+
+	ret = regmap_write(tps65086_restart->tps->regmap, TPS65086_FORCESHUTDN, 1);
+	if (ret) {
+		dev_err(tps65086_restart->dev, "%s: error writing to tps65086 pmic: %d\n",
+			__func__, ret);
+		return NOTIFY_DONE;
+	}
+
+	/* give it a little time */
+	mdelay(200);
+
+	WARN_ON(1);
+
+	return NOTIFY_DONE;
+}
+
+static int tps65086_restart_probe(struct platform_device *pdev)
+{
+	struct tps65086_restart *tps65086_restart;
+	int ret;
+
+	tps65086_restart = devm_kzalloc(&pdev->dev, sizeof(*tps65086_restart), GFP_KERNEL);
+	if (!tps65086_restart)
+		return -ENOMEM;
+
+	platform_set_drvdata(pdev, tps65086_restart);
+
+	tps65086_restart->handler.notifier_call = tps65086_restart_notify;
+	tps65086_restart->handler.priority = 192;
+	tps65086_restart->tps = dev_get_drvdata(pdev->dev.parent);
+	tps65086_restart->dev = &pdev->dev;
+
+	ret = register_restart_handler(&tps65086_restart->handler);
+	if (ret) {
+		dev_err(&pdev->dev, "%s: cannot register restart handler: %d\n",
+			__func__, ret);
+		return -ENODEV;
+	}
+
+	return 0;
+}
+
+static int tps65086_restart_remove(struct platform_device *pdev)
+{
+	struct tps65086_restart *tps65086_restart = platform_get_drvdata(pdev);
+	int ret;
+
+	ret = unregister_restart_handler(&tps65086_restart->handler);
+	if (ret) {
+		dev_err(&pdev->dev, "%s: cannot unregister restart handler: %d\n",
+			__func__, ret);
+		return -ENODEV;
+	}
+
+	return 0;
+}
+
+static const struct platform_device_id tps65086_restart_id_table[] = {
+	{ "tps65086-restart", },
+	{ /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(platform, tps65086_restart_id_table);
+
+static struct platform_driver tps65086_restart_driver = {
+	.driver = {
+		.name = "tps65086-restart",
+	},
+	.probe = tps65086_restart_probe,
+	.remove = tps65086_restart_remove,
+	.id_table = tps65086_restart_id_table,
+};
+module_platform_driver(tps65086_restart_driver);
+
+MODULE_AUTHOR("Emil Renner Berthing <[email protected]>");
+MODULE_DESCRIPTION("TPS65086 restart driver");
+MODULE_LICENSE("GPL v2");
Signature · 1 line
2.32.0