mirror of https://gitee.com/openkylin/linux.git
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:
parent
465c29d384
commit
58d114b669
|
@ -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/reg.h>
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#endif
|
||||
|
||||
static int da9052_i2c_enable_multiwrite(struct da9052 *da9052)
|
||||
{
|
||||
int reg_val, ret;
|
||||
|
@ -41,6 +46,24 @@ static int da9052_i2c_enable_multiwrite(struct da9052 *da9052)
|
|||
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,
|
||||
const struct i2c_device_id *id)
|
||||
{
|
||||
|
@ -76,6 +99,22 @@ static int __devinit da9052_i2c_probe(struct i2c_client *client,
|
|||
if (ret < 0)
|
||||
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);
|
||||
if (ret != 0)
|
||||
goto err_regmap;
|
||||
|
@ -100,14 +139,6 @@ static int __devexit da9052_i2c_remove(struct i2c_client *client)
|
|||
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 = {
|
||||
.probe = da9052_i2c_probe,
|
||||
.remove = __devexit_p(da9052_i2c_remove),
|
||||
|
@ -115,6 +146,9 @@ static struct i2c_driver da9052_i2c_driver = {
|
|||
.driver = {
|
||||
.name = "da9052",
|
||||
.owner = THIS_MODULE,
|
||||
#ifdef CONFIG_OF
|
||||
.of_match_table = dialog_dt_ids,
|
||||
#endif
|
||||
},
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue