devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Lukasz Czerwinski
	<l.czerwinski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
	jic23-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org
Cc: denis.ciocca-qxv4g6HH51o@public.gmane.org,
	linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	lee.jones-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [RFC v2 PATCH 01/14] iio: st_common: New interrupt interface
Date: Tue, 01 Oct 2013 17:22:40 +0100	[thread overview]
Message-ID: <524AF6D0.5070000@kernel.org> (raw)
In-Reply-To: <524AEB97.1090806-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>

On 10/01/13 16:34, Jonathan Cameron wrote:
> On 09/27/13 17:32, Lukasz Czerwinski wrote:
>> This patch adds two interrupts handling by the st_common library.
>> Additional second interrupt is used to indetify enabled event support for
>> chosen ST device. It supports board files and dt.
>>
>> For dt interface multiple interrupts are passed through interrupt-names
>> property.
>>
>> Read drdy_int_pin value is moved to the st_sensors_parse_platform_data()
>> in the st_sensors_i2c.c and st_sensors_spi.c Now drdy_int_pin can be
>> also configured via dt.
>>
>> Signed-off-by: Lukasz Czerwinski <l.czerwinski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
>> Signed-off-by: Kyungmin Park <kyungmin.park-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
> 
> The code here is absolutely fine, though I would like some comments
> on this from Denis and/or Lee (as they are much more familiar with the driver
> than I am!
> 
> The one element that is problematic is the use of interrupt names in specifying
> the two interrupts.  Unforunately, for reasons that I think can be sumarized
> as historical precedence and avoiding complexity of passing in other OSes,
> the device tree powers that be are very anti doing multiple optional interrupts
> this way and consider interrupt-names to be merely for information rather than
> to be used to allow 'optional' interrupts.
> 
> 
> One thread on this is:
> 
> http://www.spinics.net/lists/linux-iio/msg09646.html
Now I'm confused.  You refer to that one clearly in your patch introduction.
Is this not still relying on the names field to work out which is which?

> 
> 
> Obviously this effects your later device tree bindings patches.
> 
>> ---
>>  drivers/iio/common/st_sensors/st_sensors_core.c |   36 +----------
>>  drivers/iio/common/st_sensors/st_sensors_i2c.c  |   75 +++++++++++++++++++++-
>>  drivers/iio/common/st_sensors/st_sensors_spi.c  |   77 ++++++++++++++++++++++-
>>  include/linux/iio/common/st_sensors.h           |   13 +++-
>>  include/linux/platform_data/st_sensors_pdata.h  |    2 +
>>  5 files changed, 160 insertions(+), 43 deletions(-)
>>
>> diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c
>> index 7ba1ef2..697b16d 100644
>> --- a/drivers/iio/common/st_sensors/st_sensors_core.c
>> +++ b/drivers/iio/common/st_sensors/st_sensors_core.c
>> @@ -198,47 +198,13 @@ int st_sensors_set_axis_enable(struct iio_dev *indio_dev, u8 axis_enable)
>>  }
>>  EXPORT_SYMBOL(st_sensors_set_axis_enable);
>>  
>> -static int st_sensors_set_drdy_int_pin(struct iio_dev *indio_dev,
>> -				       struct st_sensors_platform_data *pdata)
>> -{
>> -	struct st_sensor_data *sdata = iio_priv(indio_dev);
>> -
>> -	switch (pdata->drdy_int_pin) {
>> -	case 1:
>> -		if (sdata->sensor->drdy_irq.mask_int1 == 0) {
>> -			dev_err(&indio_dev->dev,
>> -					"DRDY on INT1 not available.\n");
>> -			return -EINVAL;
>> -		}
>> -		sdata->drdy_int_pin = 1;
>> -		break;
>> -	case 2:
>> -		if (sdata->sensor->drdy_irq.mask_int2 == 0) {
>> -			dev_err(&indio_dev->dev,
>> -					"DRDY on INT2 not available.\n");
>> -			return -EINVAL;
>> -		}
>> -		sdata->drdy_int_pin = 2;
>> -		break;
>> -	default:
>> -		dev_err(&indio_dev->dev, "DRDY on pdata not valid.\n");
>> -		return -EINVAL;
>> -	}
>> -
>> -	return 0;
>> -}
>> -
>> -int st_sensors_init_sensor(struct iio_dev *indio_dev,
>> -					struct st_sensors_platform_data *pdata)
>> +int st_sensors_init_sensor(struct iio_dev *indio_dev)
>>  {
>>  	struct st_sensor_data *sdata = iio_priv(indio_dev);
>>  	int err = 0;
>>  
>>  	mutex_init(&sdata->tb.buf_lock);
>>  
>> -	if (pdata)
>> -		err = st_sensors_set_drdy_int_pin(indio_dev, pdata);
>> -
>>  	err = st_sensors_set_enable(indio_dev, false);
>>  	if (err < 0)
>>  		return err;
>> diff --git a/drivers/iio/common/st_sensors/st_sensors_i2c.c b/drivers/iio/common/st_sensors/st_sensors_i2c.c
>> index 38af944..79a9e9e 100644
>> --- a/drivers/iio/common/st_sensors/st_sensors_i2c.c
>> +++ b/drivers/iio/common/st_sensors/st_sensors_i2c.c
>> @@ -12,17 +12,82 @@
>>  #include <linux/module.h>
>>  #include <linux/slab.h>
>>  #include <linux/iio/iio.h>
>> +#include <linux/of.h>
>> +#include <linux/of_irq.h>
>>  
>>  #include <linux/iio/common/st_sensors_i2c.h>
>>  
>>  
>>  #define ST_SENSORS_I2C_MULTIREAD	0x80
>>  
>> -static unsigned int st_sensors_i2c_get_irq(struct iio_dev *indio_dev)
>> +static unsigned int st_sensors_i2c_get_data_rdy_irq(struct iio_dev *indio_dev)
>>  {
>>  	struct st_sensor_data *sdata = iio_priv(indio_dev);
>>  
>> -	return to_i2c_client(sdata->dev)->irq;
>> +	return sdata->irq_map[ST_SENSORS_INT1];
>> +}
>> +EXPORT_SYMBOL(st_sensors_i2c_get_data_rdy_irq);
>> +
>> +static unsigned int st_sensors_i2c_get_event_irq(struct iio_dev *indio_dev)
>> +{
>> +	struct st_sensor_data *sdata = iio_priv(indio_dev);
>> +
>> +	return sdata->irq_map[ST_SENSORS_INT2];
>> +}
>> +EXPORT_SYMBOL(st_sensors_i2c_get_event_irq);
>> +
>> +static void st_sensors_parse_platform_data(struct i2c_client *client,
>> +		struct iio_dev *indio_dev)
>> +{
>> +	struct st_sensor_data *sdata = iio_priv(indio_dev);
>> +	struct device_node *np = client->dev.of_node;
>> +	struct st_sensors_platform_data *pdata = client->dev.platform_data;
>> +
>> +	if (pdata)
>> +		sdata->drdy_int_pin = pdata->drdy_int_pin;
>> +	else if (np)
>> +		of_property_read_u8(np, "st,drdy-int-pin",
>> +			(u8 *)&sdata->drdy_int_pin);
>> +}
>> +
>> +static unsigned int st_sensors_i2c_map_irq(struct i2c_client *client,
>> +		unsigned int irq_num)
>> +{
>> +	struct device_node *np = client->dev.of_node;
>> +	struct st_sensors_platform_data *pdata = client->dev.platform_data;
>> +	int index = 0;
>> +
>> +	if (pdata)
>> +		return pdata->irqs[irq_num];
>> +	else if (np) {
>> +		switch (irq_num) {
>> +		case ST_SENSORS_INT1:
>> +			index = of_property_match_string(np,
>> +					"interrupt-names",
>> +					ST_SENSORS_DRDY_IRQ_NAME);
>> +			break;
>> +		case ST_SENSORS_INT2:
>> +			index = of_property_match_string(np,
>> +					"interrupt-names",
>> +					ST_SENSORS_EVENT_IRQ_NAME);
>> +		default:
>> +			break;
>> +		}
>> +		return index < 0 ? 0 : irq_of_parse_and_map(np, index);
>> +	}
>> +	return 0;
>> +}
>> +
>> +static void st_sensors_i2c_map_irqs(struct i2c_client *client,
>> +		struct iio_dev *indio_dev)
>> +{
>> +	struct st_sensor_data *sdata = iio_priv(indio_dev);
>> +
>> +	sdata->irq_map[ST_SENSORS_INT1] =
>> +		st_sensors_i2c_map_irq(client, ST_SENSORS_INT1);
>> +
>> +	sdata->irq_map[ST_SENSORS_INT2] =
>> +		st_sensors_i2c_map_irq(client, ST_SENSORS_INT2);
>>  }
>>  
>>  static int st_sensors_i2c_read_byte(struct st_sensor_transfer_buffer *tb,
>> @@ -71,8 +136,12 @@ void st_sensors_i2c_configure(struct iio_dev *indio_dev,
>>  	indio_dev->dev.parent = &client->dev;
>>  	indio_dev->name = client->name;
>>  
>> +	st_sensors_parse_platform_data(client, indio_dev);
>> +
>>  	sdata->tf = &st_sensors_tf_i2c;
>> -	sdata->get_irq_data_ready = st_sensors_i2c_get_irq;
>> +	st_sensors_i2c_map_irqs(client, indio_dev);
>> +	sdata->get_irq_data_ready = st_sensors_i2c_get_data_rdy_irq;
>> +	sdata->get_irq_event = st_sensors_i2c_get_event_irq;
>>  }
>>  EXPORT_SYMBOL(st_sensors_i2c_configure);
>>  
>> diff --git a/drivers/iio/common/st_sensors/st_sensors_spi.c b/drivers/iio/common/st_sensors/st_sensors_spi.c
>> index 251baf6..fc04cfc 100644
>> --- a/drivers/iio/common/st_sensors/st_sensors_spi.c
>> +++ b/drivers/iio/common/st_sensors/st_sensors_spi.c
>> @@ -8,10 +8,14 @@
>>   * Licensed under the GPL-2.
>>   */
>>  
>> +#include <linux/of.h>
>> +#include <linux/of_irq.h>
>>  #include <linux/kernel.h>
>>  #include <linux/module.h>
>>  #include <linux/slab.h>
>>  #include <linux/iio/iio.h>
>> +#include <linux/of.h>
>> +#include <linux/of_irq.h>
>>  
>>  #include <linux/iio/common/st_sensors_spi.h>
>>  
>> @@ -19,11 +23,74 @@
>>  #define ST_SENSORS_SPI_MULTIREAD	0xc0
>>  #define ST_SENSORS_SPI_READ		0x80
>>  
>> -static unsigned int st_sensors_spi_get_irq(struct iio_dev *indio_dev)
>> +static unsigned int st_sensors_spi_get_data_rdy_irq(struct iio_dev *indio_dev)
>>  {
>>  	struct st_sensor_data *sdata = iio_priv(indio_dev);
>>  
>> -	return to_spi_device(sdata->dev)->irq;
>> +	return sdata->irq_map[ST_SENSORS_INT1];
>> +}
>> +EXPORT_SYMBOL(st_sensors_spi_get_data_rdy_irq);
>> +
>> +static unsigned int st_sensors_spi_get_event_irq(struct iio_dev *indio_dev)
>> +{
>> +	struct st_sensor_data *sdata = iio_priv(indio_dev);
>> +
>> +	return sdata->irq_map[ST_SENSORS_INT2];
>> +}
>> +EXPORT_SYMBOL(st_sensors_spi_get_event_irq);
>> +
>> +static void st_sensors_parse_platform_data(struct spi_device *spi,
>> +		struct iio_dev *indio_dev)
>> +{
>> +	struct st_sensor_data *sdata = iio_priv(indio_dev);
>> +	struct device_node *np = spi->dev.of_node;
>> +	struct st_sensors_platform_data *pdata = spi->dev.platform_data;
>> +
>> +	if (pdata)
>> +		sdata->drdy_int_pin = pdata->drdy_int_pin;
>> +	else if (np)
>> +		of_property_read_u8(np, "drdy-int-pin",
>> +			(u8 *)&sdata->drdy_int_pin);
>> +}
>> +
>> +static unsigned int st_sensors_spi_map_irq(struct spi_device *spi,
>> +		unsigned int irq_num)
>> +{
>> +	struct device_node *np = spi->dev.of_node;
>> +	struct st_sensors_platform_data *pdata = spi->dev.platform_data;
>> +	int index = 0;
>> +
>> +	if (pdata)
>> +		return pdata->irqs[irq_num];
>> +	else if (np) {
>> +		switch (irq_num) {
>> +		case ST_SENSORS_INT1:
>> +			index = of_property_match_string(np,
>> +					"interrupt-names",
>> +					ST_SENSORS_DRDY_IRQ_NAME);
>> +			break;
>> +		case ST_SENSORS_INT2:
>> +			index = of_property_match_string(np,
>> +					"interrupt-names",
>> +					ST_SENSORS_EVENT_IRQ_NAME);
>> +		default:
>> +			break;
>> +		}
>> +		return index < 0 ? 0 : irq_of_parse_and_map(np, index);
>> +	}
>> +	return 0;
>> +}
>> +
>> +static void st_sensors_spi_map_irqs(struct spi_device *spi,
>> +		struct iio_dev *indio_dev)
>> +{
>> +	struct st_sensor_data *sdata = iio_priv(indio_dev);
>> +
>> +	sdata->irq_map[ST_SENSORS_INT1] =
>> +		st_sensors_spi_map_irq(spi, ST_SENSORS_INT1);
>> +
>> +	sdata->irq_map[ST_SENSORS_INT2] =
>> +		st_sensors_spi_map_irq(spi, ST_SENSORS_INT2);
>>  }
>>  
>>  static int st_sensors_spi_read(struct st_sensor_transfer_buffer *tb,
>> @@ -111,8 +178,12 @@ void st_sensors_spi_configure(struct iio_dev *indio_dev,
>>  	indio_dev->dev.parent = &spi->dev;
>>  	indio_dev->name = spi->modalias;
>>  
>> +	st_sensors_parse_platform_data(spi, indio_dev);
>> +
>>  	sdata->tf = &st_sensors_tf_spi;
>> -	sdata->get_irq_data_ready = st_sensors_spi_get_irq;
>> +	st_sensors_spi_map_irqs(spi, indio_dev);
>> +	sdata->get_irq_data_ready = st_sensors_spi_get_data_rdy_irq;
>> +	sdata->get_irq_event = st_sensors_spi_get_event_irq;
>>  }
>>  EXPORT_SYMBOL(st_sensors_spi_configure);
>>  
>> diff --git a/include/linux/iio/common/st_sensors.h b/include/linux/iio/common/st_sensors.h
>> index 3c005eb..3f4a0f7 100644
>> --- a/include/linux/iio/common/st_sensors.h
>> +++ b/include/linux/iio/common/st_sensors.h
>> @@ -41,6 +41,12 @@
>>  #define ST_SENSORS_MAX_NAME			17
>>  #define ST_SENSORS_MAX_4WAI			7
>>  
>> +#define ST_SENSORS_INT_MAX			2
>> +#define ST_SENSORS_INT1				0
>> +#define ST_SENSORS_INT2				1
>> +#define ST_SENSORS_DRDY_IRQ_NAME		"drdy-int"
>> +#define ST_SENSORS_EVENT_IRQ_NAME		"event-int"
>> +
>>  #define ST_SENSORS_LSM_CHANNELS(device_type, mask, index, mod, \
>>  					ch2, s, endian, rbits, sbits, addr) \
>>  { \
>> @@ -209,8 +215,10 @@ struct st_sensors {
>>   * @buffer_data: Data used by buffer part.
>>   * @odr: Output data rate of the sensor [Hz].
>>   * num_data_channels: Number of data channels used in buffer.
>> + * @irq_map: Container of mapped IRQs.
>>   * @drdy_int_pin: Redirect DRDY on pin 1 (1) or pin 2 (2).
>>   * @get_irq_data_ready: Function to get the IRQ used for data ready signal.
>> + * @get_irq_event: Function to get the IRQ used for event signal.
>>   * @tf: Transfer function structure used by I/O operations.
>>   * @tb: Transfer buffers and mutex used by I/O operations.
>>   */
>> @@ -229,10 +237,12 @@ struct st_sensor_data {
>>  
>>  	unsigned int odr;
>>  	unsigned int num_data_channels;
>> +	unsigned int irq_map[ST_SENSORS_INT_MAX];
>>  
>>  	u8 drdy_int_pin;
>>  
>>  	unsigned int (*get_irq_data_ready) (struct iio_dev *indio_dev);
>> +	unsigned int (*get_irq_event) (struct iio_dev *indio_dev);
>>  
>>  	const struct st_sensor_transfer_function *tf;
>>  	struct st_sensor_transfer_buffer tb;
>> @@ -262,8 +272,7 @@ static inline void st_sensors_deallocate_trigger(struct iio_dev *indio_dev)
>>  }
>>  #endif
>>  
>> -int st_sensors_init_sensor(struct iio_dev *indio_dev,
>> -					struct st_sensors_platform_data *pdata);
>> +int st_sensors_init_sensor(struct iio_dev *indio_dev);
>>  
>>  int st_sensors_set_enable(struct iio_dev *indio_dev, bool enable);
>>  
>> diff --git a/include/linux/platform_data/st_sensors_pdata.h b/include/linux/platform_data/st_sensors_pdata.h
>> index 7538391..991db72 100644
>> --- a/include/linux/platform_data/st_sensors_pdata.h
>> +++ b/include/linux/platform_data/st_sensors_pdata.h
>> @@ -19,6 +19,8 @@
>>   */
>>  struct st_sensors_platform_data {
>>  	u8 drdy_int_pin;
>> +
>> +	unsigned int irqs[2];
>>  };
>>  
>>  #endif /* ST_SENSORS_PDATA_H */
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

  parent reply	other threads:[~2013-10-01 16:22 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-27 16:32 [RFC v2 PATCH 00/14] iio: STMicroelectronics DT and event support Lukasz Czerwinski
     [not found] ` <1380299538-22047-1-git-send-email-l.czerwinski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2013-09-27 16:32   ` [RFC v2 PATCH 01/14] iio: st_common: New interrupt interface Lukasz Czerwinski
     [not found]     ` <1380299538-22047-2-git-send-email-l.czerwinski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2013-10-01 15:34       ` Jonathan Cameron
     [not found]         ` <524AEB97.1090806-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-10-01 16:22           ` Jonathan Cameron [this message]
2013-10-21 11:59           ` Mark Rutland
2013-10-21 11:48       ` Mark Rutland
2013-09-27 16:32   ` [RFC v2 PATCH 02/14] iio: st_accel: Add dt bindings Lukasz Czerwinski
     [not found]     ` <1380299538-22047-3-git-send-email-l.czerwinski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2013-10-01 15:40       ` Jonathan Cameron
     [not found]         ` <524AED0A.6030707-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-10-21 11:37           ` Mark Rutland
2013-09-27 16:32   ` [RFC v2 PATCH 03/14] iio: st_gyro: " Lukasz Czerwinski
2013-09-27 16:32   ` [RFC v2 PATCH 04/14] iio: st_mang: " Lukasz Czerwinski
2013-09-27 16:32   ` [RFC v2 PATCH 05/14] iio: st_pressure: " Lukasz Czerwinski
2013-09-27 16:32   ` [RFC v2 PATCH 06/14] iio: st_common: Add threshold events support Lukasz Czerwinski
     [not found]     ` <1380299538-22047-7-git-send-email-l.czerwinski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2013-10-01 16:09       ` Jonathan Cameron
2013-09-27 16:32   ` [RFC v2 PATCH 07/14] iio: st_accel: Add event subsystem to st_accel driver Lukasz Czerwinski
     [not found]     ` <1380299538-22047-8-git-send-email-l.czerwinski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2013-10-01 16:17       ` Jonathan Cameron
2013-09-27 16:32   ` [RFC v2 PATCH 08/14] iio: iio_magn: Add event ops Lukasz Czerwinski
     [not found]     ` <1380299538-22047-9-git-send-email-l.czerwinski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2013-10-01 16:21       ` Jonathan Cameron
2013-09-27 16:32   ` [RFC v2 PATCH 09/14] iio: st_gyro: " Lukasz Czerwinski
2013-09-27 16:32   ` [RFC v2 PATCH 10/14] iio: iio_press: " Lukasz Czerwinski
2013-09-27 16:32   ` [RFC v2 PATCH 11/14] Documentation: Add st_magn binding documentation Lukasz Czerwinski
     [not found]     ` <1380299538-22047-12-git-send-email-l.czerwinski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2013-10-01 16:29       ` Jonathan Cameron
     [not found]         ` <524AF86D.7010200-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-10-01 15:49           ` Rob Herring
     [not found]             ` <524AEEFC.8010201-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-10-22  6:55               ` Lee Jones
2013-10-21 11:16       ` Mark Rutland
2013-09-27 16:32   ` [RFC v2 PATCH 12/14] Documentation: Add st_gyro " Lukasz Czerwinski
     [not found]     ` <1380299538-22047-13-git-send-email-l.czerwinski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2013-10-21 11:19       ` Mark Rutland
2013-09-27 16:32   ` [RFC v2 PATCH 13/14] Documentation: Add st_pressure " Lukasz Czerwinski
     [not found]     ` <1380299538-22047-14-git-send-email-l.czerwinski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2013-10-21 11:23       ` Mark Rutland
2013-09-27 16:32   ` [RFC v2 PATCH 14/14] Documentation: Add st_accel " Lukasz Czerwinski

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=524AF6D0.5070000@kernel.org \
    --to=jic23-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
    --cc=denis.ciocca-qxv4g6HH51o@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=jic23-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org \
    --cc=l.czerwinski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org \
    --cc=lee.jones-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
    --cc=linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    /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 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).