Re: [PATCH V3 1/2] tps6507x-ts: Add DT support

Manish Badarkhe
2013-08-20T06:55:38Z

Hi Prabhakar,

On Tue, Aug 20, 2013 at 11:44 AM, Prabhakar Lad
<prabhakar.csengg@gmail.com> wrote:
> Hi Manish,
>
> Thanks for the patch.
>
> On Tue, May 21, 2013 at 2:24 PM, Vishwanathrao Badarkhe, Manish
> <manishv.b@ti.com> wrote:
>> Add device tree based support for TI's tps6507x touchscreen.
>>
>> Tested on da850-evm.
>>
>> Signed-off-by: Vishwanathrao Badarkhe, Manish <manishv.b@ti.com>
>> ---
>> Changes since V2:
>> - Removed unnecessary code.
>> - Updated Documentation to provide proper names of
>> devicetree properties.
>>
>> Changes since V1:
>> - Updated documentation to specify tps6507x as multifunctional
>> device.
>> - return proper error value in absence of platform and DT
>> data for touchscreen.
>> - Updated commit message.
>>
>> :100755 100755 8fffa3c... 65ee2cd... M Documentation/devicetree/bindings/mfd/tps6507x.txt
>> :100644 100644 65e0f9a... 89232ee... M drivers/input/touchscreen/tps6507x-ts.c
>> Documentation/devicetree/bindings/mfd/tps6507x.txt | 28 ++++++-
>> drivers/input/touchscreen/tps6507x-ts.c | 98 ++++++++++++++------
>> 2 files changed, 95 insertions(+), 31 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/mfd/tps6507x.txt b/Documentation/devicetree/bindings/mfd/tps6507x.txt
>> index 8fffa3c..65ee2cd 100755
>> --- a/Documentation/devicetree/bindings/mfd/tps6507x.txt
>> +++ b/Documentation/devicetree/bindings/mfd/tps6507x.txt
>> @@ -1,4 +1,8 @@
>> -TPS6507x Power Management Integrated Circuit
>> +TPS6507x Multifunctional Device.
>> +
>> +Features provided by TPS6507x:
>> + 1.Power Management Integrated Circuit.
>> + 2.Touch-Screen.
>>
>> Required properties:
>> - compatible: "ti,tps6507x"
>> @@ -23,6 +27,12 @@ Required properties:
>> vindcdc1_2-supply: VDCDC1 and VDCDC2 input.
>> vindcdc3-supply : VDCDC3 input.
>> vldo1_2-supply : VLDO1 and VLDO2 input.
>> +- tsc: This node specifies touch screen data.
>> + ti,poll-period : Time at which touch input is getting sampled in ms.
>> + ti,min-pressure: Minimum pressure value to trigger touch.
>> + ti,vref : voltage reference for ADC.
>> + 0: Reference voltage for ADC is disabled.
>> + 1: Reference voltage for ADC is enabled.
>>
>> Regulator Optional properties:
>> - defdcdc_default: It's property of DCDC2 and DCDC3 regulators.
>> @@ -30,6 +40,14 @@ Regulator Optional properties:
>> 1: If defdcdc pin of DCDC2/DCDC3 is driven HIGH.
>> If this property is not defined, it defaults to 0 (not enabled).
>>
>> +Touchscreen Optional properties:
>> +- ti,vendor : Touchscreen vendor id to populate
>> + in sysclass interface.
>> +- ti,product: Touchscreen product id to populate
>> + in sysclass interface.
>> +- ti,version: Touchscreen version id to populate
>> + in sysclass interface.
>> +
>> Example:
>>
>> pmu: tps6507x@48 {
>> @@ -88,4 +106,12 @@ Example:
>> };
>> };
>>
>> + tsc {
>> + ti,poll-period = <30>;
>> + ti,min-pressure = <0x30>;
>> + ti,vref = <0>;
>> + ti,vendor = <0>;
>> + ti,product = <65070>;
>> + ti,version = <0x100>;
>> + };
>> };
>> diff --git a/drivers/input/touchscreen/tps6507x-ts.c b/drivers/input/touchscreen/tps6507x-ts.c
>> index 65e0f9a..89232ee 100644
>> --- a/drivers/input/touchscreen/tps6507x-ts.c
>> +++ b/drivers/input/touchscreen/tps6507x-ts.c
>> @@ -21,6 +21,8 @@
>> #include <linux/mfd/tps6507x.h>
>> #include <linux/input/tps6507x-ts.h>
>> #include <linux/delay.h>
>> +#include <linux/of.h>
>> +#include <linux/of_device.h>
>>
>> #define TSC_DEFAULT_POLL_PERIOD 30 /* ms */
>> #define TPS_DEFAULT_MIN_PRESSURE 0x30
>> @@ -231,36 +233,76 @@ done:
>> ret = tps6507x_adc_standby(tsc);
>> }
>>
>> +static int tsc_init_data(struct tps6507x_dev *tps6507x_dev,
>> + struct input_dev *input_dev)
>> +{
>> + struct device_node *node = tps6507x_dev->dev->of_node;
>> + struct tps6507x_board *tps_board =
>> + (struct tps6507x_board *)tps6507x_dev->dev->platform_data;
>> + struct touchscreen_init_data *init_data = NULL;
>> + int err;
>> +
>> + if (node)
>> + node = of_find_node_by_name(node, "tsc");
>> + if (tps_board)
>> + init_data = tps_board->tps6507x_ts_init_data;
>> +
>> + if (node == NULL || init_data == NULL) {
>> + err = -EINVAL;
>> + goto error_ret;
>> + } else if (init_data) {
>> + tps6507x_dev->ts->poll_period = init_data->poll_period;
>> + tps6507x_dev->ts->min_pressure = init_data->min_pressure;
>> + tps6507x_dev->ts->vref = init_data->vref;
>> + input_dev->id.vendor = init_data->vendor;
>> + input_dev->id.product = init_data->product;
>> + input_dev->id.version = init_data->version;
>> + } else if (node) {
>> + err = of_property_read_u32(node, "ti,poll-period",
>> + (u32 *)&tps6507x_dev->ts->poll_period);
>> + if (err < 0)
>> + goto error_ret;
>> +
>> + err = of_property_read_u16(node, "ti,min-pressure",
>> + &tps6507x_dev->ts->min_pressure);
>> + if (err < 0)
>> + goto error_ret;
>> +
>> + err = of_property_read_u32(node, "ti,vref",
>> + &tps6507x_dev->ts->vref);
>> + if (err < 0)
>> + goto error_ret;
>> +
>> + err = of_property_read_u16(node, "ti,vendor",
>> + &input_dev->id.vendor);
>> + if (err < 0)
>> + goto error_ret;
>> +
>> + err = of_property_read_u16(node, "ti,product",
>> + &input_dev->id.product);
>> + if (err < 0)
>> + goto error_ret;
>> +
>> + err = of_property_read_u16(node, "ti,version",
>> + &input_dev->id.version);
>> + if (err < 0)
>> + goto error_ret;
>
> All the three above properties as per the documentation above
> are optional, but the code here makes them required property.
> May be what you can do is if property is not defined make it as
> zero as per documentation.

I already taken care of this as per Dmitry's comment but not yet
posted patch series as
there is discussion going on populating child node's properties.

Regards
Manish Badarkhe