aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
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 /drivers
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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mfd/as3711.c27
1 files changed, 23 insertions, 4 deletions
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,