Re: [PATCH 3/3] input: touchscreen: ad7879: add device tree support

2016-01-28 Thread Rob Herring
On Mon, Jan 25, 2016 at 07:04:37PM -0800, Stefan Agner wrote:
> Add device tree support for the I2C variant of AD7879 (AD7879-1). This
> allows to specify the touchscreen controller as a I2C client node.
> Most of the options available as platform data are also available as
> device tree properties. Exporting the GPIO is currently not possible
> through device tree.
> 
> Signed-off-by: Stefan Agner 
> ---
>  .../bindings/input/touchscreen/ad7879-i2c.txt  | 47 
>  drivers/input/touchscreen/ad7879-i2c.c | 63 
> +-
>  drivers/input/touchscreen/ad7879-spi.c |  3 +-
>  drivers/input/touchscreen/ad7879.c |  2 +-
>  drivers/input/touchscreen/ad7879.h |  1 +
>  5 files changed, 113 insertions(+), 3 deletions(-)
>  create mode 100644 
> Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
> 
> diff --git 
> a/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt 
> b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
> new file mode 100644
> index 000..bf169a2
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
> @@ -0,0 +1,47 @@
> +* Analog Devices AD7879-1/AD7889-1 touchscreen interface (I2C)
> +
> +Required properties:
> +- compatible: must be "adi,ad7879-1"
> +- reg: i2c slave address
> +- interrupt-parent: the phandle for the interrupt controller
> +- interrupts: touch controller interrupt
> +- resistance-plate-x : total resistance of X-plate (for pressure
> +   calculation)
> +- touchscreen-max-pressure   : maximum reported pressure
> +- touchscreen-swapped-x-y: X and Y axis are swapped (boolean)
> +   Swapping is done after inverting the axis
> +Optional properties:
> +- first-conversion-delay : 0-12 in 128us steps (starting with 128us)
> +   13: 2.560ms
> +   14: 3.584ms
> +   15: 4.096ms
> +- acquisition-time   : 0: 2us
> +   1: 4us
> +   2: 8us
> +   3: 16us
> +- median-filter-size : 0: disabled
> +   1: 4 measurements
> +   2: 8 measurements
> +   3: 16 measurements
> +- averaging  : 0: 2 middle values (1 if median disabled)
> +   1: 4 middle values
> +   2: 8 middle values
> +   3: 16 values
> +- conversion-interval:   : 0: convert one time only
> +   1-255: 515us + val * 35us (up to 9.440ms)

These all should be prefixed with "adi,". Also, please state the sizes 
are 8-bit.

> +
> +Example:
> +
> + ad7879@2c {
> + compatible = "adi,ad7879-1";
> + reg = <0x2c>;
> + interrupt-parent = <>;
> + interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
> + resistance-plate-x = <120>;
> + touchscreen-max-pressure = <4096>;
> + first-conversion-delay = /bits/ 8 <3>;
> + acquisition-time = /bits/ 8 <1>;
> + median-filter-size = /bits/ 8 <2>;
> + averaging = /bits/ 8 <1>;
> + conversion-interval = /bits/ 8 <255>;
> + };


Re: [PATCH 3/3] input: touchscreen: ad7879: add device tree support

2016-01-28 Thread Rob Herring
On Mon, Jan 25, 2016 at 07:04:37PM -0800, Stefan Agner wrote:
> Add device tree support for the I2C variant of AD7879 (AD7879-1). This
> allows to specify the touchscreen controller as a I2C client node.
> Most of the options available as platform data are also available as
> device tree properties. Exporting the GPIO is currently not possible
> through device tree.
> 
> Signed-off-by: Stefan Agner 
> ---
>  .../bindings/input/touchscreen/ad7879-i2c.txt  | 47 
>  drivers/input/touchscreen/ad7879-i2c.c | 63 
> +-
>  drivers/input/touchscreen/ad7879-spi.c |  3 +-
>  drivers/input/touchscreen/ad7879.c |  2 +-
>  drivers/input/touchscreen/ad7879.h |  1 +
>  5 files changed, 113 insertions(+), 3 deletions(-)
>  create mode 100644 
> Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
> 
> diff --git 
> a/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt 
> b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
> new file mode 100644
> index 000..bf169a2
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
> @@ -0,0 +1,47 @@
> +* Analog Devices AD7879-1/AD7889-1 touchscreen interface (I2C)
> +
> +Required properties:
> +- compatible: must be "adi,ad7879-1"
> +- reg: i2c slave address
> +- interrupt-parent: the phandle for the interrupt controller
> +- interrupts: touch controller interrupt
> +- resistance-plate-x : total resistance of X-plate (for pressure
> +   calculation)
> +- touchscreen-max-pressure   : maximum reported pressure
> +- touchscreen-swapped-x-y: X and Y axis are swapped (boolean)
> +   Swapping is done after inverting the axis
> +Optional properties:
> +- first-conversion-delay : 0-12 in 128us steps (starting with 128us)
> +   13: 2.560ms
> +   14: 3.584ms
> +   15: 4.096ms
> +- acquisition-time   : 0: 2us
> +   1: 4us
> +   2: 8us
> +   3: 16us
> +- median-filter-size : 0: disabled
> +   1: 4 measurements
> +   2: 8 measurements
> +   3: 16 measurements
> +- averaging  : 0: 2 middle values (1 if median disabled)
> +   1: 4 middle values
> +   2: 8 middle values
> +   3: 16 values
> +- conversion-interval:   : 0: convert one time only
> +   1-255: 515us + val * 35us (up to 9.440ms)

These all should be prefixed with "adi,". Also, please state the sizes 
are 8-bit.

> +
> +Example:
> +
> + ad7879@2c {
> + compatible = "adi,ad7879-1";
> + reg = <0x2c>;
> + interrupt-parent = <>;
> + interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
> + resistance-plate-x = <120>;
> + touchscreen-max-pressure = <4096>;
> + first-conversion-delay = /bits/ 8 <3>;
> + acquisition-time = /bits/ 8 <1>;
> + median-filter-size = /bits/ 8 <2>;
> + averaging = /bits/ 8 <1>;
> + conversion-interval = /bits/ 8 <255>;
> + };


Re: [PATCH 3/3] input: touchscreen: ad7879: add device tree support

2016-01-27 Thread Dmitry Torokhov
Hi Stefan,

On Mon, Jan 25, 2016 at 07:04:37PM -0800, Stefan Agner wrote:
> Add device tree support for the I2C variant of AD7879 (AD7879-1). This
> allows to specify the touchscreen controller as a I2C client node.
> Most of the options available as platform data are also available as
> device tree properties. Exporting the GPIO is currently not possible
> through device tree.
> 
> Signed-off-by: Stefan Agner 
> ---
>  .../bindings/input/touchscreen/ad7879-i2c.txt  | 47 
>  drivers/input/touchscreen/ad7879-i2c.c | 63 
> +-
>  drivers/input/touchscreen/ad7879-spi.c |  3 +-
>  drivers/input/touchscreen/ad7879.c |  2 +-
>  drivers/input/touchscreen/ad7879.h |  1 +
>  5 files changed, 113 insertions(+), 3 deletions(-)
>  create mode 100644 
> Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
> 
> diff --git 
> a/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt 
> b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
> new file mode 100644
> index 000..bf169a2
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
> @@ -0,0 +1,47 @@
> +* Analog Devices AD7879-1/AD7889-1 touchscreen interface (I2C)
> +
> +Required properties:
> +- compatible: must be "adi,ad7879-1"
> +- reg: i2c slave address
> +- interrupt-parent: the phandle for the interrupt controller
> +- interrupts: touch controller interrupt
> +- resistance-plate-x : total resistance of X-plate (for pressure
> +   calculation)
> +- touchscreen-max-pressure   : maximum reported pressure
> +- touchscreen-swapped-x-y: X and Y axis are swapped (boolean)
> +   Swapping is done after inverting the axis
> +Optional properties:
> +- first-conversion-delay : 0-12 in 128us steps (starting with 128us)
> +   13: 2.560ms
> +   14: 3.584ms
> +   15: 4.096ms
> +- acquisition-time   : 0: 2us
> +   1: 4us
> +   2: 8us
> +   3: 16us
> +- median-filter-size : 0: disabled
> +   1: 4 measurements
> +   2: 8 measurements
> +   3: 16 measurements
> +- averaging  : 0: 2 middle values (1 if median disabled)
> +   1: 4 middle values
> +   2: 8 middle values
> +   3: 16 values
> +- conversion-interval:   : 0: convert one time only
> +   1-255: 515us + val * 35us (up to 9.440ms)
> +
> +Example:
> +
> + ad7879@2c {
> + compatible = "adi,ad7879-1";
> + reg = <0x2c>;
> + interrupt-parent = <>;
> + interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
> + resistance-plate-x = <120>;
> + touchscreen-max-pressure = <4096>;
> + first-conversion-delay = /bits/ 8 <3>;
> + acquisition-time = /bits/ 8 <1>;
> + median-filter-size = /bits/ 8 <2>;
> + averaging = /bits/ 8 <1>;
> + conversion-interval = /bits/ 8 <255>;
> + };
> diff --git a/drivers/input/touchscreen/ad7879-i2c.c 
> b/drivers/input/touchscreen/ad7879-i2c.c
> index d66962c..08a2c9a 100644
> --- a/drivers/input/touchscreen/ad7879-i2c.c
> +++ b/drivers/input/touchscreen/ad7879-i2c.c
> @@ -11,6 +11,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  
>  #include "ad7879.h"
>  
> @@ -54,9 +55,50 @@ static const struct ad7879_bus_ops ad7879_i2c_bus_ops = {
>   .write  = ad7879_i2c_write,
>  };
>  
> +static struct ad7879_platform_data *ad7879_parse_dt(struct device *dev)
> +{
> + struct ad7879_platform_data *pdata;
> + struct device_node *np = dev->of_node;
> + int err;
> + u32 tmp;
> +
> + if (!np)
> + return NULL;
> +
> + pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
> +
> + if (!pdata)
> + return ERR_PTR(-ENOMEM);
> +
> + err = of_property_read_u32(np, "resistance-plate-x", );
> + if (err) {
> + dev_err(dev, "failed to get resistance-plate-x property\n");
> + return ERR_PTR(err);
> + }
> + pdata->x_plate_ohms = (u16)tmp;
> +
> + err = of_property_read_u32(np, "touchscreen-max-pressure", );
> + if (err) {
> + dev_err(dev, "failed to get touchscreen-max-pressure 
> property\n");
> + return ERR_PTR(err);
> + }
> + pdata->pressure_min = (u16)tmp;
> +
> + of_property_read_u8(np, "first-conversion-delay", 
> >first_conversion_delay);
> + of_property_read_u8(np, "acquisition-time", >acquisition_time);
> + of_property_read_u8(np, "median-filter-size", >median);
> + of_property_read_u8(np, 

Re: [PATCH 3/3] input: touchscreen: ad7879: add device tree support

2016-01-27 Thread Dmitry Torokhov
Hi Stefan,

On Mon, Jan 25, 2016 at 07:04:37PM -0800, Stefan Agner wrote:
> Add device tree support for the I2C variant of AD7879 (AD7879-1). This
> allows to specify the touchscreen controller as a I2C client node.
> Most of the options available as platform data are also available as
> device tree properties. Exporting the GPIO is currently not possible
> through device tree.
> 
> Signed-off-by: Stefan Agner 
> ---
>  .../bindings/input/touchscreen/ad7879-i2c.txt  | 47 
>  drivers/input/touchscreen/ad7879-i2c.c | 63 
> +-
>  drivers/input/touchscreen/ad7879-spi.c |  3 +-
>  drivers/input/touchscreen/ad7879.c |  2 +-
>  drivers/input/touchscreen/ad7879.h |  1 +
>  5 files changed, 113 insertions(+), 3 deletions(-)
>  create mode 100644 
> Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
> 
> diff --git 
> a/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt 
> b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
> new file mode 100644
> index 000..bf169a2
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
> @@ -0,0 +1,47 @@
> +* Analog Devices AD7879-1/AD7889-1 touchscreen interface (I2C)
> +
> +Required properties:
> +- compatible: must be "adi,ad7879-1"
> +- reg: i2c slave address
> +- interrupt-parent: the phandle for the interrupt controller
> +- interrupts: touch controller interrupt
> +- resistance-plate-x : total resistance of X-plate (for pressure
> +   calculation)
> +- touchscreen-max-pressure   : maximum reported pressure
> +- touchscreen-swapped-x-y: X and Y axis are swapped (boolean)
> +   Swapping is done after inverting the axis
> +Optional properties:
> +- first-conversion-delay : 0-12 in 128us steps (starting with 128us)
> +   13: 2.560ms
> +   14: 3.584ms
> +   15: 4.096ms
> +- acquisition-time   : 0: 2us
> +   1: 4us
> +   2: 8us
> +   3: 16us
> +- median-filter-size : 0: disabled
> +   1: 4 measurements
> +   2: 8 measurements
> +   3: 16 measurements
> +- averaging  : 0: 2 middle values (1 if median disabled)
> +   1: 4 middle values
> +   2: 8 middle values
> +   3: 16 values
> +- conversion-interval:   : 0: convert one time only
> +   1-255: 515us + val * 35us (up to 9.440ms)
> +
> +Example:
> +
> + ad7879@2c {
> + compatible = "adi,ad7879-1";
> + reg = <0x2c>;
> + interrupt-parent = <>;
> + interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
> + resistance-plate-x = <120>;
> + touchscreen-max-pressure = <4096>;
> + first-conversion-delay = /bits/ 8 <3>;
> + acquisition-time = /bits/ 8 <1>;
> + median-filter-size = /bits/ 8 <2>;
> + averaging = /bits/ 8 <1>;
> + conversion-interval = /bits/ 8 <255>;
> + };
> diff --git a/drivers/input/touchscreen/ad7879-i2c.c 
> b/drivers/input/touchscreen/ad7879-i2c.c
> index d66962c..08a2c9a 100644
> --- a/drivers/input/touchscreen/ad7879-i2c.c
> +++ b/drivers/input/touchscreen/ad7879-i2c.c
> @@ -11,6 +11,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  
>  #include "ad7879.h"
>  
> @@ -54,9 +55,50 @@ static const struct ad7879_bus_ops ad7879_i2c_bus_ops = {
>   .write  = ad7879_i2c_write,
>  };
>  
> +static struct ad7879_platform_data *ad7879_parse_dt(struct device *dev)
> +{
> + struct ad7879_platform_data *pdata;
> + struct device_node *np = dev->of_node;
> + int err;
> + u32 tmp;
> +
> + if (!np)
> + return NULL;
> +
> + pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
> +
> + if (!pdata)
> + return ERR_PTR(-ENOMEM);
> +
> + err = of_property_read_u32(np, "resistance-plate-x", );
> + if (err) {
> + dev_err(dev, "failed to get resistance-plate-x property\n");
> + return ERR_PTR(err);
> + }
> + pdata->x_plate_ohms = (u16)tmp;
> +
> + err = of_property_read_u32(np, "touchscreen-max-pressure", );
> + if (err) {
> + dev_err(dev, "failed to get touchscreen-max-pressure 
> property\n");
> + return ERR_PTR(err);
> + }
> + pdata->pressure_min = (u16)tmp;
> +
> + of_property_read_u8(np, "first-conversion-delay", 
> >first_conversion_delay);
> + of_property_read_u8(np, "acquisition-time", >acquisition_time);
> + of_property_read_u8(np, "median-filter-size", >median);
> + 

Re: [PATCH 3/3] input: touchscreen: ad7879: add device tree support

2016-01-26 Thread Stefan Agner
On 2016-01-26 00:14, Michael Hennerich wrote:
> On 01/26/2016 04:04 AM, Stefan Agner wrote:
>> Add device tree support for the I2C variant of AD7879 (AD7879-1). This
>> allows to specify the touchscreen controller as a I2C client node.
>> Most of the options available as platform data are also available as
>> device tree properties. Exporting the GPIO is currently not possible
>> through device tree.
>>
>> Signed-off-by: Stefan Agner 
> 
> 
> Hi Stefan,
> 
> Thanks for the patch -
> There is something similar in our tree but I forgot to send it
> mainline a long time ago.
> 
> https://github.com/analogdevicesinc/linux/commit/69b16d4b616a4bbe9001d3f67d3ff54f3deb85ce

Yeah I saw that patch. I tried to use the standard touchscreen
properties where applicable.

Also, my implementation is currently only for I2C. However, when I now
think about it, I might as well move my code into ad7879.c which would
enable to use the same bindings for SPI devices too.

> 
> There are some build issues can you have a look?

Yeah I saw, shame on me. Will fix them.

> 
> I also don't understand why "exporting the GPIO is not possible
> through device tree"?
> 
> Can you explain?

I should have written "not implemented" instead of "not possible".

To implement proper device tree GPIO bindings it would need some more
changes. I did not look into that, hence the current device tree
bindings do not allow to enable the GPIO functionality.

--
Stefan

> 
> Regards,
> Michael
> 
> 
>> ---
>>   .../bindings/input/touchscreen/ad7879-i2c.txt  | 47 
>>   drivers/input/touchscreen/ad7879-i2c.c | 63 
>> +-
>>   drivers/input/touchscreen/ad7879-spi.c |  3 +-
>>   drivers/input/touchscreen/ad7879.c |  2 +-
>>   drivers/input/touchscreen/ad7879.h |  1 +
>>   5 files changed, 113 insertions(+), 3 deletions(-)
>>   create mode 100644 
>> Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
>>
>> diff --git 
>> a/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt 
>> b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
>> new file mode 100644
>> index 000..bf169a2
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
>> @@ -0,0 +1,47 @@
>> +* Analog Devices AD7879-1/AD7889-1 touchscreen interface (I2C)
>> +
>> +Required properties:
>> +- compatible: must be "adi,ad7879-1"
>> +- reg: i2c slave address
>> +- interrupt-parent: the phandle for the interrupt controller
>> +- interrupts: touch controller interrupt
>> +- resistance-plate-x: total resistance of X-plate (for 
>> pressure
>> +  calculation)
>> +- touchscreen-max-pressure  : maximum reported pressure
>> +- touchscreen-swapped-x-y   : X and Y axis are swapped (boolean)
>> +  Swapping is done after inverting the axis
>> +Optional properties:
>> +- first-conversion-delay: 0-12 in 128us steps (starting with 128us)
>> +  13: 2.560ms
>> +  14: 3.584ms
>> +  15: 4.096ms
>> +- acquisition-time  : 0: 2us
>> +  1: 4us
>> +  2: 8us
>> +  3: 16us
>> +- median-filter-size: 0: disabled
>> +  1: 4 measurements
>> +  2: 8 measurements
>> +  3: 16 measurements
>> +- averaging : 0: 2 middle values (1 if median disabled)
>> +  1: 4 middle values
>> +  2: 8 middle values
>> +  3: 16 values
>> +- conversion-interval:  : 0: convert one time only
>> +  1-255: 515us + val * 35us (up to 9.440ms)
>> +
>> +Example:
>> +
>> +ad7879@2c {
>> +compatible = "adi,ad7879-1";
>> +reg = <0x2c>;
>> +interrupt-parent = <>;
>> +interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
>> +resistance-plate-x = <120>;
>> +touchscreen-max-pressure = <4096>;
>> +first-conversion-delay = /bits/ 8 <3>;
>> +acquisition-time = /bits/ 8 <1>;
>> +median-filter-size = /bits/ 8 <2>;
>> +averaging = /bits/ 8 <1>;
>> +conversion-interval = /bits/ 8 <255>;
>> +};
>> diff --git a/drivers/input/touchscreen/ad7879-i2c.c 
>> b/drivers/input/touchscreen/ad7879-i2c.c
>> index d66962c..08a2c9a 100644
>> --- a/drivers/input/touchscreen/ad7879-i2c.c
>> +++ b/drivers/input/touchscreen/ad7879-i2c.c
>> @@ -11,6 +11,7 @@
>>   #include 
>>   #include 
>>   #include 
>> +#include 
>>
>>   #include "ad7879.h"
>>
>> @@ -54,9 +55,50 @@ static const struct ad7879_bus_ops ad7879_i2c_bus_ops = {
>>  .write  = ad7879_i2c_write,
>>   };
>>
>> +static struct 

Re: [PATCH 3/3] input: touchscreen: ad7879: add device tree support

2016-01-26 Thread Michael Hennerich

On 01/26/2016 04:04 AM, Stefan Agner wrote:

Add device tree support for the I2C variant of AD7879 (AD7879-1). This
allows to specify the touchscreen controller as a I2C client node.
Most of the options available as platform data are also available as
device tree properties. Exporting the GPIO is currently not possible
through device tree.

Signed-off-by: Stefan Agner 



Hi Stefan,

Thanks for the patch -
There is something similar in our tree but I forgot to send it mainline 
a long time ago.


https://github.com/analogdevicesinc/linux/commit/69b16d4b616a4bbe9001d3f67d3ff54f3deb85ce

There are some build issues can you have a look?

I also don't understand why "exporting the GPIO is not possible through 
device tree"?


Can you explain?

Regards,
Michael



---
  .../bindings/input/touchscreen/ad7879-i2c.txt  | 47 
  drivers/input/touchscreen/ad7879-i2c.c | 63 +-
  drivers/input/touchscreen/ad7879-spi.c |  3 +-
  drivers/input/touchscreen/ad7879.c |  2 +-
  drivers/input/touchscreen/ad7879.h |  1 +
  5 files changed, 113 insertions(+), 3 deletions(-)
  create mode 100644 
Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt

diff --git a/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt 
b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
new file mode 100644
index 000..bf169a2
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
@@ -0,0 +1,47 @@
+* Analog Devices AD7879-1/AD7889-1 touchscreen interface (I2C)
+
+Required properties:
+- compatible: must be "adi,ad7879-1"
+- reg: i2c slave address
+- interrupt-parent: the phandle for the interrupt controller
+- interrupts: touch controller interrupt
+- resistance-plate-x   : total resistance of X-plate (for pressure
+ calculation)
+- touchscreen-max-pressure : maximum reported pressure
+- touchscreen-swapped-x-y  : X and Y axis are swapped (boolean)
+ Swapping is done after inverting the axis
+Optional properties:
+- first-conversion-delay   : 0-12 in 128us steps (starting with 128us)
+ 13: 2.560ms
+ 14: 3.584ms
+ 15: 4.096ms
+- acquisition-time : 0: 2us
+ 1: 4us
+ 2: 8us
+ 3: 16us
+- median-filter-size   : 0: disabled
+ 1: 4 measurements
+ 2: 8 measurements
+ 3: 16 measurements
+- averaging: 0: 2 middle values (1 if median disabled)
+ 1: 4 middle values
+ 2: 8 middle values
+ 3: 16 values
+- conversion-interval: : 0: convert one time only
+ 1-255: 515us + val * 35us (up to 9.440ms)
+
+Example:
+
+   ad7879@2c {
+   compatible = "adi,ad7879-1";
+   reg = <0x2c>;
+   interrupt-parent = <>;
+   interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
+   resistance-plate-x = <120>;
+   touchscreen-max-pressure = <4096>;
+   first-conversion-delay = /bits/ 8 <3>;
+   acquisition-time = /bits/ 8 <1>;
+   median-filter-size = /bits/ 8 <2>;
+   averaging = /bits/ 8 <1>;
+   conversion-interval = /bits/ 8 <255>;
+   };
diff --git a/drivers/input/touchscreen/ad7879-i2c.c 
b/drivers/input/touchscreen/ad7879-i2c.c
index d66962c..08a2c9a 100644
--- a/drivers/input/touchscreen/ad7879-i2c.c
+++ b/drivers/input/touchscreen/ad7879-i2c.c
@@ -11,6 +11,7 @@
  #include 
  #include 
  #include 
+#include 

  #include "ad7879.h"

@@ -54,9 +55,50 @@ static const struct ad7879_bus_ops ad7879_i2c_bus_ops = {
.write  = ad7879_i2c_write,
  };

+static struct ad7879_platform_data *ad7879_parse_dt(struct device *dev)
+{
+   struct ad7879_platform_data *pdata;
+   struct device_node *np = dev->of_node;
+   int err;
+   u32 tmp;
+
+   if (!np)
+   return NULL;
+
+   pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
+
+   if (!pdata)
+   return ERR_PTR(-ENOMEM);
+
+   err = of_property_read_u32(np, "resistance-plate-x", );
+   if (err) {
+   dev_err(dev, "failed to get resistance-plate-x property\n");
+   return ERR_PTR(err);
+   }
+   pdata->x_plate_ohms = (u16)tmp;
+
+   err = of_property_read_u32(np, "touchscreen-max-pressure", );
+   if (err) {
+   dev_err(dev, "failed to get touchscreen-max-pressure 
property\n");
+   return ERR_PTR(err);
+   }
+   pdata->pressure_min = (u16)tmp;
+
+   

Re: [PATCH 3/3] input: touchscreen: ad7879: add device tree support

2016-01-26 Thread Michael Hennerich

On 01/26/2016 04:04 AM, Stefan Agner wrote:

Add device tree support for the I2C variant of AD7879 (AD7879-1). This
allows to specify the touchscreen controller as a I2C client node.
Most of the options available as platform data are also available as
device tree properties. Exporting the GPIO is currently not possible
through device tree.

Signed-off-by: Stefan Agner 



Hi Stefan,

Thanks for the patch -
There is something similar in our tree but I forgot to send it mainline 
a long time ago.


https://github.com/analogdevicesinc/linux/commit/69b16d4b616a4bbe9001d3f67d3ff54f3deb85ce

There are some build issues can you have a look?

I also don't understand why "exporting the GPIO is not possible through 
device tree"?


Can you explain?

Regards,
Michael



---
  .../bindings/input/touchscreen/ad7879-i2c.txt  | 47 
  drivers/input/touchscreen/ad7879-i2c.c | 63 +-
  drivers/input/touchscreen/ad7879-spi.c |  3 +-
  drivers/input/touchscreen/ad7879.c |  2 +-
  drivers/input/touchscreen/ad7879.h |  1 +
  5 files changed, 113 insertions(+), 3 deletions(-)
  create mode 100644 
Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt

diff --git a/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt 
b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
new file mode 100644
index 000..bf169a2
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
@@ -0,0 +1,47 @@
+* Analog Devices AD7879-1/AD7889-1 touchscreen interface (I2C)
+
+Required properties:
+- compatible: must be "adi,ad7879-1"
+- reg: i2c slave address
+- interrupt-parent: the phandle for the interrupt controller
+- interrupts: touch controller interrupt
+- resistance-plate-x   : total resistance of X-plate (for pressure
+ calculation)
+- touchscreen-max-pressure : maximum reported pressure
+- touchscreen-swapped-x-y  : X and Y axis are swapped (boolean)
+ Swapping is done after inverting the axis
+Optional properties:
+- first-conversion-delay   : 0-12 in 128us steps (starting with 128us)
+ 13: 2.560ms
+ 14: 3.584ms
+ 15: 4.096ms
+- acquisition-time : 0: 2us
+ 1: 4us
+ 2: 8us
+ 3: 16us
+- median-filter-size   : 0: disabled
+ 1: 4 measurements
+ 2: 8 measurements
+ 3: 16 measurements
+- averaging: 0: 2 middle values (1 if median disabled)
+ 1: 4 middle values
+ 2: 8 middle values
+ 3: 16 values
+- conversion-interval: : 0: convert one time only
+ 1-255: 515us + val * 35us (up to 9.440ms)
+
+Example:
+
+   ad7879@2c {
+   compatible = "adi,ad7879-1";
+   reg = <0x2c>;
+   interrupt-parent = <>;
+   interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
+   resistance-plate-x = <120>;
+   touchscreen-max-pressure = <4096>;
+   first-conversion-delay = /bits/ 8 <3>;
+   acquisition-time = /bits/ 8 <1>;
+   median-filter-size = /bits/ 8 <2>;
+   averaging = /bits/ 8 <1>;
+   conversion-interval = /bits/ 8 <255>;
+   };
diff --git a/drivers/input/touchscreen/ad7879-i2c.c 
b/drivers/input/touchscreen/ad7879-i2c.c
index d66962c..08a2c9a 100644
--- a/drivers/input/touchscreen/ad7879-i2c.c
+++ b/drivers/input/touchscreen/ad7879-i2c.c
@@ -11,6 +11,7 @@
  #include 
  #include 
  #include 
+#include 

  #include "ad7879.h"

@@ -54,9 +55,50 @@ static const struct ad7879_bus_ops ad7879_i2c_bus_ops = {
.write  = ad7879_i2c_write,
  };

+static struct ad7879_platform_data *ad7879_parse_dt(struct device *dev)
+{
+   struct ad7879_platform_data *pdata;
+   struct device_node *np = dev->of_node;
+   int err;
+   u32 tmp;
+
+   if (!np)
+   return NULL;
+
+   pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
+
+   if (!pdata)
+   return ERR_PTR(-ENOMEM);
+
+   err = of_property_read_u32(np, "resistance-plate-x", );
+   if (err) {
+   dev_err(dev, "failed to get resistance-plate-x property\n");
+   return ERR_PTR(err);
+   }
+   pdata->x_plate_ohms = (u16)tmp;
+
+   err = of_property_read_u32(np, "touchscreen-max-pressure", );
+   if (err) {
+   dev_err(dev, "failed to get touchscreen-max-pressure 
property\n");
+   return ERR_PTR(err);
+   }
+   pdata->pressure_min = 

Re: [PATCH 3/3] input: touchscreen: ad7879: add device tree support

2016-01-26 Thread Stefan Agner
On 2016-01-26 00:14, Michael Hennerich wrote:
> On 01/26/2016 04:04 AM, Stefan Agner wrote:
>> Add device tree support for the I2C variant of AD7879 (AD7879-1). This
>> allows to specify the touchscreen controller as a I2C client node.
>> Most of the options available as platform data are also available as
>> device tree properties. Exporting the GPIO is currently not possible
>> through device tree.
>>
>> Signed-off-by: Stefan Agner 
> 
> 
> Hi Stefan,
> 
> Thanks for the patch -
> There is something similar in our tree but I forgot to send it
> mainline a long time ago.
> 
> https://github.com/analogdevicesinc/linux/commit/69b16d4b616a4bbe9001d3f67d3ff54f3deb85ce

Yeah I saw that patch. I tried to use the standard touchscreen
properties where applicable.

Also, my implementation is currently only for I2C. However, when I now
think about it, I might as well move my code into ad7879.c which would
enable to use the same bindings for SPI devices too.

> 
> There are some build issues can you have a look?

Yeah I saw, shame on me. Will fix them.

> 
> I also don't understand why "exporting the GPIO is not possible
> through device tree"?
> 
> Can you explain?

I should have written "not implemented" instead of "not possible".

To implement proper device tree GPIO bindings it would need some more
changes. I did not look into that, hence the current device tree
bindings do not allow to enable the GPIO functionality.

--
Stefan

> 
> Regards,
> Michael
> 
> 
>> ---
>>   .../bindings/input/touchscreen/ad7879-i2c.txt  | 47 
>>   drivers/input/touchscreen/ad7879-i2c.c | 63 
>> +-
>>   drivers/input/touchscreen/ad7879-spi.c |  3 +-
>>   drivers/input/touchscreen/ad7879.c |  2 +-
>>   drivers/input/touchscreen/ad7879.h |  1 +
>>   5 files changed, 113 insertions(+), 3 deletions(-)
>>   create mode 100644 
>> Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
>>
>> diff --git 
>> a/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt 
>> b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
>> new file mode 100644
>> index 000..bf169a2
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
>> @@ -0,0 +1,47 @@
>> +* Analog Devices AD7879-1/AD7889-1 touchscreen interface (I2C)
>> +
>> +Required properties:
>> +- compatible: must be "adi,ad7879-1"
>> +- reg: i2c slave address
>> +- interrupt-parent: the phandle for the interrupt controller
>> +- interrupts: touch controller interrupt
>> +- resistance-plate-x: total resistance of X-plate (for 
>> pressure
>> +  calculation)
>> +- touchscreen-max-pressure  : maximum reported pressure
>> +- touchscreen-swapped-x-y   : X and Y axis are swapped (boolean)
>> +  Swapping is done after inverting the axis
>> +Optional properties:
>> +- first-conversion-delay: 0-12 in 128us steps (starting with 128us)
>> +  13: 2.560ms
>> +  14: 3.584ms
>> +  15: 4.096ms
>> +- acquisition-time  : 0: 2us
>> +  1: 4us
>> +  2: 8us
>> +  3: 16us
>> +- median-filter-size: 0: disabled
>> +  1: 4 measurements
>> +  2: 8 measurements
>> +  3: 16 measurements
>> +- averaging : 0: 2 middle values (1 if median disabled)
>> +  1: 4 middle values
>> +  2: 8 middle values
>> +  3: 16 values
>> +- conversion-interval:  : 0: convert one time only
>> +  1-255: 515us + val * 35us (up to 9.440ms)
>> +
>> +Example:
>> +
>> +ad7879@2c {
>> +compatible = "adi,ad7879-1";
>> +reg = <0x2c>;
>> +interrupt-parent = <>;
>> +interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
>> +resistance-plate-x = <120>;
>> +touchscreen-max-pressure = <4096>;
>> +first-conversion-delay = /bits/ 8 <3>;
>> +acquisition-time = /bits/ 8 <1>;
>> +median-filter-size = /bits/ 8 <2>;
>> +averaging = /bits/ 8 <1>;
>> +conversion-interval = /bits/ 8 <255>;
>> +};
>> diff --git a/drivers/input/touchscreen/ad7879-i2c.c 
>> b/drivers/input/touchscreen/ad7879-i2c.c
>> index d66962c..08a2c9a 100644
>> --- a/drivers/input/touchscreen/ad7879-i2c.c
>> +++ b/drivers/input/touchscreen/ad7879-i2c.c
>> @@ -11,6 +11,7 @@
>>   #include 
>>   #include 
>>   #include 
>> +#include 
>>
>>   #include "ad7879.h"
>>
>> @@ -54,9 +55,50 @@ static const struct ad7879_bus_ops ad7879_i2c_bus_ops = {
>>  .write  = ad7879_i2c_write,
>>   };
>>
>> +static 

Re: [PATCH 3/3] input: touchscreen: ad7879: add device tree support

2016-01-25 Thread kbuild test robot
Hi Stefan,

[auto build test ERROR on input/next]
[also build test ERROR on v4.5-rc1 next-20160125]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improving the system]

url:
https://github.com/0day-ci/linux/commits/Stefan-Agner/input-touchscreen-ad7879-move-header-to-input-subdirectory/20160126-110813
base:   https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git next
config: sh-allmodconfig (attached as .config)
reproduce:
wget 
https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross
 -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=sh 

All errors (new ones prefixed by >>):

   drivers/input/touchscreen/ad7879-i2c.c:151:1: error: 'st1232_ts_dt_ids' 
undeclared here (not in a function)
>> drivers/input/touchscreen/ad7879-i2c.c:151:1: error: 
>> '__mod_of__st1232_ts_dt_ids_device_table' aliased to undefined symbol 
>> 'st1232_ts_dt_ids'

vim +151 drivers/input/touchscreen/ad7879-i2c.c

   145  
   146  #ifdef CONFIG_OF
   147  static const struct of_device_id ad7879_dt_ids[] = {
   148  { .compatible = "adi,ad7879-1", },
   149  { }
   150  };
 > 151  MODULE_DEVICE_TABLE(of, st1232_ts_dt_ids);
   152  #endif
   153  
   154  static struct i2c_driver ad7879_i2c_driver = {

---
0-DAY kernel test infrastructureOpen Source Technology Center
https://lists.01.org/pipermail/kbuild-all   Intel Corporation


.config.gz
Description: Binary data


Re: [PATCH 3/3] input: touchscreen: ad7879: add device tree support

2016-01-25 Thread kbuild test robot
Hi Stefan,

[auto build test ERROR on input/next]
[also build test ERROR on v4.5-rc1 next-20160125]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improving the system]

url:
https://github.com/0day-ci/linux/commits/Stefan-Agner/input-touchscreen-ad7879-move-header-to-input-subdirectory/20160126-110813
base:   https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git next
config: x86_64-randconfig-s4-01261112 (attached as .config)
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64 

All error/warnings (new ones prefixed by >>):

   In file included from drivers/input/touchscreen/ad7879-i2c.c:11:0:
>> drivers/input/touchscreen/ad7879-i2c.c:151:25: error: 'st1232_ts_dt_ids' 
>> undeclared here (not in a function)
MODULE_DEVICE_TABLE(of, st1232_ts_dt_ids);
^
   include/linux/module.h:223:21: note: in definition of macro 
'MODULE_DEVICE_TABLE'
extern const typeof(name) __mod_##type##__##name##_device_table  \
^
>> include/linux/module.h:223:27: error: 
>> '__mod_of__st1232_ts_dt_ids_device_table' aliased to undefined symbol 
>> 'st1232_ts_dt_ids'
extern const typeof(name) __mod_##type##__##name##_device_table  \
  ^
>> drivers/input/touchscreen/ad7879-i2c.c:151:1: note: in expansion of macro 
>> 'MODULE_DEVICE_TABLE'
MODULE_DEVICE_TABLE(of, st1232_ts_dt_ids);
^

vim +/st1232_ts_dt_ids +151 drivers/input/touchscreen/ad7879-i2c.c

 5   *
 6   * Licensed under the GPL-2 or later.
 7   */
 8  
 9  #include /* BUS_I2C */
10  #include 
  > 11  #include 
12  #include 
13  #include 
14  #include 
15  
16  #include "ad7879.h"
17  
18  #define AD7879_DEVID0x79/* AD7879-1/AD7889-1 */
19  
20  /* All registers are word-sized.
21   * AD7879 uses a high-byte first convention.
22   */
23  static int ad7879_i2c_read(struct device *dev, u8 reg)
24  {
25  struct i2c_client *client = to_i2c_client(dev);
26  
27  return i2c_smbus_read_word_swapped(client, reg);
28  }
29  
30  static int ad7879_i2c_multi_read(struct device *dev,
31   u8 first_reg, u8 count, u16 *buf)
32  {
33  struct i2c_client *client = to_i2c_client(dev);
34  u8 idx;
35  
36  i2c_smbus_read_i2c_block_data(client, first_reg, count * 2, (u8 
*)buf);
37  
38  for (idx = 0; idx < count; ++idx)
39  buf[idx] = swab16(buf[idx]);
40  
41  return 0;
42  }
43  
44  static int ad7879_i2c_write(struct device *dev, u8 reg, u16 val)
45  {
46  struct i2c_client *client = to_i2c_client(dev);
47  
48  return i2c_smbus_write_word_swapped(client, reg, val);
49  }
50  
51  static const struct ad7879_bus_ops ad7879_i2c_bus_ops = {
52  .bustype= BUS_I2C,
53  .read   = ad7879_i2c_read,
54  .multi_read = ad7879_i2c_multi_read,
55  .write  = ad7879_i2c_write,
56  };
57  
58  static struct ad7879_platform_data *ad7879_parse_dt(struct device *dev)
59  {
60  struct ad7879_platform_data *pdata;
61  struct device_node *np = dev->of_node;
62  int err;
63  u32 tmp;
64  
65  if (!np)
66  return NULL;
67  
68  pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
69  
70  if (!pdata)
71  return ERR_PTR(-ENOMEM);
72  
73  err = of_property_read_u32(np, "resistance-plate-x", );
74  if (err) {
75  dev_err(dev, "failed to get resistance-plate-x 
property\n");
76  return ERR_PTR(err);
77  }
78  pdata->x_plate_ohms = (u16)tmp;
79  
80  err = of_property_read_u32(np, "touchscreen-max-pressure", 
);
81  if (err) {
82  dev_err(dev, "failed to get touchscreen-max-pressure 
property\n");
83  return ERR_PTR(err);
84  }
85  pdata->pressure_min = (u16)tmp;
86  
87  of_property_read_u8(np, "first-conversion-delay", 
>first_conversion_delay);
88  of_property_read_u8(np, "acquisition-time", 
>acquisition_time);
89  of_property_read_u8(np, "median-filter-size", >median);
90  of_property_read_u8(np, "averaging", >averaging);
91  of_property_read_u8(np, "conversion-interval", 
>pen_down_acc_interval);
92  
93  pdata->swap_xy = of_property_read_bool(np, 
"touchscreen-swapped-x-y");
94  
95  return pdata;
96  }
97  
98  static int ad7879_i2c_probe(struct i2c_client *client,
99 

Re: [PATCH 3/3] input: touchscreen: ad7879: add device tree support

2016-01-25 Thread kbuild test robot
Hi Stefan,

[auto build test ERROR on input/next]
[also build test ERROR on v4.5-rc1 next-20160125]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improving the system]

url:
https://github.com/0day-ci/linux/commits/Stefan-Agner/input-touchscreen-ad7879-move-header-to-input-subdirectory/20160126-110813
base:   https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git next
config: x86_64-randconfig-x012-01260845 (attached as .config)
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64 

All error/warnings (new ones prefixed by >>):

   In file included from drivers/input/touchscreen/ad7879-spi.c:14:0:
>> drivers/input/touchscreen/ad7879.h:28:21: warning: 'struct 
>> ad7879_platform_data' declared inside parameter list
   const struct ad7879_bus_ops *bops);
^
>> drivers/input/touchscreen/ad7879.h:28:21: warning: its scope is only this 
>> definition or declaration, which is probably not what you want
   drivers/input/touchscreen/ad7879-spi.c: In function 'ad7879_spi_probe':
>> drivers/input/touchscreen/ad7879-spi.c:131:55: error: 'pdata' undeclared 
>> (first use in this function)
 ts = ad7879_probe(>dev, AD7879_DEVID, spi->irq, pdata,
  ^
   drivers/input/touchscreen/ad7879-spi.c:131:55: note: each undeclared 
identifier is reported only once for each function it appears in
>> drivers/input/touchscreen/ad7879-spi.c:131:7: error: too many arguments to 
>> function 'ad7879_probe'
 ts = ad7879_probe(>dev, AD7879_DEVID, spi->irq, pdata,
  ^
   In file included from drivers/input/touchscreen/ad7879-spi.c:14:0:
   drivers/input/touchscreen/ad7879.h:26:16: note: declared here
struct ad7879 *ad7879_probe(struct device *dev, u8 devid, unsigned irq,
   ^

vim +/pdata +131 drivers/input/touchscreen/ad7879-spi.c

 8  
 9  #include /* BUS_SPI */
10  #include 
11  #include 
12  #include 
13  
  > 14  #include "ad7879.h"
15  
16  #define AD7879_DEVID0x7A/* AD7879/AD7889 */
17  
18  #define MAX_SPI_FREQ_HZ  500
19  #define AD7879_CMD_MAGIC 0xE000
20  #define AD7879_CMD_READ  (1 << 10)
21  #define AD7879_CMD(reg)  (AD7879_CMD_MAGIC | ((reg) & 0xF))
22  #define AD7879_WRITECMD(reg) (AD7879_CMD(reg))
23  #define AD7879_READCMD(reg)  (AD7879_CMD(reg) | AD7879_CMD_READ)
24  
25  /*
26   * ad7879_read/write are only used for initial setup and for sysfs 
controls.
27   * The main traffic is done in ad7879_collect().
28   */
29  
30  static int ad7879_spi_xfer(struct spi_device *spi,
31 u16 cmd, u8 count, u16 *tx_buf, u16 *rx_buf)
32  {
33  struct spi_message msg;
34  struct spi_transfer *xfers;
35  void *spi_data;
36  u16 *command;
37  u16 *_rx_buf = _rx_buf; /* shut gcc up */
38  u8 idx;
39  int ret;
40  
41  xfers = spi_data = kzalloc(sizeof(*xfers) * (count + 2), 
GFP_KERNEL);
42  if (!spi_data)
43  return -ENOMEM;
44  
45  spi_message_init();
46  
47  command = spi_data;
48  command[0] = cmd;
49  if (count == 1) {
50  /* ad7879_spi_{read,write} gave us buf on stack */
51  command[1] = *tx_buf;
52  tx_buf = [1];
53  _rx_buf = rx_buf;
54  rx_buf = [2];
55  }
56  
57  ++xfers;
58  xfers[0].tx_buf = command;
59  xfers[0].len = 2;
60  spi_message_add_tail([0], );
61  ++xfers;
62  
63  for (idx = 0; idx < count; ++idx) {
64  if (rx_buf)
65  xfers[idx].rx_buf = _buf[idx];
66  if (tx_buf)
67  xfers[idx].tx_buf = _buf[idx];
68  xfers[idx].len = 2;
69  spi_message_add_tail([idx], );
70  }
71  
72  ret = spi_sync(spi, );
73  
74  if (count == 1)
75  _rx_buf[0] = command[2];
76  
77  kfree(spi_data);
78  
79  return ret;
80  }
81  
82  static int ad7879_spi_multi_read(struct device *dev,
83   u8 first_reg, u8 count, u16 *buf)
84  {
85  struct spi_device *spi = to_spi_device(dev);
86  
87  return ad7879_spi_xfer(spi, AD7879_READCMD(first_reg), count, 
NULL, buf);
88  }
89  
90  static int ad7879_spi_read(struct device *dev, u8 reg)
91  {
92  struct spi_device *spi = to_spi_device(dev);
93  u16 ret, dummy;
94  
95  return 

[PATCH 3/3] input: touchscreen: ad7879: add device tree support

2016-01-25 Thread Stefan Agner
Add device tree support for the I2C variant of AD7879 (AD7879-1). This
allows to specify the touchscreen controller as a I2C client node.
Most of the options available as platform data are also available as
device tree properties. Exporting the GPIO is currently not possible
through device tree.

Signed-off-by: Stefan Agner 
---
 .../bindings/input/touchscreen/ad7879-i2c.txt  | 47 
 drivers/input/touchscreen/ad7879-i2c.c | 63 +-
 drivers/input/touchscreen/ad7879-spi.c |  3 +-
 drivers/input/touchscreen/ad7879.c |  2 +-
 drivers/input/touchscreen/ad7879.h |  1 +
 5 files changed, 113 insertions(+), 3 deletions(-)
 create mode 100644 
Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt

diff --git a/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt 
b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
new file mode 100644
index 000..bf169a2
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
@@ -0,0 +1,47 @@
+* Analog Devices AD7879-1/AD7889-1 touchscreen interface (I2C)
+
+Required properties:
+- compatible: must be "adi,ad7879-1"
+- reg: i2c slave address
+- interrupt-parent: the phandle for the interrupt controller
+- interrupts: touch controller interrupt
+- resistance-plate-x   : total resistance of X-plate (for pressure
+ calculation)
+- touchscreen-max-pressure : maximum reported pressure
+- touchscreen-swapped-x-y  : X and Y axis are swapped (boolean)
+ Swapping is done after inverting the axis
+Optional properties:
+- first-conversion-delay   : 0-12 in 128us steps (starting with 128us)
+ 13: 2.560ms
+ 14: 3.584ms
+ 15: 4.096ms
+- acquisition-time : 0: 2us
+ 1: 4us
+ 2: 8us
+ 3: 16us
+- median-filter-size   : 0: disabled
+ 1: 4 measurements
+ 2: 8 measurements
+ 3: 16 measurements
+- averaging: 0: 2 middle values (1 if median disabled)
+ 1: 4 middle values
+ 2: 8 middle values
+ 3: 16 values
+- conversion-interval: : 0: convert one time only
+ 1-255: 515us + val * 35us (up to 9.440ms)
+
+Example:
+
+   ad7879@2c {
+   compatible = "adi,ad7879-1";
+   reg = <0x2c>;
+   interrupt-parent = <>;
+   interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
+   resistance-plate-x = <120>;
+   touchscreen-max-pressure = <4096>;
+   first-conversion-delay = /bits/ 8 <3>;
+   acquisition-time = /bits/ 8 <1>;
+   median-filter-size = /bits/ 8 <2>;
+   averaging = /bits/ 8 <1>;
+   conversion-interval = /bits/ 8 <255>;
+   };
diff --git a/drivers/input/touchscreen/ad7879-i2c.c 
b/drivers/input/touchscreen/ad7879-i2c.c
index d66962c..08a2c9a 100644
--- a/drivers/input/touchscreen/ad7879-i2c.c
+++ b/drivers/input/touchscreen/ad7879-i2c.c
@@ -11,6 +11,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #include "ad7879.h"
 
@@ -54,9 +55,50 @@ static const struct ad7879_bus_ops ad7879_i2c_bus_ops = {
.write  = ad7879_i2c_write,
 };
 
+static struct ad7879_platform_data *ad7879_parse_dt(struct device *dev)
+{
+   struct ad7879_platform_data *pdata;
+   struct device_node *np = dev->of_node;
+   int err;
+   u32 tmp;
+
+   if (!np)
+   return NULL;
+
+   pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
+
+   if (!pdata)
+   return ERR_PTR(-ENOMEM);
+
+   err = of_property_read_u32(np, "resistance-plate-x", );
+   if (err) {
+   dev_err(dev, "failed to get resistance-plate-x property\n");
+   return ERR_PTR(err);
+   }
+   pdata->x_plate_ohms = (u16)tmp;
+
+   err = of_property_read_u32(np, "touchscreen-max-pressure", );
+   if (err) {
+   dev_err(dev, "failed to get touchscreen-max-pressure 
property\n");
+   return ERR_PTR(err);
+   }
+   pdata->pressure_min = (u16)tmp;
+
+   of_property_read_u8(np, "first-conversion-delay", 
>first_conversion_delay);
+   of_property_read_u8(np, "acquisition-time", >acquisition_time);
+   of_property_read_u8(np, "median-filter-size", >median);
+   of_property_read_u8(np, "averaging", >averaging);
+   of_property_read_u8(np, "conversion-interval", 
>pen_down_acc_interval);
+
+   pdata->swap_xy = of_property_read_bool(np, "touchscreen-swapped-x-y");
+
+   return 

Re: [PATCH 3/3] input: touchscreen: ad7879: add device tree support

2016-01-25 Thread kbuild test robot
Hi Stefan,

[auto build test ERROR on input/next]
[also build test ERROR on v4.5-rc1 next-20160125]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improving the system]

url:
https://github.com/0day-ci/linux/commits/Stefan-Agner/input-touchscreen-ad7879-move-header-to-input-subdirectory/20160126-110813
base:   https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git next
config: sh-allmodconfig (attached as .config)
reproduce:
wget 
https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross
 -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=sh 

All errors (new ones prefixed by >>):

   drivers/input/touchscreen/ad7879-i2c.c:151:1: error: 'st1232_ts_dt_ids' 
undeclared here (not in a function)
>> drivers/input/touchscreen/ad7879-i2c.c:151:1: error: 
>> '__mod_of__st1232_ts_dt_ids_device_table' aliased to undefined symbol 
>> 'st1232_ts_dt_ids'

vim +151 drivers/input/touchscreen/ad7879-i2c.c

   145  
   146  #ifdef CONFIG_OF
   147  static const struct of_device_id ad7879_dt_ids[] = {
   148  { .compatible = "adi,ad7879-1", },
   149  { }
   150  };
 > 151  MODULE_DEVICE_TABLE(of, st1232_ts_dt_ids);
   152  #endif
   153  
   154  static struct i2c_driver ad7879_i2c_driver = {

---
0-DAY kernel test infrastructureOpen Source Technology Center
https://lists.01.org/pipermail/kbuild-all   Intel Corporation


.config.gz
Description: Binary data


Re: [PATCH 3/3] input: touchscreen: ad7879: add device tree support

2016-01-25 Thread kbuild test robot
Hi Stefan,

[auto build test ERROR on input/next]
[also build test ERROR on v4.5-rc1 next-20160125]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improving the system]

url:
https://github.com/0day-ci/linux/commits/Stefan-Agner/input-touchscreen-ad7879-move-header-to-input-subdirectory/20160126-110813
base:   https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git next
config: x86_64-randconfig-s4-01261112 (attached as .config)
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64 

All error/warnings (new ones prefixed by >>):

   In file included from drivers/input/touchscreen/ad7879-i2c.c:11:0:
>> drivers/input/touchscreen/ad7879-i2c.c:151:25: error: 'st1232_ts_dt_ids' 
>> undeclared here (not in a function)
MODULE_DEVICE_TABLE(of, st1232_ts_dt_ids);
^
   include/linux/module.h:223:21: note: in definition of macro 
'MODULE_DEVICE_TABLE'
extern const typeof(name) __mod_##type##__##name##_device_table  \
^
>> include/linux/module.h:223:27: error: 
>> '__mod_of__st1232_ts_dt_ids_device_table' aliased to undefined symbol 
>> 'st1232_ts_dt_ids'
extern const typeof(name) __mod_##type##__##name##_device_table  \
  ^
>> drivers/input/touchscreen/ad7879-i2c.c:151:1: note: in expansion of macro 
>> 'MODULE_DEVICE_TABLE'
MODULE_DEVICE_TABLE(of, st1232_ts_dt_ids);
^

vim +/st1232_ts_dt_ids +151 drivers/input/touchscreen/ad7879-i2c.c

 5   *
 6   * Licensed under the GPL-2 or later.
 7   */
 8  
 9  #include /* BUS_I2C */
10  #include 
  > 11  #include 
12  #include 
13  #include 
14  #include 
15  
16  #include "ad7879.h"
17  
18  #define AD7879_DEVID0x79/* AD7879-1/AD7889-1 */
19  
20  /* All registers are word-sized.
21   * AD7879 uses a high-byte first convention.
22   */
23  static int ad7879_i2c_read(struct device *dev, u8 reg)
24  {
25  struct i2c_client *client = to_i2c_client(dev);
26  
27  return i2c_smbus_read_word_swapped(client, reg);
28  }
29  
30  static int ad7879_i2c_multi_read(struct device *dev,
31   u8 first_reg, u8 count, u16 *buf)
32  {
33  struct i2c_client *client = to_i2c_client(dev);
34  u8 idx;
35  
36  i2c_smbus_read_i2c_block_data(client, first_reg, count * 2, (u8 
*)buf);
37  
38  for (idx = 0; idx < count; ++idx)
39  buf[idx] = swab16(buf[idx]);
40  
41  return 0;
42  }
43  
44  static int ad7879_i2c_write(struct device *dev, u8 reg, u16 val)
45  {
46  struct i2c_client *client = to_i2c_client(dev);
47  
48  return i2c_smbus_write_word_swapped(client, reg, val);
49  }
50  
51  static const struct ad7879_bus_ops ad7879_i2c_bus_ops = {
52  .bustype= BUS_I2C,
53  .read   = ad7879_i2c_read,
54  .multi_read = ad7879_i2c_multi_read,
55  .write  = ad7879_i2c_write,
56  };
57  
58  static struct ad7879_platform_data *ad7879_parse_dt(struct device *dev)
59  {
60  struct ad7879_platform_data *pdata;
61  struct device_node *np = dev->of_node;
62  int err;
63  u32 tmp;
64  
65  if (!np)
66  return NULL;
67  
68  pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
69  
70  if (!pdata)
71  return ERR_PTR(-ENOMEM);
72  
73  err = of_property_read_u32(np, "resistance-plate-x", );
74  if (err) {
75  dev_err(dev, "failed to get resistance-plate-x 
property\n");
76  return ERR_PTR(err);
77  }
78  pdata->x_plate_ohms = (u16)tmp;
79  
80  err = of_property_read_u32(np, "touchscreen-max-pressure", 
);
81  if (err) {
82  dev_err(dev, "failed to get touchscreen-max-pressure 
property\n");
83  return ERR_PTR(err);
84  }
85  pdata->pressure_min = (u16)tmp;
86  
87  of_property_read_u8(np, "first-conversion-delay", 
>first_conversion_delay);
88  of_property_read_u8(np, "acquisition-time", 
>acquisition_time);
89  of_property_read_u8(np, "median-filter-size", >median);
90  of_property_read_u8(np, "averaging", >averaging);
91  of_property_read_u8(np, "conversion-interval", 
>pen_down_acc_interval);
92  
93  pdata->swap_xy = of_property_read_bool(np, 
"touchscreen-swapped-x-y");
94  
95  return pdata;
96  }
97  
98  static int ad7879_i2c_probe(struct i2c_client *client,
99 

[PATCH 3/3] input: touchscreen: ad7879: add device tree support

2016-01-25 Thread Stefan Agner
Add device tree support for the I2C variant of AD7879 (AD7879-1). This
allows to specify the touchscreen controller as a I2C client node.
Most of the options available as platform data are also available as
device tree properties. Exporting the GPIO is currently not possible
through device tree.

Signed-off-by: Stefan Agner 
---
 .../bindings/input/touchscreen/ad7879-i2c.txt  | 47 
 drivers/input/touchscreen/ad7879-i2c.c | 63 +-
 drivers/input/touchscreen/ad7879-spi.c |  3 +-
 drivers/input/touchscreen/ad7879.c |  2 +-
 drivers/input/touchscreen/ad7879.h |  1 +
 5 files changed, 113 insertions(+), 3 deletions(-)
 create mode 100644 
Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt

diff --git a/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt 
b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
new file mode 100644
index 000..bf169a2
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt
@@ -0,0 +1,47 @@
+* Analog Devices AD7879-1/AD7889-1 touchscreen interface (I2C)
+
+Required properties:
+- compatible: must be "adi,ad7879-1"
+- reg: i2c slave address
+- interrupt-parent: the phandle for the interrupt controller
+- interrupts: touch controller interrupt
+- resistance-plate-x   : total resistance of X-plate (for pressure
+ calculation)
+- touchscreen-max-pressure : maximum reported pressure
+- touchscreen-swapped-x-y  : X and Y axis are swapped (boolean)
+ Swapping is done after inverting the axis
+Optional properties:
+- first-conversion-delay   : 0-12 in 128us steps (starting with 128us)
+ 13: 2.560ms
+ 14: 3.584ms
+ 15: 4.096ms
+- acquisition-time : 0: 2us
+ 1: 4us
+ 2: 8us
+ 3: 16us
+- median-filter-size   : 0: disabled
+ 1: 4 measurements
+ 2: 8 measurements
+ 3: 16 measurements
+- averaging: 0: 2 middle values (1 if median disabled)
+ 1: 4 middle values
+ 2: 8 middle values
+ 3: 16 values
+- conversion-interval: : 0: convert one time only
+ 1-255: 515us + val * 35us (up to 9.440ms)
+
+Example:
+
+   ad7879@2c {
+   compatible = "adi,ad7879-1";
+   reg = <0x2c>;
+   interrupt-parent = <>;
+   interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
+   resistance-plate-x = <120>;
+   touchscreen-max-pressure = <4096>;
+   first-conversion-delay = /bits/ 8 <3>;
+   acquisition-time = /bits/ 8 <1>;
+   median-filter-size = /bits/ 8 <2>;
+   averaging = /bits/ 8 <1>;
+   conversion-interval = /bits/ 8 <255>;
+   };
diff --git a/drivers/input/touchscreen/ad7879-i2c.c 
b/drivers/input/touchscreen/ad7879-i2c.c
index d66962c..08a2c9a 100644
--- a/drivers/input/touchscreen/ad7879-i2c.c
+++ b/drivers/input/touchscreen/ad7879-i2c.c
@@ -11,6 +11,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #include "ad7879.h"
 
@@ -54,9 +55,50 @@ static const struct ad7879_bus_ops ad7879_i2c_bus_ops = {
.write  = ad7879_i2c_write,
 };
 
+static struct ad7879_platform_data *ad7879_parse_dt(struct device *dev)
+{
+   struct ad7879_platform_data *pdata;
+   struct device_node *np = dev->of_node;
+   int err;
+   u32 tmp;
+
+   if (!np)
+   return NULL;
+
+   pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
+
+   if (!pdata)
+   return ERR_PTR(-ENOMEM);
+
+   err = of_property_read_u32(np, "resistance-plate-x", );
+   if (err) {
+   dev_err(dev, "failed to get resistance-plate-x property\n");
+   return ERR_PTR(err);
+   }
+   pdata->x_plate_ohms = (u16)tmp;
+
+   err = of_property_read_u32(np, "touchscreen-max-pressure", );
+   if (err) {
+   dev_err(dev, "failed to get touchscreen-max-pressure 
property\n");
+   return ERR_PTR(err);
+   }
+   pdata->pressure_min = (u16)tmp;
+
+   of_property_read_u8(np, "first-conversion-delay", 
>first_conversion_delay);
+   of_property_read_u8(np, "acquisition-time", >acquisition_time);
+   of_property_read_u8(np, "median-filter-size", >median);
+   of_property_read_u8(np, "averaging", >averaging);
+   of_property_read_u8(np, "conversion-interval", 
>pen_down_acc_interval);
+
+   pdata->swap_xy = of_property_read_bool(np, "touchscreen-swapped-x-y");
+
+   

Re: [PATCH 3/3] input: touchscreen: ad7879: add device tree support

2016-01-25 Thread kbuild test robot
Hi Stefan,

[auto build test ERROR on input/next]
[also build test ERROR on v4.5-rc1 next-20160125]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improving the system]

url:
https://github.com/0day-ci/linux/commits/Stefan-Agner/input-touchscreen-ad7879-move-header-to-input-subdirectory/20160126-110813
base:   https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git next
config: x86_64-randconfig-x012-01260845 (attached as .config)
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64 

All error/warnings (new ones prefixed by >>):

   In file included from drivers/input/touchscreen/ad7879-spi.c:14:0:
>> drivers/input/touchscreen/ad7879.h:28:21: warning: 'struct 
>> ad7879_platform_data' declared inside parameter list
   const struct ad7879_bus_ops *bops);
^
>> drivers/input/touchscreen/ad7879.h:28:21: warning: its scope is only this 
>> definition or declaration, which is probably not what you want
   drivers/input/touchscreen/ad7879-spi.c: In function 'ad7879_spi_probe':
>> drivers/input/touchscreen/ad7879-spi.c:131:55: error: 'pdata' undeclared 
>> (first use in this function)
 ts = ad7879_probe(>dev, AD7879_DEVID, spi->irq, pdata,
  ^
   drivers/input/touchscreen/ad7879-spi.c:131:55: note: each undeclared 
identifier is reported only once for each function it appears in
>> drivers/input/touchscreen/ad7879-spi.c:131:7: error: too many arguments to 
>> function 'ad7879_probe'
 ts = ad7879_probe(>dev, AD7879_DEVID, spi->irq, pdata,
  ^
   In file included from drivers/input/touchscreen/ad7879-spi.c:14:0:
   drivers/input/touchscreen/ad7879.h:26:16: note: declared here
struct ad7879 *ad7879_probe(struct device *dev, u8 devid, unsigned irq,
   ^

vim +/pdata +131 drivers/input/touchscreen/ad7879-spi.c

 8  
 9  #include /* BUS_SPI */
10  #include 
11  #include 
12  #include 
13  
  > 14  #include "ad7879.h"
15  
16  #define AD7879_DEVID0x7A/* AD7879/AD7889 */
17  
18  #define MAX_SPI_FREQ_HZ  500
19  #define AD7879_CMD_MAGIC 0xE000
20  #define AD7879_CMD_READ  (1 << 10)
21  #define AD7879_CMD(reg)  (AD7879_CMD_MAGIC | ((reg) & 0xF))
22  #define AD7879_WRITECMD(reg) (AD7879_CMD(reg))
23  #define AD7879_READCMD(reg)  (AD7879_CMD(reg) | AD7879_CMD_READ)
24  
25  /*
26   * ad7879_read/write are only used for initial setup and for sysfs 
controls.
27   * The main traffic is done in ad7879_collect().
28   */
29  
30  static int ad7879_spi_xfer(struct spi_device *spi,
31 u16 cmd, u8 count, u16 *tx_buf, u16 *rx_buf)
32  {
33  struct spi_message msg;
34  struct spi_transfer *xfers;
35  void *spi_data;
36  u16 *command;
37  u16 *_rx_buf = _rx_buf; /* shut gcc up */
38  u8 idx;
39  int ret;
40  
41  xfers = spi_data = kzalloc(sizeof(*xfers) * (count + 2), 
GFP_KERNEL);
42  if (!spi_data)
43  return -ENOMEM;
44  
45  spi_message_init();
46  
47  command = spi_data;
48  command[0] = cmd;
49  if (count == 1) {
50  /* ad7879_spi_{read,write} gave us buf on stack */
51  command[1] = *tx_buf;
52  tx_buf = [1];
53  _rx_buf = rx_buf;
54  rx_buf = [2];
55  }
56  
57  ++xfers;
58  xfers[0].tx_buf = command;
59  xfers[0].len = 2;
60  spi_message_add_tail([0], );
61  ++xfers;
62  
63  for (idx = 0; idx < count; ++idx) {
64  if (rx_buf)
65  xfers[idx].rx_buf = _buf[idx];
66  if (tx_buf)
67  xfers[idx].tx_buf = _buf[idx];
68  xfers[idx].len = 2;
69  spi_message_add_tail([idx], );
70  }
71  
72  ret = spi_sync(spi, );
73  
74  if (count == 1)
75  _rx_buf[0] = command[2];
76  
77  kfree(spi_data);
78  
79  return ret;
80  }
81  
82  static int ad7879_spi_multi_read(struct device *dev,
83   u8 first_reg, u8 count, u16 *buf)
84  {
85  struct spi_device *spi = to_spi_device(dev);
86  
87  return ad7879_spi_xfer(spi, AD7879_READCMD(first_reg), count, 
NULL, buf);
88  }
89  
90  static int ad7879_spi_read(struct device *dev, u8 reg)
91  {
92  struct spi_device *spi = to_spi_device(dev);
93  u16 ret, dummy;
94  
95  return