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 | |
| 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')
| -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), |
