linux-i2c.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/4] I2C Ocores updates
@ 2012-07-13 13:44 Jayachandran C
       [not found] ` <1342187065-1651-1-git-send-email-jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
  0 siblings, 1 reply; 10+ messages in thread
From: Jayachandran C @ 2012-07-13 13:44 UTC (permalink / raw)
  To: linux-i2c-u79uwXL29TY76Z2rM5mHXA, w.sang-bIcnvbaLZ9MEGnE8C9+IrQ,
	jacmet-OfajU3CKLf1/SzgSGea1oA,
	richard.rojfors-gfIc91nka+FZroRs9YW3xA
  Cc: devicetree-discuss-mnsaURCQ41sdnm+yROfE0A, Jayachandran C

Updated patchset to use u32 for reg_shift and reg_io_width, both
for ocores_i2c_platform_data and for ocores_i2c.

V2 notes
========
Updated patchset, changes in v2 are:
 * pass u32 value to of_property_read_u32() in ocores_i2c_of_probe()
 * undo whitespace change in include/linux/i2c-ocores.h
 * use int for reg_shift and reg_io_width in ocores_i2c_platform_data
   (include/linux/i2c-ocores.h) as well.

V1 notes
========
While trying to add reg-io-width property to i2c-ocores, we noticed
a few things that needs to fixed up in i2c-ocores device tree code.

The changes are to: 
 * use the standard 'reg-shift' property instead of 'regstep'
 * fix the fallout of the about change in drivers/mfd/timberdale.c
 * move bindings documentation to under Documentation/, 
 * fix up formatting, and add \n to a few dev_* messages,
 * and finally to add reg-io-width optional property.

Ganesan Ramalingam (2):
  i2c: i2c-ocores: Use reg-shift property
  i2c: i2c-ocores: support for 16bit and 32bit IO

Jayachandran C (2):
  i2c: i2c-ocores - DT bindings and minor fixes.
  V4L/DVB: mfd: use reg_shift instead of regstep

 .../devicetree/bindings/i2c/i2c-ocores.txt         |   33 +++++++
 drivers/i2c/busses/i2c-ocores.c                    |   96 +++++++++-----------
 drivers/mfd/timberdale.c                           |    2 +-
 include/linux/i2c-ocores.h                         |    3 +-
 4 files changed, 81 insertions(+), 53 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/i2c/i2c-ocores.txt

-- 
1.7.9.5

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v3 1/4] i2c: i2c-ocores - DT bindings and minor fixes.
       [not found] ` <1342187065-1651-1-git-send-email-jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
@ 2012-07-13 13:44   ` Jayachandran C
       [not found]     ` <1342187065-1651-2-git-send-email-jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
  2012-07-13 13:44   ` [PATCH v3 2/4] i2c: i2c-ocores: Use reg-shift property Jayachandran C
                     ` (3 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Jayachandran C @ 2012-07-13 13:44 UTC (permalink / raw)
  To: linux-i2c-u79uwXL29TY76Z2rM5mHXA, w.sang-bIcnvbaLZ9MEGnE8C9+IrQ,
	jacmet-OfajU3CKLf1/SzgSGea1oA,
	richard.rojfors-gfIc91nka+FZroRs9YW3xA
  Cc: devicetree-discuss-mnsaURCQ41sdnm+yROfE0A, Jayachandran C

Cleanups to i2c-cores, no change in logic, changes are:
* Move i2c-ocores device tree documentation from source file to
  Documentation/devicetree/bindings/i2c/i2c-ocores.txt.
* Add \n to dev_warn and dev_err messages where missing
* Minor updates to the text and formatting fixes.

Signed-off-by: Jayachandran C <jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
---
 .../devicetree/bindings/i2c/i2c-ocores.txt         |   27 ++++++++++++
 drivers/i2c/busses/i2c-ocores.c                    |   45 +++-----------------
 2 files changed, 34 insertions(+), 38 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/i2c/i2c-ocores.txt

diff --git a/Documentation/devicetree/bindings/i2c/i2c-ocores.txt b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
new file mode 100644
index 0000000..bfec894
--- /dev/null
+++ b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
@@ -0,0 +1,27 @@
+Device tree configuration for i2c-ocores
+
+Required properties:
+- compatible      : "opencores,i2c-ocores"
+- reg             : bus address start and address range size of device
+- interrupts      : interrupt number
+- regstep         : size of device registers in bytes
+- clock-frequency : frequency of bus clock in Hz
+- #address-cells  : should be <1>
+- #size-cells     : should be <0>
+
+Example:
+
+	i2c0: ocores@a0000000 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "opencores,i2c-ocores";
+		reg = <0xa0000000 0x8>;
+		interrupts = <10>;
+		regstep = <1>;
+		clock-frequency = <20000000>;
+
+		dummy@60 {
+			compatible = "dummy";
+			reg = <0x60>;
+		};
+	};
diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c
index 75194c5..e8159db 100644
--- a/drivers/i2c/busses/i2c-ocores.c
+++ b/drivers/i2c/busses/i2c-ocores.c
@@ -10,40 +10,9 @@
  */
 
 /*
- * Device tree configuration:
- *
- * Required properties:
- * - compatible      : "opencores,i2c-ocores"
- * - reg             : bus address start and address range size of device
- * - interrupts      : interrupt number
- * - regstep         : size of device registers in bytes
- * - clock-frequency : frequency of bus clock in Hz
- * 
- * Example:
- *
- *  i2c0: ocores@a0000000 {
- *              compatible = "opencores,i2c-ocores";
- *              reg = <0xa0000000 0x8>;
- *              interrupts = <10>;
- *
- *              regstep = <1>;
- *              clock-frequency = <20000000>;
- *
- * -- Devices connected on this I2C bus get
- * -- defined here; address- and size-cells
- * -- apply to these child devices
- *
- *              #address-cells = <1>;
- *              #size-cells = <0>;
- *
- *              dummy@60 {
- *                     compatible = "dummy";
- *                     reg = <60>;
- *              };
- *  };
- *
+ * This driver can be used from the device tree, see
+ *     Documentation/devicetree/bindings/i2c/ocore-i2c.txt
  */
-
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/init.h>
@@ -247,14 +216,14 @@ static struct i2c_adapter ocores_adapter = {
 };
 
 #ifdef CONFIG_OF
-static int ocores_i2c_of_probe(struct platform_device* pdev,
-				struct ocores_i2c* i2c)
+static int ocores_i2c_of_probe(struct platform_device *pdev,
+				struct ocores_i2c *i2c)
 {
 	const __be32* val;
 
 	val = of_get_property(pdev->dev.of_node, "regstep", NULL);
 	if (!val) {
-		dev_err(&pdev->dev, "Missing required parameter 'regstep'");
+		dev_err(&pdev->dev, "Missing required parameter 'regstep'\n");
 		return -ENODEV;
 	}
 	i2c->regstep = be32_to_cpup(val);
@@ -262,7 +231,7 @@ static int ocores_i2c_of_probe(struct platform_device* pdev,
 	val = of_get_property(pdev->dev.of_node, "clock-frequency", NULL);
 	if (!val) {
 		dev_err(&pdev->dev,
-			"Missing required parameter 'clock-frequency'");
+			"Missing required parameter 'clock-frequency'\n");
 		return -ENODEV;
 	}
 	i2c->clock_khz = be32_to_cpup(val) / 1000;
@@ -351,7 +320,7 @@ static int __devinit ocores_i2c_probe(struct platform_device *pdev)
 	return 0;
 }
 
-static int __devexit ocores_i2c_remove(struct platform_device* pdev)
+static int __devexit ocores_i2c_remove(struct platform_device *pdev)
 {
 	struct ocores_i2c *i2c = platform_get_drvdata(pdev);
 
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 2/4] i2c: i2c-ocores: Use reg-shift property
       [not found] ` <1342187065-1651-1-git-send-email-jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
  2012-07-13 13:44   ` [PATCH v3 1/4] i2c: i2c-ocores - DT bindings and minor fixes Jayachandran C
@ 2012-07-13 13:44   ` Jayachandran C
       [not found]     ` <1342187065-1651-3-git-send-email-jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
  2012-07-13 13:44   ` [PATCH v3 3/4] V4L/DVB: mfd: use reg_shift instead of regstep Jayachandran C
                     ` (2 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Jayachandran C @ 2012-07-13 13:44 UTC (permalink / raw)
  To: linux-i2c-u79uwXL29TY76Z2rM5mHXA, w.sang-bIcnvbaLZ9MEGnE8C9+IrQ,
	jacmet-OfajU3CKLf1/SzgSGea1oA,
	richard.rojfors-gfIc91nka+FZroRs9YW3xA
  Cc: devicetree-discuss-mnsaURCQ41sdnm+yROfE0A, Ganesan Ramalingam,
	Jayachandran C

From: Ganesan Ramalingam <ganesanr-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>

Deprecate 'regstep' property and use the standard 'reg-shift' property
for register offset shifts. 'regstep' will still be supported as an
optional property, but will give a warning when used.

Signed-off-by: Ganesan Ramalingam <ganesanr-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
Signed-off-by: Jayachandran C <jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
---
 .../devicetree/bindings/i2c/i2c-ocores.txt         |    8 +++--
 drivers/i2c/busses/i2c-ocores.c                    |   36 ++++++++++++--------
 include/linux/i2c-ocores.h                         |    2 +-
 3 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/Documentation/devicetree/bindings/i2c/i2c-ocores.txt b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
index bfec894..1c9334b 100644
--- a/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
+++ b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
@@ -4,11 +4,14 @@ Required properties:
 - compatible      : "opencores,i2c-ocores"
 - reg             : bus address start and address range size of device
 - interrupts      : interrupt number
-- regstep         : size of device registers in bytes
 - clock-frequency : frequency of bus clock in Hz
 - #address-cells  : should be <1>
 - #size-cells     : should be <0>
 
+Optional properties:
+- reg-shift       : device register offsets are shifted by this value
+- regstep         : deprecated, use reg-shift above
+
 Example:
 
 	i2c0: ocores@a0000000 {
@@ -17,9 +20,10 @@ Example:
 		compatible = "opencores,i2c-ocores";
 		reg = <0xa0000000 0x8>;
 		interrupts = <10>;
-		regstep = <1>;
 		clock-frequency = <20000000>;
 
+		reg-shift = <0>;	/* 8 bit registers */
+
 		dummy@60 {
 			compatible = "dummy";
 			reg = <0x60>;
diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c
index e8159db..721ead9 100644
--- a/drivers/i2c/busses/i2c-ocores.c
+++ b/drivers/i2c/busses/i2c-ocores.c
@@ -25,10 +25,11 @@
 #include <linux/slab.h>
 #include <linux/io.h>
 #include <linux/of_i2c.h>
+#include <linux/log2.h>
 
 struct ocores_i2c {
 	void __iomem *base;
-	int regstep;
+	u32 reg_shift;
 	wait_queue_head_t wait;
 	struct i2c_adapter adap;
 	struct i2c_msg *msg;
@@ -71,12 +72,12 @@ struct ocores_i2c {
 
 static inline void oc_setreg(struct ocores_i2c *i2c, int reg, u8 value)
 {
-	iowrite8(value, i2c->base + reg * i2c->regstep);
+	iowrite8(value, i2c->base + (reg << i2c->reg_shift));
 }
 
 static inline u8 oc_getreg(struct ocores_i2c *i2c, int reg)
 {
-	return ioread8(i2c->base + reg * i2c->regstep);
+	return ioread8(i2c->base + (reg << i2c->reg_shift));
 }
 
 static void ocores_process(struct ocores_i2c *i2c)
@@ -219,22 +220,29 @@ static struct i2c_adapter ocores_adapter = {
 static int ocores_i2c_of_probe(struct platform_device *pdev,
 				struct ocores_i2c *i2c)
 {
-	const __be32* val;
-
-	val = of_get_property(pdev->dev.of_node, "regstep", NULL);
-	if (!val) {
-		dev_err(&pdev->dev, "Missing required parameter 'regstep'\n");
-		return -ENODEV;
+	struct device_node *np = pdev->dev.of_node;
+	u32 val;
+
+	if (of_property_read_u32(np, "reg-shift", &i2c->reg_shift)) {
+		/* no 'reg-shift', check for deprecated 'regstep' */
+		if (!of_property_read_u32(np, "regstep", &val)) {
+			if (!is_power_of_2(val)) {
+				dev_err(&pdev->dev, "invalid regstep %d\n",
+					val);
+				return -EINVAL;
+			}
+			i2c->reg_shift = ilog2(val);
+			dev_warn(&pdev->dev,
+				"regstep property deprecated, use reg-shift\n");
+		}
 	}
-	i2c->regstep = be32_to_cpup(val);
 
-	val = of_get_property(pdev->dev.of_node, "clock-frequency", NULL);
-	if (!val) {
+	if (of_property_read_u32(np, "clock-frequency", &val)) {
 		dev_err(&pdev->dev,
 			"Missing required parameter 'clock-frequency'\n");
 		return -ENODEV;
 	}
-	i2c->clock_khz = be32_to_cpup(val) / 1000;
+	i2c->clock_khz = val / 1000;
 
 	return 0;
 }
@@ -277,7 +285,7 @@ static int __devinit ocores_i2c_probe(struct platform_device *pdev)
 
 	pdata = pdev->dev.platform_data;
 	if (pdata) {
-		i2c->regstep = pdata->regstep;
+		i2c->reg_shift = pdata->reg_shift;
 		i2c->clock_khz = pdata->clock_khz;
 	} else {
 		ret = ocores_i2c_of_probe(pdev, i2c);
diff --git a/include/linux/i2c-ocores.h b/include/linux/i2c-ocores.h
index 4d5e57f..5d95df2 100644
--- a/include/linux/i2c-ocores.h
+++ b/include/linux/i2c-ocores.h
@@ -12,7 +12,7 @@
 #define _LINUX_I2C_OCORES_H
 
 struct ocores_i2c_platform_data {
-	u32 regstep;   /* distance between registers */
+	u32 reg_shift; /* register offset shift value */
 	u32 clock_khz; /* input clock in kHz */
 	u8 num_devices; /* number of devices in the devices list */
 	struct i2c_board_info const *devices; /* devices connected to the bus */
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 3/4] V4L/DVB: mfd: use reg_shift instead of regstep
       [not found] ` <1342187065-1651-1-git-send-email-jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
  2012-07-13 13:44   ` [PATCH v3 1/4] i2c: i2c-ocores - DT bindings and minor fixes Jayachandran C
  2012-07-13 13:44   ` [PATCH v3 2/4] i2c: i2c-ocores: Use reg-shift property Jayachandran C
@ 2012-07-13 13:44   ` Jayachandran C
  2012-07-13 13:44   ` [PATCH v3 4/4] i2c: i2c-ocores: support for 16bit and 32bit IO Jayachandran C
  2012-07-14 10:45   ` [PATCH v3 0/4] I2C Ocores updates Wolfram Sang
  4 siblings, 0 replies; 10+ messages in thread
From: Jayachandran C @ 2012-07-13 13:44 UTC (permalink / raw)
  To: linux-i2c-u79uwXL29TY76Z2rM5mHXA, w.sang-bIcnvbaLZ9MEGnE8C9+IrQ,
	jacmet-OfajU3CKLf1/SzgSGea1oA,
	richard.rojfors-gfIc91nka+FZroRs9YW3xA
  Cc: devicetree-discuss-mnsaURCQ41sdnm+yROfE0A, Jayachandran C

Update for change in i2c-ocores.h which uses reg_shift to
specify the register offset shifts instead of regstep.

Signed-off-by: Jayachandran C <jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
Acked-by: Richard Rojfors <richard.rojfors-gfIc91nka+FZroRs9YW3xA@public.gmane.org>
---
 drivers/mfd/timberdale.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mfd/timberdale.c b/drivers/mfd/timberdale.c
index 0ba26fb..a447f4e 100644
--- a/drivers/mfd/timberdale.c
+++ b/drivers/mfd/timberdale.c
@@ -83,7 +83,7 @@ timberdale_xiic_platform_data = {
 
 static __devinitdata struct ocores_i2c_platform_data
 timberdale_ocores_platform_data = {
-	.regstep = 4,
+	.reg_shift = 2,
 	.clock_khz = 62500,
 	.devices = timberdale_i2c_board_info,
 	.num_devices = ARRAY_SIZE(timberdale_i2c_board_info)
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 4/4] i2c: i2c-ocores: support for 16bit and 32bit IO
       [not found] ` <1342187065-1651-1-git-send-email-jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
                     ` (2 preceding siblings ...)
  2012-07-13 13:44   ` [PATCH v3 3/4] V4L/DVB: mfd: use reg_shift instead of regstep Jayachandran C
@ 2012-07-13 13:44   ` Jayachandran C
       [not found]     ` <1342187065-1651-5-git-send-email-jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
  2012-07-14 10:45   ` [PATCH v3 0/4] I2C Ocores updates Wolfram Sang
  4 siblings, 1 reply; 10+ messages in thread
From: Jayachandran C @ 2012-07-13 13:44 UTC (permalink / raw)
  To: linux-i2c-u79uwXL29TY76Z2rM5mHXA, w.sang-bIcnvbaLZ9MEGnE8C9+IrQ,
	jacmet-OfajU3CKLf1/SzgSGea1oA,
	richard.rojfors-gfIc91nka+FZroRs9YW3xA
  Cc: devicetree-discuss-mnsaURCQ41sdnm+yROfE0A, Ganesan Ramalingam,
	Jayachandran C

From: Ganesan Ramalingam <ganesanr-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>

Some architectures supports only 16-bit or 32-bit read/write access to
their IO space. Add a 'reg-io-width' platform and OF parameter which
specifies the IO width to support these platforms.

reg-io-width can be specified as 1, 2 or 4, and has a default value
of 1 if it is unspecified.

Signed-off-by: Ganesan Ramalingam <ganesanr-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
Signed-off-by: Jayachandran C <jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
---
 .../devicetree/bindings/i2c/i2c-ocores.txt         |    2 ++
 drivers/i2c/busses/i2c-ocores.c                    |   21 ++++++++++++++++++--
 include/linux/i2c-ocores.h                         |    1 +
 3 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/i2c/i2c-ocores.txt b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
index 1c9334b..c15781f 100644
--- a/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
+++ b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
@@ -10,6 +10,7 @@ Required properties:
 
 Optional properties:
 - reg-shift       : device register offsets are shifted by this value
+- reg-io-width    : io register width in bytes (1, 2 or 4)
 - regstep         : deprecated, use reg-shift above
 
 Example:
@@ -23,6 +24,7 @@ Example:
 		clock-frequency = <20000000>;
 
 		reg-shift = <0>;	/* 8 bit registers */
+		reg-io-width = <1>;	/* 8 bit read/write */
 
 		dummy@60 {
 			compatible = "dummy";
diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c
index 721ead9..de3b119 100644
--- a/drivers/i2c/busses/i2c-ocores.c
+++ b/drivers/i2c/busses/i2c-ocores.c
@@ -30,6 +30,7 @@
 struct ocores_i2c {
 	void __iomem *base;
 	u32 reg_shift;
+	u32 reg_io_width;
 	wait_queue_head_t wait;
 	struct i2c_adapter adap;
 	struct i2c_msg *msg;
@@ -72,12 +73,22 @@ struct ocores_i2c {
 
 static inline void oc_setreg(struct ocores_i2c *i2c, int reg, u8 value)
 {
-	iowrite8(value, i2c->base + (reg << i2c->reg_shift));
+	if (i2c->reg_io_width == 4)
+		iowrite32(value, i2c->base + (reg << i2c->reg_shift));
+	else if (i2c->reg_io_width == 2)
+		iowrite16(value, i2c->base + (reg << i2c->reg_shift));
+	else
+		iowrite8(value, i2c->base + (reg << i2c->reg_shift));
 }
 
 static inline u8 oc_getreg(struct ocores_i2c *i2c, int reg)
 {
-	return ioread8(i2c->base + (reg << i2c->reg_shift));
+	if (i2c->reg_io_width == 4)
+		return ioread32(i2c->base + (reg << i2c->reg_shift));
+	else if (i2c->reg_io_width == 2)
+		return ioread16(i2c->base + (reg << i2c->reg_shift));
+	else
+		return ioread8(i2c->base + (reg << i2c->reg_shift));
 }
 
 static void ocores_process(struct ocores_i2c *i2c)
@@ -244,6 +255,8 @@ static int ocores_i2c_of_probe(struct platform_device *pdev,
 	}
 	i2c->clock_khz = val / 1000;
 
+	of_property_read_u32(pdev->dev.of_node, "reg-io-width",
+				&i2c->reg_io_width);
 	return 0;
 }
 #else
@@ -286,6 +299,7 @@ static int __devinit ocores_i2c_probe(struct platform_device *pdev)
 	pdata = pdev->dev.platform_data;
 	if (pdata) {
 		i2c->reg_shift = pdata->reg_shift;
+		i2c->reg_io_width = pdata->reg_io_width;
 		i2c->clock_khz = pdata->clock_khz;
 	} else {
 		ret = ocores_i2c_of_probe(pdev, i2c);
@@ -293,6 +307,9 @@ static int __devinit ocores_i2c_probe(struct platform_device *pdev)
 			return ret;
 	}
 
+	if (i2c->reg_io_width == 0)
+		i2c->reg_io_width = 1; /* Set to default value */
+
 	ocores_init(i2c);
 
 	init_waitqueue_head(&i2c->wait);
diff --git a/include/linux/i2c-ocores.h b/include/linux/i2c-ocores.h
index 5d95df2..1c06b5c 100644
--- a/include/linux/i2c-ocores.h
+++ b/include/linux/i2c-ocores.h
@@ -13,6 +13,7 @@
 
 struct ocores_i2c_platform_data {
 	u32 reg_shift; /* register offset shift value */
+	u32 reg_io_width; /* register io read/write width */
 	u32 clock_khz; /* input clock in kHz */
 	u8 num_devices; /* number of devices in the devices list */
 	struct i2c_board_info const *devices; /* devices connected to the bus */
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 4/4] i2c: i2c-ocores: support for 16bit and 32bit IO
       [not found]     ` <1342187065-1651-5-git-send-email-jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
@ 2012-07-13 13:48       ` Shubhrajyoti Datta
       [not found]         ` <CAM=Q2csMBP7YHgmMob0Npaxo70Quo3-76TNhQawE972zfiLiHA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  0 siblings, 1 reply; 10+ messages in thread
From: Shubhrajyoti Datta @ 2012-07-13 13:48 UTC (permalink / raw)
  To: Jayachandran C
  Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA, w.sang-bIcnvbaLZ9MEGnE8C9+IrQ,
	jacmet-OfajU3CKLf1/SzgSGea1oA,
	richard.rojfors-gfIc91nka+FZroRs9YW3xA,
	devicetree-discuss-mnsaURCQ41sdnm+yROfE0A, Ganesan Ramalingam

Hello,

On Fri, Jul 13, 2012 at 7:14 PM, Jayachandran C
<jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org> wrote:
> From: Ganesan Ramalingam <ganesanr-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
>
> Some architectures supports only 16-bit or 32-bit read/write access to
> their IO space. Add a 'reg-io-width' platform and OF parameter which
> specifies the IO width to support these platforms.
>
> reg-io-width can be specified as 1, 2 or 4, and has a default value
> of 1 if it is unspecified.
>
> Signed-off-by: Ganesan Ramalingam <ganesanr-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
> Signed-off-by: Jayachandran C <jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
> ---
>  .../devicetree/bindings/i2c/i2c-ocores.txt         |    2 ++
>  drivers/i2c/busses/i2c-ocores.c                    |   21 ++++++++++++++++++--
>  include/linux/i2c-ocores.h                         |    1 +
>  3 files changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/i2c/i2c-ocores.txt b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
> index 1c9334b..c15781f 100644
> --- a/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
> +++ b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
> @@ -10,6 +10,7 @@ Required properties:
>
>  Optional properties:
>  - reg-shift       : device register offsets are shifted by this value
> +- reg-io-width    : io register width in bytes (1, 2 or 4)
>  - regstep         : deprecated, use reg-shift above
>
>  Example:
> @@ -23,6 +24,7 @@ Example:
>                 clock-frequency = <20000000>;
>
>                 reg-shift = <0>;        /* 8 bit registers */
> +               reg-io-width = <1>;     /* 8 bit read/write */
>
>                 dummy@60 {
>                         compatible = "dummy";
> diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c
> index 721ead9..de3b119 100644
> --- a/drivers/i2c/busses/i2c-ocores.c
> +++ b/drivers/i2c/busses/i2c-ocores.c
> @@ -30,6 +30,7 @@
>  struct ocores_i2c {
>         void __iomem *base;
>         u32 reg_shift;
> +       u32 reg_io_width;
>         wait_queue_head_t wait;
>         struct i2c_adapter adap;
>         struct i2c_msg *msg;
> @@ -72,12 +73,22 @@ struct ocores_i2c {
>
>  static inline void oc_setreg(struct ocores_i2c *i2c, int reg, u8 value)
>  {
> -       iowrite8(value, i2c->base + (reg << i2c->reg_shift));
> +       if (i2c->reg_io_width == 4)
> +               iowrite32(value, i2c->base + (reg << i2c->reg_shift));
> +       else if (i2c->reg_io_width == 2)
> +               iowrite16(value, i2c->base + (reg << i2c->reg_shift));
> +       else
> +               iowrite8(value, i2c->base + (reg << i2c->reg_shift));
>  }
>
>  static inline u8 oc_getreg(struct ocores_i2c *i2c, int reg)

Should the return type be changed.
Now that it is returning more that than 8 bits.

Did I miss something?

>  {
> -       return ioread8(i2c->base + (reg << i2c->reg_shift));
> +       if (i2c->reg_io_width == 4)
> +               return ioread32(i2c->base + (reg << i2c->reg_shift));
> +       else if (i2c->reg_io_width == 2)
> +               return ioread16(i2c->base + (reg << i2c->reg_shift));
> +       else
> +               return ioread8(i2c->base + (reg << i2c->reg_shift));
>  }
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 4/4] i2c: i2c-ocores: support for 16bit and 32bit IO
       [not found]         ` <CAM=Q2csMBP7YHgmMob0Npaxo70Quo3-76TNhQawE972zfiLiHA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2012-07-13 13:58           ` Jayachandran C.
  0 siblings, 0 replies; 10+ messages in thread
From: Jayachandran C. @ 2012-07-13 13:58 UTC (permalink / raw)
  To: Shubhrajyoti Datta
  Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA, w.sang-bIcnvbaLZ9MEGnE8C9+IrQ,
	jacmet-OfajU3CKLf1/SzgSGea1oA,
	richard.rojfors-gfIc91nka+FZroRs9YW3xA,
	devicetree-discuss-mnsaURCQ41sdnm+yROfE0A, Ganesan Ramalingam

On Fri, Jul 13, 2012 at 07:18:35PM +0530, Shubhrajyoti Datta wrote:
> Hello,
> 
> On Fri, Jul 13, 2012 at 7:14 PM, Jayachandran C
> <jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org> wrote:
> > From: Ganesan Ramalingam <ganesanr-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
> >
> > Some architectures supports only 16-bit or 32-bit read/write access to
> > their IO space. Add a 'reg-io-width' platform and OF parameter which
> > specifies the IO width to support these platforms.
> >
> > reg-io-width can be specified as 1, 2 or 4, and has a default value
> > of 1 if it is unspecified.
> >
> > Signed-off-by: Ganesan Ramalingam <ganesanr-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
> > Signed-off-by: Jayachandran C <jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
> > ---
> >  .../devicetree/bindings/i2c/i2c-ocores.txt         |    2 ++
> >  drivers/i2c/busses/i2c-ocores.c                    |   21 ++++++++++++++++++--
> >  include/linux/i2c-ocores.h                         |    1 +
> >  3 files changed, 22 insertions(+), 2 deletions(-)
> >
> > diff --git a/Documentation/devicetree/bindings/i2c/i2c-ocores.txt b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
> > index 1c9334b..c15781f 100644
> > --- a/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
> > +++ b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
> > @@ -10,6 +10,7 @@ Required properties:
> >
> >  Optional properties:
> >  - reg-shift       : device register offsets are shifted by this value
> > +- reg-io-width    : io register width in bytes (1, 2 or 4)
> >  - regstep         : deprecated, use reg-shift above
> >
> >  Example:
> > @@ -23,6 +24,7 @@ Example:
> >                 clock-frequency = <20000000>;
> >
> >                 reg-shift = <0>;        /* 8 bit registers */
> > +               reg-io-width = <1>;     /* 8 bit read/write */
> >
> >                 dummy@60 {
> >                         compatible = "dummy";
> > diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c
> > index 721ead9..de3b119 100644
> > --- a/drivers/i2c/busses/i2c-ocores.c
> > +++ b/drivers/i2c/busses/i2c-ocores.c
> > @@ -30,6 +30,7 @@
> >  struct ocores_i2c {
> >         void __iomem *base;
> >         u32 reg_shift;
> > +       u32 reg_io_width;
> >         wait_queue_head_t wait;
> >         struct i2c_adapter adap;
> >         struct i2c_msg *msg;
> > @@ -72,12 +73,22 @@ struct ocores_i2c {
> >
> >  static inline void oc_setreg(struct ocores_i2c *i2c, int reg, u8 value)
> >  {
> > -       iowrite8(value, i2c->base + (reg << i2c->reg_shift));
> > +       if (i2c->reg_io_width == 4)
> > +               iowrite32(value, i2c->base + (reg << i2c->reg_shift));
> > +       else if (i2c->reg_io_width == 2)
> > +               iowrite16(value, i2c->base + (reg << i2c->reg_shift));
> > +       else
> > +               iowrite8(value, i2c->base + (reg << i2c->reg_shift));
> >  }
> >
> >  static inline u8 oc_getreg(struct ocores_i2c *i2c, int reg)
> 
> Should the return type be changed.
> Now that it is returning more that than 8 bits.
> 
> Did I miss something?

Only 8 bits of the register is significant, so even if we read 16 or 32
bits only the lowest 8 bits are returned.

JC.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 0/4] I2C Ocores updates
       [not found] ` <1342187065-1651-1-git-send-email-jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
                     ` (3 preceding siblings ...)
  2012-07-13 13:44   ` [PATCH v3 4/4] i2c: i2c-ocores: support for 16bit and 32bit IO Jayachandran C
@ 2012-07-14 10:45   ` Wolfram Sang
  4 siblings, 0 replies; 10+ messages in thread
From: Wolfram Sang @ 2012-07-14 10:45 UTC (permalink / raw)
  To: Jayachandran C
  Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA, jacmet-OfajU3CKLf1/SzgSGea1oA,
	richard.rojfors-gfIc91nka+FZroRs9YW3xA,
	devicetree-discuss-mnsaURCQ41sdnm+yROfE0A

[-- Attachment #1: Type: text/plain, Size: 372 bytes --]

On Fri, Jul 13, 2012 at 07:14:21PM +0530, Jayachandran C wrote:
> Updated patchset to use u32 for reg_shift and reg_io_width, both
> for ocores_i2c_platform_data and for ocores_i2c.

Thanks, applied to next.

-- 
Pengutronix e.K.                           | Wolfram Sang                |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 1/4] i2c: i2c-ocores - DT bindings and minor fixes.
       [not found]     ` <1342187065-1651-2-git-send-email-jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
@ 2012-07-16  3:42       ` Rajeev kumar
  0 siblings, 0 replies; 10+ messages in thread
From: Rajeev kumar @ 2012-07-16  3:42 UTC (permalink / raw)
  To: Jayachandran C
  Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org,
	jacmet-OfajU3CKLf1/SzgSGea1oA@public.gmane.org,
	richard.rojfors-gfIc91nka+FZroRs9YW3xA@public.gmane.org,
	devicetree-discuss-mnsaURCQ41sdnm+yROfE0A@public.gmane.org,
	spear-devel

On 7/13/2012 7:14 PM, Jayachandran C wrote:
> Cleanups to i2c-cores, no change in logic, changes are:
> * Move i2c-ocores device tree documentation from source file to
>    Documentation/devicetree/bindings/i2c/i2c-ocores.txt.
> * Add \n to dev_warn and dev_err messages where missing
> * Minor updates to the text and formatting fixes.
>
> Signed-off-by: Jayachandran C<jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
> ---
>   .../devicetree/bindings/i2c/i2c-ocores.txt         |   27 ++++++++++++
>   drivers/i2c/busses/i2c-ocores.c                    |   45 +++-----------------
>   2 files changed, 34 insertions(+), 38 deletions(-)
>   create mode 100644 Documentation/devicetree/bindings/i2c/i2c-ocores.txt
>
> diff --git a/Documentation/devicetree/bindings/i2c/i2c-ocores.txt b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
> new file mode 100644
> index 0000000..bfec894
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
> @@ -0,0 +1,27 @@
> +Device tree configuration for i2c-ocores
> +
> +Required properties:
> +- compatible      : "opencores,i2c-ocores"
> +- reg             : bus address start and address range size of device
> +- interrupts      : interrupt number
> +- regstep         : size of device registers in bytes
> +- clock-frequency : frequency of bus clock in Hz
> +- #address-cells  : should be<1>
> +- #size-cells     : should be<0>
> +
> +Example:
> +
> +	i2c0: ocores@a0000000 {
> +		#address-cells =<1>;
> +		#size-cells =<0>;
> +		compatible = "opencores,i2c-ocores";
> +		reg =<0xa0000000 0x8>;
> +		interrupts =<10>;
> +		regstep =<1>;
> +		clock-frequency =<20000000>;
> +
> +		dummy@60 {
> +			compatible = "dummy";
> +			reg =<0x60>;
> +		};
> +	};
> diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c
> index 75194c5..e8159db 100644
> --- a/drivers/i2c/busses/i2c-ocores.c
> +++ b/drivers/i2c/busses/i2c-ocores.c
> @@ -10,40 +10,9 @@
>    */
>
>   /*
> - * Device tree configuration:
> - *
> - * Required properties:
> - * - compatible      : "opencores,i2c-ocores"
> - * - reg             : bus address start and address range size of device
> - * - interrupts      : interrupt number
> - * - regstep         : size of device registers in bytes
> - * - clock-frequency : frequency of bus clock in Hz
> - *
> - * Example:
> - *
> - *  i2c0: ocores@a0000000 {
> - *              compatible = "opencores,i2c-ocores";
> - *              reg =<0xa0000000 0x8>;
> - *              interrupts =<10>;
> - *
> - *              regstep =<1>;
> - *              clock-frequency =<20000000>;
> - *
> - * -- Devices connected on this I2C bus get
> - * -- defined here; address- and size-cells
> - * -- apply to these child devices
> - *
> - *              #address-cells =<1>;
> - *              #size-cells =<0>;
> - *
> - *              dummy@60 {
> - *                     compatible = "dummy";
> - *                     reg =<60>;
> - *              };
> - *  };
> - *
> + * This driver can be used from the device tree, see
> + *     Documentation/devicetree/bindings/i2c/ocore-i2c.txt
>    */
> -
>   #include<linux/kernel.h>
>   #include<linux/module.h>
>   #include<linux/init.h>
> @@ -247,14 +216,14 @@ static struct i2c_adapter ocores_adapter = {
>   };
>
>   #ifdef CONFIG_OF
> -static int ocores_i2c_of_probe(struct platform_device* pdev,
> -				struct ocores_i2c* i2c)
> +static int ocores_i2c_of_probe(struct platform_device *pdev,
> +				struct ocores_i2c *i2c)
>   {
>   	const __be32* val;
>
>   	val = of_get_property(pdev->dev.of_node, "regstep", NULL);
>   	if (!val) {
> -		dev_err(&pdev->dev, "Missing required parameter 'regstep'");
> +		dev_err(&pdev->dev, "Missing required parameter 'regstep'\n");
>   		return -ENODEV;
>   	}
>   	i2c->regstep = be32_to_cpup(val);
> @@ -262,7 +231,7 @@ static int ocores_i2c_of_probe(struct platform_device* pdev,
>   	val = of_get_property(pdev->dev.of_node, "clock-frequency", NULL);
>   	if (!val) {
>   		dev_err(&pdev->dev,
> -			"Missing required parameter 'clock-frequency'");
> +			"Missing required parameter 'clock-frequency'\n");
>   		return -ENODEV;
>   	}
>   	i2c->clock_khz = be32_to_cpup(val) / 1000;
> @@ -351,7 +320,7 @@ static int __devinit ocores_i2c_probe(struct platform_device *pdev)
>   	return 0;
>   }
>
> -static int __devexit ocores_i2c_remove(struct platform_device* pdev)
> +static int __devexit ocores_i2c_remove(struct platform_device *pdev)
>   {
>   	struct ocores_i2c *i2c = platform_get_drvdata(pdev);
>

Reviewed By: Rajeev Kumar <rajeev-dlh.kumar-qxv4g6HH51o@public.gmane.org>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 2/4] i2c: i2c-ocores: Use reg-shift property
       [not found]     ` <1342187065-1651-3-git-send-email-jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
@ 2012-07-16  3:45       ` Rajeev kumar
  0 siblings, 0 replies; 10+ messages in thread
From: Rajeev kumar @ 2012-07-16  3:45 UTC (permalink / raw)
  To: Jayachandran C
  Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org,
	jacmet-OfajU3CKLf1/SzgSGea1oA@public.gmane.org,
	richard.rojfors-gfIc91nka+FZroRs9YW3xA@public.gmane.org,
	devicetree-discuss-mnsaURCQ41sdnm+yROfE0A@public.gmane.org,
	Ganesan Ramalingam

On 7/13/2012 7:14 PM, Jayachandran C wrote:
> From: Ganesan Ramalingam<ganesanr-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
>
> Deprecate 'regstep' property and use the standard 'reg-shift' property
> for register offset shifts. 'regstep' will still be supported as an
> optional property, but will give a warning when used.
>
> Signed-off-by: Ganesan Ramalingam<ganesanr-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
> Signed-off-by: Jayachandran C<jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
> ---
>   .../devicetree/bindings/i2c/i2c-ocores.txt         |    8 +++--
>   drivers/i2c/busses/i2c-ocores.c                    |   36 ++++++++++++--------
>   include/linux/i2c-ocores.h                         |    2 +-
>   3 files changed, 29 insertions(+), 17 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/i2c/i2c-ocores.txt b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
> index bfec894..1c9334b 100644
> --- a/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
> +++ b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt
> @@ -4,11 +4,14 @@ Required properties:
>   - compatible      : "opencores,i2c-ocores"
>   - reg             : bus address start and address range size of device
>   - interrupts      : interrupt number
> -- regstep         : size of device registers in bytes
>   - clock-frequency : frequency of bus clock in Hz
>   - #address-cells  : should be<1>
>   - #size-cells     : should be<0>
>
> +Optional properties:
> +- reg-shift       : device register offsets are shifted by this value
> +- regstep         : deprecated, use reg-shift above
> +
>   Example:
>
>   	i2c0: ocores@a0000000 {
> @@ -17,9 +20,10 @@ Example:
>   		compatible = "opencores,i2c-ocores";
>   		reg =<0xa0000000 0x8>;
>   		interrupts =<10>;
> -		regstep =<1>;
>   		clock-frequency =<20000000>;
>
> +		reg-shift =<0>;	/* 8 bit registers */
> +
>   		dummy@60 {
>   			compatible = "dummy";
>   			reg =<0x60>;
> diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c
> index e8159db..721ead9 100644
> --- a/drivers/i2c/busses/i2c-ocores.c
> +++ b/drivers/i2c/busses/i2c-ocores.c
> @@ -25,10 +25,11 @@
>   #include<linux/slab.h>
>   #include<linux/io.h>
>   #include<linux/of_i2c.h>
> +#include<linux/log2.h>
>
>   struct ocores_i2c {
>   	void __iomem *base;
> -	int regstep;
> +	u32 reg_shift;
>   	wait_queue_head_t wait;
>   	struct i2c_adapter adap;
>   	struct i2c_msg *msg;
> @@ -71,12 +72,12 @@ struct ocores_i2c {
>
>   static inline void oc_setreg(struct ocores_i2c *i2c, int reg, u8 value)
>   {
> -	iowrite8(value, i2c->base + reg * i2c->regstep);
> +	iowrite8(value, i2c->base + (reg<<  i2c->reg_shift));
>   }
>
>   static inline u8 oc_getreg(struct ocores_i2c *i2c, int reg)
>   {
> -	return ioread8(i2c->base + reg * i2c->regstep);
> +	return ioread8(i2c->base + (reg<<  i2c->reg_shift));
>   }
>
>   static void ocores_process(struct ocores_i2c *i2c)
> @@ -219,22 +220,29 @@ static struct i2c_adapter ocores_adapter = {
>   static int ocores_i2c_of_probe(struct platform_device *pdev,
>   				struct ocores_i2c *i2c)
>   {
> -	const __be32* val;
> -
> -	val = of_get_property(pdev->dev.of_node, "regstep", NULL);
> -	if (!val) {
> -		dev_err(&pdev->dev, "Missing required parameter 'regstep'\n");
> -		return -ENODEV;
> +	struct device_node *np = pdev->dev.of_node;
> +	u32 val;
> +
> +	if (of_property_read_u32(np, "reg-shift",&i2c->reg_shift)) {
> +		/* no 'reg-shift', check for deprecated 'regstep' */
> +		if (!of_property_read_u32(np, "regstep",&val)) {
> +			if (!is_power_of_2(val)) {
> +				dev_err(&pdev->dev, "invalid regstep %d\n",
> +					val);
> +				return -EINVAL;
> +			}
> +			i2c->reg_shift = ilog2(val);
> +			dev_warn(&pdev->dev,
> +				"regstep property deprecated, use reg-shift\n");
> +		}
>   	}
> -	i2c->regstep = be32_to_cpup(val);
>
> -	val = of_get_property(pdev->dev.of_node, "clock-frequency", NULL);
> -	if (!val) {
> +	if (of_property_read_u32(np, "clock-frequency",&val)) {
>   		dev_err(&pdev->dev,
>   			"Missing required parameter 'clock-frequency'\n");
>   		return -ENODEV;
>   	}
> -	i2c->clock_khz = be32_to_cpup(val) / 1000;
> +	i2c->clock_khz = val / 1000;
>
>   	return 0;
>   }
> @@ -277,7 +285,7 @@ static int __devinit ocores_i2c_probe(struct platform_device *pdev)
>
>   	pdata = pdev->dev.platform_data;
>   	if (pdata) {
> -		i2c->regstep = pdata->regstep;
> +		i2c->reg_shift = pdata->reg_shift;
>   		i2c->clock_khz = pdata->clock_khz;
>   	} else {
>   		ret = ocores_i2c_of_probe(pdev, i2c);
> diff --git a/include/linux/i2c-ocores.h b/include/linux/i2c-ocores.h
> index 4d5e57f..5d95df2 100644
> --- a/include/linux/i2c-ocores.h
> +++ b/include/linux/i2c-ocores.h
> @@ -12,7 +12,7 @@
>   #define _LINUX_I2C_OCORES_H
>
>   struct ocores_i2c_platform_data {
> -	u32 regstep;   /* distance between registers */
> +	u32 reg_shift; /* register offset shift value */
>   	u32 clock_khz; /* input clock in kHz */
>   	u8 num_devices; /* number of devices in the devices list */
>   	struct i2c_board_info const *devices; /* devices connected to the bus */

Reviewed By: Rajeev Kumar <rajeev-dlh.kumar-qxv4g6HH51o@public.gmane.org>

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2012-07-16  3:45 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-13 13:44 [PATCH v3 0/4] I2C Ocores updates Jayachandran C
     [not found] ` <1342187065-1651-1-git-send-email-jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
2012-07-13 13:44   ` [PATCH v3 1/4] i2c: i2c-ocores - DT bindings and minor fixes Jayachandran C
     [not found]     ` <1342187065-1651-2-git-send-email-jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
2012-07-16  3:42       ` Rajeev kumar
2012-07-13 13:44   ` [PATCH v3 2/4] i2c: i2c-ocores: Use reg-shift property Jayachandran C
     [not found]     ` <1342187065-1651-3-git-send-email-jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
2012-07-16  3:45       ` Rajeev kumar
2012-07-13 13:44   ` [PATCH v3 3/4] V4L/DVB: mfd: use reg_shift instead of regstep Jayachandran C
2012-07-13 13:44   ` [PATCH v3 4/4] i2c: i2c-ocores: support for 16bit and 32bit IO Jayachandran C
     [not found]     ` <1342187065-1651-5-git-send-email-jayachandranc-oSioyQM9ZPnuBjGU1YDckgC/G2K4zDHf@public.gmane.org>
2012-07-13 13:48       ` Shubhrajyoti Datta
     [not found]         ` <CAM=Q2csMBP7YHgmMob0Npaxo70Quo3-76TNhQawE972zfiLiHA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-07-13 13:58           ` Jayachandran C.
2012-07-14 10:45   ` [PATCH v3 0/4] I2C Ocores updates Wolfram Sang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).