mfd: Add device-tree support for da9502 i2c driver
This patch adds device-tree support for dialog MFD and the binding documentations. Signed-off-by: Ying-Chun Liu (PaulLiu) <paul.liu@linaro.org> Cc: Samuel Ortiz <sameo@linux.intel.com> Cc: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: Shawn Guo <shawn.guo@linaro.org> Cc: Ashish Jangam <ashish.jangam@kpitcummins.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
committed by
Samuel Ortiz
parent
465c29d384
commit
58d114b669
60
Documentation/devicetree/bindings/mfd/da9052-i2c.txt
Normal file
60
Documentation/devicetree/bindings/mfd/da9052-i2c.txt
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
* Dialog DA9052/53 Power Management Integrated Circuit (PMIC)
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : Should be "dlg,da9052", "dlg,da9053-aa",
|
||||||
|
"dlg,da9053-ab", or "dlg,da9053-bb"
|
||||||
|
|
||||||
|
Sub-nodes:
|
||||||
|
- regulators : Contain the regulator nodes. The DA9052/53 regulators are
|
||||||
|
bound using their names as listed below:
|
||||||
|
|
||||||
|
buck0 : regulator BUCK0
|
||||||
|
buck1 : regulator BUCK1
|
||||||
|
buck2 : regulator BUCK2
|
||||||
|
buck3 : regulator BUCK3
|
||||||
|
ldo4 : regulator LDO4
|
||||||
|
ldo5 : regulator LDO5
|
||||||
|
ldo6 : regulator LDO6
|
||||||
|
ldo7 : regulator LDO7
|
||||||
|
ldo8 : regulator LDO8
|
||||||
|
ldo9 : regulator LDO9
|
||||||
|
ldo10 : regulator LDO10
|
||||||
|
ldo11 : regulator LDO11
|
||||||
|
ldo12 : regulator LDO12
|
||||||
|
ldo13 : regulator LDO13
|
||||||
|
|
||||||
|
The bindings details of individual regulator device can be found in:
|
||||||
|
Documentation/devicetree/bindings/regulator/regulator.txt
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
i2c@63fc8000 { /* I2C1 */
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
pmic: dialog@48 {
|
||||||
|
compatible = "dlg,da9053-aa";
|
||||||
|
reg = <0x48>;
|
||||||
|
|
||||||
|
regulators {
|
||||||
|
buck0 {
|
||||||
|
regulator-min-microvolt = <500000>;
|
||||||
|
regulator-max-microvolt = <2075000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
buck1 {
|
||||||
|
regulator-min-microvolt = <500000>;
|
||||||
|
regulator-max-microvolt = <2075000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
buck2 {
|
||||||
|
regulator-min-microvolt = <925000>;
|
||||||
|
regulator-max-microvolt = <2500000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
buck3 {
|
||||||
|
regulator-min-microvolt = <925000>;
|
||||||
|
regulator-max-microvolt = <2500000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
@@ -22,6 +22,11 @@
|
|||||||
#include <linux/mfd/da9052/da9052.h>
|
#include <linux/mfd/da9052/da9052.h>
|
||||||
#include <linux/mfd/da9052/reg.h>
|
#include <linux/mfd/da9052/reg.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_OF
|
||||||
|
#include <linux/of.h>
|
||||||
|
#include <linux/of_device.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
static int da9052_i2c_enable_multiwrite(struct da9052 *da9052)
|
static int da9052_i2c_enable_multiwrite(struct da9052 *da9052)
|
||||||
{
|
{
|
||||||
int reg_val, ret;
|
int reg_val, ret;
|
||||||
@@ -41,6 +46,24 @@ static int da9052_i2c_enable_multiwrite(struct da9052 *da9052)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct i2c_device_id da9052_i2c_id[] = {
|
||||||
|
{"da9052", DA9052},
|
||||||
|
{"da9053-aa", DA9053_AA},
|
||||||
|
{"da9053-ba", DA9053_BA},
|
||||||
|
{"da9053-bb", DA9053_BB},
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_OF
|
||||||
|
static const struct of_device_id dialog_dt_ids[] = {
|
||||||
|
{ .compatible = "dlg,da9052", .data = &da9052_i2c_id[0] },
|
||||||
|
{ .compatible = "dlg,da9053-aa", .data = &da9052_i2c_id[1] },
|
||||||
|
{ .compatible = "dlg,da9053-ab", .data = &da9052_i2c_id[2] },
|
||||||
|
{ .compatible = "dlg,da9053-bb", .data = &da9052_i2c_id[3] },
|
||||||
|
{ /* sentinel */ }
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
static int __devinit da9052_i2c_probe(struct i2c_client *client,
|
static int __devinit da9052_i2c_probe(struct i2c_client *client,
|
||||||
const struct i2c_device_id *id)
|
const struct i2c_device_id *id)
|
||||||
{
|
{
|
||||||
@@ -76,6 +99,22 @@ static int __devinit da9052_i2c_probe(struct i2c_client *client,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto err_regmap;
|
goto err_regmap;
|
||||||
|
|
||||||
|
#ifdef CONFIG_OF
|
||||||
|
if (!id) {
|
||||||
|
struct device_node *np = client->dev.of_node;
|
||||||
|
const struct of_device_id *deviceid;
|
||||||
|
|
||||||
|
deviceid = of_match_node(np, dialog_dt_ids);
|
||||||
|
id = (const struct i2c_device_id *)deviceid->data;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!id) {
|
||||||
|
ret = -ENODEV;
|
||||||
|
dev_err(&client->dev, "id is null.\n");
|
||||||
|
goto err_regmap;
|
||||||
|
}
|
||||||
|
|
||||||
ret = da9052_device_init(da9052, id->driver_data);
|
ret = da9052_device_init(da9052, id->driver_data);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
goto err_regmap;
|
goto err_regmap;
|
||||||
@@ -100,14 +139,6 @@ static int __devexit da9052_i2c_remove(struct i2c_client *client)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct i2c_device_id da9052_i2c_id[] = {
|
|
||||||
{"da9052", DA9052},
|
|
||||||
{"da9053-aa", DA9053_AA},
|
|
||||||
{"da9053-ba", DA9053_BA},
|
|
||||||
{"da9053-bb", DA9053_BB},
|
|
||||||
{}
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct i2c_driver da9052_i2c_driver = {
|
static struct i2c_driver da9052_i2c_driver = {
|
||||||
.probe = da9052_i2c_probe,
|
.probe = da9052_i2c_probe,
|
||||||
.remove = __devexit_p(da9052_i2c_remove),
|
.remove = __devexit_p(da9052_i2c_remove),
|
||||||
@@ -115,6 +146,9 @@ static struct i2c_driver da9052_i2c_driver = {
|
|||||||
.driver = {
|
.driver = {
|
||||||
.name = "da9052",
|
.name = "da9052",
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
|
#ifdef CONFIG_OF
|
||||||
|
.of_match_table = dialog_dt_ids,
|
||||||
|
#endif
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user