All of lore.kernel.org
 help / color / mirror / Atom feed
From: Roger Quadros <rogerq@ti.com>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: rydberg@euromail.se, jcbian@pixcir.com.cn,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org,
	devicetree@vger.kernel.org
Subject: Re: [PATCH 1/9] Input: pixcir_i2c_ts: Add device tree support
Date: Thu, 19 Dec 2013 11:42:57 +0530	[thread overview]
Message-ID: <52B28E69.3030703@ti.com> (raw)
In-Reply-To: <20131218140918.GA28504@core.coreip.homeip.net>

On 12/18/2013 07:39 PM, Dmitry Torokhov wrote:
> Hi Roger,
> 
> On Wed, Dec 18, 2013 at 02:51:12PM +0530, Roger Quadros wrote:
>> Provide device tree support and binding information.
>> Change platform data parameters from x/y_max to x/y_size..
> 
> I'd rather keep them as they were.

OK.

> 
>>
>> Signed-off-by: Roger Quadros <rogerq@ti.com>
>> Acked-by: Mugunthan V N <mugunthanvnm@ti.com>
>> ---
>>  .../bindings/input/touchscreen/pixcir_i2c_ts.txt   | 26 ++++++++
>>  drivers/input/touchscreen/pixcir_i2c_ts.c          | 77 ++++++++++++++++++++--
>>  include/linux/input/pixcir_ts.h                    |  5 +-
>>  3 files changed, 101 insertions(+), 7 deletions(-)
>>  create mode 100644 Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt
>>
>> diff --git a/Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt b/Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt
>> new file mode 100644
>> index 0000000..c0b0b270
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt
>> @@ -0,0 +1,26 @@
>> +* Pixcir I2C touchscreen controllers
>> +
>> +Required properties:
>> +- compatible: must be "pixcir,pixcir_ts"
>> +- reg: I2C address of the chip
>> +- interrupts: interrupt to which the chip is connected
>> +- attb-gpio: GPIO connected to the ATTB line of the chip
>> +- x-size: horizontal resolution of touchscreen
>> +- y-size: vertical resolution of touchscreen
>> +
>> +Example:
>> +
>> +	i2c@00000000 {
>> +		/* ... */
>> +
>> +		pixcir_ts@5c {
>> +			compatible = "pixcir,pixcir_ts";
>> +			reg = <0x5c>;
>> +			interrupts = <2 0>;
>> +			attb-gpio = <&gpf 2 0 2>;
>> +			x-size = <800>;
>> +			y-size = <600>;
>> +		};
>> +
>> +		/* ... */
>> +	};
>> diff --git a/drivers/input/touchscreen/pixcir_i2c_ts.c b/drivers/input/touchscreen/pixcir_i2c_ts.c
>> index 6cc6b36..3a447c9 100644
>> --- a/drivers/input/touchscreen/pixcir_i2c_ts.c
>> +++ b/drivers/input/touchscreen/pixcir_i2c_ts.c
>> @@ -24,6 +24,10 @@
>>  #include <linux/i2c.h>
>>  #include <linux/input.h>
>>  #include <linux/input/pixcir_ts.h>
>> +#include <linux/gpio.h>
>> +#include <linux/of.h>
>> +#include <linux/of_gpio.h>
>> +#include <linux/of_device.h>
>>  
>>  struct pixcir_i2c_ts_data {
>>  	struct i2c_client *client;
>> @@ -125,15 +129,65 @@ static int pixcir_i2c_ts_resume(struct device *dev)
>>  static SIMPLE_DEV_PM_OPS(pixcir_dev_pm_ops,
>>  			 pixcir_i2c_ts_suspend, pixcir_i2c_ts_resume);
>>  
>> +#if defined(CONFIG_OF)
> 
> #ifdef is preferred for simple conditions.
> 
>> +static const struct of_device_id pixcir_of_match[];
>> +
>> +static struct pixcir_ts_platform_data *pixcir_parse_dt(struct device *dev)
>> +{
>> +	struct pixcir_ts_platform_data *pdata;
>> +	struct device_node *np = dev->of_node;
>> +	const struct of_device_id *match;
>> +
>> +	match = of_match_device(of_match_ptr(pixcir_of_match), dev);
>> +	if (!match)
>> +		return ERR_PTR(-EINVAL);
> 
> Why do you need an explicit match here?
> 

Right, it is not needed here for this patch but used later in patch 6
to get chip specific data. I'll fix this while re-arranging the patches.

>> +
>> +	pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
>> +	if (!pdata)
>> +		return ERR_PTR(-ENOMEM);
>> +
>> +	pdata->gpio_attb = of_get_named_gpio(np, "attb-gpio", 0);
>> +	if (!gpio_is_valid(pdata->gpio_attb))
>> +		dev_err(dev, "Failed to get ATTB GPIO\n");
>> +
>> +	if (of_property_read_u32(np, "x-size", &pdata->x_size)) {
>> +		dev_err(dev, "Failed to get x-size property\n");
>> +		return ERR_PTR(-EINVAL);
>> +	}
>> +
>> +	if (of_property_read_u32(np, "y-size", &pdata->y_size)) {
>> +		dev_err(dev, "Failed to get y-size property\n");
>> +		return ERR_PTR(-EINVAL);
>> +	}
>> +
>> +	dev_dbg(dev, "%s: x %d, y %d, gpio %d\n", __func__,
>> +				pdata->x_size, pdata->y_size, pdata->gpio_attb);
>> +
>> +	return pdata;
>> +}
>> +#else
>> +static struct pixcir_ts_platform_data *pixcir_parse_dt(struct device *dev)
>> +{
>> +	return NULL;
> 
> This should be
> 
> 	return ERR_PTR(-EINVAL);
> 
> since you test it with IS_ERR() later.

OK.

> 
>> +}
>> +#endif
>> +
>>  static int pixcir_i2c_ts_probe(struct i2c_client *client,
>>  					 const struct i2c_device_id *id)
>>  {
>>  	const struct pixcir_ts_platform_data *pdata = client->dev.platform_data;
>> +	struct device *dev = &client->dev;
>> +	struct device_node *np = dev->of_node;
>>  	struct pixcir_i2c_ts_data *tsdata;
>>  	struct input_dev *input;
>>  	int error;
>>  
>> -	if (!pdata) {
>> +	if (np) {
>> +		pdata = pixcir_parse_dt(dev);
>> +		if (IS_ERR(pdata))
>> +			return PTR_ERR(pdata);
> 
> We should be favoring kernel-provided platform data if it is pesent even
> if there is dt-data available. This way user can override firmware,m if
> needed.
> 
OK. But how can the user override kernel provided platform data? Can't device
tree overlays be used to patch DT data in the same fashion.

I've not tried either so I don't know which one is more user friendly.

>> +
>> +	} else if (!pdata) {
>>  		dev_err(&client->dev, "platform data not defined\n");
>>  		return -EINVAL;
>>  	}
>> @@ -157,10 +211,14 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client,
>>  	__set_bit(EV_KEY, input->evbit);
>>  	__set_bit(EV_ABS, input->evbit);
>>  	__set_bit(BTN_TOUCH, input->keybit);
>> -	input_set_abs_params(input, ABS_X, 0, pdata->x_max, 0, 0);
>> -	input_set_abs_params(input, ABS_Y, 0, pdata->y_max, 0, 0);
>> -	input_set_abs_params(input, ABS_MT_POSITION_X, 0, pdata->x_max, 0, 0);
>> -	input_set_abs_params(input, ABS_MT_POSITION_Y, 0, pdata->y_max, 0, 0);
>> +	input_set_abs_params(input, ABS_X,
>> +					0, pdata->x_size - 1, 0, 0);
>> +	input_set_abs_params(input, ABS_Y,
>> +					0, pdata->y_size - 1, 0, 0);
>> +	input_set_abs_params(input, ABS_MT_POSITION_X,
>> +					0, pdata->x_size - 1, 0, 0);
>> +	input_set_abs_params(input, ABS_MT_POSITION_Y,
>> +					0, pdata->y_size - 1, 0, 0);
>>  
>>  	input_set_drvdata(input, tsdata);
>>  
>> @@ -211,11 +269,20 @@ static const struct i2c_device_id pixcir_i2c_ts_id[] = {
>>  };
>>  MODULE_DEVICE_TABLE(i2c, pixcir_i2c_ts_id);
>>  
>> +#if defined(CONFIG_OF)
>> +static const struct of_device_id pixcir_of_match[] = {
>> +	{ .compatible = "pixcir,pixcir_ts", },
>> +	{ }
>> +};
>> +MODULE_DEVICE_TABLE(of, pixcir_of_match);
>> +#endif
> 
> #ifdef is preferred for simple conditions.
> 
OK.

>> +
>>  static struct i2c_driver pixcir_i2c_ts_driver = {
>>  	.driver = {
>>  		.owner	= THIS_MODULE,
>>  		.name	= "pixcir_ts",
>>  		.pm	= &pixcir_dev_pm_ops,
>> +		.of_match_table = of_match_ptr(pixcir_of_match),
>>  	},
>>  	.probe		= pixcir_i2c_ts_probe,
>>  	.remove		= pixcir_i2c_ts_remove,
>> diff --git a/include/linux/input/pixcir_ts.h b/include/linux/input/pixcir_ts.h
>> index 7163d91..b34ff7e 100644
>> --- a/include/linux/input/pixcir_ts.h
>> +++ b/include/linux/input/pixcir_ts.h
>> @@ -3,8 +3,9 @@
>>  
>>  struct pixcir_ts_platform_data {
>>  	int (*attb_read_val)(void);
>> -	int x_max;
>> -	int y_max;
>> +	unsigned int x_size;	/* X axis resolution */
>> +	unsigned int y_size;	/* Y axis resolution */
>> +	int gpio_attb;		/* GPIO connected to ATTB line */
>>  };
> 
> OK, it looks like the series were split awkwardly: you are defining data
> that is used by follow-up patches and its purpose is unclear when
> reviewing patch-by-patch. I'd recommend rearranging so that DT support
> patch is the very last in the series.
> 
Got it.

>>  
>>  #endif
>> -- 
>> 1.8.3.2

cheers,
-roger

WARNING: multiple messages have this Message-ID (diff)
From: Roger Quadros <rogerq@ti.com>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: <rydberg@euromail.se>, <jcbian@pixcir.com.cn>,
	<linux-input@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<devicetree@vger.kernel.org>
Subject: Re: [PATCH 1/9] Input: pixcir_i2c_ts: Add device tree support
Date: Thu, 19 Dec 2013 11:42:57 +0530	[thread overview]
Message-ID: <52B28E69.3030703@ti.com> (raw)
In-Reply-To: <20131218140918.GA28504@core.coreip.homeip.net>

On 12/18/2013 07:39 PM, Dmitry Torokhov wrote:
> Hi Roger,
> 
> On Wed, Dec 18, 2013 at 02:51:12PM +0530, Roger Quadros wrote:
>> Provide device tree support and binding information.
>> Change platform data parameters from x/y_max to x/y_size..
> 
> I'd rather keep them as they were.

OK.

> 
>>
>> Signed-off-by: Roger Quadros <rogerq@ti.com>
>> Acked-by: Mugunthan V N <mugunthanvnm@ti.com>
>> ---
>>  .../bindings/input/touchscreen/pixcir_i2c_ts.txt   | 26 ++++++++
>>  drivers/input/touchscreen/pixcir_i2c_ts.c          | 77 ++++++++++++++++++++--
>>  include/linux/input/pixcir_ts.h                    |  5 +-
>>  3 files changed, 101 insertions(+), 7 deletions(-)
>>  create mode 100644 Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt
>>
>> diff --git a/Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt b/Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt
>> new file mode 100644
>> index 0000000..c0b0b270
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt
>> @@ -0,0 +1,26 @@
>> +* Pixcir I2C touchscreen controllers
>> +
>> +Required properties:
>> +- compatible: must be "pixcir,pixcir_ts"
>> +- reg: I2C address of the chip
>> +- interrupts: interrupt to which the chip is connected
>> +- attb-gpio: GPIO connected to the ATTB line of the chip
>> +- x-size: horizontal resolution of touchscreen
>> +- y-size: vertical resolution of touchscreen
>> +
>> +Example:
>> +
>> +	i2c@00000000 {
>> +		/* ... */
>> +
>> +		pixcir_ts@5c {
>> +			compatible = "pixcir,pixcir_ts";
>> +			reg = <0x5c>;
>> +			interrupts = <2 0>;
>> +			attb-gpio = <&gpf 2 0 2>;
>> +			x-size = <800>;
>> +			y-size = <600>;
>> +		};
>> +
>> +		/* ... */
>> +	};
>> diff --git a/drivers/input/touchscreen/pixcir_i2c_ts.c b/drivers/input/touchscreen/pixcir_i2c_ts.c
>> index 6cc6b36..3a447c9 100644
>> --- a/drivers/input/touchscreen/pixcir_i2c_ts.c
>> +++ b/drivers/input/touchscreen/pixcir_i2c_ts.c
>> @@ -24,6 +24,10 @@
>>  #include <linux/i2c.h>
>>  #include <linux/input.h>
>>  #include <linux/input/pixcir_ts.h>
>> +#include <linux/gpio.h>
>> +#include <linux/of.h>
>> +#include <linux/of_gpio.h>
>> +#include <linux/of_device.h>
>>  
>>  struct pixcir_i2c_ts_data {
>>  	struct i2c_client *client;
>> @@ -125,15 +129,65 @@ static int pixcir_i2c_ts_resume(struct device *dev)
>>  static SIMPLE_DEV_PM_OPS(pixcir_dev_pm_ops,
>>  			 pixcir_i2c_ts_suspend, pixcir_i2c_ts_resume);
>>  
>> +#if defined(CONFIG_OF)
> 
> #ifdef is preferred for simple conditions.
> 
>> +static const struct of_device_id pixcir_of_match[];
>> +
>> +static struct pixcir_ts_platform_data *pixcir_parse_dt(struct device *dev)
>> +{
>> +	struct pixcir_ts_platform_data *pdata;
>> +	struct device_node *np = dev->of_node;
>> +	const struct of_device_id *match;
>> +
>> +	match = of_match_device(of_match_ptr(pixcir_of_match), dev);
>> +	if (!match)
>> +		return ERR_PTR(-EINVAL);
> 
> Why do you need an explicit match here?
> 

Right, it is not needed here for this patch but used later in patch 6
to get chip specific data. I'll fix this while re-arranging the patches.

>> +
>> +	pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
>> +	if (!pdata)
>> +		return ERR_PTR(-ENOMEM);
>> +
>> +	pdata->gpio_attb = of_get_named_gpio(np, "attb-gpio", 0);
>> +	if (!gpio_is_valid(pdata->gpio_attb))
>> +		dev_err(dev, "Failed to get ATTB GPIO\n");
>> +
>> +	if (of_property_read_u32(np, "x-size", &pdata->x_size)) {
>> +		dev_err(dev, "Failed to get x-size property\n");
>> +		return ERR_PTR(-EINVAL);
>> +	}
>> +
>> +	if (of_property_read_u32(np, "y-size", &pdata->y_size)) {
>> +		dev_err(dev, "Failed to get y-size property\n");
>> +		return ERR_PTR(-EINVAL);
>> +	}
>> +
>> +	dev_dbg(dev, "%s: x %d, y %d, gpio %d\n", __func__,
>> +				pdata->x_size, pdata->y_size, pdata->gpio_attb);
>> +
>> +	return pdata;
>> +}
>> +#else
>> +static struct pixcir_ts_platform_data *pixcir_parse_dt(struct device *dev)
>> +{
>> +	return NULL;
> 
> This should be
> 
> 	return ERR_PTR(-EINVAL);
> 
> since you test it with IS_ERR() later.

OK.

> 
>> +}
>> +#endif
>> +
>>  static int pixcir_i2c_ts_probe(struct i2c_client *client,
>>  					 const struct i2c_device_id *id)
>>  {
>>  	const struct pixcir_ts_platform_data *pdata = client->dev.platform_data;
>> +	struct device *dev = &client->dev;
>> +	struct device_node *np = dev->of_node;
>>  	struct pixcir_i2c_ts_data *tsdata;
>>  	struct input_dev *input;
>>  	int error;
>>  
>> -	if (!pdata) {
>> +	if (np) {
>> +		pdata = pixcir_parse_dt(dev);
>> +		if (IS_ERR(pdata))
>> +			return PTR_ERR(pdata);
> 
> We should be favoring kernel-provided platform data if it is pesent even
> if there is dt-data available. This way user can override firmware,m if
> needed.
> 
OK. But how can the user override kernel provided platform data? Can't device
tree overlays be used to patch DT data in the same fashion.

I've not tried either so I don't know which one is more user friendly.

>> +
>> +	} else if (!pdata) {
>>  		dev_err(&client->dev, "platform data not defined\n");
>>  		return -EINVAL;
>>  	}
>> @@ -157,10 +211,14 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client,
>>  	__set_bit(EV_KEY, input->evbit);
>>  	__set_bit(EV_ABS, input->evbit);
>>  	__set_bit(BTN_TOUCH, input->keybit);
>> -	input_set_abs_params(input, ABS_X, 0, pdata->x_max, 0, 0);
>> -	input_set_abs_params(input, ABS_Y, 0, pdata->y_max, 0, 0);
>> -	input_set_abs_params(input, ABS_MT_POSITION_X, 0, pdata->x_max, 0, 0);
>> -	input_set_abs_params(input, ABS_MT_POSITION_Y, 0, pdata->y_max, 0, 0);
>> +	input_set_abs_params(input, ABS_X,
>> +					0, pdata->x_size - 1, 0, 0);
>> +	input_set_abs_params(input, ABS_Y,
>> +					0, pdata->y_size - 1, 0, 0);
>> +	input_set_abs_params(input, ABS_MT_POSITION_X,
>> +					0, pdata->x_size - 1, 0, 0);
>> +	input_set_abs_params(input, ABS_MT_POSITION_Y,
>> +					0, pdata->y_size - 1, 0, 0);
>>  
>>  	input_set_drvdata(input, tsdata);
>>  
>> @@ -211,11 +269,20 @@ static const struct i2c_device_id pixcir_i2c_ts_id[] = {
>>  };
>>  MODULE_DEVICE_TABLE(i2c, pixcir_i2c_ts_id);
>>  
>> +#if defined(CONFIG_OF)
>> +static const struct of_device_id pixcir_of_match[] = {
>> +	{ .compatible = "pixcir,pixcir_ts", },
>> +	{ }
>> +};
>> +MODULE_DEVICE_TABLE(of, pixcir_of_match);
>> +#endif
> 
> #ifdef is preferred for simple conditions.
> 
OK.

>> +
>>  static struct i2c_driver pixcir_i2c_ts_driver = {
>>  	.driver = {
>>  		.owner	= THIS_MODULE,
>>  		.name	= "pixcir_ts",
>>  		.pm	= &pixcir_dev_pm_ops,
>> +		.of_match_table = of_match_ptr(pixcir_of_match),
>>  	},
>>  	.probe		= pixcir_i2c_ts_probe,
>>  	.remove		= pixcir_i2c_ts_remove,
>> diff --git a/include/linux/input/pixcir_ts.h b/include/linux/input/pixcir_ts.h
>> index 7163d91..b34ff7e 100644
>> --- a/include/linux/input/pixcir_ts.h
>> +++ b/include/linux/input/pixcir_ts.h
>> @@ -3,8 +3,9 @@
>>  
>>  struct pixcir_ts_platform_data {
>>  	int (*attb_read_val)(void);
>> -	int x_max;
>> -	int y_max;
>> +	unsigned int x_size;	/* X axis resolution */
>> +	unsigned int y_size;	/* Y axis resolution */
>> +	int gpio_attb;		/* GPIO connected to ATTB line */
>>  };
> 
> OK, it looks like the series were split awkwardly: you are defining data
> that is used by follow-up patches and its purpose is unclear when
> reviewing patch-by-patch. I'd recommend rearranging so that DT support
> patch is the very last in the series.
> 
Got it.

>>  
>>  #endif
>> -- 
>> 1.8.3.2

cheers,
-roger

  reply	other threads:[~2013-12-19  6:13 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-18  9:21 [PATCH 0/9] Input: pixcir_i2c_ts: Add Type-B Multitouch support Roger Quadros
2013-12-18  9:21 ` Roger Quadros
2013-12-18  9:21 ` [PATCH 1/9] Input: pixcir_i2c_ts: Add device tree support Roger Quadros
2013-12-18  9:21   ` Roger Quadros
2013-12-18 14:09   ` Dmitry Torokhov
2013-12-19  6:12     ` Roger Quadros [this message]
2013-12-19  6:12       ` Roger Quadros
2013-12-18  9:21 ` [PATCH 2/9] Input: pixcir_i2c_ts: Add register definitions Roger Quadros
2013-12-18  9:21   ` Roger Quadros
2013-12-18 14:09   ` Dmitry Torokhov
2013-12-18  9:21 ` [PATCH 3/9] Input: pixcir_i2c_ts: Initialize interrupt mode and power mode Roger Quadros
2013-12-18  9:21   ` Roger Quadros
     [not found]   ` <1387358480-8313-4-git-send-email-rogerq-l0cyMroinI0@public.gmane.org>
2013-12-18 14:14     ` Dmitry Torokhov
2013-12-18 14:14       ` Dmitry Torokhov
2013-12-19  5:57       ` Roger Quadros
2013-12-19  5:57         ` Roger Quadros
2013-12-18  9:21 ` [PATCH 4/9] Input: pixcir_i2c_ts: Use devres managed resource allocations Roger Quadros
2013-12-18  9:21   ` Roger Quadros
2013-12-18 14:15   ` Dmitry Torokhov
2013-12-18  9:21 ` [PATCH 5/9] Input: pixcir_i2c_ts: Get rid of pdata->attb_read_val() Roger Quadros
2013-12-18  9:21   ` Roger Quadros
2013-12-18 14:20   ` Dmitry Torokhov
2013-12-19  5:54     ` Roger Quadros
2013-12-19  5:54       ` Roger Quadros
2013-12-18  9:21 ` [PATCH 6/9] Input: pixcir_i2c_ts: Add chip specific data structure Roger Quadros
2013-12-18  9:21   ` Roger Quadros
2013-12-18  9:21 ` [PATCH 7/9] Input: pixcir_i2c_ts: Implement Type B Multi Touch reporting Roger Quadros
2013-12-18  9:21   ` Roger Quadros
2013-12-18 14:18   ` Dmitry Torokhov
     [not found]     ` <20131218141841.GE28504-WlK9ik9hQGAhIp7JRqBPierSzoNAToWh@public.gmane.org>
2013-12-19  5:49       ` Roger Quadros
2013-12-19  5:49         ` Roger Quadros
2013-12-21 20:02         ` Henrik Rydberg
2013-12-18  9:21 ` [PATCH 8/9] Input: pixcir_i2c_ts: Add support for TangoC family Roger Quadros
2013-12-18  9:21   ` Roger Quadros
2013-12-18  9:21 ` [PATCH 9/9] Input: pixcir_i2c_ts: Implement wakeup from suspend Roger Quadros
2013-12-18  9:21   ` Roger Quadros

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=52B28E69.3030703@ti.com \
    --to=rogerq@ti.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dmitry.torokhov@gmail.com \
    --cc=jcbian@pixcir.com.cn \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rydberg@euromail.se \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.