Skip to contentSkip to conversation

lis3: lis3lv02d_i2c: Add device tree support

PATCH Superseded AnilKumar Ch 3 participants 8 messages Sep 14, 2012

Subsystems (3)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

v2 cover lis3: lis3lv02d_i2c: Add device tree support

Adds device tree support to lis3lv02d_i2c driver. Along with this DT init is moved from core driver to individual drivers, with the current implementation some pdata is missing in lis3lv02d_i2c driver.

Also adds platform data for lis331dlh driver to am335x-EVM. These patches were tested on AM335x-EVM.

Changes from v1:
- Moved lis3lv02d_init_dt to individual drivers with some code clean-up.
- Added lis331dlh compatible entry for lis331dlh parts

AnilKumar Ch (4):
lis3: lis3lv02d: remove lis3lv02d driver DT init
lis3: lis3lv02d_spi: Add lis3lv02d device tree init
lis3: lis3lv02d_i2c: Add lis3lv02d device tree init
ARM: dts: AM33XX: Add lis331dlh device tree data to am335x-evm

 arch/arm/boot/dts/am335x-evm.dts       |   42 ++++++++++++++++++++++++++++++++
 drivers/misc/lis3lv02d/lis3lv02d.c     |    8 ++----
 drivers/misc/lis3lv02d/lis3lv02d.h     |    1 +
 drivers/misc/lis3lv02d/lis3lv02d_i2c.c |   19 +++++++++++++++
 drivers/misc/lis3lv02d/lis3lv02d_spi.c |    8 +++---
 5 files changed, 69 insertions(+), 9 deletions(-)
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH v2 1/4 lis3: lis3lv02d: remove lis3lv02d driver DT init

Remove lis3lv02d driver device tree initialization from core driver and move it to individual drivers. With the current implementation some pdata parameters are missing if we use lis3lv02d_init_device() in lis3lv02d_i2c driver.

---
 drivers/misc/lis3lv02d/lis3lv02d.c |    8 ++------
 drivers/misc/lis3lv02d/lis3lv02d.h |    1 +
 2 files changed, 3 insertions(+), 6 deletions(-)
drivers/misc/lis3lv02d/lis3lv02d.c +2 -6
index 79349ec..026021e 100644
@@ -944,7 +944,7 @@ static void lis3lv02d_8b_configure(struct lis3lv02d *lis3,
 }
 
 #ifdef CONFIG_OF
-static int lis3lv02d_init_dt(struct lis3lv02d *lis3)
+int lis3lv02d_init_dt(struct lis3lv02d *lis3)
 {
 	struct lis3lv02d_platform_data *pdata;
 	struct device_node *np = lis3->of_node;
@@ -1084,7 +1084,7 @@ static int lis3lv02d_init_dt(struct lis3lv02d *lis3)
 }
 
 #else
-static int lis3lv02d_init_dt(struct lis3lv02d *lis3)
+int lis3lv02d_init_dt(struct lis3lv02d *lis3)
 {
 	return 0;
 }
@@ -1100,10 +1100,6 @@ int lis3lv02d_init_device(struct lis3lv02d *lis3)
 	irq_handler_t thread_fn;
 	int irq_flags = 0;
 
-	err = lis3lv02d_init_dt(lis3);
-	if (err < 0)
-		return err;
-
 	lis3->whoami = lis3lv02d_read_8(lis3, WHO_AM_I);
 
 	switch (lis3->whoami) {
drivers/misc/lis3lv02d/lis3lv02d.h +1 -0
index 4cf0779..b5505fa 100644
@@ -326,5 +326,6 @@ void lis3lv02d_joystick_disable(struct lis3lv02d *lis3);
 void lis3lv02d_poweroff(struct lis3lv02d *lis3);
 int lis3lv02d_poweron(struct lis3lv02d *lis3);
 int lis3lv02d_remove_fs(struct lis3lv02d *lis3);
+int lis3lv02d_init_dt(struct lis3lv02d *lis3);
 
 extern struct lis3lv02d lis3_dev;
Signature · 1 line
1.7.9.5
#2 lore raw

PATCH v2 2/4 lis3: lis3lv02d_spi: Add lis3lv02d device tree init

In reply to AnilKumar Ch

Add lis3lv02d device tree initialization code/API to take pdata from device node. Also remove CONFIG_OF ifdef from the driver, if CONFIG_OF is not defined then OF APIs returns 0.

---
 drivers/misc/lis3lv02d/lis3lv02d_spi.c |    8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
drivers/misc/lis3lv02d/lis3lv02d_spi.c +5 -3
index 23f3986..e1db6f4 100644
@@ -84,10 +84,12 @@ static int __devinit lis302dl_spi_probe(struct spi_device *spi)
 	lis3_dev.ac		= lis3lv02d_axis_normal;
 	lis3_dev.pdata		= spi->dev.platform_data;
 
-#ifdef CONFIG_OF
-	if (of_match_device(lis302dl_spi_dt_ids, &spi->dev))
+	if (of_match_device(lis302dl_spi_dt_ids, &spi->dev)) {
 		lis3_dev.of_node = spi->dev.of_node;
-#endif
+		ret = lis3lv02d_init_dt(&lis3_dev);
+		if (ret)
+			return ret;
+	}
 
 	spi_set_drvdata(spi, &lis3_dev);
 
Signature · 1 line
1.7.9.5
#3 lore raw

PATCH v2 3/4 lis3: lis3lv02d_i2c: Add lis3lv02d device tree init

In reply to AnilKumar Ch

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.

---
 drivers/misc/lis3lv02d/lis3lv02d_i2c.c |   19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
drivers/misc/lis3lv02d/lis3lv02d_i2c.c +19 -0
index 15255eb..56b5124 100644
@@ -31,6 +31,9 @@
 #include <linux/i2c.h>
 #include <linux/pm_runtime.h>
 #include <linux/delay.h>
+#include <linux/of.h>
+#include <linux/of_platform.h>
+
 #include "lis3lv02d.h"
 
 #define DRV_NAME	"lis3lv02d_i2c"
@@ -102,12 +105,27 @@ static int lis3_i2c_init(struct lis3lv02d *lis3)
 static union axis_conversion lis3lv02d_axis_map =
 	{ .as_array = { LIS3_DEV_X, LIS3_DEV_Y, LIS3_DEV_Z } };
 
+static struct of_device_id lis3lv02d_i2c_dt_ids[] = {
+	{ .compatible = "st,lis3lv02d-i2c" },
+	{ .compatible = "st,lis331dlh-i2c" },
+	{}
+};
+MODULE_DEVICE_TABLE(of, lis3lv02d_i2c_dt_ids);
+
 static int __devinit lis3lv02d_i2c_probe(struct i2c_client *client,
 					const struct i2c_device_id *id)
 {
 	int ret = 0;
 	struct lis3lv02d_platform_data *pdata = client->dev.platform_data;
 
+	if (of_match_device(lis3lv02d_i2c_dt_ids, &client->dev)) {
+		lis3_dev.of_node = client->dev.of_node;
+		ret = lis3lv02d_init_dt(&lis3_dev);
+		if (ret)
+			return ret;
+		pdata = lis3_dev.pdata;
+	}
+
 	if (pdata) {
 		if ((pdata->driver_features & LIS3_USE_BLOCK_READ) &&
 			(i2c_check_functionality(client->adapter,
@@ -255,6 +273,7 @@ static struct i2c_driver lis3lv02d_i2c_driver = {
 		.name   = DRV_NAME,
 		.owner  = THIS_MODULE,
 		.pm     = &lis3_pm_ops,
+		.of_match_table = of_match_ptr(lis3lv02d_i2c_dt_ids),
 	},
 	.probe	= lis3lv02d_i2c_probe,
 	.remove	= __devexit_p(lis3lv02d_i2c_remove),
Signature · 1 line
1.7.9.5
#4 lore raw

PATCH v2 4/4 ARM: dts: AM33XX: Add lis331dlh device tree data to am335x-evm

In reply to AnilKumar Ch

Add lis331dlh device tree data to am335x-evm.dts. In AM335x EVM lis331dlh accelerometer is connected to I2C2 bus. So this patch change the status of I2C2 node to "okay" to use I2C2 bus. Also added all the required platform data to am335x-evm.

---
 arch/arm/boot/dts/am335x-evm.dts |   42 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)
arch/arm/boot/dts/am335x-evm.dts +42 -0
index 9fb59c5..890f955 100644
@@ -47,6 +47,15 @@
 			};
 		};
 
+		i2c2: i2c at 4802a000 {
+			status = "okay";
+			clock-frequency = <400000>;
+
+			lis331dlh: lis331dlh at 18 {
+				reg = <0x18>;
+			};
+		};
+
 		dcan1: d_can at 481d0000 {
 			status = "okay";
 			pinctrl-names = "default";
@@ -61,6 +70,39 @@
 		regulator-max-microvolt = <5000000>;
 		regulator-boot-on;
 	};
+
+	lis3_reg: fixedregulator at 1 {
+		compatible = "regulator-fixed";
+		regulator-name = "lis3_reg";
+		regulator-boot-on;
+	};
+};
+
+&lis331dlh {
+	compatible = "st,lis331dlh-i2c";
+	Vdd-supply = <&lis3_reg>;
+	Vdd_IO-supply = <&lis3_reg>;
+
+	st,click-single-x;
+	st,click-single-y;
+	st,click-single-z;
+	st,click-thresh-x = <10>;
+	st,click-thresh-y = <10>;
+	st,click-thresh-z = <10>;
+	st,irq1-click;
+	st,irq2-click;
+	st,wakeup-x-lo;
+	st,wakeup-x-hi;
+	st,wakeup-y-lo;
+	st,wakeup-y-hi;
+	st,wakeup-z-lo;
+	st,wakeup-z-hi;
+	st,min-limit-x = <120>;
+	st,min-limit-y = <120>;
+	st,min-limit-z = <140>;
+	st,max-limit-x = <550>;
+	st,max-limit-y = <550>;
+	st,max-limit-z = <750>;
 };
 
 /include/ "tps65910.dtsi"
Signature · 1 line
1.7.9.5
maintainer
#5 lore raw

v2 cover lis3: lis3lv02d_i2c: Add device tree support

In reply to AnilKumar Ch
Quoted 7 lines · AnilKumar Ch

Adds device tree support to lis3lv02d_i2c driver. Along with this DT init is moved from core driver to individual drivers, with the current implementation some pdata is missing in lis3lv02d_i2c driver.

Also adds platform data for lis331dlh driver to am335x-EVM. These patches were tested on AM335x-EVM.

No further comments on this version besides the ones I already gave on v1.

Arnd

#6 lore raw

v2 cover lis3: lis3lv02d_i2c: Add device tree support

Quoted 11 lines · On Fri, 14 Sep 2012 15:31:36 +0000 Arnd Bergmann <[email protected]> wrote:
Quoted 7 lines · AnilKumar Ch

Adds device tree support to lis3lv02d_i2c driver. Along with this DT init is moved from core driver to individual drivers, with the current implementation some pdata is missing in lis3lv02d_i2c driver.

Also adds platform data for lis331dlh driver to am335x-EVM. These patches were tested on AM335x-EVM.

No further comments on this version besides the ones I already gave on v1.

My linux-arm-kernel subscription died so I don't know what your v1 comments said. Were they fatal?

maintainer
#7 lore raw

v2 cover lis3: lis3lv02d_i2c: Add device tree support

Quoted 12 lines · Andrew Morton
Quoted 9 lines · On Fri, 14 Sep 2012 15:31:36 +0000 Arnd Bergmann <[email protected]> wrote:
Quoted 7 lines · AnilKumar Ch

Adds device tree support to lis3lv02d_i2c driver. Along with this DT init is moved from core driver to individual drivers, with the current implementation some pdata is missing in lis3lv02d_i2c driver.

Also adds platform data for lis331dlh driver to am335x-EVM. These patches were tested on AM335x-EVM.

Quoted 6 lines
Quoted 2 lines

No further comments on this version besides the ones I already gave on v1.

My linux-arm-kernel subscription died so I don't know what your v1 comments said. Were they fatal?

Just details. AnilKumar just said in that thread that he'd do a version 3 based on the earlier discussion once I was done looking at v2, so I replied here to say that there is nothing new to add.

Arnd