diff mbox

[V1] mfd: da9063: Add device tree support

Message ID 201501141438.t0EEcMBg010491@swsrvapps-01.diasemi.com
State New, archived
Headers show

Commit Message

Steve Twiss Jan. 14, 2015, 2:09 p.m. UTC
From: Steve Twiss <stwiss.opensource@diasemi.com>

Add device tree support for DA9063 regulators; Real-Time Clock
and Watchdog.


Signed-off-by: Steve Twiss <stwiss.opensource@diasemi.com>

---
Checks performed with linux-next/v3.19-rc4/scripts/checkpatch.pl
 da9063.txt                total: 0 errors, 0 warnings, 94 lines checked
 da9063-core.c             total: 0 errors, 0 warnings, 192 lines checked
 da9063-i2c.c              total: 0 errors, 0 warnings, 277 lines checked
 core.h                    total: 0 errors, 0 warnings, 99 lines checked
This patch applies against linux-next and v3.19-rc4 



 Documentation/devicetree/bindings/mfd/da9063.txt | 94 ++++++++++++++++++++++++
 drivers/mfd/da9063-core.c                        |  2 +
 drivers/mfd/da9063-i2c.c                         | 11 +++
 include/linux/mfd/da9063/core.h                  |  1 +
 4 files changed, 108 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mfd/da9063.txt

Comments

Lee Jones Jan. 19, 2015, 9:54 a.m. UTC | #1
On Wed, 14 Jan 2015, Steve Twiss wrote:

> From: Steve Twiss <stwiss.opensource@diasemi.com>
> 
> Add device tree support for DA9063 regulators; Real-Time Clock
> and Watchdog.
> 
> 
> Signed-off-by: Steve Twiss <stwiss.opensource@diasemi.com>
> 
> ---
> Checks performed with linux-next/v3.19-rc4/scripts/checkpatch.pl
>  da9063.txt                total: 0 errors, 0 warnings, 94 lines checked
>  da9063-core.c             total: 0 errors, 0 warnings, 192 lines checked
>  da9063-i2c.c              total: 0 errors, 0 warnings, 277 lines checked
>  core.h                    total: 0 errors, 0 warnings, 99 lines checked

There is no need to put this in here really.  It is assumed that
checkpatch.pl has been run and that no warnings/errors exists.

> This patch applies against linux-next and v3.19-rc4 
> 
> 
> 
>  Documentation/devicetree/bindings/mfd/da9063.txt | 94 ++++++++++++++++++++++++
>  drivers/mfd/da9063-core.c                        |  2 +
>  drivers/mfd/da9063-i2c.c                         | 11 +++
>  include/linux/mfd/da9063/core.h                  |  1 +
>  4 files changed, 108 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/mfd/da9063.txt
> 
> diff --git a/Documentation/devicetree/bindings/mfd/da9063.txt b/Documentation/devicetree/bindings/mfd/da9063.txt
> new file mode 100644
> index 0000000..ac26af4
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mfd/da9063.txt
> @@ -0,0 +1,94 @@
> +* Dialog DA9063 Power Management Integrated Circuit (PMIC)
> +
> +DA9093 consists of a large and varied group of sub-devices (I2C Only):
> +
> +Device                   Supply Names    Description
> +------                   ------------    -----------
> +da9063-regulator        :               : LDOs & BUCKs
> +da9063-rtc              :               : Real-Time Clock
> +da9063-watchdog         :               : Watchdog
> +
> +======
> +
> +Required properties:
> +
> +- compatible : Should be "dlg,da9063-ca", "dlg,da9063-bb" or/and
> +  "dlg,da9063-ad".

What are 'ca', 'bb' and 'ad'?

> +- reg : Specifies the I2C slave address (this defaults to 0x58 but it can be
> +  modified to match the chip's OTP settings).
> +- interrupt-parent : Specifies the reference to the interrupt controller for
> +  the DA9063.
> +- interrupts : IRQ line information.
> +- interrupt-controller
> +
> +Sub-nodes:
> +
> +- regulators : This node defines the settings for the LDOs and BUCKs. The
> +  DA9063 regulators are bound using their names listed below:
> +
> +    bcore1    : BUCK CORE1
> +    bcore2    : BUCK CORE2
> +    bpro      : BUCK PRO
> +    bmem      : BUCK MEM
> +    bio       : BUCK IO
> +    bperi     : BUCK PERI
> +    ldo1      : LDO_1
> +    ldo2      : LDO_2
> +    ldo3      : LDO_3
> +    ldo4      : LDO_4
> +    ldo5      : LDO_5
> +    ldo6      : LDO_6
> +    ldo7      : LDO_7
> +    ldo8      : LDO_8
> +    ldo9      : LDO_9
> +    ldo10     : LDO_10
> +    ldo11     : LDO_11
> +
> +  The component follows the standard regulator framework and the bindings
> +  details of individual regulator device can be found in:
> +  Documentation/devicetree/bindings/regulator/regulator.txt
> +
> +- rtc : This node defines settings for the Real-Time Clock associated with
> +  the DA9063. There are currently no entries in this binding, however
> +  compatible = "dlg,da9063-rtc" should be added if a node is created.
> +
> +- watchdog : This node defines settings for the Watchdog timer associated
> +  with the DA9063. There are currently no entries in this binding, however
> +  compatible = "dlg,da9063-watchdog" should be added if a node is created.
> +
> +
> +Example:
> +
> +	pmic0: da9063@58 {
> +		compatible = "dlg,da9063-ca", "dlg,da9063-bb", "dlg,da9063-ad";
> +		reg = <0x58>;
> +		interrupt-parent = <&gpio6>;
> +		interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
> +		interrupt-controller;
> +
> +		rtc {
> +			compatible = "dlg,da9063-rtc";
> +		};
> +
> +		wdt {
> +			compatible = "dlg,da9063-watchdog";
> +		};
> +
> +		regulators {
> +			DA9063_BCORE1: bcore1 {
> +				regulator-name = "BCORE1";
> +				regulator-min-microvolt = <300000>;
> +				regulator-max-microvolt = <1570000>;
> +				regulator-min-microamp = <500000>;
> +				regulator-max-microamp = <2000000>;
> +				regulator-boot-on;
> +			};
> +			DA9063_LDO11: ldo11 {
> +				regulator-name = "LDO_11";
> +				regulator-min-microvolt = <900000>;
> +				regulator-max-microvolt = <3600000>;
> +				regulator-boot-on;
> +			};
> +		};
> +	};
> +
> diff --git a/drivers/mfd/da9063-core.c b/drivers/mfd/da9063-core.c
> index f38bc98..171ed7e 100644
> --- a/drivers/mfd/da9063-core.c
> +++ b/drivers/mfd/da9063-core.c
> @@ -85,6 +85,7 @@ static const struct mfd_cell da9063_devs[] = {
>  		.name		= DA9063_DRVNAME_LEDS,
>  	},
>  	{
> +		.of_compatible = "dlg,da9063-watchdog",

Can you put the of_compatible attribute at the end of the structure
please?

>  		.name		= DA9063_DRVNAME_WATCHDOG,
>  	},
>  	{
> @@ -98,6 +99,7 @@ static const struct mfd_cell da9063_devs[] = {
>  		.resources	= da9063_onkey_resources,
>  	},
>  	{
> +		.of_compatible = "dlg,da9063-rtc",

Same here.

>  		.name		= DA9063_DRVNAME_RTC,
>  		.num_resources	= ARRAY_SIZE(da9063_rtc_resources),
>  		.resources	= da9063_rtc_resources,
> diff --git a/drivers/mfd/da9063-i2c.c b/drivers/mfd/da9063-i2c.c
> index 21fd8d9..c4f5351 100644
> --- a/drivers/mfd/da9063-i2c.c
> +++ b/drivers/mfd/da9063-i2c.c
> @@ -25,6 +25,9 @@
>  #include <linux/mfd/da9063/pdata.h>
>  #include <linux/mfd/da9063/registers.h>
>  
> +#include <linux/of.h>
> +#include <linux/regulator/of_regulator.h>
> +
>  static const struct regmap_range da9063_ad_readable_ranges[] = {
>  	{
>  		.range_min = DA9063_REG_PAGE_CON,
> @@ -203,6 +206,13 @@ static struct regmap_config da9063_regmap_config = {
>  	.cache_type = REGCACHE_RBTREE,
>  };
>  
> +static const struct of_device_id da9063_dt_ids[] = {
> +	{ .compatible = "dlg,da9063-ad", },
> +	{ .compatible = "dlg,da9063-bb", },
> +	{ .compatible = "dlg,da9063-ca", },

Why is there a need to differientiae between 'ad', 'bb' and 'ca'
(whatever they are)?

> +	{ /* sentinel */ }

Nit: You can drop this comment.

> +};
> +MODULE_DEVICE_TABLE(of, da9063_dt_ids);
>  static int da9063_i2c_probe(struct i2c_client *i2c,
>  	const struct i2c_device_id *id)
>  {
> @@ -257,6 +267,7 @@ static struct i2c_driver da9063_i2c_driver = {
>  	.driver = {
>  		.name = "da9063",
>  		.owner = THIS_MODULE,
> +		.of_match_table = of_match_ptr(da9063_dt_ids),
>  	},
>  	.probe    = da9063_i2c_probe,
>  	.remove   = da9063_i2c_remove,
> diff --git a/include/linux/mfd/da9063/core.h b/include/linux/mfd/da9063/core.h
> index b92a326..79f4d82 100644
> --- a/include/linux/mfd/da9063/core.h
> +++ b/include/linux/mfd/da9063/core.h
> @@ -36,6 +36,7 @@ enum da9063_models {
>  enum da9063_variant_codes {
>  	PMIC_DA9063_AD = 0x3,
>  	PMIC_DA9063_BB = 0x5,
> +	PMIC_DA9063_CA = 0x6,
>  };
>  
>  /* Interrupts */
Lee Jones Jan. 19, 2015, 9:56 a.m. UTC | #2
On Wed, 14 Jan 2015, Steve Twiss wrote:

> From: Steve Twiss <stwiss.opensource@diasemi.com>
> 
> Add device tree support for DA9063 regulators; Real-Time Clock
> and Watchdog.
> 
> 
> Signed-off-by: Steve Twiss <stwiss.opensource@diasemi.com>
> 
> ---
> Checks performed with linux-next/v3.19-rc4/scripts/checkpatch.pl
>  da9063.txt                total: 0 errors, 0 warnings, 94 lines checked
>  da9063-core.c             total: 0 errors, 0 warnings, 192 lines checked
>  da9063-i2c.c              total: 0 errors, 0 warnings, 277 lines checked
>  core.h                    total: 0 errors, 0 warnings, 99 lines checked
> This patch applies against linux-next and v3.19-rc4 
> 
> 
> 
>  Documentation/devicetree/bindings/mfd/da9063.txt | 94 ++++++++++++++++++++++++

Ah, and this should be in a separate patch.
Steve Twiss Jan. 19, 2015, 2:22 p.m. UTC | #3
On 19 January 2015 09:54, Lee Jones wrote:

> On Wed, 14 Jan 2015, Steve Twiss wrote:

> > From: Steve Twiss <stwiss.opensource@diasemi.com>

> >

> > ---

> > Checks performed with linux-next/v3.19-rc4/scripts/checkpatch.pl

> >  da9063.txt                total: 0 errors, 0 warnings, 94 lines checked

> >  da9063-core.c             total: 0 errors, 0 warnings, 192 lines checked

> >  da9063-i2c.c              total: 0 errors, 0 warnings, 277 lines checked

> >  core.h                    total: 0 errors, 0 warnings, 99 lines checked

> 

> There is no need to put this in here really.  It is assumed that

> checkpatch.pl has been run and that no warnings/errors exists.

> 


ok -- I will remove this in future

[...]

> > +Required properties:

> > +

> > +- compatible : Should be "dlg,da9063-ca", "dlg,da9063-bb" or/and

> > +  "dlg,da9063-ad".

> 

> What are 'ca', 'bb' and 'ad'?


There are multiple variants of the DA9063 chip -- historical support.
The AD chip has a different register map to BB and CA  silicon and the
variant information is read from the chip at run-time and used to set
up the correct regmap_config tables during initialisation.

[...]

> > +++ b/drivers/mfd/da9063-core.c

> > @@ -85,6 +85,7 @@ static const struct mfd_cell da9063_devs[] = {

> >  		.name		= DA9063_DRVNAME_LEDS,

> >  	},

> >  	{

> > +		.of_compatible = "dlg,da9063-watchdog",

> 

> Can you put the of_compatible attribute at the end of the structure

> please?

> 

> >  		.name		= DA9063_DRVNAME_WATCHDOG,

> >  	},

> >  	{

> > @@ -98,6 +99,7 @@ static const struct mfd_cell da9063_devs[] = {

> >  		.resources	= da9063_onkey_resources,

> >  	},

> >  	{

> > +		.of_compatible = "dlg,da9063-rtc",

> 

> Same here.


Sure.

[...]
> >

> > +static const struct of_device_id da9063_dt_ids[] = {

> > +	{ .compatible = "dlg,da9063-ad", },

> > +	{ .compatible = "dlg,da9063-bb", },

> > +	{ .compatible = "dlg,da9063-ca", },

> 

> Why is there a need to differientiae between 'ad', 'bb' and 'ca'

> (whatever they are)?


As described above.

> > +	{ /* sentinel */ }

> 

> Nit: You can drop this comment.


ok.

[...]

I will also make changes to separate into multiple patches
as described in https://lkml.org/lkml/2015/1/19/149
Will re-send as patch V2 ...

Regards,
Steve
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/mfd/da9063.txt b/Documentation/devicetree/bindings/mfd/da9063.txt
new file mode 100644
index 0000000..ac26af4
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/da9063.txt
@@ -0,0 +1,94 @@ 
+* Dialog DA9063 Power Management Integrated Circuit (PMIC)
+
+DA9093 consists of a large and varied group of sub-devices (I2C Only):
+
+Device                   Supply Names    Description
+------                   ------------    -----------
+da9063-regulator        :               : LDOs & BUCKs
+da9063-rtc              :               : Real-Time Clock
+da9063-watchdog         :               : Watchdog
+
+======
+
+Required properties:
+
+- compatible : Should be "dlg,da9063-ca", "dlg,da9063-bb" or/and
+  "dlg,da9063-ad".
+- reg : Specifies the I2C slave address (this defaults to 0x58 but it can be
+  modified to match the chip's OTP settings).
+- interrupt-parent : Specifies the reference to the interrupt controller for
+  the DA9063.
+- interrupts : IRQ line information.
+- interrupt-controller
+
+Sub-nodes:
+
+- regulators : This node defines the settings for the LDOs and BUCKs. The
+  DA9063 regulators are bound using their names listed below:
+
+    bcore1    : BUCK CORE1
+    bcore2    : BUCK CORE2
+    bpro      : BUCK PRO
+    bmem      : BUCK MEM
+    bio       : BUCK IO
+    bperi     : BUCK PERI
+    ldo1      : LDO_1
+    ldo2      : LDO_2
+    ldo3      : LDO_3
+    ldo4      : LDO_4
+    ldo5      : LDO_5
+    ldo6      : LDO_6
+    ldo7      : LDO_7
+    ldo8      : LDO_8
+    ldo9      : LDO_9
+    ldo10     : LDO_10
+    ldo11     : LDO_11
+
+  The component follows the standard regulator framework and the bindings
+  details of individual regulator device can be found in:
+  Documentation/devicetree/bindings/regulator/regulator.txt
+
+- rtc : This node defines settings for the Real-Time Clock associated with
+  the DA9063. There are currently no entries in this binding, however
+  compatible = "dlg,da9063-rtc" should be added if a node is created.
+
+- watchdog : This node defines settings for the Watchdog timer associated
+  with the DA9063. There are currently no entries in this binding, however
+  compatible = "dlg,da9063-watchdog" should be added if a node is created.
+
+
+Example:
+
+	pmic0: da9063@58 {
+		compatible = "dlg,da9063-ca", "dlg,da9063-bb", "dlg,da9063-ad";
+		reg = <0x58>;
+		interrupt-parent = <&gpio6>;
+		interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
+		interrupt-controller;
+
+		rtc {
+			compatible = "dlg,da9063-rtc";
+		};
+
+		wdt {
+			compatible = "dlg,da9063-watchdog";
+		};
+
+		regulators {
+			DA9063_BCORE1: bcore1 {
+				regulator-name = "BCORE1";
+				regulator-min-microvolt = <300000>;
+				regulator-max-microvolt = <1570000>;
+				regulator-min-microamp = <500000>;
+				regulator-max-microamp = <2000000>;
+				regulator-boot-on;
+			};
+			DA9063_LDO11: ldo11 {
+				regulator-name = "LDO_11";
+				regulator-min-microvolt = <900000>;
+				regulator-max-microvolt = <3600000>;
+				regulator-boot-on;
+			};
+		};
+	};
+
diff --git a/drivers/mfd/da9063-core.c b/drivers/mfd/da9063-core.c
index f38bc98..171ed7e 100644
--- a/drivers/mfd/da9063-core.c
+++ b/drivers/mfd/da9063-core.c
@@ -85,6 +85,7 @@  static const struct mfd_cell da9063_devs[] = {
 		.name		= DA9063_DRVNAME_LEDS,
 	},
 	{
+		.of_compatible = "dlg,da9063-watchdog",
 		.name		= DA9063_DRVNAME_WATCHDOG,
 	},
 	{
@@ -98,6 +99,7 @@  static const struct mfd_cell da9063_devs[] = {
 		.resources	= da9063_onkey_resources,
 	},
 	{
+		.of_compatible = "dlg,da9063-rtc",
 		.name		= DA9063_DRVNAME_RTC,
 		.num_resources	= ARRAY_SIZE(da9063_rtc_resources),
 		.resources	= da9063_rtc_resources,
diff --git a/drivers/mfd/da9063-i2c.c b/drivers/mfd/da9063-i2c.c
index 21fd8d9..c4f5351 100644
--- a/drivers/mfd/da9063-i2c.c
+++ b/drivers/mfd/da9063-i2c.c
@@ -25,6 +25,9 @@ 
 #include <linux/mfd/da9063/pdata.h>
 #include <linux/mfd/da9063/registers.h>
 
+#include <linux/of.h>
+#include <linux/regulator/of_regulator.h>
+
 static const struct regmap_range da9063_ad_readable_ranges[] = {
 	{
 		.range_min = DA9063_REG_PAGE_CON,
@@ -203,6 +206,13 @@  static struct regmap_config da9063_regmap_config = {
 	.cache_type = REGCACHE_RBTREE,
 };
 
+static const struct of_device_id da9063_dt_ids[] = {
+	{ .compatible = "dlg,da9063-ad", },
+	{ .compatible = "dlg,da9063-bb", },
+	{ .compatible = "dlg,da9063-ca", },
+	{ /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, da9063_dt_ids);
 static int da9063_i2c_probe(struct i2c_client *i2c,
 	const struct i2c_device_id *id)
 {
@@ -257,6 +267,7 @@  static struct i2c_driver da9063_i2c_driver = {
 	.driver = {
 		.name = "da9063",
 		.owner = THIS_MODULE,
+		.of_match_table = of_match_ptr(da9063_dt_ids),
 	},
 	.probe    = da9063_i2c_probe,
 	.remove   = da9063_i2c_remove,
diff --git a/include/linux/mfd/da9063/core.h b/include/linux/mfd/da9063/core.h
index b92a326..79f4d82 100644
--- a/include/linux/mfd/da9063/core.h
+++ b/include/linux/mfd/da9063/core.h
@@ -36,6 +36,7 @@  enum da9063_models {
 enum da9063_variant_codes {
 	PMIC_DA9063_AD = 0x3,
 	PMIC_DA9063_BB = 0x5,
+	PMIC_DA9063_CA = 0x6,
 };
 
 /* Interrupts */