diff options
author | AnilKumar Ch <anilkumar@ti.com> | 2012-09-26 16:58:26 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-09-26 17:18:48 -0400 |
commit | 5dc2db05f2f690d71d95979b14cca50ab8e49f40 (patch) | |
tree | ffb1a14b446fc9f380a5ea11d3e2c5dd8d535c31 /drivers/misc | |
parent | 79df8d27d9f4382647c31ef17f7402833d682b73 (diff) |
drivers/misc/lis3lv02d/lis3lv02d_i2c.c: add lis3lv02d device tree init
Add lis3lv02d device tree initialization code/API to take pdata from
device node. Also adds device tree init matching table support to
lis3lv02d_i2c driver. If the driver data is passed from device tree, then
this driver picks up platform data from device node through common/generic
lis3lv02d.c driver.
[akpm@linux-foundation.org: fix CONFIG_OF=n build]
Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
Cc: Eric Piel <eric.piel@tremplin-utc.net>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: Tony Lindgren <tony@atomide.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/misc')
-rw-r--r-- | drivers/misc/lis3lv02d/lis3lv02d_i2c.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/misc/lis3lv02d/lis3lv02d_i2c.c b/drivers/misc/lis3lv02d/lis3lv02d_i2c.c index 2c0a1148ee22..60ec8689d6e3 100644 --- a/drivers/misc/lis3lv02d/lis3lv02d_i2c.c +++ b/drivers/misc/lis3lv02d/lis3lv02d_i2c.c | |||
@@ -31,6 +31,10 @@ | |||
31 | #include <linux/i2c.h> | 31 | #include <linux/i2c.h> |
32 | #include <linux/pm_runtime.h> | 32 | #include <linux/pm_runtime.h> |
33 | #include <linux/delay.h> | 33 | #include <linux/delay.h> |
34 | #include <linux/of.h> | ||
35 | #include <linux/of_platform.h> | ||
36 | #include <linux/of_device.h> | ||
37 | |||
34 | #include "lis3lv02d.h" | 38 | #include "lis3lv02d.h" |
35 | 39 | ||
36 | #define DRV_NAME "lis3lv02d_i2c" | 40 | #define DRV_NAME "lis3lv02d_i2c" |
@@ -102,12 +106,30 @@ static int lis3_i2c_init(struct lis3lv02d *lis3) | |||
102 | static union axis_conversion lis3lv02d_axis_map = | 106 | static union axis_conversion lis3lv02d_axis_map = |
103 | { .as_array = { LIS3_DEV_X, LIS3_DEV_Y, LIS3_DEV_Z } }; | 107 | { .as_array = { LIS3_DEV_X, LIS3_DEV_Y, LIS3_DEV_Z } }; |
104 | 108 | ||
109 | #ifdef CONFIG_OF | ||
110 | static struct of_device_id lis3lv02d_i2c_dt_ids[] = { | ||
111 | { .compatible = "st,lis3lv02d" }, | ||
112 | {} | ||
113 | }; | ||
114 | MODULE_DEVICE_TABLE(of, lis3lv02d_i2c_dt_ids); | ||
115 | #endif | ||
116 | |||
105 | static int __devinit lis3lv02d_i2c_probe(struct i2c_client *client, | 117 | static int __devinit lis3lv02d_i2c_probe(struct i2c_client *client, |
106 | const struct i2c_device_id *id) | 118 | const struct i2c_device_id *id) |
107 | { | 119 | { |
108 | int ret = 0; | 120 | int ret = 0; |
109 | struct lis3lv02d_platform_data *pdata = client->dev.platform_data; | 121 | struct lis3lv02d_platform_data *pdata = client->dev.platform_data; |
110 | 122 | ||
123 | #ifdef CONFIG_OF | ||
124 | if (of_match_device(lis3lv02d_i2c_dt_ids, &client->dev)) { | ||
125 | lis3_dev.of_node = client->dev.of_node; | ||
126 | ret = lis3lv02d_init_dt(&lis3_dev); | ||
127 | if (ret) | ||
128 | return ret; | ||
129 | pdata = lis3_dev.pdata; | ||
130 | } | ||
131 | #endif | ||
132 | |||
111 | if (pdata) { | 133 | if (pdata) { |
112 | if ((pdata->driver_features & LIS3_USE_BLOCK_READ) && | 134 | if ((pdata->driver_features & LIS3_USE_BLOCK_READ) && |
113 | (i2c_check_functionality(client->adapter, | 135 | (i2c_check_functionality(client->adapter, |
@@ -255,6 +277,7 @@ static struct i2c_driver lis3lv02d_i2c_driver = { | |||
255 | .name = DRV_NAME, | 277 | .name = DRV_NAME, |
256 | .owner = THIS_MODULE, | 278 | .owner = THIS_MODULE, |
257 | .pm = &lis3_pm_ops, | 279 | .pm = &lis3_pm_ops, |
280 | .of_match_table = of_match_ptr(lis3lv02d_i2c_dt_ids), | ||
258 | }, | 281 | }, |
259 | .probe = lis3lv02d_i2c_probe, | 282 | .probe = lis3lv02d_i2c_probe, |
260 | .remove = __devexit_p(lis3lv02d_i2c_remove), | 283 | .remove = __devexit_p(lis3lv02d_i2c_remove), |