aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuennadi Liakhovetski <g.liakhovetski@gmx.de>2013-03-22 12:15:47 -0400
committerSamuel Ortiz <sameo@linux.intel.com>2013-04-05 05:20:14 -0400
commit64710af3e2c6a223c443ff85e5db4bc4bd9174e5 (patch)
treef2ebcb85023df0d691a007a30348f495d5e4aa98
parent5a324acfce6f7f05ab2a044f7d0ece5f44e812c6 (diff)
mfd: as3711: Add OF support
Add Flat Device Tree support to the AS3711 MFD driver. This patch just allows to bind the driver to I2C devices, instantiated from the DT. DT support for AS3711 cell drivers will be added in separate drivers. Signed-off-by: Guennadi Liakhovetski <g.liakhovetski+renesas@gmail.com> Reviwed-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
-rw-r--r--Documentation/devicetree/bindings/mfd/as3711.txt73
-rw-r--r--drivers/mfd/as3711.c27
2 files changed, 96 insertions, 4 deletions
diff --git a/Documentation/devicetree/bindings/mfd/as3711.txt b/Documentation/devicetree/bindings/mfd/as3711.txt
new file mode 100644
index 000000000000..d98cf18c721c
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/as3711.txt
@@ -0,0 +1,73 @@
1AS3711 is an I2C PMIC from Austria MicroSystems with multiple DCDC and LDO power
2supplies, a battery charger and an RTC. So far only bindings for the two stepup
3DCDC converters are defined. Other DCDC and LDO supplies are configured, using
4standard regulator properties, they must belong to a sub-node, called
5"regulators" and be called "sd1" to "sd4" and "ldo1" to "ldo8." Stepup converter
6configuration should be placed in a subnode, called "backlight."
7
8Compulsory properties:
9- compatible : must be "ams,as3711"
10- reg : specifies the I2C address
11
12To use the SU1 converter as a backlight source the following two properties must
13be provided:
14- su1-dev : framebuffer phandle
15- su1-max-uA : maximum current
16
17To use the SU2 converter as a backlight source the following two properties must
18be provided:
19- su2-dev : framebuffer phandle
20- su1-max-uA : maximum current
21
22Additionally one of these properties must be provided to select the type of
23feedback used:
24- su2-feedback-voltage : voltage feedback is used
25- su2-feedback-curr1 : CURR1 input used for current feedback
26- su2-feedback-curr2 : CURR2 input used for current feedback
27- su2-feedback-curr3 : CURR3 input used for current feedback
28- su2-feedback-curr-auto: automatic current feedback selection
29
30and one of these to select the over-voltage protection pin
31- su2-fbprot-lx-sd4 : LX_SD4 is used for over-voltage protection
32- su2-fbprot-gpio2 : GPIO2 is used for over-voltage protection
33- su2-fbprot-gpio3 : GPIO3 is used for over-voltage protection
34- su2-fbprot-gpio4 : GPIO4 is used for over-voltage protection
35
36If "su2-feedback-curr-auto" is selected, one or more of the following properties
37have to be specified:
38- su2-auto-curr1 : use CURR1 input for current feedback
39- su2-auto-curr2 : use CURR2 input for current feedback
40- su2-auto-curr3 : use CURR3 input for current feedback
41
42Example:
43
44as3711@40 {
45 compatible = "ams,as3711";
46 reg = <0x40>;
47
48 regulators {
49 sd4 {
50 regulator-name = "1.215V";
51 regulator-min-microvolt = <1215000>;
52 regulator-max-microvolt = <1235000>;
53 };
54 ldo2 {
55 regulator-name = "2.8V CPU";
56 regulator-min-microvolt = <2800000>;
57 regulator-max-microvolt = <2800000>;
58 regulator-always-on;
59 regulator-boot-on;
60 };
61 };
62
63 backlight {
64 compatible = "ams,as3711-bl";
65 su2-dev = <&lcdc>;
66 su2-max-uA = <36000>;
67 su2-feedback-curr-auto;
68 su2-fbprot-gpio4;
69 su2-auto-curr1;
70 su2-auto-curr2;
71 su2-auto-curr3;
72 };
73};
diff --git a/drivers/mfd/as3711.c b/drivers/mfd/as3711.c
index e994c9691124..01e414162702 100644
--- a/drivers/mfd/as3711.c
+++ b/drivers/mfd/as3711.c
@@ -112,16 +112,34 @@ static const struct regmap_config as3711_regmap_config = {
112 .cache_type = REGCACHE_RBTREE, 112 .cache_type = REGCACHE_RBTREE,
113}; 113};
114 114
115#ifdef CONFIG_OF
116static struct of_device_id as3711_of_match[] = {
117 {.compatible = "ams,as3711",},
118 {}
119};
120MODULE_DEVICE_TABLE(of, as3711_of_match);
121#endif
122
115static int as3711_i2c_probe(struct i2c_client *client, 123static int as3711_i2c_probe(struct i2c_client *client,
116 const struct i2c_device_id *id) 124 const struct i2c_device_id *id)
117{ 125{
118 struct as3711 *as3711; 126 struct as3711 *as3711;
119 struct as3711_platform_data *pdata = client->dev.platform_data; 127 struct as3711_platform_data *pdata;
120 unsigned int id1, id2; 128 unsigned int id1, id2;
121 int ret; 129 int ret;
122 130
123 if (!pdata) 131 if (!client->dev.of_node) {
124 dev_dbg(&client->dev, "Platform data not found\n"); 132 pdata = client->dev.platform_data;
133 if (!pdata)
134 dev_dbg(&client->dev, "Platform data not found\n");
135 } else {
136 pdata = devm_kzalloc(&client->dev,
137 sizeof(*pdata), GFP_KERNEL);
138 if (!pdata) {
139 dev_err(&client->dev, "Failed to allocate pdata\n");
140 return -ENOMEM;
141 }
142 }
125 143
126 as3711 = devm_kzalloc(&client->dev, sizeof(struct as3711), GFP_KERNEL); 144 as3711 = devm_kzalloc(&client->dev, sizeof(struct as3711), GFP_KERNEL);
127 if (!as3711) { 145 if (!as3711) {
@@ -193,7 +211,8 @@ static struct i2c_driver as3711_i2c_driver = {
193 .driver = { 211 .driver = {
194 .name = "as3711", 212 .name = "as3711",
195 .owner = THIS_MODULE, 213 .owner = THIS_MODULE,
196 }, 214 .of_match_table = of_match_ptr(as3711_of_match),
215 },
197 .probe = as3711_i2c_probe, 216 .probe = as3711_i2c_probe,
198 .remove = as3711_i2c_remove, 217 .remove = as3711_i2c_remove,
199 .id_table = as3711_i2c_id, 218 .id_table = as3711_i2c_id,