Skip to contentSkip to conversation

lis3: lis3lv02d_i2c: Add device tree support

PATCH New AnilKumar Ch 4 participants 13 messages Sep 17, 2012 – Sep 26, 2012

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

v3 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 v2:
- Added documentation details specific to lis3lv02d_i2c driver with example node
- Modified DTS node representation in .dts file
- Removed "-i2c" string from compatible name

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

 Documentation/devicetree/bindings/misc/lis302.txt |   36 +++++++++++++++++++
 arch/arm/boot/dts/am335x-evm.dts                  |   39 +++++++++++++++++++++
 drivers/misc/lis3lv02d/lis3lv02d.c                |    8 ++---
 drivers/misc/lis3lv02d/lis3lv02d.h                |    1 +
 drivers/misc/lis3lv02d/lis3lv02d_i2c.c            |   18 ++++++++++
 drivers/misc/lis3lv02d/lis3lv02d_spi.c            |    8 +++--
 6 files changed, 101 insertions(+), 9 deletions(-)
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH v3 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 v3 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 v3 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.

---
 Documentation/devicetree/bindings/misc/lis302.txt |   36 +++++++++++++++++++++
 drivers/misc/lis3lv02d/lis3lv02d_i2c.c            |   18 +++++++++++
 2 files changed, 54 insertions(+)
Documentation/devicetree/bindings/misc/lis302.txt +36 -0
index e18af9d..6def86f 100644
@@ -11,6 +11,12 @@ Required properties for the SPI bindings:
 			constrained by external circuitry
  - interrupts:		the interrupt generated by the device
 
+Required properties for the I2C bindings:
+ - compatible:		should be set to "st,lis3lv02d"
+ - reg:			i2c slave address
+ - Vdd-supply:		The input supply for Vdd
+ - Vdd_IO-supply:	The input supply for Vdd_IO
+
 
 Optional properties for all bus drivers:
 
@@ -74,3 +80,33 @@ Example for a SPI device node:
 		st,wakeup-z-hi;
 	};
 
+Example for a I2C device node:
+
+	lis331dlh: lis331dlh at 18 {
+		compatible = "st,lis331dlh", "st,lis3lv02d";
+		reg = <0x18>;
+		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>;
+	};
+
drivers/misc/lis3lv02d/lis3lv02d_i2c.c +18 -0
index 15255eb..43e3f29 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,26 @@ 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" },
+	{}
+};
+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 +272,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 v3 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 |   39 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)
arch/arm/boot/dts/am335x-evm.dts +39 -0
index 9fb59c5..be309df 100644
@@ -47,6 +47,39 @@
 			};
 		};
 
+		i2c2: i2c at 4802a000 {
+			status = "okay";
+			clock-frequency = <400000>;
+
+			lis331dlh: lis331dlh at 18 {
+				compatible = "st,lis331dlh", "st,lis3lv02d";
+				reg = <0x18>;
+				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>;
+			};
+		};
+
 		dcan1: d_can at 481d0000 {
 			status = "okay";
 			pinctrl-names = "default";
@@ -61,6 +94,12 @@
 		regulator-max-microvolt = <5000000>;
 		regulator-boot-on;
 	};
+
+	lis3_reg: fixedregulator at 1 {
+		compatible = "regulator-fixed";
+		regulator-name = "lis3_reg";
+		regulator-boot-on;
+	};
 };
 
 /include/ "tps65910.dtsi"
Signature · 1 line
1.7.9.5
#5 lore raw

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

Quoted 8 lines · On Mon, 17 Sep 2012 12:53:22 +0530 AnilKumar Ch <[email protected]> wrote:

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 |   39 ++++++++++++++++++++++++++++++++++++++

Your arch/arm/boot/dts/am335x-evm.dts differs significantly from the one in linux-next (it should not do so), so I didn't do anything with this patch.

#6 lore raw

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

Hi Andrew,

Quoted 8 lines · Andrew Morton
Quoted 5 lines · On Mon, 17 Sep 2012 12:53:22 +0530 AnilKumar Ch <[email protected]> wrote:

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.

Quoted 8 lines
Quoted 3 lines
---
 arch/arm/boot/dts/am335x-evm.dts |   39 ++++++++++++++++++++++++++++++++++++++

Your arch/arm/boot/dts/am335x-evm.dts differs significantly from the one in linux-next (it should not do so), so I didn't do anything with this patch.

Thanks for pushing remaining patches.

ACK from the reviewers(Arnd) will help to include in linux-omap branch.

Thanks
AnilKumar

maintainer
#7 lore raw

v3 cover lis3: lis3lv02d_i2c: Add device tree support

In reply to AnilKumar Ch
Quoted 6 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.

Looks good to me.

maintainer
#8 lore raw

v3 cover lis3: lis3lv02d_i2c: Add device tree support

In reply to AnilKumar Ch
Quoted 6 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.

None of these patches apply to any tree that I know of, what did you do them against? Please redo them against the char-next branch of linux-next and resend them if you wish to see them applied.

thanks,

greg k-h

#9 lore raw

v3 cover lis3: lis3lv02d_i2c: Add device tree support

Quoted 11 lines · On Wed, 26 Sep 2012 13:24:00 -0700 Greg KH <[email protected]> wrote:
Quoted 6 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.

None of these patches apply to any tree that I know of, what did you do them against? Please redo them against the char-next branch of linux-next and resend them if you wish to see them applied.

Presumably they're against eariler patches whcih you don't have. I'm presently sitting on

drivers-misc-lis3lv02d-add-generic-dt-matching-code.patch drivers-misc-lis3lv02d-add-generic-dt-matching-code-fix.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-dt-matching-table-passthru-code.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-dt-matching-table-passthru-code-fix.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-dt-matching-table-passthru-code-fix-fix.patch drivers-misc-lis3lv02d-remove-lis3lv02d-driver-dt-init.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-lis3lv02d-device-tree-init.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-lis3lv02d-device-tree-init-fix.patch drivers-misc-lis3lv02d-lis3lv02d_i2cc-add-lis3lv02d-device-tree-init.patch drivers-misc-lis3lv02d-lis3lv02d_i2cc-add-lis3lv02d-device-tree-init-fix.patch drivers-misc-lis3lv02d-fix-some-comments-specific-to-lis331dlh-driver.patch

maintainer
#10 lore raw

v3 cover lis3: lis3lv02d_i2c: Add device tree support

Quoted 18 lines · Andrew Morton
Quoted 11 lines · On Wed, 26 Sep 2012 13:24:00 -0700 Greg KH <[email protected]> wrote:
Quoted 6 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.

None of these patches apply to any tree that I know of, what did you do them against? Please redo them against the char-next branch of linux-next and resend them if you wish to see them applied.

Presumably they're against eariler patches whcih you don't have. I'm presently sitting on

Quoted 11 lines

drivers-misc-lis3lv02d-add-generic-dt-matching-code.patch drivers-misc-lis3lv02d-add-generic-dt-matching-code-fix.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-dt-matching-table-passthru-code.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-dt-matching-table-passthru-code-fix.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-dt-matching-table-passthru-code-fix-fix.patch drivers-misc-lis3lv02d-remove-lis3lv02d-driver-dt-init.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-lis3lv02d-device-tree-init.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-lis3lv02d-device-tree-init-fix.patch drivers-misc-lis3lv02d-lis3lv02d_i2cc-add-lis3lv02d-device-tree-init.patch drivers-misc-lis3lv02d-lis3lv02d_i2cc-add-lis3lv02d-device-tree-init-fix.patch drivers-misc-lis3lv02d-fix-some-comments-specific-to-lis331dlh-driver.patch

Care to send them to me so that I can get them to Linus for the 3.7 merge window? I do keep the char-misc tree for these types of things :)

thanks,

greg k-h

#11 lore raw

v3 cover lis3: lis3lv02d_i2c: Add device tree support

Quoted 31 lines · On Wed, 26 Sep 2012 13:44:03 -0700 Greg KH <[email protected]> wrote:
Quoted 18 lines · Andrew Morton
Quoted 11 lines · On Wed, 26 Sep 2012 13:24:00 -0700 Greg KH <[email protected]> wrote:
Quoted 6 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.

None of these patches apply to any tree that I know of, what did you do them against? Please redo them against the char-next branch of linux-next and resend them if you wish to see them applied.

Presumably they're against eariler patches whcih you don't have. I'm presently sitting on

Quoted 11 lines

drivers-misc-lis3lv02d-add-generic-dt-matching-code.patch drivers-misc-lis3lv02d-add-generic-dt-matching-code-fix.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-dt-matching-table-passthru-code.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-dt-matching-table-passthru-code-fix.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-dt-matching-table-passthru-code-fix-fix.patch drivers-misc-lis3lv02d-remove-lis3lv02d-driver-dt-init.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-lis3lv02d-device-tree-init.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-lis3lv02d-device-tree-init-fix.patch drivers-misc-lis3lv02d-lis3lv02d_i2cc-add-lis3lv02d-device-tree-init.patch drivers-misc-lis3lv02d-lis3lv02d_i2cc-add-lis3lv02d-device-tree-init-fix.patch drivers-misc-lis3lv02d-fix-some-comments-specific-to-lis331dlh-driver.patch

Quoted 2 lines

Care to send them to me so that I can get them to Linus for the 3.7 merge window?

OK.

Quoted 1 line

I do keep the char-misc tree for these types of things :)

I've actually been doing this miscdev driver since day one. I'm happy to hand over the keys but please review the patches carefully and try not to miss stuff!

maintainer
#12 lore raw

v3 cover lis3: lis3lv02d_i2c: Add device tree support

Quoted 37 lines · Andrew Morton
Quoted 31 lines · On Wed, 26 Sep 2012 13:44:03 -0700 Greg KH <[email protected]> wrote:
Quoted 18 lines · Andrew Morton
Quoted 11 lines · On Wed, 26 Sep 2012 13:24:00 -0700 Greg KH <[email protected]> wrote:
Quoted 6 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.

None of these patches apply to any tree that I know of, what did you do them against? Please redo them against the char-next branch of linux-next and resend them if you wish to see them applied.

Presumably they're against eariler patches whcih you don't have. I'm presently sitting on

Quoted 11 lines

drivers-misc-lis3lv02d-add-generic-dt-matching-code.patch drivers-misc-lis3lv02d-add-generic-dt-matching-code-fix.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-dt-matching-table-passthru-code.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-dt-matching-table-passthru-code-fix.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-dt-matching-table-passthru-code-fix-fix.patch drivers-misc-lis3lv02d-remove-lis3lv02d-driver-dt-init.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-lis3lv02d-device-tree-init.patch drivers-misc-lis3lv02d-lis3lv02d_spic-add-lis3lv02d-device-tree-init-fix.patch drivers-misc-lis3lv02d-lis3lv02d_i2cc-add-lis3lv02d-device-tree-init.patch drivers-misc-lis3lv02d-lis3lv02d_i2cc-add-lis3lv02d-device-tree-init-fix.patch drivers-misc-lis3lv02d-fix-some-comments-specific-to-lis331dlh-driver.patch

Quoted 2 lines

Care to send them to me so that I can get them to Linus for the 3.7 merge window?

Quoted 7 lines

OK.

Quoted 1 line

I do keep the char-misc tree for these types of things :)

I've actually been doing this miscdev driver since day one. I'm happy to hand over the keys but please review the patches carefully and try not to miss stuff!

Will do, thanks.

greg k-h