Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 319753
b: refs/heads/master
c: c1516f8
h: refs/heads/master
i:
  319751: af68f46
v: v3
  • Loading branch information
Yadwinder Singh Brar authored and Samuel Ortiz committed Jul 9, 2012
1 parent 730f094 commit d98632c
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2b40459b7ee502c970d9f1dcf94dfa4d58ec1d85
refs/heads/master: c1516f840dcd91e76712a047993e09d95034a66d
59 changes: 59 additions & 0 deletions trunk/Documentation/devicetree/bindings/mfd/max77686.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
Maxim MAX77686 multi-function device

MAX77686 is a Mulitifunction device with PMIC, RTC and Charger on chip. It is
interfaced to host controller using i2c interface. PMIC and Charger submodules
are addressed using same i2c slave address whereas RTC submodule uses
different i2c slave address,presently for which we are statically creating i2c
client while probing.This document describes the binding for mfd device and
PMIC submodule.

Required properties:
- compatible : Must be "maxim,max77686";
- reg : Specifies the i2c slave address of PMIC block.
- interrupts : This i2c device has an IRQ line connected to the main SoC.
- interrupt-parent : The parent interrupt controller.

Optional node:
- voltage-regulators : The regulators of max77686 have to be instantiated
under subnode named "voltage-regulators" using the following format.

regulator_name {
regulator-compatible = LDOn/BUCKn
standard regulator constraints....
};
refer Documentation/devicetree/bindings/regulator/regulator.txt

The regulator-compatible property of regulator should initialized with string
to get matched with their hardware counterparts as follow:

-LDOn : for LDOs, where n can lie in range 1 to 26.
example: LDO1, LDO2, LDO26.
-BUCKn : for BUCKs, where n can lie in range 1 to 9.
example: BUCK1, BUCK5, BUCK9.

Example:

max77686@09 {
compatible = "maxim,max77686";
interrupt-parent = <&wakeup_eint>;
interrupts = <26 0>;
reg = <0x09>;

voltage-regulators {
ldo11_reg {
regulator-compatible = "LDO11";
regulator-name = "vdd_ldo11";
regulator-min-microvolt = <1900000>;
regulator-max-microvolt = <1900000>;
regulator-always-on;
};

buck1_reg {
regulator-compatible = "BUCK1";
regulator-name = "vdd_mif";
regulator-min-microvolt = <950000>;
regulator-max-microvolt = <1300000>;
regulator-always-on;
regulator-boot-on;
};
}
45 changes: 39 additions & 6 deletions trunk/drivers/mfd/max77686.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@

#define I2C_ADDR_RTC (0x0C >> 1)

static struct of_device_id __devinitdata max77686_pmic_dt_match[] = {
{.compatible = "maxim,max77686", .data = 0},
{},
};

static struct mfd_cell max77686_devs[] = {
{ .name = "max77686-pmic", },
{ .name = "max77686-rtc", },
Expand All @@ -44,14 +49,46 @@ static struct regmap_config max77686_regmap_config = {
.val_bits = 8,
};

#ifdef CONFIG_OF
static struct max77686_platform_data *max77686_i2c_parse_dt_pdata(struct device
*dev)
{
struct max77686_platform_data *pd;

pd = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL);
if (!pd) {
dev_err(dev, "could not allocate memory for pdata\n");
return NULL;
}

dev->platform_data = pd;
return pd;
}
#else
static struct max77686_platform_data *max77686_i2c_parse_dt_pdata(struct device
*dev)
{
return 0;
}
#endif

static int max77686_i2c_probe(struct i2c_client *i2c,
const struct i2c_device_id *id)
{
struct max77686_dev *max77686;
struct max77686_dev *max77686 = NULL;
struct max77686_platform_data *pdata = i2c->dev.platform_data;
unsigned int data;
int ret = 0;

if (i2c->dev.of_node)
pdata = max77686_i2c_parse_dt_pdata(&i2c->dev);

if (!pdata) {
ret = -EIO;
dev_err(&i2c->dev, "No platform data found.\n");
goto err;
}

max77686 = kzalloc(sizeof(struct max77686_dev), GFP_KERNEL);
if (max77686 == NULL)
return -ENOMEM;
Expand All @@ -70,11 +107,6 @@ static int max77686_i2c_probe(struct i2c_client *i2c,
max77686->i2c = i2c;
max77686->type = id->driver_data;

if (!pdata) {
ret = -EIO;
goto err;
}

max77686->wakeup = pdata->wakeup;
max77686->irq_gpio = pdata->irq_gpio;
max77686->irq = i2c->irq;
Expand Down Expand Up @@ -130,6 +162,7 @@ static struct i2c_driver max77686_i2c_driver = {
.driver = {
.name = "max77686",
.owner = THIS_MODULE,
.of_match_table = of_match_ptr(max77686_pmic_dt_match),
},
.probe = max77686_i2c_probe,
.remove = max77686_i2c_remove,
Expand Down

0 comments on commit d98632c

Please sign in to comment.