All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 0/5] regulator: add Ricoh RN5T567 PMIC support
@ 2016-06-29  5:53 ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: lee.jones, lgirdwood, broonie, khilman, carlo
  Cc: b.galvani, max.oss.09, marcel, linux, galak, ijc+devicetree,
	mark.rutland, pawel.moll, robh+dt, linux, devicetree,
	linux-kernel, linux-arm-kernel, linux-amlogic, Stefan Agner

This patchset adds RN5T567 PMIC support which is used on the 
Toradex Colibri iMX7S/iMX7D modules. The existing RN5T618 is from
the same family, hence this patchset uses the same driver and adds
variant support.

The Colibris currently do not use the PMIC's power off capabilities,
as do the current users of that PMIC driver. Therefore this patchset
also makes the use of the system-power-controller property mandatory
if the power off capabilties are required.

Changes since v4:
- Spell check in patch 5 and added Acks

Changes since v3:
- Use RN5T618_REPCNT_REPWRON macro when writing RN5T618_REPCNT register

Changes since v2:
- Elevate restart priority to 192 to make sure PMIC takes presedence
  over SoC level restart capabilities (e.g. watchdog)
- Print a warning if poweroff callback is already assigned
- Reorder of_id and variant assignment
- Lower delay to 1ms and justify why it is required
- Fix DCDC count and a typos in device tree bindings

Changes since v1:
- Removed obsolete include <asm/system_misc.h>

Stefan Agner (5):
  ARM: dts: meson: minix-neo-x8: define PMIC as power controller
  mfd: add Ricoh RN5T567 PMIC support
  regulator: rn5t618: add RN5T567 PMIC support
  mfd: rn5t618: register power off callback optionally
  mfd: rn5t618: register restart handler

 Documentation/devicetree/bindings/mfd/rn5t618.txt | 19 +++---
 arch/arm/boot/dts/meson8-minix-neo-x8.dts         |  1 +
 drivers/mfd/Kconfig                               |  7 ++-
 drivers/mfd/rn5t618.c                             | 70 +++++++++++++++++++----
 drivers/regulator/Kconfig                         |  5 +-
 drivers/regulator/rn5t618-regulator.c             | 40 +++++++++++--
 include/linux/mfd/rn5t618.h                       | 13 +++++
 7 files changed, 126 insertions(+), 29 deletions(-)

-- 
2.9.0

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

* [PATCH v5 0/5] regulator: add Ricoh RN5T567 PMIC support
@ 2016-06-29  5:53 ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: linux-arm-kernel

This patchset adds RN5T567 PMIC support which is used on the 
Toradex Colibri iMX7S/iMX7D modules. The existing RN5T618 is from
the same family, hence this patchset uses the same driver and adds
variant support.

The Colibris currently do not use the PMIC's power off capabilities,
as do the current users of that PMIC driver. Therefore this patchset
also makes the use of the system-power-controller property mandatory
if the power off capabilties are required.

Changes since v4:
- Spell check in patch 5 and added Acks

Changes since v3:
- Use RN5T618_REPCNT_REPWRON macro when writing RN5T618_REPCNT register

Changes since v2:
- Elevate restart priority to 192 to make sure PMIC takes presedence
  over SoC level restart capabilities (e.g. watchdog)
- Print a warning if poweroff callback is already assigned
- Reorder of_id and variant assignment
- Lower delay to 1ms and justify why it is required
- Fix DCDC count and a typos in device tree bindings

Changes since v1:
- Removed obsolete include <asm/system_misc.h>

Stefan Agner (5):
  ARM: dts: meson: minix-neo-x8: define PMIC as power controller
  mfd: add Ricoh RN5T567 PMIC support
  regulator: rn5t618: add RN5T567 PMIC support
  mfd: rn5t618: register power off callback optionally
  mfd: rn5t618: register restart handler

 Documentation/devicetree/bindings/mfd/rn5t618.txt | 19 +++---
 arch/arm/boot/dts/meson8-minix-neo-x8.dts         |  1 +
 drivers/mfd/Kconfig                               |  7 ++-
 drivers/mfd/rn5t618.c                             | 70 +++++++++++++++++++----
 drivers/regulator/Kconfig                         |  5 +-
 drivers/regulator/rn5t618-regulator.c             | 40 +++++++++++--
 include/linux/mfd/rn5t618.h                       | 13 +++++
 7 files changed, 126 insertions(+), 29 deletions(-)

-- 
2.9.0

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

* [PATCH v5 0/5] regulator: add Ricoh RN5T567 PMIC support
@ 2016-06-29  5:53 ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: linus-amlogic

This patchset adds RN5T567 PMIC support which is used on the 
Toradex Colibri iMX7S/iMX7D modules. The existing RN5T618 is from
the same family, hence this patchset uses the same driver and adds
variant support.

The Colibris currently do not use the PMIC's power off capabilities,
as do the current users of that PMIC driver. Therefore this patchset
also makes the use of the system-power-controller property mandatory
if the power off capabilties are required.

Changes since v4:
- Spell check in patch 5 and added Acks

Changes since v3:
- Use RN5T618_REPCNT_REPWRON macro when writing RN5T618_REPCNT register

Changes since v2:
- Elevate restart priority to 192 to make sure PMIC takes presedence
  over SoC level restart capabilities (e.g. watchdog)
- Print a warning if poweroff callback is already assigned
- Reorder of_id and variant assignment
- Lower delay to 1ms and justify why it is required
- Fix DCDC count and a typos in device tree bindings

Changes since v1:
- Removed obsolete include <asm/system_misc.h>

Stefan Agner (5):
  ARM: dts: meson: minix-neo-x8: define PMIC as power controller
  mfd: add Ricoh RN5T567 PMIC support
  regulator: rn5t618: add RN5T567 PMIC support
  mfd: rn5t618: register power off callback optionally
  mfd: rn5t618: register restart handler

 Documentation/devicetree/bindings/mfd/rn5t618.txt | 19 +++---
 arch/arm/boot/dts/meson8-minix-neo-x8.dts         |  1 +
 drivers/mfd/Kconfig                               |  7 ++-
 drivers/mfd/rn5t618.c                             | 70 +++++++++++++++++++----
 drivers/regulator/Kconfig                         |  5 +-
 drivers/regulator/rn5t618-regulator.c             | 40 +++++++++++--
 include/linux/mfd/rn5t618.h                       | 13 +++++
 7 files changed, 126 insertions(+), 29 deletions(-)

-- 
2.9.0

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

* [PATCH v5 1/5] ARM: dts: meson: minix-neo-x8: define PMIC as power controller
  2016-06-29  5:53 ` Stefan Agner
  (?)
@ 2016-06-29  5:53   ` Stefan Agner
  -1 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: lee.jones, lgirdwood, broonie, khilman, carlo
  Cc: b.galvani, max.oss.09, marcel, linux, galak, ijc+devicetree,
	mark.rutland, pawel.moll, robh+dt, linux, devicetree,
	linux-kernel, linux-arm-kernel, linux-amlogic, Stefan Agner

The PMIC driver used to register itself as poweroff controller by
default, hence assuming that this device is using the PMIC as
system power controller.

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Acked-by: Carlo Caione <carlo@endlessm.com>
---
 arch/arm/boot/dts/meson8-minix-neo-x8.dts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/boot/dts/meson8-minix-neo-x8.dts b/arch/arm/boot/dts/meson8-minix-neo-x8.dts
index 4f536bb..8bceb8d 100644
--- a/arch/arm/boot/dts/meson8-minix-neo-x8.dts
+++ b/arch/arm/boot/dts/meson8-minix-neo-x8.dts
@@ -80,6 +80,7 @@
 	pmic@32 {
 		compatible = "ricoh,rn5t618";
 		reg = <0x32>;
+		system-power-controller;
 
 		regulators {
 		};
-- 
2.9.0

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

* [PATCH v5 1/5] ARM: dts: meson: minix-neo-x8: define PMIC as power controller
@ 2016-06-29  5:53   ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: linux-arm-kernel

The PMIC driver used to register itself as poweroff controller by
default, hence assuming that this device is using the PMIC as
system power controller.

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Acked-by: Carlo Caione <carlo@endlessm.com>
---
 arch/arm/boot/dts/meson8-minix-neo-x8.dts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/boot/dts/meson8-minix-neo-x8.dts b/arch/arm/boot/dts/meson8-minix-neo-x8.dts
index 4f536bb..8bceb8d 100644
--- a/arch/arm/boot/dts/meson8-minix-neo-x8.dts
+++ b/arch/arm/boot/dts/meson8-minix-neo-x8.dts
@@ -80,6 +80,7 @@
 	pmic at 32 {
 		compatible = "ricoh,rn5t618";
 		reg = <0x32>;
+		system-power-controller;
 
 		regulators {
 		};
-- 
2.9.0

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

* [PATCH v5 1/5] ARM: dts: meson: minix-neo-x8: define PMIC as power controller
@ 2016-06-29  5:53   ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: linus-amlogic

The PMIC driver used to register itself as poweroff controller by
default, hence assuming that this device is using the PMIC as
system power controller.

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Acked-by: Carlo Caione <carlo@endlessm.com>
---
 arch/arm/boot/dts/meson8-minix-neo-x8.dts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/boot/dts/meson8-minix-neo-x8.dts b/arch/arm/boot/dts/meson8-minix-neo-x8.dts
index 4f536bb..8bceb8d 100644
--- a/arch/arm/boot/dts/meson8-minix-neo-x8.dts
+++ b/arch/arm/boot/dts/meson8-minix-neo-x8.dts
@@ -80,6 +80,7 @@
 	pmic at 32 {
 		compatible = "ricoh,rn5t618";
 		reg = <0x32>;
+		system-power-controller;
 
 		regulators {
 		};
-- 
2.9.0

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

* [PATCH v5 2/5] mfd: add Ricoh RN5T567 PMIC support
  2016-06-29  5:53 ` Stefan Agner
  (?)
@ 2016-06-29  5:53   ` Stefan Agner
  -1 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: lee.jones, lgirdwood, broonie, khilman, carlo
  Cc: b.galvani, max.oss.09, marcel, linux, galak, ijc+devicetree,
	mark.rutland, pawel.moll, robh+dt, linux, devicetree,
	linux-kernel, linux-arm-kernel, linux-amlogic, Stefan Agner

The Ricoh RN5T567 is from the same family as the Ricoh RN5T618 is,
the differences are:

+ DCDC4
+ Slightly different output voltage/currents
+ 32kHz Output
- ADC/Charger capabilities

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Acked-by: Rob Herring <robh@kernel.org>
Acked-by: Lee Jones <lee.jones@linaro.org>
---
 Documentation/devicetree/bindings/mfd/rn5t618.txt | 19 +++++++++--------
 drivers/mfd/Kconfig                               |  7 ++++---
 drivers/mfd/rn5t618.c                             | 25 ++++++++++++++++-------
 include/linux/mfd/rn5t618.h                       | 12 +++++++++++
 4 files changed, 45 insertions(+), 18 deletions(-)

diff --git a/Documentation/devicetree/bindings/mfd/rn5t618.txt b/Documentation/devicetree/bindings/mfd/rn5t618.txt
index 937785a..9e6770b 100644
--- a/Documentation/devicetree/bindings/mfd/rn5t618.txt
+++ b/Documentation/devicetree/bindings/mfd/rn5t618.txt
@@ -1,18 +1,21 @@
-* Ricoh RN5T618 PMIC
+* Ricoh RN5T567/RN5T618 PMIC
 
-Ricoh RN5T618 is a power management IC which integrates 3 step-down
-DCDC converters, 7 low-dropout regulators, a Li-ion battery charger,
-fuel gauge, ADC, GPIOs and a watchdog timer. It can be controlled
-through a I2C interface.
+Ricoh RN5T567/RN5T618 is a power management IC family which integrates
+3 to 4 step-down DCDC converters, 7 low-dropout regulators, GPIOs and
+a watchdog timer. The RN5T618 provides additionally a Li-ion battery
+charger, fuel gauge and an ADC. It can be controlled through an I2C
+interface.
 
 Required properties:
- - compatible: should be "ricoh,rn5t618"
+ - compatible: must be one of
+		"ricoh,rn5t567"
+		"ricoh,rn5t618"
  - reg: the I2C slave address of the device
 
 Sub-nodes:
  - regulators: the node is required if the regulator functionality is
-   needed. The valid regulator names are: DCDC1, DCDC2, DCDC3, LDO1,
-   LDO2, LDO3, LDO4, LDO5, LDORTC1 and LDORTC2.
+   needed. The valid regulator names are: DCDC1, DCDC2, DCDC3, DCDC4
+   (RN5T567), LDO1, LDO2, LDO3, LDO4, LDO5, LDORTC1 and LDORTC2.
    The common bindings for each individual regulator can be found in:
    Documentation/devicetree/bindings/regulator/regulator.txt
 
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 1bcf601..ff031a7 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -852,13 +852,14 @@ config MFD_RK808
 	  including interrupts, RTC, LDO & DCDC regulators, and onkey.
 
 config MFD_RN5T618
-	tristate "Ricoh RN5T5618 PMIC"
+	tristate "Ricoh RN5T567/618 PMIC"
 	depends on I2C
+	depends on OF
 	select MFD_CORE
 	select REGMAP_I2C
 	help
-	  Say yes here to add support for the Ricoh RN5T618 PMIC. This
-	  driver provides common support for accessing the device,
+	  Say yes here to add support for the Ricoh RN5T567 or R5T618 PMIC.
+	  This driver provides common support for accessing the device,
 	  additional drivers must be enabled in order to use the
 	  functionality of the device.
 
diff --git a/drivers/mfd/rn5t618.c b/drivers/mfd/rn5t618.c
index 0ad51d7..c86160d 100644
--- a/drivers/mfd/rn5t618.c
+++ b/drivers/mfd/rn5t618.c
@@ -2,6 +2,7 @@
  * MFD core driver for Ricoh RN5T618 PMIC
  *
  * Copyright (C) 2014 Beniamino Galvani <b.galvani@gmail.com>
+ * Copyright (C) 2016 Toradex AG
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -15,6 +16,7 @@
 #include <linux/mfd/core.h>
 #include <linux/mfd/rn5t618.h>
 #include <linux/module.h>
+#include <linux/of_device.h>
 #include <linux/regmap.h>
 
 static const struct mfd_cell rn5t618_cells[] = {
@@ -59,17 +61,32 @@ static void rn5t618_power_off(void)
 			   RN5T618_SLPCNT_SWPWROFF, RN5T618_SLPCNT_SWPWROFF);
 }
 
+static const struct of_device_id rn5t618_of_match[] = {
+	{ .compatible = "ricoh,rn5t567", .data = (void *)RN5T567 },
+	{ .compatible = "ricoh,rn5t618", .data = (void *)RN5T618 },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, rn5t618_of_match);
+
 static int rn5t618_i2c_probe(struct i2c_client *i2c,
 			     const struct i2c_device_id *id)
 {
+	const struct of_device_id *of_id;
 	struct rn5t618 *priv;
 	int ret;
 
+	of_id = of_match_device(rn5t618_of_match, &i2c->dev);
+	if (!of_id) {
+		dev_err(&i2c->dev, "Failed to find matching DT ID\n");
+		return -EINVAL;
+	}
+
 	priv = devm_kzalloc(&i2c->dev, sizeof(*priv), GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;
 
 	i2c_set_clientdata(i2c, priv);
+	priv->variant = (long)of_id->data;
 
 	priv->regmap = devm_regmap_init_i2c(i2c, &rn5t618_regmap_config);
 	if (IS_ERR(priv->regmap)) {
@@ -105,12 +122,6 @@ static int rn5t618_i2c_remove(struct i2c_client *i2c)
 	return 0;
 }
 
-static const struct of_device_id rn5t618_of_match[] = {
-	{ .compatible = "ricoh,rn5t618" },
-	{ }
-};
-MODULE_DEVICE_TABLE(of, rn5t618_of_match);
-
 static const struct i2c_device_id rn5t618_i2c_id[] = {
 	{ }
 };
@@ -129,5 +140,5 @@ static struct i2c_driver rn5t618_i2c_driver = {
 module_i2c_driver(rn5t618_i2c_driver);
 
 MODULE_AUTHOR("Beniamino Galvani <b.galvani@gmail.com>");
-MODULE_DESCRIPTION("Ricoh RN5T618 MFD driver");
+MODULE_DESCRIPTION("Ricoh RN5T567/618 MFD driver");
 MODULE_LICENSE("GPL v2");
diff --git a/include/linux/mfd/rn5t618.h b/include/linux/mfd/rn5t618.h
index c72d534..54179c2 100644
--- a/include/linux/mfd/rn5t618.h
+++ b/include/linux/mfd/rn5t618.h
@@ -20,6 +20,7 @@
 #define RN5T618_OTPVER			0x01
 #define RN5T618_IODAC			0x02
 #define RN5T618_VINDAC			0x03
+#define RN5T618_OUT32KEN		0x05
 #define RN5T618_CPUCNT			0x06
 #define RN5T618_PSWR			0x07
 #define RN5T618_PONHIS			0x09
@@ -38,6 +39,7 @@
 #define RN5T618_DC1_SLOT		0x16
 #define RN5T618_DC2_SLOT		0x17
 #define RN5T618_DC3_SLOT		0x18
+#define RN5T618_DC4_SLOT		0x19
 #define RN5T618_LDO1_SLOT		0x1b
 #define RN5T618_LDO2_SLOT		0x1c
 #define RN5T618_LDO3_SLOT		0x1d
@@ -54,12 +56,16 @@
 #define RN5T618_DC2CTL2			0x2f
 #define RN5T618_DC3CTL			0x30
 #define RN5T618_DC3CTL2			0x31
+#define RN5T618_DC4CTL			0x32
+#define RN5T618_DC4CTL2			0x33
 #define RN5T618_DC1DAC			0x36
 #define RN5T618_DC2DAC			0x37
 #define RN5T618_DC3DAC			0x38
+#define RN5T618_DC4DAC			0x39
 #define RN5T618_DC1DAC_SLP		0x3b
 #define RN5T618_DC2DAC_SLP		0x3c
 #define RN5T618_DC3DAC_SLP		0x3d
+#define RN5T618_DC4DAC_SLP		0x3e
 #define RN5T618_DCIREN			0x40
 #define RN5T618_DCIRQ			0x41
 #define RN5T618_DCIRMON			0x42
@@ -221,8 +227,14 @@ enum {
 	RN5T618_REG_NUM,
 };
 
+enum {
+	RN5T567 = 0,
+	RN5T618,
+};
+
 struct rn5t618 {
 	struct regmap *regmap;
+	long variant;
 };
 
 #endif /* __LINUX_MFD_RN5T618_H */
-- 
2.9.0

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

* [PATCH v5 2/5] mfd: add Ricoh RN5T567 PMIC support
@ 2016-06-29  5:53   ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: linux-arm-kernel

The Ricoh RN5T567 is from the same family as the Ricoh RN5T618 is,
the differences are:

+ DCDC4
+ Slightly different output voltage/currents
+ 32kHz Output
- ADC/Charger capabilities

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Acked-by: Rob Herring <robh@kernel.org>
Acked-by: Lee Jones <lee.jones@linaro.org>
---
 Documentation/devicetree/bindings/mfd/rn5t618.txt | 19 +++++++++--------
 drivers/mfd/Kconfig                               |  7 ++++---
 drivers/mfd/rn5t618.c                             | 25 ++++++++++++++++-------
 include/linux/mfd/rn5t618.h                       | 12 +++++++++++
 4 files changed, 45 insertions(+), 18 deletions(-)

diff --git a/Documentation/devicetree/bindings/mfd/rn5t618.txt b/Documentation/devicetree/bindings/mfd/rn5t618.txt
index 937785a..9e6770b 100644
--- a/Documentation/devicetree/bindings/mfd/rn5t618.txt
+++ b/Documentation/devicetree/bindings/mfd/rn5t618.txt
@@ -1,18 +1,21 @@
-* Ricoh RN5T618 PMIC
+* Ricoh RN5T567/RN5T618 PMIC
 
-Ricoh RN5T618 is a power management IC which integrates 3 step-down
-DCDC converters, 7 low-dropout regulators, a Li-ion battery charger,
-fuel gauge, ADC, GPIOs and a watchdog timer. It can be controlled
-through a I2C interface.
+Ricoh RN5T567/RN5T618 is a power management IC family which integrates
+3 to 4 step-down DCDC converters, 7 low-dropout regulators, GPIOs and
+a watchdog timer. The RN5T618 provides additionally a Li-ion battery
+charger, fuel gauge and an ADC. It can be controlled through an I2C
+interface.
 
 Required properties:
- - compatible: should be "ricoh,rn5t618"
+ - compatible: must be one of
+		"ricoh,rn5t567"
+		"ricoh,rn5t618"
  - reg: the I2C slave address of the device
 
 Sub-nodes:
  - regulators: the node is required if the regulator functionality is
-   needed. The valid regulator names are: DCDC1, DCDC2, DCDC3, LDO1,
-   LDO2, LDO3, LDO4, LDO5, LDORTC1 and LDORTC2.
+   needed. The valid regulator names are: DCDC1, DCDC2, DCDC3, DCDC4
+   (RN5T567), LDO1, LDO2, LDO3, LDO4, LDO5, LDORTC1 and LDORTC2.
    The common bindings for each individual regulator can be found in:
    Documentation/devicetree/bindings/regulator/regulator.txt
 
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 1bcf601..ff031a7 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -852,13 +852,14 @@ config MFD_RK808
 	  including interrupts, RTC, LDO & DCDC regulators, and onkey.
 
 config MFD_RN5T618
-	tristate "Ricoh RN5T5618 PMIC"
+	tristate "Ricoh RN5T567/618 PMIC"
 	depends on I2C
+	depends on OF
 	select MFD_CORE
 	select REGMAP_I2C
 	help
-	  Say yes here to add support for the Ricoh RN5T618 PMIC. This
-	  driver provides common support for accessing the device,
+	  Say yes here to add support for the Ricoh RN5T567 or R5T618 PMIC.
+	  This driver provides common support for accessing the device,
 	  additional drivers must be enabled in order to use the
 	  functionality of the device.
 
diff --git a/drivers/mfd/rn5t618.c b/drivers/mfd/rn5t618.c
index 0ad51d7..c86160d 100644
--- a/drivers/mfd/rn5t618.c
+++ b/drivers/mfd/rn5t618.c
@@ -2,6 +2,7 @@
  * MFD core driver for Ricoh RN5T618 PMIC
  *
  * Copyright (C) 2014 Beniamino Galvani <b.galvani@gmail.com>
+ * Copyright (C) 2016 Toradex AG
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -15,6 +16,7 @@
 #include <linux/mfd/core.h>
 #include <linux/mfd/rn5t618.h>
 #include <linux/module.h>
+#include <linux/of_device.h>
 #include <linux/regmap.h>
 
 static const struct mfd_cell rn5t618_cells[] = {
@@ -59,17 +61,32 @@ static void rn5t618_power_off(void)
 			   RN5T618_SLPCNT_SWPWROFF, RN5T618_SLPCNT_SWPWROFF);
 }
 
+static const struct of_device_id rn5t618_of_match[] = {
+	{ .compatible = "ricoh,rn5t567", .data = (void *)RN5T567 },
+	{ .compatible = "ricoh,rn5t618", .data = (void *)RN5T618 },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, rn5t618_of_match);
+
 static int rn5t618_i2c_probe(struct i2c_client *i2c,
 			     const struct i2c_device_id *id)
 {
+	const struct of_device_id *of_id;
 	struct rn5t618 *priv;
 	int ret;
 
+	of_id = of_match_device(rn5t618_of_match, &i2c->dev);
+	if (!of_id) {
+		dev_err(&i2c->dev, "Failed to find matching DT ID\n");
+		return -EINVAL;
+	}
+
 	priv = devm_kzalloc(&i2c->dev, sizeof(*priv), GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;
 
 	i2c_set_clientdata(i2c, priv);
+	priv->variant = (long)of_id->data;
 
 	priv->regmap = devm_regmap_init_i2c(i2c, &rn5t618_regmap_config);
 	if (IS_ERR(priv->regmap)) {
@@ -105,12 +122,6 @@ static int rn5t618_i2c_remove(struct i2c_client *i2c)
 	return 0;
 }
 
-static const struct of_device_id rn5t618_of_match[] = {
-	{ .compatible = "ricoh,rn5t618" },
-	{ }
-};
-MODULE_DEVICE_TABLE(of, rn5t618_of_match);
-
 static const struct i2c_device_id rn5t618_i2c_id[] = {
 	{ }
 };
@@ -129,5 +140,5 @@ static struct i2c_driver rn5t618_i2c_driver = {
 module_i2c_driver(rn5t618_i2c_driver);
 
 MODULE_AUTHOR("Beniamino Galvani <b.galvani@gmail.com>");
-MODULE_DESCRIPTION("Ricoh RN5T618 MFD driver");
+MODULE_DESCRIPTION("Ricoh RN5T567/618 MFD driver");
 MODULE_LICENSE("GPL v2");
diff --git a/include/linux/mfd/rn5t618.h b/include/linux/mfd/rn5t618.h
index c72d534..54179c2 100644
--- a/include/linux/mfd/rn5t618.h
+++ b/include/linux/mfd/rn5t618.h
@@ -20,6 +20,7 @@
 #define RN5T618_OTPVER			0x01
 #define RN5T618_IODAC			0x02
 #define RN5T618_VINDAC			0x03
+#define RN5T618_OUT32KEN		0x05
 #define RN5T618_CPUCNT			0x06
 #define RN5T618_PSWR			0x07
 #define RN5T618_PONHIS			0x09
@@ -38,6 +39,7 @@
 #define RN5T618_DC1_SLOT		0x16
 #define RN5T618_DC2_SLOT		0x17
 #define RN5T618_DC3_SLOT		0x18
+#define RN5T618_DC4_SLOT		0x19
 #define RN5T618_LDO1_SLOT		0x1b
 #define RN5T618_LDO2_SLOT		0x1c
 #define RN5T618_LDO3_SLOT		0x1d
@@ -54,12 +56,16 @@
 #define RN5T618_DC2CTL2			0x2f
 #define RN5T618_DC3CTL			0x30
 #define RN5T618_DC3CTL2			0x31
+#define RN5T618_DC4CTL			0x32
+#define RN5T618_DC4CTL2			0x33
 #define RN5T618_DC1DAC			0x36
 #define RN5T618_DC2DAC			0x37
 #define RN5T618_DC3DAC			0x38
+#define RN5T618_DC4DAC			0x39
 #define RN5T618_DC1DAC_SLP		0x3b
 #define RN5T618_DC2DAC_SLP		0x3c
 #define RN5T618_DC3DAC_SLP		0x3d
+#define RN5T618_DC4DAC_SLP		0x3e
 #define RN5T618_DCIREN			0x40
 #define RN5T618_DCIRQ			0x41
 #define RN5T618_DCIRMON			0x42
@@ -221,8 +227,14 @@ enum {
 	RN5T618_REG_NUM,
 };
 
+enum {
+	RN5T567 = 0,
+	RN5T618,
+};
+
 struct rn5t618 {
 	struct regmap *regmap;
+	long variant;
 };
 
 #endif /* __LINUX_MFD_RN5T618_H */
-- 
2.9.0

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

* [PATCH v5 2/5] mfd: add Ricoh RN5T567 PMIC support
@ 2016-06-29  5:53   ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: linus-amlogic

The Ricoh RN5T567 is from the same family as the Ricoh RN5T618 is,
the differences are:

+ DCDC4
+ Slightly different output voltage/currents
+ 32kHz Output
- ADC/Charger capabilities

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Acked-by: Rob Herring <robh@kernel.org>
Acked-by: Lee Jones <lee.jones@linaro.org>
---
 Documentation/devicetree/bindings/mfd/rn5t618.txt | 19 +++++++++--------
 drivers/mfd/Kconfig                               |  7 ++++---
 drivers/mfd/rn5t618.c                             | 25 ++++++++++++++++-------
 include/linux/mfd/rn5t618.h                       | 12 +++++++++++
 4 files changed, 45 insertions(+), 18 deletions(-)

diff --git a/Documentation/devicetree/bindings/mfd/rn5t618.txt b/Documentation/devicetree/bindings/mfd/rn5t618.txt
index 937785a..9e6770b 100644
--- a/Documentation/devicetree/bindings/mfd/rn5t618.txt
+++ b/Documentation/devicetree/bindings/mfd/rn5t618.txt
@@ -1,18 +1,21 @@
-* Ricoh RN5T618 PMIC
+* Ricoh RN5T567/RN5T618 PMIC
 
-Ricoh RN5T618 is a power management IC which integrates 3 step-down
-DCDC converters, 7 low-dropout regulators, a Li-ion battery charger,
-fuel gauge, ADC, GPIOs and a watchdog timer. It can be controlled
-through a I2C interface.
+Ricoh RN5T567/RN5T618 is a power management IC family which integrates
+3 to 4 step-down DCDC converters, 7 low-dropout regulators, GPIOs and
+a watchdog timer. The RN5T618 provides additionally a Li-ion battery
+charger, fuel gauge and an ADC. It can be controlled through an I2C
+interface.
 
 Required properties:
- - compatible: should be "ricoh,rn5t618"
+ - compatible: must be one of
+		"ricoh,rn5t567"
+		"ricoh,rn5t618"
  - reg: the I2C slave address of the device
 
 Sub-nodes:
  - regulators: the node is required if the regulator functionality is
-   needed. The valid regulator names are: DCDC1, DCDC2, DCDC3, LDO1,
-   LDO2, LDO3, LDO4, LDO5, LDORTC1 and LDORTC2.
+   needed. The valid regulator names are: DCDC1, DCDC2, DCDC3, DCDC4
+   (RN5T567), LDO1, LDO2, LDO3, LDO4, LDO5, LDORTC1 and LDORTC2.
    The common bindings for each individual regulator can be found in:
    Documentation/devicetree/bindings/regulator/regulator.txt
 
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 1bcf601..ff031a7 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -852,13 +852,14 @@ config MFD_RK808
 	  including interrupts, RTC, LDO & DCDC regulators, and onkey.
 
 config MFD_RN5T618
-	tristate "Ricoh RN5T5618 PMIC"
+	tristate "Ricoh RN5T567/618 PMIC"
 	depends on I2C
+	depends on OF
 	select MFD_CORE
 	select REGMAP_I2C
 	help
-	  Say yes here to add support for the Ricoh RN5T618 PMIC. This
-	  driver provides common support for accessing the device,
+	  Say yes here to add support for the Ricoh RN5T567 or R5T618 PMIC.
+	  This driver provides common support for accessing the device,
 	  additional drivers must be enabled in order to use the
 	  functionality of the device.
 
diff --git a/drivers/mfd/rn5t618.c b/drivers/mfd/rn5t618.c
index 0ad51d7..c86160d 100644
--- a/drivers/mfd/rn5t618.c
+++ b/drivers/mfd/rn5t618.c
@@ -2,6 +2,7 @@
  * MFD core driver for Ricoh RN5T618 PMIC
  *
  * Copyright (C) 2014 Beniamino Galvani <b.galvani@gmail.com>
+ * Copyright (C) 2016 Toradex AG
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -15,6 +16,7 @@
 #include <linux/mfd/core.h>
 #include <linux/mfd/rn5t618.h>
 #include <linux/module.h>
+#include <linux/of_device.h>
 #include <linux/regmap.h>
 
 static const struct mfd_cell rn5t618_cells[] = {
@@ -59,17 +61,32 @@ static void rn5t618_power_off(void)
 			   RN5T618_SLPCNT_SWPWROFF, RN5T618_SLPCNT_SWPWROFF);
 }
 
+static const struct of_device_id rn5t618_of_match[] = {
+	{ .compatible = "ricoh,rn5t567", .data = (void *)RN5T567 },
+	{ .compatible = "ricoh,rn5t618", .data = (void *)RN5T618 },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, rn5t618_of_match);
+
 static int rn5t618_i2c_probe(struct i2c_client *i2c,
 			     const struct i2c_device_id *id)
 {
+	const struct of_device_id *of_id;
 	struct rn5t618 *priv;
 	int ret;
 
+	of_id = of_match_device(rn5t618_of_match, &i2c->dev);
+	if (!of_id) {
+		dev_err(&i2c->dev, "Failed to find matching DT ID\n");
+		return -EINVAL;
+	}
+
 	priv = devm_kzalloc(&i2c->dev, sizeof(*priv), GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;
 
 	i2c_set_clientdata(i2c, priv);
+	priv->variant = (long)of_id->data;
 
 	priv->regmap = devm_regmap_init_i2c(i2c, &rn5t618_regmap_config);
 	if (IS_ERR(priv->regmap)) {
@@ -105,12 +122,6 @@ static int rn5t618_i2c_remove(struct i2c_client *i2c)
 	return 0;
 }
 
-static const struct of_device_id rn5t618_of_match[] = {
-	{ .compatible = "ricoh,rn5t618" },
-	{ }
-};
-MODULE_DEVICE_TABLE(of, rn5t618_of_match);
-
 static const struct i2c_device_id rn5t618_i2c_id[] = {
 	{ }
 };
@@ -129,5 +140,5 @@ static struct i2c_driver rn5t618_i2c_driver = {
 module_i2c_driver(rn5t618_i2c_driver);
 
 MODULE_AUTHOR("Beniamino Galvani <b.galvani@gmail.com>");
-MODULE_DESCRIPTION("Ricoh RN5T618 MFD driver");
+MODULE_DESCRIPTION("Ricoh RN5T567/618 MFD driver");
 MODULE_LICENSE("GPL v2");
diff --git a/include/linux/mfd/rn5t618.h b/include/linux/mfd/rn5t618.h
index c72d534..54179c2 100644
--- a/include/linux/mfd/rn5t618.h
+++ b/include/linux/mfd/rn5t618.h
@@ -20,6 +20,7 @@
 #define RN5T618_OTPVER			0x01
 #define RN5T618_IODAC			0x02
 #define RN5T618_VINDAC			0x03
+#define RN5T618_OUT32KEN		0x05
 #define RN5T618_CPUCNT			0x06
 #define RN5T618_PSWR			0x07
 #define RN5T618_PONHIS			0x09
@@ -38,6 +39,7 @@
 #define RN5T618_DC1_SLOT		0x16
 #define RN5T618_DC2_SLOT		0x17
 #define RN5T618_DC3_SLOT		0x18
+#define RN5T618_DC4_SLOT		0x19
 #define RN5T618_LDO1_SLOT		0x1b
 #define RN5T618_LDO2_SLOT		0x1c
 #define RN5T618_LDO3_SLOT		0x1d
@@ -54,12 +56,16 @@
 #define RN5T618_DC2CTL2			0x2f
 #define RN5T618_DC3CTL			0x30
 #define RN5T618_DC3CTL2			0x31
+#define RN5T618_DC4CTL			0x32
+#define RN5T618_DC4CTL2			0x33
 #define RN5T618_DC1DAC			0x36
 #define RN5T618_DC2DAC			0x37
 #define RN5T618_DC3DAC			0x38
+#define RN5T618_DC4DAC			0x39
 #define RN5T618_DC1DAC_SLP		0x3b
 #define RN5T618_DC2DAC_SLP		0x3c
 #define RN5T618_DC3DAC_SLP		0x3d
+#define RN5T618_DC4DAC_SLP		0x3e
 #define RN5T618_DCIREN			0x40
 #define RN5T618_DCIRQ			0x41
 #define RN5T618_DCIRMON			0x42
@@ -221,8 +227,14 @@ enum {
 	RN5T618_REG_NUM,
 };
 
+enum {
+	RN5T567 = 0,
+	RN5T618,
+};
+
 struct rn5t618 {
 	struct regmap *regmap;
+	long variant;
 };
 
 #endif /* __LINUX_MFD_RN5T618_H */
-- 
2.9.0

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

* [PATCH v5 3/5] regulator: rn5t618: add RN5T567 PMIC support
  2016-06-29  5:53 ` Stefan Agner
  (?)
@ 2016-06-29  5:53   ` Stefan Agner
  -1 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: lee.jones, lgirdwood, broonie, khilman, carlo
  Cc: b.galvani, max.oss.09, marcel, linux, galak, ijc+devicetree,
	mark.rutland, pawel.moll, robh+dt, linux, devicetree,
	linux-kernel, linux-arm-kernel, linux-amlogic, Stefan Agner

Extend the driver to support Ricoh RN5T567. Support the additional
DCDC and slightly different voltage range of LDORTC1.

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Acked-by: Mark Brown <broonie@kernel.org>
Acked-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/regulator/Kconfig             |  5 +++--
 drivers/regulator/rn5t618-regulator.c | 40 +++++++++++++++++++++++++++++++----
 include/linux/mfd/rn5t618.h           |  1 +
 3 files changed, 40 insertions(+), 6 deletions(-)

diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index 144cbf5..5472694 100644
--- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig
@@ -636,10 +636,11 @@ config REGULATOR_RK808
 	  outputs which can be controlled by i2c communication.
 
 config REGULATOR_RN5T618
-	tristate "Ricoh RN5T618 voltage regulators"
+	tristate "Ricoh RN5T567/618 voltage regulators"
 	depends on MFD_RN5T618
 	help
-	  Say y here to support the regulators found on Ricoh RN5T618 PMIC.
+	  Say y here to support the regulators found on Ricoh RN5T567 or
+	  RN5T618 PMIC.
 
 config REGULATOR_RT5033
 	tristate "Richtek RT5033 Regulators"
diff --git a/drivers/regulator/rn5t618-regulator.c b/drivers/regulator/rn5t618-regulator.c
index b85ceb8..9c930eb 100644
--- a/drivers/regulator/rn5t618-regulator.c
+++ b/drivers/regulator/rn5t618-regulator.c
@@ -46,6 +46,23 @@ static struct regulator_ops rn5t618_reg_ops = {
 		.vsel_mask	= (vmask),				\
 	}
 
+static struct regulator_desc rn5t567_regulators[] = {
+	/* DCDC */
+	REG(DCDC1, DC1CTL, BIT(0), DC1DAC, 0xff, 600000, 3500000, 12500),
+	REG(DCDC2, DC2CTL, BIT(0), DC2DAC, 0xff, 600000, 3500000, 12500),
+	REG(DCDC3, DC3CTL, BIT(0), DC3DAC, 0xff, 600000, 3500000, 12500),
+	REG(DCDC4, DC4CTL, BIT(0), DC4DAC, 0xff, 600000, 3500000, 12500),
+	/* LDO */
+	REG(LDO1, LDOEN1, BIT(0), LDO1DAC, 0x7f, 900000, 3500000, 25000),
+	REG(LDO2, LDOEN1, BIT(1), LDO2DAC, 0x7f, 900000, 3500000, 25000),
+	REG(LDO3, LDOEN1, BIT(2), LDO3DAC, 0x7f, 600000, 3500000, 25000),
+	REG(LDO4, LDOEN1, BIT(3), LDO4DAC, 0x7f, 900000, 3500000, 25000),
+	REG(LDO5, LDOEN1, BIT(4), LDO5DAC, 0x7f, 900000, 3500000, 25000),
+	/* LDO RTC */
+	REG(LDORTC1, LDOEN2, BIT(4), LDORTCDAC, 0x7f, 1200000, 3500000, 25000),
+	REG(LDORTC2, LDOEN2, BIT(5), LDORTC2DAC, 0x7f, 900000, 3500000, 25000),
+};
+
 static struct regulator_desc rn5t618_regulators[] = {
 	/* DCDC */
 	REG(DCDC1, DC1CTL, BIT(0), DC1DAC, 0xff, 600000, 3500000, 12500),
@@ -67,18 +84,33 @@ static int rn5t618_regulator_probe(struct platform_device *pdev)
 	struct rn5t618 *rn5t618 = dev_get_drvdata(pdev->dev.parent);
 	struct regulator_config config = { };
 	struct regulator_dev *rdev;
+	struct regulator_desc *regulators;
 	int i;
 
+	switch (rn5t618->variant) {
+	case RN5T567:
+		regulators = rn5t567_regulators;
+		break;
+	case RN5T618:
+		regulators = rn5t618_regulators;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	config.dev = pdev->dev.parent;
+	config.regmap = rn5t618->regmap;
+
 	for (i = 0; i < RN5T618_REG_NUM; i++) {
-		config.dev = pdev->dev.parent;
-		config.regmap = rn5t618->regmap;
+		if (!regulators[i].name)
+			continue;
 
 		rdev = devm_regulator_register(&pdev->dev,
-					       &rn5t618_regulators[i],
+					       &regulators[i],
 					       &config);
 		if (IS_ERR(rdev)) {
 			dev_err(&pdev->dev, "failed to register %s regulator\n",
-				rn5t618_regulators[i].name);
+				regulators[i].name);
 			return PTR_ERR(rdev);
 		}
 	}
diff --git a/include/linux/mfd/rn5t618.h b/include/linux/mfd/rn5t618.h
index 54179c2..cadc654 100644
--- a/include/linux/mfd/rn5t618.h
+++ b/include/linux/mfd/rn5t618.h
@@ -217,6 +217,7 @@ enum {
 	RN5T618_DCDC1,
 	RN5T618_DCDC2,
 	RN5T618_DCDC3,
+	RN5T618_DCDC4,
 	RN5T618_LDO1,
 	RN5T618_LDO2,
 	RN5T618_LDO3,
-- 
2.9.0

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

* [PATCH v5 3/5] regulator: rn5t618: add RN5T567 PMIC support
@ 2016-06-29  5:53   ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: linux-arm-kernel

Extend the driver to support Ricoh RN5T567. Support the additional
DCDC and slightly different voltage range of LDORTC1.

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Acked-by: Mark Brown <broonie@kernel.org>
Acked-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/regulator/Kconfig             |  5 +++--
 drivers/regulator/rn5t618-regulator.c | 40 +++++++++++++++++++++++++++++++----
 include/linux/mfd/rn5t618.h           |  1 +
 3 files changed, 40 insertions(+), 6 deletions(-)

diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index 144cbf5..5472694 100644
--- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig
@@ -636,10 +636,11 @@ config REGULATOR_RK808
 	  outputs which can be controlled by i2c communication.
 
 config REGULATOR_RN5T618
-	tristate "Ricoh RN5T618 voltage regulators"
+	tristate "Ricoh RN5T567/618 voltage regulators"
 	depends on MFD_RN5T618
 	help
-	  Say y here to support the regulators found on Ricoh RN5T618 PMIC.
+	  Say y here to support the regulators found on Ricoh RN5T567 or
+	  RN5T618 PMIC.
 
 config REGULATOR_RT5033
 	tristate "Richtek RT5033 Regulators"
diff --git a/drivers/regulator/rn5t618-regulator.c b/drivers/regulator/rn5t618-regulator.c
index b85ceb8..9c930eb 100644
--- a/drivers/regulator/rn5t618-regulator.c
+++ b/drivers/regulator/rn5t618-regulator.c
@@ -46,6 +46,23 @@ static struct regulator_ops rn5t618_reg_ops = {
 		.vsel_mask	= (vmask),				\
 	}
 
+static struct regulator_desc rn5t567_regulators[] = {
+	/* DCDC */
+	REG(DCDC1, DC1CTL, BIT(0), DC1DAC, 0xff, 600000, 3500000, 12500),
+	REG(DCDC2, DC2CTL, BIT(0), DC2DAC, 0xff, 600000, 3500000, 12500),
+	REG(DCDC3, DC3CTL, BIT(0), DC3DAC, 0xff, 600000, 3500000, 12500),
+	REG(DCDC4, DC4CTL, BIT(0), DC4DAC, 0xff, 600000, 3500000, 12500),
+	/* LDO */
+	REG(LDO1, LDOEN1, BIT(0), LDO1DAC, 0x7f, 900000, 3500000, 25000),
+	REG(LDO2, LDOEN1, BIT(1), LDO2DAC, 0x7f, 900000, 3500000, 25000),
+	REG(LDO3, LDOEN1, BIT(2), LDO3DAC, 0x7f, 600000, 3500000, 25000),
+	REG(LDO4, LDOEN1, BIT(3), LDO4DAC, 0x7f, 900000, 3500000, 25000),
+	REG(LDO5, LDOEN1, BIT(4), LDO5DAC, 0x7f, 900000, 3500000, 25000),
+	/* LDO RTC */
+	REG(LDORTC1, LDOEN2, BIT(4), LDORTCDAC, 0x7f, 1200000, 3500000, 25000),
+	REG(LDORTC2, LDOEN2, BIT(5), LDORTC2DAC, 0x7f, 900000, 3500000, 25000),
+};
+
 static struct regulator_desc rn5t618_regulators[] = {
 	/* DCDC */
 	REG(DCDC1, DC1CTL, BIT(0), DC1DAC, 0xff, 600000, 3500000, 12500),
@@ -67,18 +84,33 @@ static int rn5t618_regulator_probe(struct platform_device *pdev)
 	struct rn5t618 *rn5t618 = dev_get_drvdata(pdev->dev.parent);
 	struct regulator_config config = { };
 	struct regulator_dev *rdev;
+	struct regulator_desc *regulators;
 	int i;
 
+	switch (rn5t618->variant) {
+	case RN5T567:
+		regulators = rn5t567_regulators;
+		break;
+	case RN5T618:
+		regulators = rn5t618_regulators;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	config.dev = pdev->dev.parent;
+	config.regmap = rn5t618->regmap;
+
 	for (i = 0; i < RN5T618_REG_NUM; i++) {
-		config.dev = pdev->dev.parent;
-		config.regmap = rn5t618->regmap;
+		if (!regulators[i].name)
+			continue;
 
 		rdev = devm_regulator_register(&pdev->dev,
-					       &rn5t618_regulators[i],
+					       &regulators[i],
 					       &config);
 		if (IS_ERR(rdev)) {
 			dev_err(&pdev->dev, "failed to register %s regulator\n",
-				rn5t618_regulators[i].name);
+				regulators[i].name);
 			return PTR_ERR(rdev);
 		}
 	}
diff --git a/include/linux/mfd/rn5t618.h b/include/linux/mfd/rn5t618.h
index 54179c2..cadc654 100644
--- a/include/linux/mfd/rn5t618.h
+++ b/include/linux/mfd/rn5t618.h
@@ -217,6 +217,7 @@ enum {
 	RN5T618_DCDC1,
 	RN5T618_DCDC2,
 	RN5T618_DCDC3,
+	RN5T618_DCDC4,
 	RN5T618_LDO1,
 	RN5T618_LDO2,
 	RN5T618_LDO3,
-- 
2.9.0

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

* [PATCH v5 3/5] regulator: rn5t618: add RN5T567 PMIC support
@ 2016-06-29  5:53   ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: linus-amlogic

Extend the driver to support Ricoh RN5T567. Support the additional
DCDC and slightly different voltage range of LDORTC1.

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Acked-by: Mark Brown <broonie@kernel.org>
Acked-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/regulator/Kconfig             |  5 +++--
 drivers/regulator/rn5t618-regulator.c | 40 +++++++++++++++++++++++++++++++----
 include/linux/mfd/rn5t618.h           |  1 +
 3 files changed, 40 insertions(+), 6 deletions(-)

diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index 144cbf5..5472694 100644
--- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig
@@ -636,10 +636,11 @@ config REGULATOR_RK808
 	  outputs which can be controlled by i2c communication.
 
 config REGULATOR_RN5T618
-	tristate "Ricoh RN5T618 voltage regulators"
+	tristate "Ricoh RN5T567/618 voltage regulators"
 	depends on MFD_RN5T618
 	help
-	  Say y here to support the regulators found on Ricoh RN5T618 PMIC.
+	  Say y here to support the regulators found on Ricoh RN5T567 or
+	  RN5T618 PMIC.
 
 config REGULATOR_RT5033
 	tristate "Richtek RT5033 Regulators"
diff --git a/drivers/regulator/rn5t618-regulator.c b/drivers/regulator/rn5t618-regulator.c
index b85ceb8..9c930eb 100644
--- a/drivers/regulator/rn5t618-regulator.c
+++ b/drivers/regulator/rn5t618-regulator.c
@@ -46,6 +46,23 @@ static struct regulator_ops rn5t618_reg_ops = {
 		.vsel_mask	= (vmask),				\
 	}
 
+static struct regulator_desc rn5t567_regulators[] = {
+	/* DCDC */
+	REG(DCDC1, DC1CTL, BIT(0), DC1DAC, 0xff, 600000, 3500000, 12500),
+	REG(DCDC2, DC2CTL, BIT(0), DC2DAC, 0xff, 600000, 3500000, 12500),
+	REG(DCDC3, DC3CTL, BIT(0), DC3DAC, 0xff, 600000, 3500000, 12500),
+	REG(DCDC4, DC4CTL, BIT(0), DC4DAC, 0xff, 600000, 3500000, 12500),
+	/* LDO */
+	REG(LDO1, LDOEN1, BIT(0), LDO1DAC, 0x7f, 900000, 3500000, 25000),
+	REG(LDO2, LDOEN1, BIT(1), LDO2DAC, 0x7f, 900000, 3500000, 25000),
+	REG(LDO3, LDOEN1, BIT(2), LDO3DAC, 0x7f, 600000, 3500000, 25000),
+	REG(LDO4, LDOEN1, BIT(3), LDO4DAC, 0x7f, 900000, 3500000, 25000),
+	REG(LDO5, LDOEN1, BIT(4), LDO5DAC, 0x7f, 900000, 3500000, 25000),
+	/* LDO RTC */
+	REG(LDORTC1, LDOEN2, BIT(4), LDORTCDAC, 0x7f, 1200000, 3500000, 25000),
+	REG(LDORTC2, LDOEN2, BIT(5), LDORTC2DAC, 0x7f, 900000, 3500000, 25000),
+};
+
 static struct regulator_desc rn5t618_regulators[] = {
 	/* DCDC */
 	REG(DCDC1, DC1CTL, BIT(0), DC1DAC, 0xff, 600000, 3500000, 12500),
@@ -67,18 +84,33 @@ static int rn5t618_regulator_probe(struct platform_device *pdev)
 	struct rn5t618 *rn5t618 = dev_get_drvdata(pdev->dev.parent);
 	struct regulator_config config = { };
 	struct regulator_dev *rdev;
+	struct regulator_desc *regulators;
 	int i;
 
+	switch (rn5t618->variant) {
+	case RN5T567:
+		regulators = rn5t567_regulators;
+		break;
+	case RN5T618:
+		regulators = rn5t618_regulators;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	config.dev = pdev->dev.parent;
+	config.regmap = rn5t618->regmap;
+
 	for (i = 0; i < RN5T618_REG_NUM; i++) {
-		config.dev = pdev->dev.parent;
-		config.regmap = rn5t618->regmap;
+		if (!regulators[i].name)
+			continue;
 
 		rdev = devm_regulator_register(&pdev->dev,
-					       &rn5t618_regulators[i],
+					       &regulators[i],
 					       &config);
 		if (IS_ERR(rdev)) {
 			dev_err(&pdev->dev, "failed to register %s regulator\n",
-				rn5t618_regulators[i].name);
+				regulators[i].name);
 			return PTR_ERR(rdev);
 		}
 	}
diff --git a/include/linux/mfd/rn5t618.h b/include/linux/mfd/rn5t618.h
index 54179c2..cadc654 100644
--- a/include/linux/mfd/rn5t618.h
+++ b/include/linux/mfd/rn5t618.h
@@ -217,6 +217,7 @@ enum {
 	RN5T618_DCDC1,
 	RN5T618_DCDC2,
 	RN5T618_DCDC3,
+	RN5T618_DCDC4,
 	RN5T618_LDO1,
 	RN5T618_LDO2,
 	RN5T618_LDO3,
-- 
2.9.0

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

* [PATCH v5 4/5] mfd: rn5t618: register power off callback optionally
@ 2016-06-29  5:53   ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: lee.jones, lgirdwood, broonie, khilman, carlo
  Cc: b.galvani, max.oss.09, marcel, linux, galak, ijc+devicetree,
	mark.rutland, pawel.moll, robh+dt, linux, devicetree,
	linux-kernel, linux-arm-kernel, linux-amlogic, Stefan Agner

Only register power off if the PMIC is defined as system power
controller (see Documentation/devicetree/bindings/power/
power-controller.txt).

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Acked-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/mfd/rn5t618.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/mfd/rn5t618.c b/drivers/mfd/rn5t618.c
index c86160d..1831740 100644
--- a/drivers/mfd/rn5t618.c
+++ b/drivers/mfd/rn5t618.c
@@ -102,9 +102,13 @@ static int rn5t618_i2c_probe(struct i2c_client *i2c,
 		return ret;
 	}
 
-	if (!pm_power_off) {
-		rn5t618_pm_power_off = priv;
-		pm_power_off = rn5t618_power_off;
+	if (of_device_is_system_power_controller(i2c->dev.of_node)) {
+		if (!pm_power_off) {
+			rn5t618_pm_power_off = priv;
+			pm_power_off = rn5t618_power_off;
+		} else {
+			dev_warn(&i2c->dev, "Poweroff callback already assigned\n");
+		}
 	}
 
 	return 0;
-- 
2.9.0

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

* [PATCH v5 4/5] mfd: rn5t618: register power off callback optionally
@ 2016-06-29  5:53   ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: lee.jones-QSEj5FYQhm4dnm+yROfE0A,
	lgirdwood-Re5JQEeQqe8AvxtiuMwx3w, broonie-DgEjT+Ai2ygdnm+yROfE0A,
	khilman-rdvid1DuHRBWk0Htik3J/w, carlo-KA+7E9HrN00dnm+yROfE0A
  Cc: b.galvani-Re5JQEeQqe8AvxtiuMwx3w,
	max.oss.09-Re5JQEeQqe8AvxtiuMwx3w, marcel-mitwqZ+T+m9Wk0Htik3J/w,
	linux-I+IVW8TIWO2tmTQ+vhA3Yw, galak-sgV2jX0FEOL9JmXXK+q4OQ,
	ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg, mark.rutland-5wv7dgnIgG8,
	pawel.moll-5wv7dgnIgG8, robh+dt-DgEjT+Ai2ygdnm+yROfE0A,
	linux-0h96xk9xTtrk1uMJSBkQmQ, devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-amlogic-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, Stefan Agner

Only register power off if the PMIC is defined as system power
controller (see Documentation/devicetree/bindings/power/
power-controller.txt).

Signed-off-by: Stefan Agner <stefan-XLVq0VzYD2Y@public.gmane.org>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler-2KBjVHiyJgBBDgjK7y7TUQ@public.gmane.org>
Acked-by: Lee Jones <lee.jones-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
---
 drivers/mfd/rn5t618.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/mfd/rn5t618.c b/drivers/mfd/rn5t618.c
index c86160d..1831740 100644
--- a/drivers/mfd/rn5t618.c
+++ b/drivers/mfd/rn5t618.c
@@ -102,9 +102,13 @@ static int rn5t618_i2c_probe(struct i2c_client *i2c,
 		return ret;
 	}
 
-	if (!pm_power_off) {
-		rn5t618_pm_power_off = priv;
-		pm_power_off = rn5t618_power_off;
+	if (of_device_is_system_power_controller(i2c->dev.of_node)) {
+		if (!pm_power_off) {
+			rn5t618_pm_power_off = priv;
+			pm_power_off = rn5t618_power_off;
+		} else {
+			dev_warn(&i2c->dev, "Poweroff callback already assigned\n");
+		}
 	}
 
 	return 0;
-- 
2.9.0

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH v5 4/5] mfd: rn5t618: register power off callback optionally
@ 2016-06-29  5:53   ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: linux-arm-kernel

Only register power off if the PMIC is defined as system power
controller (see Documentation/devicetree/bindings/power/
power-controller.txt).

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Acked-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/mfd/rn5t618.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/mfd/rn5t618.c b/drivers/mfd/rn5t618.c
index c86160d..1831740 100644
--- a/drivers/mfd/rn5t618.c
+++ b/drivers/mfd/rn5t618.c
@@ -102,9 +102,13 @@ static int rn5t618_i2c_probe(struct i2c_client *i2c,
 		return ret;
 	}
 
-	if (!pm_power_off) {
-		rn5t618_pm_power_off = priv;
-		pm_power_off = rn5t618_power_off;
+	if (of_device_is_system_power_controller(i2c->dev.of_node)) {
+		if (!pm_power_off) {
+			rn5t618_pm_power_off = priv;
+			pm_power_off = rn5t618_power_off;
+		} else {
+			dev_warn(&i2c->dev, "Poweroff callback already assigned\n");
+		}
 	}
 
 	return 0;
-- 
2.9.0

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

* [PATCH v5 4/5] mfd: rn5t618: register power off callback optionally
@ 2016-06-29  5:53   ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: linus-amlogic

Only register power off if the PMIC is defined as system power
controller (see Documentation/devicetree/bindings/power/
power-controller.txt).

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Acked-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/mfd/rn5t618.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/mfd/rn5t618.c b/drivers/mfd/rn5t618.c
index c86160d..1831740 100644
--- a/drivers/mfd/rn5t618.c
+++ b/drivers/mfd/rn5t618.c
@@ -102,9 +102,13 @@ static int rn5t618_i2c_probe(struct i2c_client *i2c,
 		return ret;
 	}
 
-	if (!pm_power_off) {
-		rn5t618_pm_power_off = priv;
-		pm_power_off = rn5t618_power_off;
+	if (of_device_is_system_power_controller(i2c->dev.of_node)) {
+		if (!pm_power_off) {
+			rn5t618_pm_power_off = priv;
+			pm_power_off = rn5t618_power_off;
+		} else {
+			dev_warn(&i2c->dev, "Poweroff callback already assigned\n");
+		}
 	}
 
 	return 0;
-- 
2.9.0

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

* [PATCH v5 5/5] mfd: rn5t618: register restart handler
  2016-06-29  5:53 ` Stefan Agner
  (?)
@ 2016-06-29  5:53   ` Stefan Agner
  -1 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: lee.jones, lgirdwood, broonie, khilman, carlo
  Cc: b.galvani, max.oss.09, marcel, linux, galak, ijc+devicetree,
	mark.rutland, pawel.moll, robh+dt, linux, devicetree,
	linux-kernel, linux-arm-kernel, linux-amlogic, Stefan Agner

Use the PMIC's repower capability for reboots. Register a restart
handler and use a slightly elevated priority of 192 since the PMIC
has suprior reset capability (causing a system wide reset).

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Acked-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/mfd/rn5t618.c | 43 +++++++++++++++++++++++++++++++++++++------
 1 file changed, 37 insertions(+), 6 deletions(-)

diff --git a/drivers/mfd/rn5t618.c b/drivers/mfd/rn5t618.c
index 1831740..ee94080 100644
--- a/drivers/mfd/rn5t618.c
+++ b/drivers/mfd/rn5t618.c
@@ -12,11 +12,13 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <linux/delay.h>
 #include <linux/i2c.h>
 #include <linux/mfd/core.h>
 #include <linux/mfd/rn5t618.h>
 #include <linux/module.h>
 #include <linux/of_device.h>
+#include <linux/reboot.h>
 #include <linux/regmap.h>
 
 static const struct mfd_cell rn5t618_cells[] = {
@@ -50,17 +52,38 @@ static const struct regmap_config rn5t618_regmap_config = {
 };
 
 static struct rn5t618 *rn5t618_pm_power_off;
+static struct notifier_block rn5t618_restart_handler;
 
-static void rn5t618_power_off(void)
+static void rn5t618_trigger_poweroff_sequence(bool repower)
 {
 	/* disable automatic repower-on */
 	regmap_update_bits(rn5t618_pm_power_off->regmap, RN5T618_REPCNT,
-			   RN5T618_REPCNT_REPWRON, 0);
+			   RN5T618_REPCNT_REPWRON,
+			   repower ? RN5T618_REPCNT_REPWRON : 0);
 	/* start power-off sequence */
 	regmap_update_bits(rn5t618_pm_power_off->regmap, RN5T618_SLPCNT,
 			   RN5T618_SLPCNT_SWPWROFF, RN5T618_SLPCNT_SWPWROFF);
 }
 
+static void rn5t618_power_off(void)
+{
+	rn5t618_trigger_poweroff_sequence(false);
+}
+
+static int rn5t618_restart(struct notifier_block *this,
+			    unsigned long mode, void *cmd)
+{
+	rn5t618_trigger_poweroff_sequence(true);
+
+	/*
+	 * Re-power factor detection on PMIC side is not instant. 1ms
+	 * proved to be enough time until reset takes effect.
+	 */
+	mdelay(1);
+
+	return NOTIFY_DONE;
+}
+
 static const struct of_device_id rn5t618_of_match[] = {
 	{ .compatible = "ricoh,rn5t567", .data = (void *)RN5T567 },
 	{ .compatible = "ricoh,rn5t618", .data = (void *)RN5T618 },
@@ -102,13 +125,21 @@ static int rn5t618_i2c_probe(struct i2c_client *i2c,
 		return ret;
 	}
 
+	rn5t618_pm_power_off = priv;
 	if (of_device_is_system_power_controller(i2c->dev.of_node)) {
-		if (!pm_power_off) {
-			rn5t618_pm_power_off = priv;
+		if (!pm_power_off)
 			pm_power_off = rn5t618_power_off;
-		} else {
+		else
 			dev_warn(&i2c->dev, "Poweroff callback already assigned\n");
-		}
+	}
+
+	rn5t618_restart_handler.notifier_call = rn5t618_restart;
+	rn5t618_restart_handler.priority = 192;
+
+	ret = register_restart_handler(&rn5t618_restart_handler);
+	if (ret) {
+		dev_err(&i2c->dev, "cannot register restart handler, %d\n", ret);
+		return ret;
 	}
 
 	return 0;
-- 
2.9.0

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

* [PATCH v5 5/5] mfd: rn5t618: register restart handler
@ 2016-06-29  5:53   ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: linux-arm-kernel

Use the PMIC's repower capability for reboots. Register a restart
handler and use a slightly elevated priority of 192 since the PMIC
has suprior reset capability (causing a system wide reset).

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Acked-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/mfd/rn5t618.c | 43 +++++++++++++++++++++++++++++++++++++------
 1 file changed, 37 insertions(+), 6 deletions(-)

diff --git a/drivers/mfd/rn5t618.c b/drivers/mfd/rn5t618.c
index 1831740..ee94080 100644
--- a/drivers/mfd/rn5t618.c
+++ b/drivers/mfd/rn5t618.c
@@ -12,11 +12,13 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <linux/delay.h>
 #include <linux/i2c.h>
 #include <linux/mfd/core.h>
 #include <linux/mfd/rn5t618.h>
 #include <linux/module.h>
 #include <linux/of_device.h>
+#include <linux/reboot.h>
 #include <linux/regmap.h>
 
 static const struct mfd_cell rn5t618_cells[] = {
@@ -50,17 +52,38 @@ static const struct regmap_config rn5t618_regmap_config = {
 };
 
 static struct rn5t618 *rn5t618_pm_power_off;
+static struct notifier_block rn5t618_restart_handler;
 
-static void rn5t618_power_off(void)
+static void rn5t618_trigger_poweroff_sequence(bool repower)
 {
 	/* disable automatic repower-on */
 	regmap_update_bits(rn5t618_pm_power_off->regmap, RN5T618_REPCNT,
-			   RN5T618_REPCNT_REPWRON, 0);
+			   RN5T618_REPCNT_REPWRON,
+			   repower ? RN5T618_REPCNT_REPWRON : 0);
 	/* start power-off sequence */
 	regmap_update_bits(rn5t618_pm_power_off->regmap, RN5T618_SLPCNT,
 			   RN5T618_SLPCNT_SWPWROFF, RN5T618_SLPCNT_SWPWROFF);
 }
 
+static void rn5t618_power_off(void)
+{
+	rn5t618_trigger_poweroff_sequence(false);
+}
+
+static int rn5t618_restart(struct notifier_block *this,
+			    unsigned long mode, void *cmd)
+{
+	rn5t618_trigger_poweroff_sequence(true);
+
+	/*
+	 * Re-power factor detection on PMIC side is not instant. 1ms
+	 * proved to be enough time until reset takes effect.
+	 */
+	mdelay(1);
+
+	return NOTIFY_DONE;
+}
+
 static const struct of_device_id rn5t618_of_match[] = {
 	{ .compatible = "ricoh,rn5t567", .data = (void *)RN5T567 },
 	{ .compatible = "ricoh,rn5t618", .data = (void *)RN5T618 },
@@ -102,13 +125,21 @@ static int rn5t618_i2c_probe(struct i2c_client *i2c,
 		return ret;
 	}
 
+	rn5t618_pm_power_off = priv;
 	if (of_device_is_system_power_controller(i2c->dev.of_node)) {
-		if (!pm_power_off) {
-			rn5t618_pm_power_off = priv;
+		if (!pm_power_off)
 			pm_power_off = rn5t618_power_off;
-		} else {
+		else
 			dev_warn(&i2c->dev, "Poweroff callback already assigned\n");
-		}
+	}
+
+	rn5t618_restart_handler.notifier_call = rn5t618_restart;
+	rn5t618_restart_handler.priority = 192;
+
+	ret = register_restart_handler(&rn5t618_restart_handler);
+	if (ret) {
+		dev_err(&i2c->dev, "cannot register restart handler, %d\n", ret);
+		return ret;
 	}
 
 	return 0;
-- 
2.9.0

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

* [PATCH v5 5/5] mfd: rn5t618: register restart handler
@ 2016-06-29  5:53   ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  5:53 UTC (permalink / raw)
  To: linus-amlogic

Use the PMIC's repower capability for reboots. Register a restart
handler and use a slightly elevated priority of 192 since the PMIC
has suprior reset capability (causing a system wide reset).

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Acked-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/mfd/rn5t618.c | 43 +++++++++++++++++++++++++++++++++++++------
 1 file changed, 37 insertions(+), 6 deletions(-)

diff --git a/drivers/mfd/rn5t618.c b/drivers/mfd/rn5t618.c
index 1831740..ee94080 100644
--- a/drivers/mfd/rn5t618.c
+++ b/drivers/mfd/rn5t618.c
@@ -12,11 +12,13 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <linux/delay.h>
 #include <linux/i2c.h>
 #include <linux/mfd/core.h>
 #include <linux/mfd/rn5t618.h>
 #include <linux/module.h>
 #include <linux/of_device.h>
+#include <linux/reboot.h>
 #include <linux/regmap.h>
 
 static const struct mfd_cell rn5t618_cells[] = {
@@ -50,17 +52,38 @@ static const struct regmap_config rn5t618_regmap_config = {
 };
 
 static struct rn5t618 *rn5t618_pm_power_off;
+static struct notifier_block rn5t618_restart_handler;
 
-static void rn5t618_power_off(void)
+static void rn5t618_trigger_poweroff_sequence(bool repower)
 {
 	/* disable automatic repower-on */
 	regmap_update_bits(rn5t618_pm_power_off->regmap, RN5T618_REPCNT,
-			   RN5T618_REPCNT_REPWRON, 0);
+			   RN5T618_REPCNT_REPWRON,
+			   repower ? RN5T618_REPCNT_REPWRON : 0);
 	/* start power-off sequence */
 	regmap_update_bits(rn5t618_pm_power_off->regmap, RN5T618_SLPCNT,
 			   RN5T618_SLPCNT_SWPWROFF, RN5T618_SLPCNT_SWPWROFF);
 }
 
+static void rn5t618_power_off(void)
+{
+	rn5t618_trigger_poweroff_sequence(false);
+}
+
+static int rn5t618_restart(struct notifier_block *this,
+			    unsigned long mode, void *cmd)
+{
+	rn5t618_trigger_poweroff_sequence(true);
+
+	/*
+	 * Re-power factor detection on PMIC side is not instant. 1ms
+	 * proved to be enough time until reset takes effect.
+	 */
+	mdelay(1);
+
+	return NOTIFY_DONE;
+}
+
 static const struct of_device_id rn5t618_of_match[] = {
 	{ .compatible = "ricoh,rn5t567", .data = (void *)RN5T567 },
 	{ .compatible = "ricoh,rn5t618", .data = (void *)RN5T618 },
@@ -102,13 +125,21 @@ static int rn5t618_i2c_probe(struct i2c_client *i2c,
 		return ret;
 	}
 
+	rn5t618_pm_power_off = priv;
 	if (of_device_is_system_power_controller(i2c->dev.of_node)) {
-		if (!pm_power_off) {
-			rn5t618_pm_power_off = priv;
+		if (!pm_power_off)
 			pm_power_off = rn5t618_power_off;
-		} else {
+		else
 			dev_warn(&i2c->dev, "Poweroff callback already assigned\n");
-		}
+	}
+
+	rn5t618_restart_handler.notifier_call = rn5t618_restart;
+	rn5t618_restart_handler.priority = 192;
+
+	ret = register_restart_handler(&rn5t618_restart_handler);
+	if (ret) {
+		dev_err(&i2c->dev, "cannot register restart handler, %d\n", ret);
+		return ret;
 	}
 
 	return 0;
-- 
2.9.0

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

* Re: [PATCH v5 0/5] regulator: add Ricoh RN5T567 PMIC support
  2016-06-29  5:53 ` Stefan Agner
  (?)
@ 2016-06-29  8:12   ` Lee Jones
  -1 siblings, 0 replies; 32+ messages in thread
From: Lee Jones @ 2016-06-29  8:12 UTC (permalink / raw)
  To: Stefan Agner
  Cc: lgirdwood, broonie, khilman, carlo, b.galvani, max.oss.09,
	marcel, linux, galak, ijc+devicetree, mark.rutland, pawel.moll,
	robh+dt, linux, devicetree, linux-kernel, linux-arm-kernel,
	linux-amlogic

On Tue, 28 Jun 2016, Stefan Agner wrote:

> This patchset adds RN5T567 PMIC support which is used on the 
> Toradex Colibri iMX7S/iMX7D modules. The existing RN5T618 is from
> the same family, hence this patchset uses the same driver and adds
> variant support.
> 
> The Colibris currently do not use the PMIC's power off capabilities,
> as do the current users of that PMIC driver. Therefore this patchset
> also makes the use of the system-power-controller property mandatory
> if the power off capabilties are required.
> 
> Changes since v4:
> - Spell check in patch 5 and added Acks
> 
> Changes since v3:
> - Use RN5T618_REPCNT_REPWRON macro when writing RN5T618_REPCNT register
> 
> Changes since v2:
> - Elevate restart priority to 192 to make sure PMIC takes presedence
>   over SoC level restart capabilities (e.g. watchdog)
> - Print a warning if poweroff callback is already assigned
> - Reorder of_id and variant assignment
> - Lower delay to 1ms and justify why it is required
> - Fix DCDC count and a typos in device tree bindings
> 
> Changes since v1:
> - Removed obsolete include <asm/system_misc.h>
> 
> Stefan Agner (5):
>   ARM: dts: meson: minix-neo-x8: define PMIC as power controller
>   mfd: add Ricoh RN5T567 PMIC support
>   regulator: rn5t618: add RN5T567 PMIC support
>   mfd: rn5t618: register power off callback optionally
>   mfd: rn5t618: register restart handler
> 
>  Documentation/devicetree/bindings/mfd/rn5t618.txt | 19 +++---
>  arch/arm/boot/dts/meson8-minix-neo-x8.dts         |  1 +
>  drivers/mfd/Kconfig                               |  7 ++-
>  drivers/mfd/rn5t618.c                             | 70 +++++++++++++++++++----
>  drivers/regulator/Kconfig                         |  5 +-
>  drivers/regulator/rn5t618-regulator.c             | 40 +++++++++++--
>  include/linux/mfd/rn5t618.h                       | 13 +++++
>  7 files changed, 126 insertions(+), 29 deletions(-)

Looks like you have all your Acks now.  How do you want to play this?
Would you like me to take the set through MFD and provide the other
Maintainers with a branch to pull from, or did you have other ideas?

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* [PATCH v5 0/5] regulator: add Ricoh RN5T567 PMIC support
@ 2016-06-29  8:12   ` Lee Jones
  0 siblings, 0 replies; 32+ messages in thread
From: Lee Jones @ 2016-06-29  8:12 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, 28 Jun 2016, Stefan Agner wrote:

> This patchset adds RN5T567 PMIC support which is used on the 
> Toradex Colibri iMX7S/iMX7D modules. The existing RN5T618 is from
> the same family, hence this patchset uses the same driver and adds
> variant support.
> 
> The Colibris currently do not use the PMIC's power off capabilities,
> as do the current users of that PMIC driver. Therefore this patchset
> also makes the use of the system-power-controller property mandatory
> if the power off capabilties are required.
> 
> Changes since v4:
> - Spell check in patch 5 and added Acks
> 
> Changes since v3:
> - Use RN5T618_REPCNT_REPWRON macro when writing RN5T618_REPCNT register
> 
> Changes since v2:
> - Elevate restart priority to 192 to make sure PMIC takes presedence
>   over SoC level restart capabilities (e.g. watchdog)
> - Print a warning if poweroff callback is already assigned
> - Reorder of_id and variant assignment
> - Lower delay to 1ms and justify why it is required
> - Fix DCDC count and a typos in device tree bindings
> 
> Changes since v1:
> - Removed obsolete include <asm/system_misc.h>
> 
> Stefan Agner (5):
>   ARM: dts: meson: minix-neo-x8: define PMIC as power controller
>   mfd: add Ricoh RN5T567 PMIC support
>   regulator: rn5t618: add RN5T567 PMIC support
>   mfd: rn5t618: register power off callback optionally
>   mfd: rn5t618: register restart handler
> 
>  Documentation/devicetree/bindings/mfd/rn5t618.txt | 19 +++---
>  arch/arm/boot/dts/meson8-minix-neo-x8.dts         |  1 +
>  drivers/mfd/Kconfig                               |  7 ++-
>  drivers/mfd/rn5t618.c                             | 70 +++++++++++++++++++----
>  drivers/regulator/Kconfig                         |  5 +-
>  drivers/regulator/rn5t618-regulator.c             | 40 +++++++++++--
>  include/linux/mfd/rn5t618.h                       | 13 +++++
>  7 files changed, 126 insertions(+), 29 deletions(-)

Looks like you have all your Acks now.  How do you want to play this?
Would you like me to take the set through MFD and provide the other
Maintainers with a branch to pull from, or did you have other ideas?

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org ? Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* [PATCH v5 0/5] regulator: add Ricoh RN5T567 PMIC support
@ 2016-06-29  8:12   ` Lee Jones
  0 siblings, 0 replies; 32+ messages in thread
From: Lee Jones @ 2016-06-29  8:12 UTC (permalink / raw)
  To: linus-amlogic

On Tue, 28 Jun 2016, Stefan Agner wrote:

> This patchset adds RN5T567 PMIC support which is used on the 
> Toradex Colibri iMX7S/iMX7D modules. The existing RN5T618 is from
> the same family, hence this patchset uses the same driver and adds
> variant support.
> 
> The Colibris currently do not use the PMIC's power off capabilities,
> as do the current users of that PMIC driver. Therefore this patchset
> also makes the use of the system-power-controller property mandatory
> if the power off capabilties are required.
> 
> Changes since v4:
> - Spell check in patch 5 and added Acks
> 
> Changes since v3:
> - Use RN5T618_REPCNT_REPWRON macro when writing RN5T618_REPCNT register
> 
> Changes since v2:
> - Elevate restart priority to 192 to make sure PMIC takes presedence
>   over SoC level restart capabilities (e.g. watchdog)
> - Print a warning if poweroff callback is already assigned
> - Reorder of_id and variant assignment
> - Lower delay to 1ms and justify why it is required
> - Fix DCDC count and a typos in device tree bindings
> 
> Changes since v1:
> - Removed obsolete include <asm/system_misc.h>
> 
> Stefan Agner (5):
>   ARM: dts: meson: minix-neo-x8: define PMIC as power controller
>   mfd: add Ricoh RN5T567 PMIC support
>   regulator: rn5t618: add RN5T567 PMIC support
>   mfd: rn5t618: register power off callback optionally
>   mfd: rn5t618: register restart handler
> 
>  Documentation/devicetree/bindings/mfd/rn5t618.txt | 19 +++---
>  arch/arm/boot/dts/meson8-minix-neo-x8.dts         |  1 +
>  drivers/mfd/Kconfig                               |  7 ++-
>  drivers/mfd/rn5t618.c                             | 70 +++++++++++++++++++----
>  drivers/regulator/Kconfig                         |  5 +-
>  drivers/regulator/rn5t618-regulator.c             | 40 +++++++++++--
>  include/linux/mfd/rn5t618.h                       | 13 +++++
>  7 files changed, 126 insertions(+), 29 deletions(-)

Looks like you have all your Acks now.  How do you want to play this?
Would you like me to take the set through MFD and provide the other
Maintainers with a branch to pull from, or did you have other ideas?

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org ? Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* Re: [PATCH v5 0/5] regulator: add Ricoh RN5T567 PMIC support
  2016-06-29  8:12   ` Lee Jones
  (?)
@ 2016-06-29  8:15     ` Stefan Agner
  -1 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  8:15 UTC (permalink / raw)
  To: Lee Jones
  Cc: lgirdwood, broonie, khilman, carlo, b.galvani, max.oss.09,
	marcel, linux, galak, ijc+devicetree, mark.rutland, pawel.moll,
	robh+dt, linux, devicetree, linux-kernel, linux-arm-kernel,
	linux-amlogic

On 2016-06-29 01:12, Lee Jones wrote:
> On Tue, 28 Jun 2016, Stefan Agner wrote:
> 
>> This patchset adds RN5T567 PMIC support which is used on the
>> Toradex Colibri iMX7S/iMX7D modules. The existing RN5T618 is from
>> the same family, hence this patchset uses the same driver and adds
>> variant support.
>>
>> The Colibris currently do not use the PMIC's power off capabilities,
>> as do the current users of that PMIC driver. Therefore this patchset
>> also makes the use of the system-power-controller property mandatory
>> if the power off capabilties are required.
>>
>> Changes since v4:
>> - Spell check in patch 5 and added Acks
>>
>> Changes since v3:
>> - Use RN5T618_REPCNT_REPWRON macro when writing RN5T618_REPCNT register
>>
>> Changes since v2:
>> - Elevate restart priority to 192 to make sure PMIC takes presedence
>>   over SoC level restart capabilities (e.g. watchdog)
>> - Print a warning if poweroff callback is already assigned
>> - Reorder of_id and variant assignment
>> - Lower delay to 1ms and justify why it is required
>> - Fix DCDC count and a typos in device tree bindings
>>
>> Changes since v1:
>> - Removed obsolete include <asm/system_misc.h>
>>
>> Stefan Agner (5):
>>   ARM: dts: meson: minix-neo-x8: define PMIC as power controller
>>   mfd: add Ricoh RN5T567 PMIC support
>>   regulator: rn5t618: add RN5T567 PMIC support
>>   mfd: rn5t618: register power off callback optionally
>>   mfd: rn5t618: register restart handler
>>
>>  Documentation/devicetree/bindings/mfd/rn5t618.txt | 19 +++---
>>  arch/arm/boot/dts/meson8-minix-neo-x8.dts         |  1 +
>>  drivers/mfd/Kconfig                               |  7 ++-
>>  drivers/mfd/rn5t618.c                             | 70 +++++++++++++++++++----
>>  drivers/regulator/Kconfig                         |  5 +-
>>  drivers/regulator/rn5t618-regulator.c             | 40 +++++++++++--
>>  include/linux/mfd/rn5t618.h                       | 13 +++++
>>  7 files changed, 126 insertions(+), 29 deletions(-)
> 
> Looks like you have all your Acks now.  How do you want to play this?
> Would you like me to take the set through MFD and provide the other
> Maintainers with a branch to pull from, or did you have other ideas?

I did not thought about that really, I guess you have a usual way for
mixed regulator/mfd patchsets? Taking it through MFD sounds good to
me...

--
Stefan

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

* [PATCH v5 0/5] regulator: add Ricoh RN5T567 PMIC support
@ 2016-06-29  8:15     ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  8:15 UTC (permalink / raw)
  To: linux-arm-kernel

On 2016-06-29 01:12, Lee Jones wrote:
> On Tue, 28 Jun 2016, Stefan Agner wrote:
> 
>> This patchset adds RN5T567 PMIC support which is used on the
>> Toradex Colibri iMX7S/iMX7D modules. The existing RN5T618 is from
>> the same family, hence this patchset uses the same driver and adds
>> variant support.
>>
>> The Colibris currently do not use the PMIC's power off capabilities,
>> as do the current users of that PMIC driver. Therefore this patchset
>> also makes the use of the system-power-controller property mandatory
>> if the power off capabilties are required.
>>
>> Changes since v4:
>> - Spell check in patch 5 and added Acks
>>
>> Changes since v3:
>> - Use RN5T618_REPCNT_REPWRON macro when writing RN5T618_REPCNT register
>>
>> Changes since v2:
>> - Elevate restart priority to 192 to make sure PMIC takes presedence
>>   over SoC level restart capabilities (e.g. watchdog)
>> - Print a warning if poweroff callback is already assigned
>> - Reorder of_id and variant assignment
>> - Lower delay to 1ms and justify why it is required
>> - Fix DCDC count and a typos in device tree bindings
>>
>> Changes since v1:
>> - Removed obsolete include <asm/system_misc.h>
>>
>> Stefan Agner (5):
>>   ARM: dts: meson: minix-neo-x8: define PMIC as power controller
>>   mfd: add Ricoh RN5T567 PMIC support
>>   regulator: rn5t618: add RN5T567 PMIC support
>>   mfd: rn5t618: register power off callback optionally
>>   mfd: rn5t618: register restart handler
>>
>>  Documentation/devicetree/bindings/mfd/rn5t618.txt | 19 +++---
>>  arch/arm/boot/dts/meson8-minix-neo-x8.dts         |  1 +
>>  drivers/mfd/Kconfig                               |  7 ++-
>>  drivers/mfd/rn5t618.c                             | 70 +++++++++++++++++++----
>>  drivers/regulator/Kconfig                         |  5 +-
>>  drivers/regulator/rn5t618-regulator.c             | 40 +++++++++++--
>>  include/linux/mfd/rn5t618.h                       | 13 +++++
>>  7 files changed, 126 insertions(+), 29 deletions(-)
> 
> Looks like you have all your Acks now.  How do you want to play this?
> Would you like me to take the set through MFD and provide the other
> Maintainers with a branch to pull from, or did you have other ideas?

I did not thought about that really, I guess you have a usual way for
mixed regulator/mfd patchsets? Taking it through MFD sounds good to
me...

--
Stefan

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

* [PATCH v5 0/5] regulator: add Ricoh RN5T567 PMIC support
@ 2016-06-29  8:15     ` Stefan Agner
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Agner @ 2016-06-29  8:15 UTC (permalink / raw)
  To: linus-amlogic

On 2016-06-29 01:12, Lee Jones wrote:
> On Tue, 28 Jun 2016, Stefan Agner wrote:
> 
>> This patchset adds RN5T567 PMIC support which is used on the
>> Toradex Colibri iMX7S/iMX7D modules. The existing RN5T618 is from
>> the same family, hence this patchset uses the same driver and adds
>> variant support.
>>
>> The Colibris currently do not use the PMIC's power off capabilities,
>> as do the current users of that PMIC driver. Therefore this patchset
>> also makes the use of the system-power-controller property mandatory
>> if the power off capabilties are required.
>>
>> Changes since v4:
>> - Spell check in patch 5 and added Acks
>>
>> Changes since v3:
>> - Use RN5T618_REPCNT_REPWRON macro when writing RN5T618_REPCNT register
>>
>> Changes since v2:
>> - Elevate restart priority to 192 to make sure PMIC takes presedence
>>   over SoC level restart capabilities (e.g. watchdog)
>> - Print a warning if poweroff callback is already assigned
>> - Reorder of_id and variant assignment
>> - Lower delay to 1ms and justify why it is required
>> - Fix DCDC count and a typos in device tree bindings
>>
>> Changes since v1:
>> - Removed obsolete include <asm/system_misc.h>
>>
>> Stefan Agner (5):
>>   ARM: dts: meson: minix-neo-x8: define PMIC as power controller
>>   mfd: add Ricoh RN5T567 PMIC support
>>   regulator: rn5t618: add RN5T567 PMIC support
>>   mfd: rn5t618: register power off callback optionally
>>   mfd: rn5t618: register restart handler
>>
>>  Documentation/devicetree/bindings/mfd/rn5t618.txt | 19 +++---
>>  arch/arm/boot/dts/meson8-minix-neo-x8.dts         |  1 +
>>  drivers/mfd/Kconfig                               |  7 ++-
>>  drivers/mfd/rn5t618.c                             | 70 +++++++++++++++++++----
>>  drivers/regulator/Kconfig                         |  5 +-
>>  drivers/regulator/rn5t618-regulator.c             | 40 +++++++++++--
>>  include/linux/mfd/rn5t618.h                       | 13 +++++
>>  7 files changed, 126 insertions(+), 29 deletions(-)
> 
> Looks like you have all your Acks now.  How do you want to play this?
> Would you like me to take the set through MFD and provide the other
> Maintainers with a branch to pull from, or did you have other ideas?

I did not thought about that really, I guess you have a usual way for
mixed regulator/mfd patchsets? Taking it through MFD sounds good to
me...

--
Stefan

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

* [GIT PULL] Immutable branch between MFD, Regulator and ARM for v4.8
  2016-06-29  5:53 ` Stefan Agner
  (?)
@ 2016-06-29 16:25   ` Lee Jones
  -1 siblings, 0 replies; 32+ messages in thread
From: Lee Jones @ 2016-06-29 16:25 UTC (permalink / raw)
  To: Stefan Agner
  Cc: lgirdwood, broonie, khilman, carlo, b.galvani, max.oss.09,
	marcel, linux, galak, ijc+devicetree, mark.rutland, pawel.moll,
	robh+dt, linux, devicetree, linux-kernel, linux-arm-kernel,
	linux-amlogic

Enjoy!

The following changes since commit af8c34ce6ae32addda3788d54a7e340cad22516b:

  Linux 4.7-rc2 (2016-06-05 14:31:26 -0700)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git tags/ib-mfd-regulator-arm-v4.8

for you to fetch changes up to a370f60a58ec7bad7045803041524ccdc4d79c75:

  mfd: rn5t618: Register restart handler (2016-06-29 10:11:35 +0100)

----------------------------------------------------------------
Immutable branch between MFD, Regulator and ARM, due for v4.8

----------------------------------------------------------------
Stefan Agner (5):
      ARM: dts: meson: minix-neo-x8: define PMIC as power controller
      mfd: rn5t618: Add Ricoh RN5T567 PMIC support
      regulator: rn5t618: Add RN5T567 PMIC support
      mfd: rn5t618: Register power off callback optionally
      mfd: rn5t618: Register restart handler

 Documentation/devicetree/bindings/mfd/rn5t618.txt | 19 +++---
 arch/arm/boot/dts/meson8-minix-neo-x8.dts         |  1 +
 drivers/mfd/Kconfig                               |  7 ++-
 drivers/mfd/rn5t618.c                             | 70 +++++++++++++++++++----
 drivers/regulator/Kconfig                         |  5 +-
 drivers/regulator/rn5t618-regulator.c             | 40 +++++++++++--
 include/linux/mfd/rn5t618.h                       | 13 +++++
 7 files changed, 126 insertions(+), 29 deletions(-)

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* [GIT PULL] Immutable branch between MFD, Regulator and ARM for v4.8
@ 2016-06-29 16:25   ` Lee Jones
  0 siblings, 0 replies; 32+ messages in thread
From: Lee Jones @ 2016-06-29 16:25 UTC (permalink / raw)
  To: linux-arm-kernel

Enjoy!

The following changes since commit af8c34ce6ae32addda3788d54a7e340cad22516b:

  Linux 4.7-rc2 (2016-06-05 14:31:26 -0700)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git tags/ib-mfd-regulator-arm-v4.8

for you to fetch changes up to a370f60a58ec7bad7045803041524ccdc4d79c75:

  mfd: rn5t618: Register restart handler (2016-06-29 10:11:35 +0100)

----------------------------------------------------------------
Immutable branch between MFD, Regulator and ARM, due for v4.8

----------------------------------------------------------------
Stefan Agner (5):
      ARM: dts: meson: minix-neo-x8: define PMIC as power controller
      mfd: rn5t618: Add Ricoh RN5T567 PMIC support
      regulator: rn5t618: Add RN5T567 PMIC support
      mfd: rn5t618: Register power off callback optionally
      mfd: rn5t618: Register restart handler

 Documentation/devicetree/bindings/mfd/rn5t618.txt | 19 +++---
 arch/arm/boot/dts/meson8-minix-neo-x8.dts         |  1 +
 drivers/mfd/Kconfig                               |  7 ++-
 drivers/mfd/rn5t618.c                             | 70 +++++++++++++++++++----
 drivers/regulator/Kconfig                         |  5 +-
 drivers/regulator/rn5t618-regulator.c             | 40 +++++++++++--
 include/linux/mfd/rn5t618.h                       | 13 +++++
 7 files changed, 126 insertions(+), 29 deletions(-)

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org ? Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* [GIT PULL] Immutable branch between MFD, Regulator and ARM for v4.8
@ 2016-06-29 16:25   ` Lee Jones
  0 siblings, 0 replies; 32+ messages in thread
From: Lee Jones @ 2016-06-29 16:25 UTC (permalink / raw)
  To: linus-amlogic

Enjoy!

The following changes since commit af8c34ce6ae32addda3788d54a7e340cad22516b:

  Linux 4.7-rc2 (2016-06-05 14:31:26 -0700)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git tags/ib-mfd-regulator-arm-v4.8

for you to fetch changes up to a370f60a58ec7bad7045803041524ccdc4d79c75:

  mfd: rn5t618: Register restart handler (2016-06-29 10:11:35 +0100)

----------------------------------------------------------------
Immutable branch between MFD, Regulator and ARM, due for v4.8

----------------------------------------------------------------
Stefan Agner (5):
      ARM: dts: meson: minix-neo-x8: define PMIC as power controller
      mfd: rn5t618: Add Ricoh RN5T567 PMIC support
      regulator: rn5t618: Add RN5T567 PMIC support
      mfd: rn5t618: Register power off callback optionally
      mfd: rn5t618: Register restart handler

 Documentation/devicetree/bindings/mfd/rn5t618.txt | 19 +++---
 arch/arm/boot/dts/meson8-minix-neo-x8.dts         |  1 +
 drivers/mfd/Kconfig                               |  7 ++-
 drivers/mfd/rn5t618.c                             | 70 +++++++++++++++++++----
 drivers/regulator/Kconfig                         |  5 +-
 drivers/regulator/rn5t618-regulator.c             | 40 +++++++++++--
 include/linux/mfd/rn5t618.h                       | 13 +++++
 7 files changed, 126 insertions(+), 29 deletions(-)

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org ? Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* Applied "mfd: rn5t618: Register restart handler" to the regulator tree
  2016-06-29  5:53   ` Stefan Agner
  (?)
  (?)
@ 2016-06-29 18:05     ` Mark Brown
  -1 siblings, 0 replies; 32+ messages in thread
From: Mark Brown @ 2016-06-29 18:05 UTC (permalink / raw)
  To: Stefan Agner
  Cc: Lee Jones, lee.jones, lgirdwood, broonie, khilman, carlo,
	b.galvani, max.oss.09, marcel, linux, galak, ijc+devicetree,
	mark.rutland, pawel.moll, robh+dt, linux, devicetree,
	linux-kernel, linux-arm-kernel, linux-amlogic

The patch

   mfd: rn5t618: Register restart handler

has been applied to the regulator tree at

   git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git 

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.  

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

>From a370f60a58ec7bad7045803041524ccdc4d79c75 Mon Sep 17 00:00:00 2001
From: Stefan Agner <stefan@agner.ch>
Date: Tue, 28 Jun 2016 22:53:22 -0700
Subject: [PATCH] mfd: rn5t618: Register restart handler

Use the PMIC's repower capability for reboots. Register a restart
handler and use a slightly elevated priority of 192 since the PMIC
has suprior reset capability (causing a system wide reset).

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/mfd/rn5t618.c | 43 +++++++++++++++++++++++++++++++++++++------
 1 file changed, 37 insertions(+), 6 deletions(-)

diff --git a/drivers/mfd/rn5t618.c b/drivers/mfd/rn5t618.c
index 1831740d9016..ee94080e1cbb 100644
--- a/drivers/mfd/rn5t618.c
+++ b/drivers/mfd/rn5t618.c
@@ -12,11 +12,13 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <linux/delay.h>
 #include <linux/i2c.h>
 #include <linux/mfd/core.h>
 #include <linux/mfd/rn5t618.h>
 #include <linux/module.h>
 #include <linux/of_device.h>
+#include <linux/reboot.h>
 #include <linux/regmap.h>
 
 static const struct mfd_cell rn5t618_cells[] = {
@@ -50,17 +52,38 @@ static const struct regmap_config rn5t618_regmap_config = {
 };
 
 static struct rn5t618 *rn5t618_pm_power_off;
+static struct notifier_block rn5t618_restart_handler;
 
-static void rn5t618_power_off(void)
+static void rn5t618_trigger_poweroff_sequence(bool repower)
 {
 	/* disable automatic repower-on */
 	regmap_update_bits(rn5t618_pm_power_off->regmap, RN5T618_REPCNT,
-			   RN5T618_REPCNT_REPWRON, 0);
+			   RN5T618_REPCNT_REPWRON,
+			   repower ? RN5T618_REPCNT_REPWRON : 0);
 	/* start power-off sequence */
 	regmap_update_bits(rn5t618_pm_power_off->regmap, RN5T618_SLPCNT,
 			   RN5T618_SLPCNT_SWPWROFF, RN5T618_SLPCNT_SWPWROFF);
 }
 
+static void rn5t618_power_off(void)
+{
+	rn5t618_trigger_poweroff_sequence(false);
+}
+
+static int rn5t618_restart(struct notifier_block *this,
+			    unsigned long mode, void *cmd)
+{
+	rn5t618_trigger_poweroff_sequence(true);
+
+	/*
+	 * Re-power factor detection on PMIC side is not instant. 1ms
+	 * proved to be enough time until reset takes effect.
+	 */
+	mdelay(1);
+
+	return NOTIFY_DONE;
+}
+
 static const struct of_device_id rn5t618_of_match[] = {
 	{ .compatible = "ricoh,rn5t567", .data = (void *)RN5T567 },
 	{ .compatible = "ricoh,rn5t618", .data = (void *)RN5T618 },
@@ -102,13 +125,21 @@ static int rn5t618_i2c_probe(struct i2c_client *i2c,
 		return ret;
 	}
 
+	rn5t618_pm_power_off = priv;
 	if (of_device_is_system_power_controller(i2c->dev.of_node)) {
-		if (!pm_power_off) {
-			rn5t618_pm_power_off = priv;
+		if (!pm_power_off)
 			pm_power_off = rn5t618_power_off;
-		} else {
+		else
 			dev_warn(&i2c->dev, "Poweroff callback already assigned\n");
-		}
+	}
+
+	rn5t618_restart_handler.notifier_call = rn5t618_restart;
+	rn5t618_restart_handler.priority = 192;
+
+	ret = register_restart_handler(&rn5t618_restart_handler);
+	if (ret) {
+		dev_err(&i2c->dev, "cannot register restart handler, %d\n", ret);
+		return ret;
 	}
 
 	return 0;
-- 
2.8.1

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

* Applied "mfd: rn5t618: Register restart handler" to the regulator tree
@ 2016-06-29 18:05     ` Mark Brown
  0 siblings, 0 replies; 32+ messages in thread
From: Mark Brown @ 2016-06-29 18:05 UTC (permalink / raw)
  To: Stefan Agner
  Cc: mark.rutland, devicetree, linux-kernel, pawel.moll, max.oss.09,
	khilman, ijc+devicetree, lgirdwood, robh+dt, linux, b.galvani,
	broonie, marcel, galak, carlo, linux-amlogic, lee.jones, linux,
	linux-arm-kernel

The patch

   mfd: rn5t618: Register restart handler

has been applied to the regulator tree at

   git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git 

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.  

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

>From a370f60a58ec7bad7045803041524ccdc4d79c75 Mon Sep 17 00:00:00 2001
From: Stefan Agner <stefan@agner.ch>
Date: Tue, 28 Jun 2016 22:53:22 -0700
Subject: [PATCH] mfd: rn5t618: Register restart handler

Use the PMIC's repower capability for reboots. Register a restart
handler and use a slightly elevated priority of 192 since the PMIC
has suprior reset capability (causing a system wide reset).

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/mfd/rn5t618.c | 43 +++++++++++++++++++++++++++++++++++++------
 1 file changed, 37 insertions(+), 6 deletions(-)

diff --git a/drivers/mfd/rn5t618.c b/drivers/mfd/rn5t618.c
index 1831740d9016..ee94080e1cbb 100644
--- a/drivers/mfd/rn5t618.c
+++ b/drivers/mfd/rn5t618.c
@@ -12,11 +12,13 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <linux/delay.h>
 #include <linux/i2c.h>
 #include <linux/mfd/core.h>
 #include <linux/mfd/rn5t618.h>
 #include <linux/module.h>
 #include <linux/of_device.h>
+#include <linux/reboot.h>
 #include <linux/regmap.h>
 
 static const struct mfd_cell rn5t618_cells[] = {
@@ -50,17 +52,38 @@ static const struct regmap_config rn5t618_regmap_config = {
 };
 
 static struct rn5t618 *rn5t618_pm_power_off;
+static struct notifier_block rn5t618_restart_handler;
 
-static void rn5t618_power_off(void)
+static void rn5t618_trigger_poweroff_sequence(bool repower)
 {
 	/* disable automatic repower-on */
 	regmap_update_bits(rn5t618_pm_power_off->regmap, RN5T618_REPCNT,
-			   RN5T618_REPCNT_REPWRON, 0);
+			   RN5T618_REPCNT_REPWRON,
+			   repower ? RN5T618_REPCNT_REPWRON : 0);
 	/* start power-off sequence */
 	regmap_update_bits(rn5t618_pm_power_off->regmap, RN5T618_SLPCNT,
 			   RN5T618_SLPCNT_SWPWROFF, RN5T618_SLPCNT_SWPWROFF);
 }
 
+static void rn5t618_power_off(void)
+{
+	rn5t618_trigger_poweroff_sequence(false);
+}
+
+static int rn5t618_restart(struct notifier_block *this,
+			    unsigned long mode, void *cmd)
+{
+	rn5t618_trigger_poweroff_sequence(true);
+
+	/*
+	 * Re-power factor detection on PMIC side is not instant. 1ms
+	 * proved to be enough time until reset takes effect.
+	 */
+	mdelay(1);
+
+	return NOTIFY_DONE;
+}
+
 static const struct of_device_id rn5t618_of_match[] = {
 	{ .compatible = "ricoh,rn5t567", .data = (void *)RN5T567 },
 	{ .compatible = "ricoh,rn5t618", .data = (void *)RN5T618 },
@@ -102,13 +125,21 @@ static int rn5t618_i2c_probe(struct i2c_client *i2c,
 		return ret;
 	}
 
+	rn5t618_pm_power_off = priv;
 	if (of_device_is_system_power_controller(i2c->dev.of_node)) {
-		if (!pm_power_off) {
-			rn5t618_pm_power_off = priv;
+		if (!pm_power_off)
 			pm_power_off = rn5t618_power_off;
-		} else {
+		else
 			dev_warn(&i2c->dev, "Poweroff callback already assigned\n");
-		}
+	}
+
+	rn5t618_restart_handler.notifier_call = rn5t618_restart;
+	rn5t618_restart_handler.priority = 192;
+
+	ret = register_restart_handler(&rn5t618_restart_handler);
+	if (ret) {
+		dev_err(&i2c->dev, "cannot register restart handler, %d\n", ret);
+		return ret;
 	}
 
 	return 0;
-- 
2.8.1

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

* Applied "mfd: rn5t618: Register restart handler" to the regulator tree
@ 2016-06-29 18:05     ` Mark Brown
  0 siblings, 0 replies; 32+ messages in thread
From: Mark Brown @ 2016-06-29 18:05 UTC (permalink / raw)
  To: linux-arm-kernel

The patch

   mfd: rn5t618: Register restart handler

has been applied to the regulator tree at

   git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git 

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.  

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

>From a370f60a58ec7bad7045803041524ccdc4d79c75 Mon Sep 17 00:00:00 2001
From: Stefan Agner <stefan@agner.ch>
Date: Tue, 28 Jun 2016 22:53:22 -0700
Subject: [PATCH] mfd: rn5t618: Register restart handler

Use the PMIC's repower capability for reboots. Register a restart
handler and use a slightly elevated priority of 192 since the PMIC
has suprior reset capability (causing a system wide reset).

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/mfd/rn5t618.c | 43 +++++++++++++++++++++++++++++++++++++------
 1 file changed, 37 insertions(+), 6 deletions(-)

diff --git a/drivers/mfd/rn5t618.c b/drivers/mfd/rn5t618.c
index 1831740d9016..ee94080e1cbb 100644
--- a/drivers/mfd/rn5t618.c
+++ b/drivers/mfd/rn5t618.c
@@ -12,11 +12,13 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <linux/delay.h>
 #include <linux/i2c.h>
 #include <linux/mfd/core.h>
 #include <linux/mfd/rn5t618.h>
 #include <linux/module.h>
 #include <linux/of_device.h>
+#include <linux/reboot.h>
 #include <linux/regmap.h>
 
 static const struct mfd_cell rn5t618_cells[] = {
@@ -50,17 +52,38 @@ static const struct regmap_config rn5t618_regmap_config = {
 };
 
 static struct rn5t618 *rn5t618_pm_power_off;
+static struct notifier_block rn5t618_restart_handler;
 
-static void rn5t618_power_off(void)
+static void rn5t618_trigger_poweroff_sequence(bool repower)
 {
 	/* disable automatic repower-on */
 	regmap_update_bits(rn5t618_pm_power_off->regmap, RN5T618_REPCNT,
-			   RN5T618_REPCNT_REPWRON, 0);
+			   RN5T618_REPCNT_REPWRON,
+			   repower ? RN5T618_REPCNT_REPWRON : 0);
 	/* start power-off sequence */
 	regmap_update_bits(rn5t618_pm_power_off->regmap, RN5T618_SLPCNT,
 			   RN5T618_SLPCNT_SWPWROFF, RN5T618_SLPCNT_SWPWROFF);
 }
 
+static void rn5t618_power_off(void)
+{
+	rn5t618_trigger_poweroff_sequence(false);
+}
+
+static int rn5t618_restart(struct notifier_block *this,
+			    unsigned long mode, void *cmd)
+{
+	rn5t618_trigger_poweroff_sequence(true);
+
+	/*
+	 * Re-power factor detection on PMIC side is not instant. 1ms
+	 * proved to be enough time until reset takes effect.
+	 */
+	mdelay(1);
+
+	return NOTIFY_DONE;
+}
+
 static const struct of_device_id rn5t618_of_match[] = {
 	{ .compatible = "ricoh,rn5t567", .data = (void *)RN5T567 },
 	{ .compatible = "ricoh,rn5t618", .data = (void *)RN5T618 },
@@ -102,13 +125,21 @@ static int rn5t618_i2c_probe(struct i2c_client *i2c,
 		return ret;
 	}
 
+	rn5t618_pm_power_off = priv;
 	if (of_device_is_system_power_controller(i2c->dev.of_node)) {
-		if (!pm_power_off) {
-			rn5t618_pm_power_off = priv;
+		if (!pm_power_off)
 			pm_power_off = rn5t618_power_off;
-		} else {
+		else
 			dev_warn(&i2c->dev, "Poweroff callback already assigned\n");
-		}
+	}
+
+	rn5t618_restart_handler.notifier_call = rn5t618_restart;
+	rn5t618_restart_handler.priority = 192;
+
+	ret = register_restart_handler(&rn5t618_restart_handler);
+	if (ret) {
+		dev_err(&i2c->dev, "cannot register restart handler, %d\n", ret);
+		return ret;
 	}
 
 	return 0;
-- 
2.8.1

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

* Applied "mfd: rn5t618: Register restart handler" to the regulator tree
@ 2016-06-29 18:05     ` Mark Brown
  0 siblings, 0 replies; 32+ messages in thread
From: Mark Brown @ 2016-06-29 18:05 UTC (permalink / raw)
  To: linus-amlogic

The patch

   mfd: rn5t618: Register restart handler

has been applied to the regulator tree at

   git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git 

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.  

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

>From a370f60a58ec7bad7045803041524ccdc4d79c75 Mon Sep 17 00:00:00 2001
From: Stefan Agner <stefan@agner.ch>
Date: Tue, 28 Jun 2016 22:53:22 -0700
Subject: [PATCH] mfd: rn5t618: Register restart handler

Use the PMIC's repower capability for reboots. Register a restart
handler and use a slightly elevated priority of 192 since the PMIC
has suprior reset capability (causing a system wide reset).

Signed-off-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/mfd/rn5t618.c | 43 +++++++++++++++++++++++++++++++++++++------
 1 file changed, 37 insertions(+), 6 deletions(-)

diff --git a/drivers/mfd/rn5t618.c b/drivers/mfd/rn5t618.c
index 1831740d9016..ee94080e1cbb 100644
--- a/drivers/mfd/rn5t618.c
+++ b/drivers/mfd/rn5t618.c
@@ -12,11 +12,13 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <linux/delay.h>
 #include <linux/i2c.h>
 #include <linux/mfd/core.h>
 #include <linux/mfd/rn5t618.h>
 #include <linux/module.h>
 #include <linux/of_device.h>
+#include <linux/reboot.h>
 #include <linux/regmap.h>
 
 static const struct mfd_cell rn5t618_cells[] = {
@@ -50,17 +52,38 @@ static const struct regmap_config rn5t618_regmap_config = {
 };
 
 static struct rn5t618 *rn5t618_pm_power_off;
+static struct notifier_block rn5t618_restart_handler;
 
-static void rn5t618_power_off(void)
+static void rn5t618_trigger_poweroff_sequence(bool repower)
 {
 	/* disable automatic repower-on */
 	regmap_update_bits(rn5t618_pm_power_off->regmap, RN5T618_REPCNT,
-			   RN5T618_REPCNT_REPWRON, 0);
+			   RN5T618_REPCNT_REPWRON,
+			   repower ? RN5T618_REPCNT_REPWRON : 0);
 	/* start power-off sequence */
 	regmap_update_bits(rn5t618_pm_power_off->regmap, RN5T618_SLPCNT,
 			   RN5T618_SLPCNT_SWPWROFF, RN5T618_SLPCNT_SWPWROFF);
 }
 
+static void rn5t618_power_off(void)
+{
+	rn5t618_trigger_poweroff_sequence(false);
+}
+
+static int rn5t618_restart(struct notifier_block *this,
+			    unsigned long mode, void *cmd)
+{
+	rn5t618_trigger_poweroff_sequence(true);
+
+	/*
+	 * Re-power factor detection on PMIC side is not instant. 1ms
+	 * proved to be enough time until reset takes effect.
+	 */
+	mdelay(1);
+
+	return NOTIFY_DONE;
+}
+
 static const struct of_device_id rn5t618_of_match[] = {
 	{ .compatible = "ricoh,rn5t567", .data = (void *)RN5T567 },
 	{ .compatible = "ricoh,rn5t618", .data = (void *)RN5T618 },
@@ -102,13 +125,21 @@ static int rn5t618_i2c_probe(struct i2c_client *i2c,
 		return ret;
 	}
 
+	rn5t618_pm_power_off = priv;
 	if (of_device_is_system_power_controller(i2c->dev.of_node)) {
-		if (!pm_power_off) {
-			rn5t618_pm_power_off = priv;
+		if (!pm_power_off)
 			pm_power_off = rn5t618_power_off;
-		} else {
+		else
 			dev_warn(&i2c->dev, "Poweroff callback already assigned\n");
-		}
+	}
+
+	rn5t618_restart_handler.notifier_call = rn5t618_restart;
+	rn5t618_restart_handler.priority = 192;
+
+	ret = register_restart_handler(&rn5t618_restart_handler);
+	if (ret) {
+		dev_err(&i2c->dev, "cannot register restart handler, %d\n", ret);
+		return ret;
 	}
 
 	return 0;
-- 
2.8.1

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

end of thread, other threads:[~2016-06-29 18:08 UTC | newest]

Thread overview: 32+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-29  5:53 [PATCH v5 0/5] regulator: add Ricoh RN5T567 PMIC support Stefan Agner
2016-06-29  5:53 ` Stefan Agner
2016-06-29  5:53 ` Stefan Agner
2016-06-29  5:53 ` [PATCH v5 1/5] ARM: dts: meson: minix-neo-x8: define PMIC as power controller Stefan Agner
2016-06-29  5:53   ` Stefan Agner
2016-06-29  5:53   ` Stefan Agner
2016-06-29  5:53 ` [PATCH v5 2/5] mfd: add Ricoh RN5T567 PMIC support Stefan Agner
2016-06-29  5:53   ` Stefan Agner
2016-06-29  5:53   ` Stefan Agner
2016-06-29  5:53 ` [PATCH v5 3/5] regulator: rn5t618: add " Stefan Agner
2016-06-29  5:53   ` Stefan Agner
2016-06-29  5:53   ` Stefan Agner
2016-06-29  5:53 ` [PATCH v5 4/5] mfd: rn5t618: register power off callback optionally Stefan Agner
2016-06-29  5:53   ` Stefan Agner
2016-06-29  5:53   ` Stefan Agner
2016-06-29  5:53   ` Stefan Agner
2016-06-29  5:53 ` [PATCH v5 5/5] mfd: rn5t618: register restart handler Stefan Agner
2016-06-29  5:53   ` Stefan Agner
2016-06-29  5:53   ` Stefan Agner
2016-06-29 18:05   ` Applied "mfd: rn5t618: Register restart handler" to the regulator tree Mark Brown
2016-06-29 18:05     ` Mark Brown
2016-06-29 18:05     ` Mark Brown
2016-06-29 18:05     ` Mark Brown
2016-06-29  8:12 ` [PATCH v5 0/5] regulator: add Ricoh RN5T567 PMIC support Lee Jones
2016-06-29  8:12   ` Lee Jones
2016-06-29  8:12   ` Lee Jones
2016-06-29  8:15   ` Stefan Agner
2016-06-29  8:15     ` Stefan Agner
2016-06-29  8:15     ` Stefan Agner
2016-06-29 16:25 ` [GIT PULL] Immutable branch between MFD, Regulator and ARM for v4.8 Lee Jones
2016-06-29 16:25   ` Lee Jones
2016-06-29 16:25   ` Lee Jones

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.