Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 357599
b: refs/heads/master
c: 4071931
h: refs/heads/master
i:
  357597: 9ba7efc
  357595: 7098632
  357591: 878337d
  357583: d43b304
  357567: ebe494f
v: v3
  • Loading branch information
Laxman Dewangan authored and Samuel Ortiz committed Feb 13, 2013
1 parent 778c6d2 commit 155f087
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 4 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: 5f384c1f8be19487f904731d7232120dcfeca8e1
refs/heads/master: 40719314f259ab9409ca3d48551c17aa23bc2b4d
122 changes: 122 additions & 0 deletions trunk/Documentation/devicetree/bindings/regulator/tps65090.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
TPS65090 regulators

Required properties:
- compatible: "ti,tps65090"
- reg: I2C slave address
- interrupts: the interrupt outputs of the controller
- regulators: A node that houses a sub-node for each regulator within the
device. Each sub-node is identified using the node's name, with valid
values listed below. The content of each sub-node is defined by the
standard binding for regulators; see regulator.txt.
dcdc[1-3], fet[1-7] and ldo[1-2] respectively.
- vsys[1-3]-supply: The input supply for DCDC[1-3] respectively.
- infet[1-7]-supply: The input supply for FET[1-7] respectively.
- vsys-l[1-2]-supply: The input supply for LDO[1-2] respectively.

Optional properties:
- ti,enable-ext-control: This is applicable for DCDC1, DCDC2 and DCDC3.
If DCDCs are externally controlled then this property should be there.
- "dcdc-ext-control-gpios: This is applicable for DCDC1, DCDC2 and DCDC3.
If DCDCs are externally controlled and if it is from GPIO then GPIO
number should be provided. If it is externally controlled and no GPIO
entry then driver will just configure this rails as external control
and will not provide any enable/disable APIs.

Each regulator is defined using the standard binding for regulators.

Example:

tps65090@48 {
compatible = "ti,tps65090";
reg = <0x48>;
interrupts = <0 88 0x4>;

vsys1-supply = <&some_reg>;
vsys2-supply = <&some_reg>;
vsys3-supply = <&some_reg>;
infet1-supply = <&some_reg>;
infet2-supply = <&some_reg>;
infet3-supply = <&some_reg>;
infet4-supply = <&some_reg>;
infet5-supply = <&some_reg>;
infet6-supply = <&some_reg>;
infet7-supply = <&some_reg>;
vsys_l1-supply = <&some_reg>;
vsys_l2-supply = <&some_reg>;

regulators {
dcdc1 {
regulator-name = "dcdc1";
regulator-boot-on;
regulator-always-on;
ti,enable-ext-control;
dcdc-ext-control-gpios = <&gpio 10 0>;
};

dcdc2 {
regulator-name = "dcdc2";
regulator-boot-on;
regulator-always-on;
};

dcdc3 {
regulator-name = "dcdc3";
regulator-boot-on;
regulator-always-on;
};

fet1 {
regulator-name = "fet1";
regulator-boot-on;
regulator-always-on;
};

fet2 {
regulator-name = "fet2";
regulator-boot-on;
regulator-always-on;
};

fet3 {
regulator-name = "fet3";
regulator-boot-on;
regulator-always-on;
};

fet4 {
regulator-name = "fet4";
regulator-boot-on;
regulator-always-on;
};

fet5 {
regulator-name = "fet5";
regulator-boot-on;
regulator-always-on;
};

fet6 {
regulator-name = "fet6";
regulator-boot-on;
regulator-always-on;
};

fet7 {
regulator-name = "fet7";
regulator-boot-on;
regulator-always-on;
};

ldo1 {
regulator-name = "ldo1";
regulator-boot-on;
regulator-always-on;
};

ldo2 {
regulator-name = "ldo2";
regulator-boot-on;
regulator-always-on;
};
};
};
22 changes: 19 additions & 3 deletions trunk/drivers/mfd/tps65090.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
#include <linux/i2c.h>
#include <linux/mfd/core.h>
#include <linux/mfd/tps65090.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/err.h>

#define NUM_INT_REG 2
Expand Down Expand Up @@ -148,18 +150,31 @@ static const struct regmap_config tps65090_regmap_config = {
.volatile_reg = is_volatile_reg,
};

#ifdef CONFIG_OF
static const struct of_device_id tps65090_of_match[] = {
{ .compatible = "ti,tps65090",},
{},
};
MODULE_DEVICE_TABLE(of, tps65090_of_match);
#endif

static int tps65090_i2c_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
struct tps65090_platform_data *pdata = client->dev.platform_data;
int irq_base = 0;
struct tps65090 *tps65090;
int ret;

if (!pdata) {
dev_err(&client->dev, "tps65090 requires platform data\n");
if (!pdata && !client->dev.of_node) {
dev_err(&client->dev,
"tps65090 requires platform data or of_node\n");
return -EINVAL;
}

if (pdata)
irq_base = pdata->irq_base;

tps65090 = devm_kzalloc(&client->dev, sizeof(*tps65090), GFP_KERNEL);
if (!tps65090) {
dev_err(&client->dev, "mem alloc for tps65090 failed\n");
Expand All @@ -178,7 +193,7 @@ static int tps65090_i2c_probe(struct i2c_client *client,

if (client->irq) {
ret = regmap_add_irq_chip(tps65090->rmap, client->irq,
IRQF_ONESHOT | IRQF_TRIGGER_LOW, pdata->irq_base,
IRQF_ONESHOT | IRQF_TRIGGER_LOW, irq_base,
&tps65090_irq_chip, &tps65090->irq_data);
if (ret) {
dev_err(&client->dev,
Expand Down Expand Up @@ -247,6 +262,7 @@ static struct i2c_driver tps65090_driver = {
.driver = {
.name = "tps65090",
.owner = THIS_MODULE,
.of_match_table = of_match_ptr(tps65090_of_match),
.pm = &tps65090_pm_ops,
},
.probe = tps65090_i2c_probe,
Expand Down

0 comments on commit 155f087

Please sign in to comment.