Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 58d114b6 authored by Ying-Chun Liu (PaulLiu)'s avatar Ying-Chun Liu (PaulLiu) Committed by Samuel Ortiz
Browse files

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: default avatarYing-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: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent 465c29d3
Loading
Loading
Loading
Loading
+60 −0
Original line number Diff line number Diff line
* 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>;
			};
		};
	};
};
+42 −8
Original line number Diff line number Diff line
@@ -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
	},
};