linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/8] MFD: ti_am335x_tscadc: DT support and TSC features addition
@ 2013-01-24  3:45 Patil, Rachna
  2013-01-24  3:45 ` [PATCH v4 1/8] input: ti_am335x_tsc: Step enable bits made configurable Patil, Rachna
                   ` (7 more replies)
  0 siblings, 8 replies; 15+ messages in thread
From: Patil, Rachna @ 2013-01-24  3:45 UTC (permalink / raw)
  To: linux-doc, devicetree-discuss, linux-kernel, linux-input,
	linux-iio, linux-omap, linux-arm-kernel
  Cc: Samuel Ortiz, Dmitry Torokhov, Dmitry Torokhov, Rob Herring,
	Jonathan Cameron, Tony Lindgren, Benit Cousson, Grant Likely,
	Rob Landley, Russell King, gururaja.hebbar, Patil, Rachna

From: "Patil, Rachna" <rachna@ti.com>

This patch set is a cumulative set of [1] and [2] sent earlier.

Note that there are no code changes in either of the patch set,
only rebased on top of Linus's v3.8-rc3 tag to make sure that
all the patches apply without any conflicts.

This patch set has been tested on AM335x EVM.

[1] http://www.spinics.net/lists/linux-input/msg23060.html
[2] http://www.spinics.net/lists/linux-input/msg23090.html

Changes in v4:
	Subnodes and their properties documentation added.
	Non-standard properties prefixed with vendor name.

Changes in v3:
	No code change.

Changes in v2:
	Patch "input: ti_am335x_tsc: Add variance filter"
	from v1 has been dropped.
	Add MFD device DT node in AM335x EVM.

Patil, Rachna (8):
  input: ti_am335x_tsc: Step enable bits made configurable
  input: ti_am335x_tsc: Order of TSC wires, made configurable
  input: touchscreen: ti_tsc: remove unwanted fifo flush
  MFD: ti_am335x_tscadc: add device tree binding information
  MFD: ti_am335x_tscadc: Add DT support
  input: ti_am335x_tsc: Add DT support
  IIO: ti_am335x_adc: Add DT support
  arm/dts: AM335x-evm: Add TSC/ADC MFD device support

 .../devicetree/bindings/mfd/ti_am335x_tscadc.txt   |   52 ++++
 arch/arm/boot/dts/am335x-evm.dts                   |   13 +
 arch/arm/boot/dts/am33xx.dtsi                      |    8 +
 drivers/iio/adc/ti_am335x_adc.c                    |   26 +-
 drivers/input/touchscreen/ti_am335x_tsc.c          |  266 +++++++++++++++++---
 drivers/mfd/ti_am335x_tscadc.c                     |   28 ++-
 include/linux/input/ti_am335x_tsc.h                |   12 +
 include/linux/mfd/ti_am335x_tscadc.h               |   11 +-
 8 files changed, 364 insertions(+), 52 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mfd/ti_am335x_tscadc.txt

-- 
1.7.9.5


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

* [PATCH v4 1/8] input: ti_am335x_tsc: Step enable bits made configurable
  2013-01-24  3:45 [PATCH v4 0/8] MFD: ti_am335x_tscadc: DT support and TSC features addition Patil, Rachna
@ 2013-01-24  3:45 ` Patil, Rachna
  2013-01-24  3:45 ` [PATCH v4 2/8] input: ti_am335x_tsc: Order of TSC wires, " Patil, Rachna
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 15+ messages in thread
From: Patil, Rachna @ 2013-01-24  3:45 UTC (permalink / raw)
  To: linux-doc, devicetree-discuss, linux-kernel, linux-input,
	linux-iio, linux-omap, linux-arm-kernel
  Cc: Samuel Ortiz, Dmitry Torokhov, Dmitry Torokhov, Rob Herring,
	Jonathan Cameron, Tony Lindgren, Benit Cousson, Grant Likely,
	Rob Landley, Russell King, gururaja.hebbar, Patil, Rachna

From: "Patil, Rachna" <rachna@ti.com>

Current code has hard coded value written to
step enable bits. Now the bits are updated based
on how many steps are needed to be configured got
from platform data.

The user needs to take care not to exceed
the count more than 16. While using ADC and TSC
one should take care to set this parameter correctly.

Signed-off-by: Patil, Rachna <rachna@ti.com>
---
 drivers/input/touchscreen/ti_am335x_tsc.c |   10 ++++++++--
 include/linux/mfd/ti_am335x_tscadc.h      |    1 -
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/input/touchscreen/ti_am335x_tsc.c b/drivers/input/touchscreen/ti_am335x_tsc.c
index 51e7b87..da652e0 100644
--- a/drivers/input/touchscreen/ti_am335x_tsc.c
+++ b/drivers/input/touchscreen/ti_am335x_tsc.c
@@ -39,6 +39,7 @@ struct titsc {
 	unsigned int		irq;
 	unsigned int		wires;
 	unsigned int		x_plate_resistance;
+	unsigned int		enable_bits;
 	bool			pen_down;
 	int			steps_to_configure;
 };
@@ -57,6 +58,7 @@ static void titsc_writel(struct titsc *tsc, unsigned int reg,
 static void titsc_step_config(struct titsc *ts_dev)
 {
 	unsigned int	config;
+	unsigned int	stepenable = 0;
 	int i, total_steps;
 
 	/* Configure the Step registers */
@@ -128,7 +130,11 @@ static void titsc_step_config(struct titsc *ts_dev)
 	titsc_writel(ts_dev, REG_STEPDELAY(total_steps + 2),
 			STEPCONFIG_OPENDLY);
 
-	titsc_writel(ts_dev, REG_SE, STPENB_STEPENB_TC);
+	for (i = 0; i <= (total_steps + 2); i++)
+		stepenable |= 1 << i;
+	ts_dev->enable_bits = stepenable;
+
+	titsc_writel(ts_dev, REG_SE, ts_dev->enable_bits);
 }
 
 static void titsc_read_coordinates(struct titsc *ts_dev,
@@ -250,7 +256,7 @@ static irqreturn_t titsc_irq(int irq, void *dev)
 
 	titsc_writel(ts_dev, REG_IRQSTATUS, irqclr);
 
-	titsc_writel(ts_dev, REG_SE, STPENB_STEPENB_TC);
+	titsc_writel(ts_dev, REG_SE, ts_dev->enable_bits);
 	return IRQ_HANDLED;
 }
 
diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
index c79ad5d..23e4f33 100644
--- a/include/linux/mfd/ti_am335x_tscadc.h
+++ b/include/linux/mfd/ti_am335x_tscadc.h
@@ -47,7 +47,6 @@
 #define STEPENB_MASK		(0x1FFFF << 0)
 #define STEPENB(val)		((val) << 0)
 #define STPENB_STEPENB		STEPENB(0x1FFFF)
-#define STPENB_STEPENB_TC	STEPENB(0x1FFF)
 
 /* IRQ enable */
 #define IRQENB_HW_PEN		BIT(0)
-- 
1.7.9.5


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

* [PATCH v4 2/8] input: ti_am335x_tsc: Order of TSC wires, made configurable
  2013-01-24  3:45 [PATCH v4 0/8] MFD: ti_am335x_tscadc: DT support and TSC features addition Patil, Rachna
  2013-01-24  3:45 ` [PATCH v4 1/8] input: ti_am335x_tsc: Step enable bits made configurable Patil, Rachna
@ 2013-01-24  3:45 ` Patil, Rachna
  2013-01-24  3:45 ` [PATCH v4 3/8] input: touchscreen: ti_tsc: remove unwanted fifo flush Patil, Rachna
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 15+ messages in thread
From: Patil, Rachna @ 2013-01-24  3:45 UTC (permalink / raw)
  To: linux-doc, devicetree-discuss, linux-kernel, linux-input,
	linux-iio, linux-omap, linux-arm-kernel
  Cc: Samuel Ortiz, Dmitry Torokhov, Dmitry Torokhov, Rob Herring,
	Jonathan Cameron, Tony Lindgren, Benit Cousson, Grant Likely,
	Rob Landley, Russell King, gururaja.hebbar, Patil, Rachna

From: "Patil, Rachna" <rachna@ti.com>

The current driver expected touchscreen input
wires(XP,XN,YP,YN) to be connected in a particular order.
Making changes to accept this as platform data.

Signed-off-by: Patil, Rachna <rachna@ti.com>
---
 drivers/input/touchscreen/ti_am335x_tsc.c |  156 ++++++++++++++++++++++++++---
 include/linux/input/ti_am335x_tsc.h       |   12 +++
 include/linux/mfd/ti_am335x_tscadc.h      |   10 +-
 3 files changed, 159 insertions(+), 19 deletions(-)

diff --git a/drivers/input/touchscreen/ti_am335x_tsc.c b/drivers/input/touchscreen/ti_am335x_tsc.c
index da652e0..0c460f9 100644
--- a/drivers/input/touchscreen/ti_am335x_tsc.c
+++ b/drivers/input/touchscreen/ti_am335x_tsc.c
@@ -33,6 +33,17 @@
 #define SEQ_SETTLE		275
 #define MAX_12BIT		((1 << 12) - 1)
 
+/*
+ * Refer to function regbit_map() to
+ * map the values in the matrix.
+ */
+static int config[4][4] = {
+		{1,	0,	1,	0},
+		{2,	3,	2,	3},
+		{4,	5,	4,	5},
+		{0,	6,	0,	6}
+};
+
 struct titsc {
 	struct input_dev	*input;
 	struct ti_tscadc_dev	*mfd_tscadc;
@@ -42,6 +53,9 @@ struct titsc {
 	unsigned int		enable_bits;
 	bool			pen_down;
 	int			steps_to_configure;
+	int			config_inp[20];
+	int			bit_xp, bit_xn, bit_yp, bit_yn;
+	int			inp_xp, inp_xn, inp_yp, inp_yn;
 };
 
 static unsigned int titsc_readl(struct titsc *ts, unsigned int reg)
@@ -55,6 +69,107 @@ static void titsc_writel(struct titsc *tsc, unsigned int reg,
 	writel(val, tsc->mfd_tscadc->tscadc_base + reg);
 }
 
+/*
+ * Each of the analog lines are mapped
+ * with one or two register bits,
+ * which can be either pulled high/low
+ * depending on the value to be read.
+ */
+static int regbit_map(int val)
+{
+	int map_bits = 0;
+
+	switch (val) {
+	case 1:
+		map_bits = XPP;
+		break;
+	case 2:
+		map_bits = XNP;
+		break;
+	case 3:
+		map_bits = XNN;
+		break;
+	case 4:
+		map_bits = YPP;
+		break;
+	case 5:
+		map_bits = YPN;
+		break;
+	case 6:
+		map_bits = YNN;
+		break;
+	}
+
+	return map_bits;
+}
+
+static int titsc_config_wires(struct titsc *ts_dev)
+{
+	int		analog_line[10], wire_order[10];
+	int		i, temp_bits, err;
+
+	for (i = 0; i < 4; i++) {
+		/*
+		 * Get the order in which TSC wires are attached
+		 * w.r.t. each of the analog input lines on the EVM.
+		 */
+		analog_line[i] = ts_dev->config_inp[i] & 0xF0;
+		analog_line[i] = analog_line[i] >> 4;
+
+		wire_order[i] = ts_dev->config_inp[i] & 0x0F;
+	}
+
+	for (i = 0; i < 4; i++) {
+		switch (wire_order[i]) {
+		case 0:
+			temp_bits = config[analog_line[i]][0];
+			if (temp_bits == 0) {
+				err = -EINVAL;
+				goto ret;
+			} else {
+				ts_dev->bit_xp = regbit_map(temp_bits);
+				ts_dev->inp_xp = analog_line[i];
+				break;
+			}
+		case 1:
+			temp_bits = config[analog_line[i]][1];
+			if (temp_bits == 0) {
+				err = -EINVAL;
+				goto ret;
+			} else {
+				ts_dev->bit_xn = regbit_map(temp_bits);
+				ts_dev->inp_xn = analog_line[i];
+				break;
+			}
+		case 2:
+			temp_bits = config[analog_line[i]][2];
+			if (temp_bits == 0) {
+				err = -EINVAL;
+				goto ret;
+			} else {
+				ts_dev->bit_yp = regbit_map(temp_bits);
+				ts_dev->inp_yp = analog_line[i];
+				break;
+			}
+		case 3:
+			temp_bits = config[analog_line[i]][3];
+			if (temp_bits == 0) {
+				err = -EINVAL;
+				goto ret;
+			} else {
+				ts_dev->bit_yn = regbit_map(temp_bits);
+				ts_dev->inp_yn = analog_line[i];
+				break;
+			}
+		}
+	}
+
+	return 0;
+
+ret:
+	return err;
+}
+
 static void titsc_step_config(struct titsc *ts_dev)
 {
 	unsigned int	config;
@@ -65,18 +180,18 @@ static void titsc_step_config(struct titsc *ts_dev)
 	total_steps = 2 * ts_dev->steps_to_configure;
 
 	config = STEPCONFIG_MODE_HWSYNC |
-			STEPCONFIG_AVG_16 | STEPCONFIG_XPP;
+			STEPCONFIG_AVG_16 | ts_dev->bit_xp;
 	switch (ts_dev->wires) {
 	case 4:
-		config |= STEPCONFIG_INP_AN2 | STEPCONFIG_XNN;
+		config |= STEPCONFIG_INP(ts_dev->inp_yp) | ts_dev->bit_xn;
 		break;
 	case 5:
-		config |= STEPCONFIG_YNN |
-				STEPCONFIG_INP_AN4 | STEPCONFIG_XNN |
-				STEPCONFIG_YPP;
+		config |= ts_dev->bit_yn |
+				STEPCONFIG_INP_AN4 | ts_dev->bit_xn |
+				ts_dev->bit_yp;
 		break;
 	case 8:
-		config |= STEPCONFIG_INP_AN2 | STEPCONFIG_XNN;
+		config |= STEPCONFIG_INP(ts_dev->inp_yp) | ts_dev->bit_xn;
 		break;
 	}
 
@@ -87,18 +202,18 @@ static void titsc_step_config(struct titsc *ts_dev)
 
 	config = 0;
 	config = STEPCONFIG_MODE_HWSYNC |
-			STEPCONFIG_AVG_16 | STEPCONFIG_YNN |
+			STEPCONFIG_AVG_16 | ts_dev->bit_yn |
 			STEPCONFIG_INM_ADCREFM | STEPCONFIG_FIFO1;
 	switch (ts_dev->wires) {
 	case 4:
-		config |= STEPCONFIG_YPP;
+		config |= ts_dev->bit_yp | STEPCONFIG_INP(ts_dev->inp_xp);
 		break;
 	case 5:
-		config |= STEPCONFIG_XPP | STEPCONFIG_INP_AN4 |
-				STEPCONFIG_XNP | STEPCONFIG_YPN;
+		config |= ts_dev->bit_xp | STEPCONFIG_INP_AN4 |
+				ts_dev->bit_xn | ts_dev->bit_yp;
 		break;
 	case 8:
-		config |= STEPCONFIG_YPP;
+		config |= ts_dev->bit_yp | STEPCONFIG_INP(ts_dev->inp_xp);
 		break;
 	}
 
@@ -109,9 +224,9 @@ static void titsc_step_config(struct titsc *ts_dev)
 
 	config = 0;
 	/* Charge step configuration */
-	config = STEPCONFIG_XPP | STEPCONFIG_YNN |
+	config = ts_dev->bit_xp | ts_dev->bit_yn |
 			STEPCHARGE_RFP_XPUL | STEPCHARGE_RFM_XNUR |
-			STEPCHARGE_INM_AN1 | STEPCHARGE_INP_AN1;
+			STEPCHARGE_INM_AN1 | STEPCHARGE_INP(ts_dev->inp_yp);
 
 	titsc_writel(ts_dev, REG_CHARGECONFIG, config);
 	titsc_writel(ts_dev, REG_CHARGEDELAY, CHARGEDLY_OPENDLY);
@@ -119,13 +234,14 @@ static void titsc_step_config(struct titsc *ts_dev)
 	config = 0;
 	/* Configure to calculate pressure */
 	config = STEPCONFIG_MODE_HWSYNC |
-			STEPCONFIG_AVG_16 | STEPCONFIG_YPP |
-			STEPCONFIG_XNN | STEPCONFIG_INM_ADCREFM;
+			STEPCONFIG_AVG_16 | ts_dev->bit_yp |
+			ts_dev->bit_xn | STEPCONFIG_INM_ADCREFM |
+			STEPCONFIG_INP(ts_dev->inp_xp);
 	titsc_writel(ts_dev, REG_STEPCONFIG(total_steps + 1), config);
 	titsc_writel(ts_dev, REG_STEPDELAY(total_steps + 1),
 			STEPCONFIG_OPENDLY);
 
-	config |= STEPCONFIG_INP_AN3 | STEPCONFIG_FIFO1;
+	config |= STEPCONFIG_INP(ts_dev->inp_yn) | STEPCONFIG_FIFO1;
 	titsc_writel(ts_dev, REG_STEPCONFIG(total_steps + 2), config);
 	titsc_writel(ts_dev, REG_STEPDELAY(total_steps + 2),
 			STEPCONFIG_OPENDLY);
@@ -295,6 +411,8 @@ static int titsc_probe(struct platform_device *pdev)
 	ts_dev->wires = pdata->tsc_init->wires;
 	ts_dev->x_plate_resistance = pdata->tsc_init->x_plate_resistance;
 	ts_dev->steps_to_configure = pdata->tsc_init->steps_to_configure;
+	memcpy(ts_dev->config_inp, pdata->tsc_init->wire_config,
+			sizeof(pdata->tsc_init->wire_config));
 
 	err = request_irq(ts_dev->irq, titsc_irq,
 			  0, pdev->dev.driver->name, ts_dev);
@@ -304,6 +422,11 @@ static int titsc_probe(struct platform_device *pdev)
 	}
 
 	titsc_writel(ts_dev, REG_IRQENABLE, IRQENB_FIFO0THRES);
+	err = titsc_config_wires(ts_dev);
+	if (err) {
+		dev_err(&pdev->dev, "wrong i/p wire configuration\n");
+		goto err_free_irq;
+	}
 	titsc_step_config(ts_dev);
 	titsc_writel(ts_dev, REG_FIFO0THR, ts_dev->steps_to_configure);
 
@@ -373,6 +496,7 @@ static int titsc_resume(struct device *dev)
 				0x00);
 		titsc_writel(ts_dev, REG_IRQCLR, IRQENB_HW_PEN);
 	}
+	titsc_config_wires(ts_dev);
 	titsc_step_config(ts_dev);
 	titsc_writel(ts_dev, REG_FIFO0THR,
 			ts_dev->steps_to_configure);
diff --git a/include/linux/input/ti_am335x_tsc.h b/include/linux/input/ti_am335x_tsc.h
index 49269a2..6a66b4d 100644
--- a/include/linux/input/ti_am335x_tsc.h
+++ b/include/linux/input/ti_am335x_tsc.h
@@ -12,12 +12,24 @@
  *			A step configured to read a single
  *			co-ordinate value, can be applied
  *			more number of times for better results.
+ * @wire_config:	Different EVM's could have a different order
+ *			for connecting wires on touchscreen.
+ *			We need to provide an 8 bit number where in
+ *			the 1st four bits represent the analog lines
+ *			and the next 4 bits represent positive/
+ *			negative terminal on that input line.
+ *			Notations to represent the input lines and
+ *			terminals resoectively is as follows:
+ *			AIN0 = 0, AIN1 = 1 and so on till AIN7 = 7.
+ *			XP  = 0, XN = 1, YP = 2, YN = 3.
+ *
  */
 
 struct tsc_data {
 	int wires;
 	int x_plate_resistance;
 	int steps_to_configure;
+	int wire_config[10];
 };
 
 #endif
diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
index 23e4f33..9624fea 100644
--- a/include/linux/mfd/ti_am335x_tscadc.h
+++ b/include/linux/mfd/ti_am335x_tscadc.h
@@ -72,8 +72,6 @@
 #define STEPCONFIG_INM_ADCREFM	STEPCONFIG_INM(8)
 #define STEPCONFIG_INP_MASK	(0xF << 19)
 #define STEPCONFIG_INP(val)	((val) << 19)
-#define STEPCONFIG_INP_AN2	STEPCONFIG_INP(2)
-#define STEPCONFIG_INP_AN3	STEPCONFIG_INP(3)
 #define STEPCONFIG_INP_AN4	STEPCONFIG_INP(4)
 #define STEPCONFIG_INP_ADCREFM	STEPCONFIG_INP(8)
 #define STEPCONFIG_FIFO1	BIT(26)
@@ -95,7 +93,6 @@
 #define STEPCHARGE_INM_AN1	STEPCHARGE_INM(1)
 #define STEPCHARGE_INP_MASK	(0xF << 19)
 #define STEPCHARGE_INP(val)	((val) << 19)
-#define STEPCHARGE_INP_AN1	STEPCHARGE_INP(1)
 #define STEPCHARGE_RFM_MASK	(3 << 23)
 #define STEPCHARGE_RFM(val)	((val) << 23)
 #define STEPCHARGE_RFM_XNUR	STEPCHARGE_RFM(1)
@@ -117,6 +114,13 @@
 #define CNTRLREG_8WIRE		CNTRLREG_AFE_CTRL(3)
 #define CNTRLREG_TSCENB		BIT(7)
 
+#define XPP			STEPCONFIG_XPP
+#define XNP			STEPCONFIG_XNP
+#define XNN			STEPCONFIG_XNN
+#define YPP			STEPCONFIG_YPP
+#define YPN			STEPCONFIG_YPN
+#define YNN			STEPCONFIG_YNN
+
 #define ADC_CLK			3000000
 #define	MAX_CLK_DIV		7
 #define TOTAL_STEPS		16
-- 
1.7.9.5


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

* [PATCH v4 3/8] input: touchscreen: ti_tsc: remove unwanted fifo flush
  2013-01-24  3:45 [PATCH v4 0/8] MFD: ti_am335x_tscadc: DT support and TSC features addition Patil, Rachna
  2013-01-24  3:45 ` [PATCH v4 1/8] input: ti_am335x_tsc: Step enable bits made configurable Patil, Rachna
  2013-01-24  3:45 ` [PATCH v4 2/8] input: ti_am335x_tsc: Order of TSC wires, " Patil, Rachna
@ 2013-01-24  3:45 ` Patil, Rachna
  2013-01-24  3:45 ` [PATCH v4 4/8] MFD: ti_am335x_tscadc: add device tree binding information Patil, Rachna
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 15+ messages in thread
From: Patil, Rachna @ 2013-01-24  3:45 UTC (permalink / raw)
  To: linux-doc, devicetree-discuss, linux-kernel, linux-input,
	linux-iio, linux-omap, linux-arm-kernel
  Cc: Samuel Ortiz, Dmitry Torokhov, Dmitry Torokhov, Rob Herring,
	Jonathan Cameron, Tony Lindgren, Benit Cousson, Grant Likely,
	Rob Landley, Russell King, gururaja.hebbar, Patil, Rachna

From: "Patil, Rachna" <rachna@ti.com>

When touchscreen and ADC are used together, this
unwanted fifo flush leads to loss of ADC data.

Signed-off-by: Patil, Rachna <rachna@ti.com>
---
 drivers/input/touchscreen/ti_am335x_tsc.c |   10 ----------
 1 file changed, 10 deletions(-)

diff --git a/drivers/input/touchscreen/ti_am335x_tsc.c b/drivers/input/touchscreen/ti_am335x_tsc.c
index 0c460f9..064d2b2 100644
--- a/drivers/input/touchscreen/ti_am335x_tsc.c
+++ b/drivers/input/touchscreen/ti_am335x_tsc.c
@@ -308,8 +308,6 @@ static irqreturn_t titsc_irq(int irq, void *dev)
 	unsigned int x = 0, y = 0;
 	unsigned int z1, z2, z;
 	unsigned int fsm;
-	unsigned int fifo1count, fifo0count;
-	int i;
 
 	status = titsc_readl(ts_dev, REG_IRQSTATUS);
 	if (status & IRQENB_FIFO0THRES) {
@@ -318,14 +316,6 @@ static irqreturn_t titsc_irq(int irq, void *dev)
 		z1 = titsc_readl(ts_dev, REG_FIFO0) & 0xfff;
 		z2 = titsc_readl(ts_dev, REG_FIFO1) & 0xfff;
 
-		fifo1count = titsc_readl(ts_dev, REG_FIFO1CNT);
-		for (i = 0; i < fifo1count; i++)
-			titsc_readl(ts_dev, REG_FIFO1);
-
-		fifo0count = titsc_readl(ts_dev, REG_FIFO0CNT);
-		for (i = 0; i < fifo0count; i++)
-			titsc_readl(ts_dev, REG_FIFO0);
-
 		if (ts_dev->pen_down && z1 != 0 && z2 != 0) {
 			/*
 			 * Calculate pressure using formula
-- 
1.7.9.5


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

* [PATCH v4 4/8] MFD: ti_am335x_tscadc: add device tree binding information
  2013-01-24  3:45 [PATCH v4 0/8] MFD: ti_am335x_tscadc: DT support and TSC features addition Patil, Rachna
                   ` (2 preceding siblings ...)
  2013-01-24  3:45 ` [PATCH v4 3/8] input: touchscreen: ti_tsc: remove unwanted fifo flush Patil, Rachna
@ 2013-01-24  3:45 ` Patil, Rachna
  2013-01-27 14:11   ` Peter Korsgaard
  2013-01-24  3:45 ` [PATCH v4 5/8] MFD: ti_am335x_tscadc: Add DT support Patil, Rachna
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 15+ messages in thread
From: Patil, Rachna @ 2013-01-24  3:45 UTC (permalink / raw)
  To: linux-doc, devicetree-discuss, linux-kernel, linux-input,
	linux-iio, linux-omap, linux-arm-kernel
  Cc: Samuel Ortiz, Dmitry Torokhov, Dmitry Torokhov, Rob Herring,
	Jonathan Cameron, Tony Lindgren, Benit Cousson, Grant Likely,
	Rob Landley, Russell King, gururaja.hebbar, Patil, Rachna

From: "Patil, Rachna" <rachna@ti.com>

Signed-off-by: Patil, Rachna <rachna@ti.com>
---
Changes in v4:
	Subnodes and their properties documentation added.
	Non-standard properties prefixed with vendor name.

 .../devicetree/bindings/mfd/ti_am335x_tscadc.txt   |   52 ++++++++++++++++++++
 1 file changed, 52 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mfd/ti_am335x_tscadc.txt

diff --git a/Documentation/devicetree/bindings/mfd/ti_am335x_tscadc.txt b/Documentation/devicetree/bindings/mfd/ti_am335x_tscadc.txt
new file mode 100644
index 0000000..0100771
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/ti_am335x_tscadc.txt
@@ -0,0 +1,52 @@
+Texas Instruments - TSC / ADC multi-functional device
+
+ti_tscadc is a multi-function device with touchscreen and ADC on chip.
+This document describes the binding for mfd device.
+
+Required properties:
+- compatible: "ti,ti-tscadc"
+- reg: Specifies the address of MFD block
+- interrupts: IRQ line connected to the main SoC
+- interrupt-parent: The parent interrupt controller
+
+Optional properties:
+- ti,hwmods: Hardware information related to TSC/ADC MFD device
+
+Sub-nodes:
+Device			Description
+------			-----------
+tsc			Touchscreen
+adc			Analog to digital converter
+
+Sub-node device required properties:
+tsc:
+- ti,wires:  4/5/8 wire touchscreen support on the platform.
+- ti,x-plate-resistance: X plate resistance.
+- ti,steps-to-configure: A step is configured to read a single co-ordinate value,
+			can be applied more number of times for better results.
+- ti,wire-config: Order for connecting wires on touchscreen.
+
+adc:
+- ti,adc-channels: Number of ADC channels used.
+
+Example:
+
+	tscadc: tscadc@44e0d000 {
+		compatible = "ti,ti-tscadc";
+		reg = <0x44e0d000 0x1000>;
+
+		interrupt-parent = <&intc>;
+		interrupts = <16>;
+		ti,hwmods = "adc_tsc";
+
+		tsc {
+			ti,wires = <4>;
+			ti,x-plate-resistance = <200>;
+			ti,steps-to-configure = <5>;
+			ti,wire-config = <0x00 0x11 0x22 0x33>;
+		};
+
+		adc {
+			ti,adc-channels = <4>;
+		};
+	};
-- 
1.7.9.5


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

* [PATCH v4 5/8] MFD: ti_am335x_tscadc: Add DT support
  2013-01-24  3:45 [PATCH v4 0/8] MFD: ti_am335x_tscadc: DT support and TSC features addition Patil, Rachna
                   ` (3 preceding siblings ...)
  2013-01-24  3:45 ` [PATCH v4 4/8] MFD: ti_am335x_tscadc: add device tree binding information Patil, Rachna
@ 2013-01-24  3:45 ` Patil, Rachna
  2013-01-30 10:40   ` Koen Kooi
  2013-01-24  3:45 ` [PATCH v4 6/8] input: ti_am335x_tsc: " Patil, Rachna
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 15+ messages in thread
From: Patil, Rachna @ 2013-01-24  3:45 UTC (permalink / raw)
  To: linux-doc, devicetree-discuss, linux-kernel, linux-input,
	linux-iio, linux-omap, linux-arm-kernel
  Cc: Samuel Ortiz, Dmitry Torokhov, Dmitry Torokhov, Rob Herring,
	Jonathan Cameron, Tony Lindgren, Benit Cousson, Grant Likely,
	Rob Landley, Russell King, gururaja.hebbar, Patil, Rachna

From: "Patil, Rachna" <rachna@ti.com>

Make changes to add DT support in the MFD core driver.

Signed-off-by: Patil, Rachna <rachna@ti.com>
---
Changes in v4:
	Non-standard properties prefixed with vendor name.

 drivers/mfd/ti_am335x_tscadc.c |   28 +++++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index e9f3fb5..87b446b 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -22,6 +22,8 @@
 #include <linux/regmap.h>
 #include <linux/mfd/core.h>
 #include <linux/pm_runtime.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
 
 #include <linux/mfd/ti_am335x_tscadc.h>
 #include <linux/input/ti_am335x_tsc.h>
@@ -64,20 +66,31 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	struct resource		*res;
 	struct clk		*clk;
 	struct mfd_tscadc_board	*pdata = pdev->dev.platform_data;
+	struct device_node	*node = pdev->dev.of_node;
 	struct mfd_cell		*cell;
 	int			err, ctrl;
 	int			clk_value, clock_rate;
-	int			tsc_wires, adc_channels = 0, total_channels;
+	int			tsc_wires = 0, adc_channels = 0, total_channels;
 
-	if (!pdata) {
+	if (!pdata && !pdev->dev.of_node) {
 		dev_err(&pdev->dev, "Could not find platform data\n");
 		return -EINVAL;
 	}
 
-	if (pdata->adc_init)
-		adc_channels = pdata->adc_init->adc_channels;
+	if (pdev->dev.platform_data) {
+		if (pdata->tsc_init)
+			tsc_wires = pdata->tsc_init->wires;
+
+		if (pdata->adc_init)
+			adc_channels = pdata->adc_init->adc_channels;
+	} else {
+		node = of_find_node_by_name(pdev->dev.of_node, "tsc");
+		of_property_read_u32(node, "ti,wires", &tsc_wires);
+
+		node = of_find_node_by_name(pdev->dev.of_node, "adc");
+		of_property_read_u32(node, "ti,adc-channels", &adc_channels);
+	}
 
-	tsc_wires = pdata->tsc_init->wires;
 	total_channels = tsc_wires + adc_channels;
 
 	if (total_channels > 8) {
@@ -256,11 +269,16 @@ static const struct dev_pm_ops tscadc_pm_ops = {
 #define TSCADC_PM_OPS NULL
 #endif
 
+static const struct of_device_id ti_tscadc_dt_ids[] = {
+	{ .compatible = "ti,ti-tscadc", },
+};
+
 static struct platform_driver ti_tscadc_driver = {
 	.driver = {
 		.name   = "ti_tscadc",
 		.owner	= THIS_MODULE,
 		.pm	= TSCADC_PM_OPS,
+		.of_match_table = of_match_ptr(ti_tscadc_dt_ids),
 	},
 	.probe	= ti_tscadc_probe,
 	.remove	= ti_tscadc_remove,
-- 
1.7.9.5


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

* [PATCH v4 6/8] input: ti_am335x_tsc: Add DT support
  2013-01-24  3:45 [PATCH v4 0/8] MFD: ti_am335x_tscadc: DT support and TSC features addition Patil, Rachna
                   ` (4 preceding siblings ...)
  2013-01-24  3:45 ` [PATCH v4 5/8] MFD: ti_am335x_tscadc: Add DT support Patil, Rachna
@ 2013-01-24  3:45 ` Patil, Rachna
  2013-01-24  3:45 ` [PATCH v4 7/8] IIO: ti_am335x_adc: " Patil, Rachna
  2013-01-24  3:45 ` [PATCH v4 8/8] arm/dts: AM335x-evm: Add TSC/ADC MFD device support Patil, Rachna
  7 siblings, 0 replies; 15+ messages in thread
From: Patil, Rachna @ 2013-01-24  3:45 UTC (permalink / raw)
  To: linux-doc, devicetree-discuss, linux-kernel, linux-input,
	linux-iio, linux-omap, linux-arm-kernel
  Cc: Samuel Ortiz, Dmitry Torokhov, Dmitry Torokhov, Rob Herring,
	Jonathan Cameron, Tony Lindgren, Benit Cousson, Grant Likely,
	Rob Landley, Russell King, gururaja.hebbar, Patil, Rachna

From: "Patil, Rachna" <rachna@ti.com>

Add DT support for client touchscreen driver

Signed-off-by: Patil, Rachna <rachna@ti.com>
---
Changes in v4:
	Non-standard properties prefixed with vendor name.

 drivers/input/touchscreen/ti_am335x_tsc.c |   94 +++++++++++++++++++++++++----
 1 file changed, 81 insertions(+), 13 deletions(-)

diff --git a/drivers/input/touchscreen/ti_am335x_tsc.c b/drivers/input/touchscreen/ti_am335x_tsc.c
index 064d2b2..6ff5a76 100644
--- a/drivers/input/touchscreen/ti_am335x_tsc.c
+++ b/drivers/input/touchscreen/ti_am335x_tsc.c
@@ -26,6 +26,8 @@
 #include <linux/io.h>
 #include <linux/input/ti_am335x_tsc.h>
 #include <linux/delay.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
 
 #include <linux/mfd/ti_am335x_tscadc.h>
 
@@ -366,6 +368,74 @@ static irqreturn_t titsc_irq(int irq, void *dev)
 	return IRQ_HANDLED;
 }
 
+static int titsc_parse_dt(struct ti_tscadc_dev *tscadc_dev,
+					struct titsc *ts_dev)
+{
+	struct device_node *node = tscadc_dev->dev->of_node;
+	int err, i;
+	u32 val32, wires_conf[4];
+
+	if (!node)
+		return -EINVAL;
+	else {
+		node = of_find_node_by_name(node, "tsc");
+		if (!node)
+			return -EINVAL;
+		else {
+			err = of_property_read_u32(node, "ti,wires", &val32);
+			if (err < 0)
+				goto error_ret;
+			else
+				ts_dev->wires = val32;
+
+			err = of_property_read_u32(node,
+					"ti,x-plate-resistance", &val32);
+			if (err < 0)
+				goto error_ret;
+			else
+				ts_dev->x_plate_resistance = val32;
+
+			err = of_property_read_u32(node,
+					"ti,steps-to-configure", &val32);
+			if (err < 0)
+				goto error_ret;
+			else
+				ts_dev->steps_to_configure = val32;
+
+			err = of_property_read_u32_array(node, "ti,wire-config",
+					wires_conf, ARRAY_SIZE(wires_conf));
+			if (err < 0)
+				goto error_ret;
+			else {
+				for (i = 0; i < ARRAY_SIZE(wires_conf); i++)
+					ts_dev->config_inp[i] = wires_conf[i];
+			}
+		}
+	}
+	return 0;
+
+error_ret:
+	return err;
+}
+
+static int titsc_parse_pdata(struct ti_tscadc_dev *tscadc_dev,
+					struct titsc *ts_dev)
+{
+	struct mfd_tscadc_board	*pdata = tscadc_dev->dev->platform_data;
+
+	if (!pdata)
+		return -EINVAL;
+
+	ts_dev->wires = pdata->tsc_init->wires;
+	ts_dev->x_plate_resistance =
+		pdata->tsc_init->x_plate_resistance;
+	ts_dev->steps_to_configure =
+		pdata->tsc_init->steps_to_configure;
+	memcpy(ts_dev->config_inp, pdata->tsc_init->wire_config,
+		sizeof(pdata->tsc_init->wire_config));
+	return 0;
+}
+
 /*
  * The functions for inserting/removing driver as a module.
  */
@@ -375,16 +445,8 @@ static int titsc_probe(struct platform_device *pdev)
 	struct titsc *ts_dev;
 	struct input_dev *input_dev;
 	struct ti_tscadc_dev *tscadc_dev = pdev->dev.platform_data;
-	struct mfd_tscadc_board	*pdata;
 	int err;
 
-	pdata = tscadc_dev->dev->platform_data;
-
-	if (!pdata) {
-		dev_err(&pdev->dev, "Could not find platform data\n");
-		return -EINVAL;
-	}
-
 	/* Allocate memory for device */
 	ts_dev = kzalloc(sizeof(struct titsc), GFP_KERNEL);
 	input_dev = input_allocate_device();
@@ -398,11 +460,17 @@ static int titsc_probe(struct platform_device *pdev)
 	ts_dev->mfd_tscadc = tscadc_dev;
 	ts_dev->input = input_dev;
 	ts_dev->irq = tscadc_dev->irq;
-	ts_dev->wires = pdata->tsc_init->wires;
-	ts_dev->x_plate_resistance = pdata->tsc_init->x_plate_resistance;
-	ts_dev->steps_to_configure = pdata->tsc_init->steps_to_configure;
-	memcpy(ts_dev->config_inp, pdata->tsc_init->wire_config,
-			sizeof(pdata->tsc_init->wire_config));
+
+	if (tscadc_dev->dev->platform_data)
+		err = titsc_parse_pdata(tscadc_dev, ts_dev);
+	else
+		err = titsc_parse_dt(tscadc_dev, ts_dev);
+
+	if (err) {
+		dev_err(&pdev->dev, "Could not find platform data\n");
+		err = -EINVAL;
+		goto err_free_mem;
+	}
 
 	err = request_irq(ts_dev->irq, titsc_irq,
 			  0, pdev->dev.driver->name, ts_dev);
-- 
1.7.9.5


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

* [PATCH v4 7/8] IIO: ti_am335x_adc: Add DT support
  2013-01-24  3:45 [PATCH v4 0/8] MFD: ti_am335x_tscadc: DT support and TSC features addition Patil, Rachna
                   ` (5 preceding siblings ...)
  2013-01-24  3:45 ` [PATCH v4 6/8] input: ti_am335x_tsc: " Patil, Rachna
@ 2013-01-24  3:45 ` Patil, Rachna
  2013-01-24  3:45 ` [PATCH v4 8/8] arm/dts: AM335x-evm: Add TSC/ADC MFD device support Patil, Rachna
  7 siblings, 0 replies; 15+ messages in thread
From: Patil, Rachna @ 2013-01-24  3:45 UTC (permalink / raw)
  To: linux-doc, devicetree-discuss, linux-kernel, linux-input,
	linux-iio, linux-omap, linux-arm-kernel
  Cc: Samuel Ortiz, Dmitry Torokhov, Dmitry Torokhov, Rob Herring,
	Jonathan Cameron, Tony Lindgren, Benit Cousson, Grant Likely,
	Rob Landley, Russell King, gururaja.hebbar, Patil, Rachna

From: "Patil, Rachna" <rachna@ti.com>

Add DT support for client ADC driver.

Signed-off-by: Patil, Rachna <rachna@ti.com>
---
Changes in v4:
	Non-standard properties prefixed with vendor name.

 drivers/iio/adc/ti_am335x_adc.c |   26 ++++++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index cd030e1..8e7b089 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -22,6 +22,8 @@
 #include <linux/platform_device.h>
 #include <linux/io.h>
 #include <linux/iio/iio.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
 
 #include <linux/mfd/ti_am335x_tscadc.h>
 #include <linux/platform_data/ti_am335x_adc.h>
@@ -141,11 +143,12 @@ static int tiadc_probe(struct platform_device *pdev)
 	struct iio_dev		*indio_dev;
 	struct tiadc_device	*adc_dev;
 	struct ti_tscadc_dev	*tscadc_dev = pdev->dev.platform_data;
-	struct mfd_tscadc_board	*pdata;
+	struct mfd_tscadc_board	*pdata = tscadc_dev->dev->platform_data;
+	struct device_node	*node = tscadc_dev->dev->of_node;
 	int			err;
+	u32			val32;
 
-	pdata = tscadc_dev->dev->platform_data;
-	if (!pdata || !pdata->adc_init) {
+	if (!pdata && !node) {
 		dev_err(&pdev->dev, "Could not find platform data\n");
 		return -EINVAL;
 	}
@@ -159,7 +162,22 @@ static int tiadc_probe(struct platform_device *pdev)
 	adc_dev = iio_priv(indio_dev);
 
 	adc_dev->mfd_tscadc = tscadc_dev;
-	adc_dev->channels = pdata->adc_init->adc_channels;
+
+	if (pdata)
+		adc_dev->channels = pdata->adc_init->adc_channels;
+	else {
+		node = of_find_node_by_name(node, "adc");
+		if (!node)
+			return  -EINVAL;
+		else {
+			err = of_property_read_u32(node,
+					"ti,adc-channels", &val32);
+			if (err < 0)
+				goto err_free_device;
+			else
+				adc_dev->channels = val32;
+		}
+	}
 
 	indio_dev->dev.parent = &pdev->dev;
 	indio_dev->name = dev_name(&pdev->dev);
-- 
1.7.9.5


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

* [PATCH v4 8/8] arm/dts: AM335x-evm: Add TSC/ADC MFD device support
  2013-01-24  3:45 [PATCH v4 0/8] MFD: ti_am335x_tscadc: DT support and TSC features addition Patil, Rachna
                   ` (6 preceding siblings ...)
  2013-01-24  3:45 ` [PATCH v4 7/8] IIO: ti_am335x_adc: " Patil, Rachna
@ 2013-01-24  3:45 ` Patil, Rachna
  7 siblings, 0 replies; 15+ messages in thread
From: Patil, Rachna @ 2013-01-24  3:45 UTC (permalink / raw)
  To: linux-doc, devicetree-discuss, linux-kernel, linux-input,
	linux-iio, linux-omap, linux-arm-kernel
  Cc: Samuel Ortiz, Dmitry Torokhov, Dmitry Torokhov, Rob Herring,
	Jonathan Cameron, Tony Lindgren, Benit Cousson, Grant Likely,
	Rob Landley, Russell King, gururaja.hebbar, Patil, Rachna

From: "Patil, Rachna" <rachna@ti.com>

Add support for core multifunctional device along
with its clients touchscreen and ADC.

Signed-off-by: Patil, Rachna <rachna@ti.com>
---
Changes in v4:
	Non-standard properties prefixed with vendor name.

 arch/arm/boot/dts/am335x-evm.dts |   13 +++++++++++++
 arch/arm/boot/dts/am33xx.dtsi    |    8 ++++++++
 2 files changed, 21 insertions(+)

diff --git a/arch/arm/boot/dts/am335x-evm.dts b/arch/arm/boot/dts/am335x-evm.dts
index d649644..bfd7928 100644
--- a/arch/arm/boot/dts/am335x-evm.dts
+++ b/arch/arm/boot/dts/am335x-evm.dts
@@ -244,3 +244,16 @@
 &cpsw_emac1 {
 	phy_id = <&davinci_mdio>, <1>;
 };
+
+&tscadc {
+	tsc {
+		ti,wires = <4>;
+		ti,x-plate-resistance = <200>;
+		ti,steps-to-configure = <5>;
+		ti,wire-config = <0x00 0x11 0x22 0x33>;
+	};
+
+	adc {
+		ti,adc-channels = <4>;
+	};
+};
diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
index c2f14e8..211ec42 100644
--- a/arch/arm/boot/dts/am33xx.dtsi
+++ b/arch/arm/boot/dts/am33xx.dtsi
@@ -385,5 +385,13 @@
 				mac-address = [ 00 00 00 00 00 00 ];
 			};
 		};
+
+		tscadc: tscadc@44e0d000 {
+			compatible = "ti,ti-tscadc";
+			reg = <0x44e0d000 0x1000>;
+			interrupt-parent = <&intc>;
+			interrupts = <16>;
+			ti,hwmods = "adc_tsc";
+		};
 	};
 };
-- 
1.7.9.5


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

* Re: [PATCH v4 4/8] MFD: ti_am335x_tscadc: add device tree binding information
  2013-01-24  3:45 ` [PATCH v4 4/8] MFD: ti_am335x_tscadc: add device tree binding information Patil, Rachna
@ 2013-01-27 14:11   ` Peter Korsgaard
  0 siblings, 0 replies; 15+ messages in thread
From: Peter Korsgaard @ 2013-01-27 14:11 UTC (permalink / raw)
  To: Patil, Rachna
  Cc: linux-doc, devicetree-discuss, linux-kernel, linux-input,
	linux-iio, linux-omap, linux-arm-kernel, Samuel Ortiz,
	Dmitry Torokhov, Dmitry Torokhov, Rob Herring, Jonathan Cameron,
	Tony Lindgren, Benit Cousson, Grant Likely, Rob Landley,
	Russell King, gururaja.hebbar

>>>>> "P" == Patil, Rachna <rachna@ti.com> writes:

Hi,

 P> From: "Patil, Rachna" <rachna@ti.com>
 P> Signed-off-by: Patil, Rachna <rachna@ti.com>
 P> ---
 P> Changes in v4:
 P> 	Subnodes and their properties documentation added.
 P> 	Non-standard properties prefixed with vendor name.

 P>  .../devicetree/bindings/mfd/ti_am335x_tscadc.txt   |   52 ++++++++++++++++++++
 P>  1 file changed, 52 insertions(+)
 P>  create mode 100644 Documentation/devicetree/bindings/mfd/ti_am335x_tscadc.txt

 P> diff --git a/Documentation/devicetree/bindings/mfd/ti_am335x_tscadc.txt b/Documentation/devicetree/bindings/mfd/ti_am335x_tscadc.txt
 P> new file mode 100644
 P> index 0000000..0100771
 P> --- /dev/null
 P> +++ b/Documentation/devicetree/bindings/mfd/ti_am335x_tscadc.txt
 P> @@ -0,0 +1,52 @@
 P> +Texas Instruments - TSC / ADC multi-functional device
 P> +
 P> +ti_tscadc is a multi-function device with touchscreen and ADC on chip.
 P> +This document describes the binding for mfd device.
 P> +
 P> +Required properties:
 P> +- compatible: "ti,ti-tscadc"

That's a very generic name (and double ti). How about ti,am3352-tsadc
instead?

No pinmux?


 P> +Sub-node device required properties:
 P> +tsc:
 P> +- ti,wires:  4/5/8 wire touchscreen support on the platform.
 P> +- ti,x-plate-resistance: X plate resistance.

In what kind of units?


 P> +- ti,steps-to-configure: A step is configured to read a single co-ordinate value,
 P> +			can be applied more number of times for better results.

So it is some kind of averaging? Doesn't tslib do that for you already?
Is there any limit to how many steps you can/will handle?


 P> +- ti,wire-config: Order for connecting wires on touchscreen.

ti,wires seems redundant given ti,wire-config (E.G. number of elements
in array). It is not clear to me what the magic values in wire-config
mean?

 P> +
 P> +adc:
 P> +- ti,adc-channels: Number of ADC channels used.

Is there ever any use case for this being something else than 8 -
ti,wires?

-- 
Bye, Peter Korsgaard

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

* Re: [PATCH v4 5/8] MFD: ti_am335x_tscadc: Add DT support
  2013-01-24  3:45 ` [PATCH v4 5/8] MFD: ti_am335x_tscadc: Add DT support Patil, Rachna
@ 2013-01-30 10:40   ` Koen Kooi
  2013-01-31  4:11     ` Patil, Rachna
  0 siblings, 1 reply; 15+ messages in thread
From: Koen Kooi @ 2013-01-30 10:40 UTC (permalink / raw)
  To: Patil, Rachna
  Cc: linux-doc, devicetree-discuss, linux-kernel, linux-input,
	linux-iio, linux-omap, linux-arm-kernel, Samuel Ortiz,
	Dmitry Torokhov, Dmitry Torokhov, Rob Herring, Jonathan Cameron,
	Tony Lindgren, Benit Cousson, Grant Likely, Rob Landley,
	Russell King, gururaja.hebbar


Op 24 jan. 2013, om 04:45 heeft "Patil, Rachna" <rachna@ti.com> het volgende geschreven:

> From: "Patil, Rachna" <rachna@ti.com>
> 
> Make changes to add DT support in the MFD core driver.
> 
> Signed-off-by: Patil, Rachna <rachna@ti.com>
> ---
> Changes in v4:
> 	Non-standard properties prefixed with vendor name.
> 
> drivers/mfd/ti_am335x_tscadc.c |   28 +++++++++++++++++++++++-----
> 1 file changed, 23 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> index e9f3fb5..87b446b 100644
> --- a/drivers/mfd/ti_am335x_tscadc.c
> +++ b/drivers/mfd/ti_am335x_tscadc.c
> @@ -22,6 +22,8 @@
> #include <linux/regmap.h>
> #include <linux/mfd/core.h>
> #include <linux/pm_runtime.h>
> +#include <linux/of.h>
> +#include <linux/of_device.h>
> 
> #include <linux/mfd/ti_am335x_tscadc.h>
> #include <linux/input/ti_am335x_tsc.h>
> @@ -64,20 +66,31 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
> 	struct resource		*res;
> 	struct clk		*clk;
> 	struct mfd_tscadc_board	*pdata = pdev->dev.platform_data;
> +	struct device_node	*node = pdev->dev.of_node;
> 	struct mfd_cell		*cell;
> 	int			err, ctrl;
> 	int			clk_value, clock_rate;
> -	int			tsc_wires, adc_channels = 0, total_channels;
> +	int			tsc_wires = 0, adc_channels = 0, total_channels;
> 
> -	if (!pdata) {
> +	if (!pdata && !pdev->dev.of_node) {
> 		dev_err(&pdev->dev, "Could not find platform data\n");
> 		return -EINVAL;
> 	}
> 
> -	if (pdata->adc_init)
> -		adc_channels = pdata->adc_init->adc_channels;
> +	if (pdev->dev.platform_data) {
> +		if (pdata->tsc_init)
> +			tsc_wires = pdata->tsc_init->wires;
> +
> +		if (pdata->adc_init)
> +			adc_channels = pdata->adc_init->adc_channels;
> +	} else {
> +		node = of_find_node_by_name(pdev->dev.of_node, "tsc");
> +		of_property_read_u32(node, "ti,wires", &tsc_wires);
> +
> +		node = of_find_node_by_name(pdev->dev.of_node, "adc");
> +		of_property_read_u32(node, "ti,adc-channels", &adc_channels);
> +	}

Since AM335x is DT only, why is there a platform data codepath and why is it the first branch it tries? And I guess the next question is related to the first: why doesn't it work when used with DT? When I copy over the nodes from the evm.dts to my board I get "tsc tsc: Missing platform data" in dmesg.

What are the chances this driver will work when applied on top of 3.8-rcX? Has it even been tested with that? Has it been tested at all?




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

* RE: [PATCH v4 5/8] MFD: ti_am335x_tscadc: Add DT support
  2013-01-30 10:40   ` Koen Kooi
@ 2013-01-31  4:11     ` Patil, Rachna
  2013-01-31  5:02       ` Hiremath, Vaibhav
  0 siblings, 1 reply; 15+ messages in thread
From: Patil, Rachna @ 2013-01-31  4:11 UTC (permalink / raw)
  To: Koen Kooi
  Cc: linux-doc, devicetree-discuss, linux-kernel, linux-input,
	linux-iio, linux-omap, linux-arm-kernel, Samuel Ortiz,
	Dmitry Torokhov, Dmitry Torokhov, Rob Herring, Jonathan Cameron,
	Tony Lindgren, Cousson, Benoit, Grant Likely, Rob Landley,
	Russell King, Hebbar, Gururaja

On Wed, Jan 30, 2013 at 16:10:09, Koen Kooi wrote:
> 
> Op 24 jan. 2013, om 04:45 heeft "Patil, Rachna" <rachna@ti.com> het volgende geschreven:
> 
> > From: "Patil, Rachna" <rachna@ti.com>
> > 
> > Make changes to add DT support in the MFD core driver.
> > 
> > Signed-off-by: Patil, Rachna <rachna@ti.com>
> > ---
> > Changes in v4:
> > 	Non-standard properties prefixed with vendor name.
> > 
> > drivers/mfd/ti_am335x_tscadc.c |   28 +++++++++++++++++++++++-----
> > 1 file changed, 23 insertions(+), 5 deletions(-)
> > 
> > diff --git a/drivers/mfd/ti_am335x_tscadc.c 
> > b/drivers/mfd/ti_am335x_tscadc.c index e9f3fb5..87b446b 100644
> > --- a/drivers/mfd/ti_am335x_tscadc.c
> > +++ b/drivers/mfd/ti_am335x_tscadc.c
> > @@ -22,6 +22,8 @@
> > #include <linux/regmap.h>
> > #include <linux/mfd/core.h>
> > #include <linux/pm_runtime.h>
> > +#include <linux/of.h>
> > +#include <linux/of_device.h>
> > 
> > #include <linux/mfd/ti_am335x_tscadc.h> #include 
> > <linux/input/ti_am335x_tsc.h>
> > @@ -64,20 +66,31 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
> > 	struct resource		*res;
> > 	struct clk		*clk;
> > 	struct mfd_tscadc_board	*pdata = pdev->dev.platform_data;
> > +	struct device_node	*node = pdev->dev.of_node;
> > 	struct mfd_cell		*cell;
> > 	int			err, ctrl;
> > 	int			clk_value, clock_rate;
> > -	int			tsc_wires, adc_channels = 0, total_channels;
> > +	int			tsc_wires = 0, adc_channels = 0, total_channels;
> > 
> > -	if (!pdata) {
> > +	if (!pdata && !pdev->dev.of_node) {
> > 		dev_err(&pdev->dev, "Could not find platform data\n");
> > 		return -EINVAL;
> > 	}
> > 
> > -	if (pdata->adc_init)
> > -		adc_channels = pdata->adc_init->adc_channels;
> > +	if (pdev->dev.platform_data) {
> > +		if (pdata->tsc_init)
> > +			tsc_wires = pdata->tsc_init->wires;
> > +
> > +		if (pdata->adc_init)
> > +			adc_channels = pdata->adc_init->adc_channels;
> > +	} else {
> > +		node = of_find_node_by_name(pdev->dev.of_node, "tsc");
> > +		of_property_read_u32(node, "ti,wires", &tsc_wires);
> > +
> > +		node = of_find_node_by_name(pdev->dev.of_node, "adc");
> > +		of_property_read_u32(node, "ti,adc-channels", &adc_channels);
> > +	}
> 
> Since AM335x is DT only, why is there a platform data codepath and why is it the first branch it tries? And I guess the next question is related to the first: why doesn't it work when used with DT? When I copy over the nodes from the evm.dts to my board I get "tsc tsc: Missing platform data" in dmesg.

This IP came up 1st on AM335x, but it is not platform dependent. The driver can be used on other platforms where-in DT is not supported.
According to the maintainers platform data takes precedence over DT. Hence the order.

I do not see "Missing platform data" error msg in the latest driver. I am not able to trace from where this got populated.

> 
> What are the chances this driver will work when applied on top of 3.8-rcX? Has it even been tested with that? Has it been tested at all?

This driver has been tested on top of v3.8-rc3 on a AM335x EVM.

Regards,
Rachna


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

* RE: [PATCH v4 5/8] MFD: ti_am335x_tscadc: Add DT support
  2013-01-31  4:11     ` Patil, Rachna
@ 2013-01-31  5:02       ` Hiremath, Vaibhav
  2013-01-31 12:25         ` Patil, Rachna
  2013-02-06 11:17         ` Patil, Rachna
  0 siblings, 2 replies; 15+ messages in thread
From: Hiremath, Vaibhav @ 2013-01-31  5:02 UTC (permalink / raw)
  To: Patil, Rachna, Koen Kooi
  Cc: Russell King, Samuel Ortiz, linux-doc, linux-iio,
	Dmitry Torokhov, devicetree-discuss, Dmitry Torokhov,
	linux-kernel, Rob Herring, Hebbar, Gururaja, Jonathan Cameron,
	linux-input, linux-omap, linux-arm-kernel

On Thu, Jan 31, 2013 at 09:41:11, Patil, Rachna wrote:
> On Wed, Jan 30, 2013 at 16:10:09, Koen Kooi wrote:
> > 
> > Op 24 jan. 2013, om 04:45 heeft "Patil, Rachna" <rachna@ti.com> het volgende geschreven:
> > 
> > > From: "Patil, Rachna" <rachna@ti.com>
> > > 
> > > Make changes to add DT support in the MFD core driver.
> > > 
> > > Signed-off-by: Patil, Rachna <rachna@ti.com>
> > > ---
> > > Changes in v4:
> > > 	Non-standard properties prefixed with vendor name.
> > > 
> > > drivers/mfd/ti_am335x_tscadc.c |   28 +++++++++++++++++++++++-----
> > > 1 file changed, 23 insertions(+), 5 deletions(-)
> > > 
> > > diff --git a/drivers/mfd/ti_am335x_tscadc.c 
> > > b/drivers/mfd/ti_am335x_tscadc.c index e9f3fb5..87b446b 100644
> > > --- a/drivers/mfd/ti_am335x_tscadc.c
> > > +++ b/drivers/mfd/ti_am335x_tscadc.c
> > > @@ -22,6 +22,8 @@
> > > #include <linux/regmap.h>
> > > #include <linux/mfd/core.h>
> > > #include <linux/pm_runtime.h>
> > > +#include <linux/of.h>
> > > +#include <linux/of_device.h>
> > > 
> > > #include <linux/mfd/ti_am335x_tscadc.h> #include 
> > > <linux/input/ti_am335x_tsc.h>
> > > @@ -64,20 +66,31 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
> > > 	struct resource		*res;
> > > 	struct clk		*clk;
> > > 	struct mfd_tscadc_board	*pdata = pdev->dev.platform_data;
> > > +	struct device_node	*node = pdev->dev.of_node;
> > > 	struct mfd_cell		*cell;
> > > 	int			err, ctrl;
> > > 	int			clk_value, clock_rate;
> > > -	int			tsc_wires, adc_channels = 0, total_channels;
> > > +	int			tsc_wires = 0, adc_channels = 0, total_channels;
> > > 
> > > -	if (!pdata) {
> > > +	if (!pdata && !pdev->dev.of_node) {
> > > 		dev_err(&pdev->dev, "Could not find platform data\n");
> > > 		return -EINVAL;
> > > 	}
> > > 
> > > -	if (pdata->adc_init)
> > > -		adc_channels = pdata->adc_init->adc_channels;
> > > +	if (pdev->dev.platform_data) {
> > > +		if (pdata->tsc_init)
> > > +			tsc_wires = pdata->tsc_init->wires;
> > > +
> > > +		if (pdata->adc_init)
> > > +			adc_channels = pdata->adc_init->adc_channels;
> > > +	} else {
> > > +		node = of_find_node_by_name(pdev->dev.of_node, "tsc");
> > > +		of_property_read_u32(node, "ti,wires", &tsc_wires);
> > > +
> > > +		node = of_find_node_by_name(pdev->dev.of_node, "adc");
> > > +		of_property_read_u32(node, "ti,adc-channels", &adc_channels);
> > > +	}
> > 
> > Since AM335x is DT only, why is there a platform data codepath and why is it the first branch it tries? And I guess the next question is related to the first: why doesn't it work when used with DT? When I copy over the nodes from the evm.dts to my board I get "tsc tsc: Missing platform data" in dmesg.
> 
> This IP came up 1st on AM335x, but it is not platform dependent. The driver can be used on other platforms where-in DT is not supported.
> According to the maintainers platform data takes precedence over DT. Hence the order.
> 

Rachana,

I see no point adding support for platform_data when you know that none of 
older platforms are going to use this driver and all future platforms _must_ 
follow device-tree model.

So I agree that you should remove board file dependency from the driver.


> I do not see "Missing platform data" error msg in the latest driver. I am not able to trace from where this got populated.
> 

Can you share the branch which you have tested?

Thanks,
Vaibhav

> > 
> > What are the chances this driver will work when applied on top of 3.8-rcX? Has it even been tested with that? Has it been tested at all?
> 
> This driver has been tested on top of v3.8-rc3 on a AM335x EVM.
> 
> Regards,
> Rachna
> 
> _______________________________________________
> devicetree-discuss mailing list
> devicetree-discuss@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/devicetree-discuss
> 


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

* RE: [PATCH v4 5/8] MFD: ti_am335x_tscadc: Add DT support
  2013-01-31  5:02       ` Hiremath, Vaibhav
@ 2013-01-31 12:25         ` Patil, Rachna
  2013-02-06 11:17         ` Patil, Rachna
  1 sibling, 0 replies; 15+ messages in thread
From: Patil, Rachna @ 2013-01-31 12:25 UTC (permalink / raw)
  To: Hiremath, Vaibhav, Koen Kooi
  Cc: Russell King, Samuel Ortiz, linux-doc, linux-iio,
	Dmitry Torokhov, devicetree-discuss, Dmitry Torokhov,
	linux-kernel, Rob Herring, Hebbar, Gururaja, Jonathan Cameron,
	linux-input, linux-omap, linux-arm-kernel

Vaibhav,

<SNIP>
> > > > 
> > > > -	if (!pdata) {
> > > > +	if (!pdata && !pdev->dev.of_node) {
> > > > 		dev_err(&pdev->dev, "Could not find platform data\n");
> > > > 		return -EINVAL;
> > > > 	}
> > > > 
> > > > -	if (pdata->adc_init)
> > > > -		adc_channels = pdata->adc_init->adc_channels;
> > > > +	if (pdev->dev.platform_data) {
> > > > +		if (pdata->tsc_init)
> > > > +			tsc_wires = pdata->tsc_init->wires;
> > > > +
> > > > +		if (pdata->adc_init)
> > > > +			adc_channels = pdata->adc_init->adc_channels;
> > > > +	} else {
> > > > +		node = of_find_node_by_name(pdev->dev.of_node, "tsc");
> > > > +		of_property_read_u32(node, "ti,wires", &tsc_wires);
> > > > +
> > > > +		node = of_find_node_by_name(pdev->dev.of_node, "adc");
> > > > +		of_property_read_u32(node, "ti,adc-channels", &adc_channels);
> > > > +	}
> > > 
> > > Since AM335x is DT only, why is there a platform data codepath and why is it the first branch it tries? And I guess the next question is related to the first: why doesn't it work when used with DT? When I copy over the nodes from the evm.dts to my board I get "tsc tsc: Missing platform data" in dmesg.
> > 
> > This IP came up 1st on AM335x, but it is not platform dependent. The driver can be used on other platforms where-in DT is not supported.
> > According to the maintainers platform data takes precedence over DT. Hence the order.
> > 
> 
> Rachana,
> 
> I see no point adding support for platform_data when you know that none of older platforms are going to use this driver and all future platforms _must_ follow device-tree model.
> 
> So I agree that you should remove board file dependency from the driver.

Ok. I will remove support for platform data in the next version of patches.

> 
> 
> > I do not see "Missing platform data" error msg in the latest driver. I am not able to trace from where this got populated.
> > 
> 
> Can you share the branch which you have tested?

https://github.com/patilrachna/linux/tree/v3.8_rc3_MFD_TSCADC_DT-v2

Regards,
Rachna



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

* RE: [PATCH v4 5/8] MFD: ti_am335x_tscadc: Add DT support
  2013-01-31  5:02       ` Hiremath, Vaibhav
  2013-01-31 12:25         ` Patil, Rachna
@ 2013-02-06 11:17         ` Patil, Rachna
  1 sibling, 0 replies; 15+ messages in thread
From: Patil, Rachna @ 2013-02-06 11:17 UTC (permalink / raw)
  To: Koen Kooi
  Cc: Russell King, Samuel Ortiz, linux-doc, linux-iio,
	Dmitry Torokhov, devicetree-discuss, Dmitry Torokhov,
	linux-kernel, Rob Herring, Hebbar, Gururaja, Jonathan Cameron,
	linux-input, linux-omap, linux-arm-kernel

Hi Koen,

> <SNIP>
> > > > Since AM335x is DT only, why is there a platform data codepath and why is it the first branch it tries? And I guess the next question is related to the first: why doesn't it work when used with DT? When I copy over the nodes from the evm.dts to my board I get "tsc tsc: Missing platform data" in dmesg.
> > > 
> > > This IP came up 1st on AM335x, but it is not platform dependent. The driver can be used on other platforms where-in DT is not supported.
> > > According to the maintainers platform data takes precedence over DT. Hence the order.
> > > 
> > 
> > Rachana,
> > 
> > I see no point adding support for platform_data when you know that none of older platforms are going to use this driver and all future platforms _must_ follow device-tree model.
> > 
> > So I agree that you should remove board file dependency from the driver.
> 
> Ok. I will remove support for platform data in the next version of patches.
> 
> > 
> > 
> > > I do not see "Missing platform data" error msg in the latest driver. I am not able to trace from where this got populated.
> > > 
> > 
> > Can you share the branch which you have tested?
> 
> https://github.com/patilrachna/linux/tree/v3.8_rc3_MFD_TSCADC_DT-v2

Did you get a chance to test this branch?
And can you also share your branch, on which you observed the issue.

Regards,
Rachna


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

end of thread, other threads:[~2013-02-06 11:17 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-24  3:45 [PATCH v4 0/8] MFD: ti_am335x_tscadc: DT support and TSC features addition Patil, Rachna
2013-01-24  3:45 ` [PATCH v4 1/8] input: ti_am335x_tsc: Step enable bits made configurable Patil, Rachna
2013-01-24  3:45 ` [PATCH v4 2/8] input: ti_am335x_tsc: Order of TSC wires, " Patil, Rachna
2013-01-24  3:45 ` [PATCH v4 3/8] input: touchscreen: ti_tsc: remove unwanted fifo flush Patil, Rachna
2013-01-24  3:45 ` [PATCH v4 4/8] MFD: ti_am335x_tscadc: add device tree binding information Patil, Rachna
2013-01-27 14:11   ` Peter Korsgaard
2013-01-24  3:45 ` [PATCH v4 5/8] MFD: ti_am335x_tscadc: Add DT support Patil, Rachna
2013-01-30 10:40   ` Koen Kooi
2013-01-31  4:11     ` Patil, Rachna
2013-01-31  5:02       ` Hiremath, Vaibhav
2013-01-31 12:25         ` Patil, Rachna
2013-02-06 11:17         ` Patil, Rachna
2013-01-24  3:45 ` [PATCH v4 6/8] input: ti_am335x_tsc: " Patil, Rachna
2013-01-24  3:45 ` [PATCH v4 7/8] IIO: ti_am335x_adc: " Patil, Rachna
2013-01-24  3:45 ` [PATCH v4 8/8] arm/dts: AM335x-evm: Add TSC/ADC MFD device support Patil, Rachna

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).