All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
To: Thierry Reding <thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: Wei Ni <wni-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
	khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org,
	swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org,
	lm-sensors-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH v2 2/3] hwmon: (lm90) add support to handle IRQ.
Date: Wed, 10 Jul 2013 11:12:49 -0700	[thread overview]
Message-ID: <20130710181248.GA22430@roeck-us.net> (raw)
In-Reply-To: <20130710170552.GA15665-RcKxWJ4Cfj3FNiLNb7+IINdj8bHVeoWogfoxzgwHRXE@public.gmane.org>

On Wed, Jul 10, 2013 at 10:05:53AM -0700, Thierry Reding wrote:
> On Wed, Jul 10, 2013 at 07:25:38PM +0800, Wei Ni wrote:
> > When the temperature exceed the limit range value,
> > the driver can handle the interrupt.
> > 
> > Signed-off-by: Wei Ni <wni-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> > ---
> >  drivers/hwmon/lm90.c |   77 +++++++++++++++++++++++++++++++++++++++++---------
> >  1 file changed, 64 insertions(+), 13 deletions(-)
> > 
> > diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
> > index 2cb7f8e..88ff362 100644
> > --- a/drivers/hwmon/lm90.c
> > +++ b/drivers/hwmon/lm90.c
> > @@ -89,6 +89,7 @@
> >  #include <linux/err.h>
> >  #include <linux/mutex.h>
> >  #include <linux/sysfs.h>
> > +#include <linux/interrupt.h>
> >  
> >  /*
> >   * Addresses to scan
> > @@ -179,6 +180,19 @@ enum chips { lm90, adm1032, lm99, lm86, max6657, max6659, adt7461, max6680,
> >  #define LM90_HAVE_TEMP3		(1 << 6) /* 3rd temperature sensor	*/
> >  #define LM90_HAVE_BROKEN_ALERT	(1 << 7) /* Broken alert		*/
> >  
> > +/* LM90 status */
> > +#define LM90_LTHRM	(1 << 0)	/* local THERM limit tripped */
> > +#define LM90_RTHRM	(1 << 1)	/* remote THERM limit tripped */
> > +#define LM90_OPEN	(1 << 2)	/* remote is an open circuit */
> > +#define LM90_RLOW	(1 << 3)	/* remote low temp limit tripped */
> > +#define LM90_RHIGH	(1 << 4)	/* remote high temp limit tripped */
> > +#define LM90_LLOW	(1 << 5)	/* local low temp limit tripped */
> > +#define LM90_LHIGH	(1 << 6)	/* local high temp limit tripped */
> > +#define LM90_BUSY	(1 << 7)	/* ADC is converting */
> > +
> > +#define MAX6696_RLOW	(1 << 3)	/* remote2 low temp limit tripped */
> > +#define MAX6696_RHIGH	(1 << 4)	/* remote2 high temp limit tripped */
> 
> I think this is a nice cleanup, but I'll leave it up to Guenter or Jean
> to decide if they want to have this. One problem with the above is that
> it's not immediately clear which register contains these bits. That's
> often solved by using the register name as prefix but that will in turn
> make the names for these bits rather long:
> 
> 	#define LM90_REG_R_STATUS_LTHRM	(1 << 0)
> 	...
> 
> Perhaps something like
> 
> 	#define LM90_STATUS_LTHRM	(1 << 0)
> 
> would be a good compromise?
> 
Something like that, yes.

> Also if Guenter and Jean agree that this is a nice cleanup, it should
> probably go into a separate patch since it isn't directly related to the
> IRQ support.
> 
Correct.

> >  /*
> >   * Driver data (common to all clients)
> >   */
> > @@ -1423,6 +1437,43 @@ static void lm90_init_client(struct i2c_client *client)
> >  		i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, config);
> >  }
> >  
> > +static void lm90_alarm_status(struct i2c_client *client,
> > +			      u8 alarms, u8 alarms_max6696)
> > +{
> > +	if (alarms & (LM90_LLOW | LM90_LHIGH | LM90_LTHRM))
> > +		dev_warn(&client->dev,
> > +			 "temp%d out of range, please check!\n", 1);
> > +	if (alarms & (LM90_RLOW | LM90_RHIGH | LM90_RTHRM))
> > +		dev_warn(&client->dev,
> > +			 "temp%d out of range, please check!\n", 2);
> > +	if (alarms & LM90_OPEN)
> > +		dev_warn(&client->dev,
> > +			 "temp%d diode open, please check!\n", 2);
> > +
> > +	if (alarms_max6696 & (MAX6696_RLOW | MAX6696_RHIGH))
> > +		dev_warn(&client->dev,
> > +			 "temp%d out of range, please check!\n", 3);
> > +}
> > +
> > +static irqreturn_t lm90_irq_thread(int irq, void *dev_id)
> > +{
> > +	struct lm90_data *data = dev_id;
> > +	struct i2c_client *client = to_i2c_client(data->hwmon_dev->parent);
> > +	u8 alarms, alarms_max6696 = 0;
> > +
> > +	lm90_read_reg(client, LM90_REG_R_STATUS, &alarms);
> > +
> > +	if (data->kind == max6696)
> > +		lm90_read_reg(client, MAX6696_REG_R_STATUS2, &alarms_max6696);
> > +
> > +	if ((alarms & 0x7f) == 0 && (alarms_max6696 & 0xfe) == 0) {
> > +		return IRQ_NONE;
> 
> For non-MAX6696 chips this will evaluate to:
> 
> 	if ((alarms & 0x7f) == 0 && (0 & 0xfe) == 0)
> 
> and therefore be true for any value of "alarms" and therefore always
> result in IRQ_NONE being returned.
> 
Not really. If
	(alarms & 0xfe) == 0
returns false (ie thee is an alarm) the expression is false and the
if statement won't be executed. Or maybe I didn't get enough sleep
last night ;).

> One other thing that slightly bugs me about this is that it's a little
> tedious to pass alarms_max6696 around like this. Suppose yet another
> slightly different variant is supported by this chip in the future,
> it's possible it will require another alarms_XYZ variable that has to be
> passed around. I don't have a better suggestion though, so maybe it can
> remain like this and be rewritten at some point should the need arise.
> 
The driver has tables to separate chips, so masks for status and status2 can
be made generic and configurable if needed. But, yes, it would be better to
select a generic name for the variable from the beginning (status and status2
would do quite nicely).

> Thierry

WARNING: multiple messages have this Message-ID (diff)
From: Guenter Roeck <linux@roeck-us.net>
To: Thierry Reding <thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: Wei Ni <wni-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
	khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org,
	swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org,
	lm-sensors-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [lm-sensors] [PATCH v2 2/3] hwmon: (lm90) add support to handle IRQ.
Date: Wed, 10 Jul 2013 18:12:49 +0000	[thread overview]
Message-ID: <20130710181248.GA22430@roeck-us.net> (raw)
In-Reply-To: <20130710170552.GA15665-RcKxWJ4Cfj3FNiLNb7+IINdj8bHVeoWogfoxzgwHRXE@public.gmane.org>

On Wed, Jul 10, 2013 at 10:05:53AM -0700, Thierry Reding wrote:
> On Wed, Jul 10, 2013 at 07:25:38PM +0800, Wei Ni wrote:
> > When the temperature exceed the limit range value,
> > the driver can handle the interrupt.
> > 
> > Signed-off-by: Wei Ni <wni@nvidia.com>
> > ---
> >  drivers/hwmon/lm90.c |   77 +++++++++++++++++++++++++++++++++++++++++---------
> >  1 file changed, 64 insertions(+), 13 deletions(-)
> > 
> > diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
> > index 2cb7f8e..88ff362 100644
> > --- a/drivers/hwmon/lm90.c
> > +++ b/drivers/hwmon/lm90.c
> > @@ -89,6 +89,7 @@
> >  #include <linux/err.h>
> >  #include <linux/mutex.h>
> >  #include <linux/sysfs.h>
> > +#include <linux/interrupt.h>
> >  
> >  /*
> >   * Addresses to scan
> > @@ -179,6 +180,19 @@ enum chips { lm90, adm1032, lm99, lm86, max6657, max6659, adt7461, max6680,
> >  #define LM90_HAVE_TEMP3		(1 << 6) /* 3rd temperature sensor	*/
> >  #define LM90_HAVE_BROKEN_ALERT	(1 << 7) /* Broken alert		*/
> >  
> > +/* LM90 status */
> > +#define LM90_LTHRM	(1 << 0)	/* local THERM limit tripped */
> > +#define LM90_RTHRM	(1 << 1)	/* remote THERM limit tripped */
> > +#define LM90_OPEN	(1 << 2)	/* remote is an open circuit */
> > +#define LM90_RLOW	(1 << 3)	/* remote low temp limit tripped */
> > +#define LM90_RHIGH	(1 << 4)	/* remote high temp limit tripped */
> > +#define LM90_LLOW	(1 << 5)	/* local low temp limit tripped */
> > +#define LM90_LHIGH	(1 << 6)	/* local high temp limit tripped */
> > +#define LM90_BUSY	(1 << 7)	/* ADC is converting */
> > +
> > +#define MAX6696_RLOW	(1 << 3)	/* remote2 low temp limit tripped */
> > +#define MAX6696_RHIGH	(1 << 4)	/* remote2 high temp limit tripped */
> 
> I think this is a nice cleanup, but I'll leave it up to Guenter or Jean
> to decide if they want to have this. One problem with the above is that
> it's not immediately clear which register contains these bits. That's
> often solved by using the register name as prefix but that will in turn
> make the names for these bits rather long:
> 
> 	#define LM90_REG_R_STATUS_LTHRM	(1 << 0)
> 	...
> 
> Perhaps something like
> 
> 	#define LM90_STATUS_LTHRM	(1 << 0)
> 
> would be a good compromise?
> 
Something like that, yes.

> Also if Guenter and Jean agree that this is a nice cleanup, it should
> probably go into a separate patch since it isn't directly related to the
> IRQ support.
> 
Correct.

> >  /*
> >   * Driver data (common to all clients)
> >   */
> > @@ -1423,6 +1437,43 @@ static void lm90_init_client(struct i2c_client *client)
> >  		i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, config);
> >  }
> >  
> > +static void lm90_alarm_status(struct i2c_client *client,
> > +			      u8 alarms, u8 alarms_max6696)
> > +{
> > +	if (alarms & (LM90_LLOW | LM90_LHIGH | LM90_LTHRM))
> > +		dev_warn(&client->dev,
> > +			 "temp%d out of range, please check!\n", 1);
> > +	if (alarms & (LM90_RLOW | LM90_RHIGH | LM90_RTHRM))
> > +		dev_warn(&client->dev,
> > +			 "temp%d out of range, please check!\n", 2);
> > +	if (alarms & LM90_OPEN)
> > +		dev_warn(&client->dev,
> > +			 "temp%d diode open, please check!\n", 2);
> > +
> > +	if (alarms_max6696 & (MAX6696_RLOW | MAX6696_RHIGH))
> > +		dev_warn(&client->dev,
> > +			 "temp%d out of range, please check!\n", 3);
> > +}
> > +
> > +static irqreturn_t lm90_irq_thread(int irq, void *dev_id)
> > +{
> > +	struct lm90_data *data = dev_id;
> > +	struct i2c_client *client = to_i2c_client(data->hwmon_dev->parent);
> > +	u8 alarms, alarms_max6696 = 0;
> > +
> > +	lm90_read_reg(client, LM90_REG_R_STATUS, &alarms);
> > +
> > +	if (data->kind = max6696)
> > +		lm90_read_reg(client, MAX6696_REG_R_STATUS2, &alarms_max6696);
> > +
> > +	if ((alarms & 0x7f) = 0 && (alarms_max6696 & 0xfe) = 0) {
> > +		return IRQ_NONE;
> 
> For non-MAX6696 chips this will evaluate to:
> 
> 	if ((alarms & 0x7f) = 0 && (0 & 0xfe) = 0)
> 
> and therefore be true for any value of "alarms" and therefore always
> result in IRQ_NONE being returned.
> 
Not really. If
	(alarms & 0xfe) = 0
returns false (ie thee is an alarm) the expression is false and the
if statement won't be executed. Or maybe I didn't get enough sleep
last night ;).

> One other thing that slightly bugs me about this is that it's a little
> tedious to pass alarms_max6696 around like this. Suppose yet another
> slightly different variant is supported by this chip in the future,
> it's possible it will require another alarms_XYZ variable that has to be
> passed around. I don't have a better suggestion though, so maybe it can
> remain like this and be rewritten at some point should the need arise.
> 
The driver has tables to separate chips, so masks for status and status2 can
be made generic and configurable if needed. But, yes, it would be better to
select a generic name for the variable from the beginning (status and status2
would do quite nicely).

> Thierry



_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors

WARNING: multiple messages have this Message-ID (diff)
From: Guenter Roeck <linux@roeck-us.net>
To: Thierry Reding <thierry.reding@gmail.com>
Cc: Wei Ni <wni@nvidia.com>,
	khali@linux-fr.org, swarren@wwwdotorg.org,
	lm-sensors@lm-sensors.org, linux-kernel@vger.kernel.org,
	linux-tegra@vger.kernel.org
Subject: Re: [PATCH v2 2/3] hwmon: (lm90) add support to handle IRQ.
Date: Wed, 10 Jul 2013 11:12:49 -0700	[thread overview]
Message-ID: <20130710181248.GA22430@roeck-us.net> (raw)
In-Reply-To: <20130710170552.GA15665@dhcp-172-17-186-34.nvidia.com>

On Wed, Jul 10, 2013 at 10:05:53AM -0700, Thierry Reding wrote:
> On Wed, Jul 10, 2013 at 07:25:38PM +0800, Wei Ni wrote:
> > When the temperature exceed the limit range value,
> > the driver can handle the interrupt.
> > 
> > Signed-off-by: Wei Ni <wni@nvidia.com>
> > ---
> >  drivers/hwmon/lm90.c |   77 +++++++++++++++++++++++++++++++++++++++++---------
> >  1 file changed, 64 insertions(+), 13 deletions(-)
> > 
> > diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
> > index 2cb7f8e..88ff362 100644
> > --- a/drivers/hwmon/lm90.c
> > +++ b/drivers/hwmon/lm90.c
> > @@ -89,6 +89,7 @@
> >  #include <linux/err.h>
> >  #include <linux/mutex.h>
> >  #include <linux/sysfs.h>
> > +#include <linux/interrupt.h>
> >  
> >  /*
> >   * Addresses to scan
> > @@ -179,6 +180,19 @@ enum chips { lm90, adm1032, lm99, lm86, max6657, max6659, adt7461, max6680,
> >  #define LM90_HAVE_TEMP3		(1 << 6) /* 3rd temperature sensor	*/
> >  #define LM90_HAVE_BROKEN_ALERT	(1 << 7) /* Broken alert		*/
> >  
> > +/* LM90 status */
> > +#define LM90_LTHRM	(1 << 0)	/* local THERM limit tripped */
> > +#define LM90_RTHRM	(1 << 1)	/* remote THERM limit tripped */
> > +#define LM90_OPEN	(1 << 2)	/* remote is an open circuit */
> > +#define LM90_RLOW	(1 << 3)	/* remote low temp limit tripped */
> > +#define LM90_RHIGH	(1 << 4)	/* remote high temp limit tripped */
> > +#define LM90_LLOW	(1 << 5)	/* local low temp limit tripped */
> > +#define LM90_LHIGH	(1 << 6)	/* local high temp limit tripped */
> > +#define LM90_BUSY	(1 << 7)	/* ADC is converting */
> > +
> > +#define MAX6696_RLOW	(1 << 3)	/* remote2 low temp limit tripped */
> > +#define MAX6696_RHIGH	(1 << 4)	/* remote2 high temp limit tripped */
> 
> I think this is a nice cleanup, but I'll leave it up to Guenter or Jean
> to decide if they want to have this. One problem with the above is that
> it's not immediately clear which register contains these bits. That's
> often solved by using the register name as prefix but that will in turn
> make the names for these bits rather long:
> 
> 	#define LM90_REG_R_STATUS_LTHRM	(1 << 0)
> 	...
> 
> Perhaps something like
> 
> 	#define LM90_STATUS_LTHRM	(1 << 0)
> 
> would be a good compromise?
> 
Something like that, yes.

> Also if Guenter and Jean agree that this is a nice cleanup, it should
> probably go into a separate patch since it isn't directly related to the
> IRQ support.
> 
Correct.

> >  /*
> >   * Driver data (common to all clients)
> >   */
> > @@ -1423,6 +1437,43 @@ static void lm90_init_client(struct i2c_client *client)
> >  		i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, config);
> >  }
> >  
> > +static void lm90_alarm_status(struct i2c_client *client,
> > +			      u8 alarms, u8 alarms_max6696)
> > +{
> > +	if (alarms & (LM90_LLOW | LM90_LHIGH | LM90_LTHRM))
> > +		dev_warn(&client->dev,
> > +			 "temp%d out of range, please check!\n", 1);
> > +	if (alarms & (LM90_RLOW | LM90_RHIGH | LM90_RTHRM))
> > +		dev_warn(&client->dev,
> > +			 "temp%d out of range, please check!\n", 2);
> > +	if (alarms & LM90_OPEN)
> > +		dev_warn(&client->dev,
> > +			 "temp%d diode open, please check!\n", 2);
> > +
> > +	if (alarms_max6696 & (MAX6696_RLOW | MAX6696_RHIGH))
> > +		dev_warn(&client->dev,
> > +			 "temp%d out of range, please check!\n", 3);
> > +}
> > +
> > +static irqreturn_t lm90_irq_thread(int irq, void *dev_id)
> > +{
> > +	struct lm90_data *data = dev_id;
> > +	struct i2c_client *client = to_i2c_client(data->hwmon_dev->parent);
> > +	u8 alarms, alarms_max6696 = 0;
> > +
> > +	lm90_read_reg(client, LM90_REG_R_STATUS, &alarms);
> > +
> > +	if (data->kind == max6696)
> > +		lm90_read_reg(client, MAX6696_REG_R_STATUS2, &alarms_max6696);
> > +
> > +	if ((alarms & 0x7f) == 0 && (alarms_max6696 & 0xfe) == 0) {
> > +		return IRQ_NONE;
> 
> For non-MAX6696 chips this will evaluate to:
> 
> 	if ((alarms & 0x7f) == 0 && (0 & 0xfe) == 0)
> 
> and therefore be true for any value of "alarms" and therefore always
> result in IRQ_NONE being returned.
> 
Not really. If
	(alarms & 0xfe) == 0
returns false (ie thee is an alarm) the expression is false and the
if statement won't be executed. Or maybe I didn't get enough sleep
last night ;).

> One other thing that slightly bugs me about this is that it's a little
> tedious to pass alarms_max6696 around like this. Suppose yet another
> slightly different variant is supported by this chip in the future,
> it's possible it will require another alarms_XYZ variable that has to be
> passed around. I don't have a better suggestion though, so maybe it can
> remain like this and be rewritten at some point should the need arise.
> 
The driver has tables to separate chips, so masks for status and status2 can
be made generic and configurable if needed. But, yes, it would be better to
select a generic name for the variable from the beginning (status and status2
would do quite nicely).

> Thierry



  parent reply	other threads:[~2013-07-10 18:12 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-10 11:25 [PATCH v2 0/3] Lm90 Enhancements Wei Ni
2013-07-10 11:25 ` Wei Ni
2013-07-10 11:25 ` [lm-sensors] " Wei Ni
2013-07-10 11:25 ` [PATCH v2 1/3] hwmon: (lm90) split set&show temp as common codes Wei Ni
2013-07-10 11:25   ` Wei Ni
2013-07-10 11:25   ` [lm-sensors] " Wei Ni
     [not found]   ` <1373455539-2831-2-git-send-email-wni-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-07-10 18:21     ` Guenter Roeck
2013-07-10 18:21       ` Guenter Roeck
2013-07-10 18:21       ` [lm-sensors] " Guenter Roeck
     [not found]       ` <20130710182154.GC22430-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-07-11  8:42         ` Wei Ni
2013-07-11  8:42           ` Wei Ni
2013-07-11  8:42           ` [lm-sensors] " Wei Ni
     [not found] ` <1373455539-2831-1-git-send-email-wni-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-07-10 11:25   ` [PATCH v2 2/3] hwmon: (lm90) add support to handle IRQ Wei Ni
2013-07-10 11:25     ` Wei Ni
2013-07-10 11:25     ` [lm-sensors] " Wei Ni
     [not found]     ` <1373455539-2831-3-git-send-email-wni-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-07-10 17:05       ` Thierry Reding
2013-07-10 17:05         ` Thierry Reding
2013-07-10 17:05         ` [lm-sensors] " Thierry Reding
     [not found]         ` <20130710170552.GA15665-RcKxWJ4Cfj3FNiLNb7+IINdj8bHVeoWogfoxzgwHRXE@public.gmane.org>
2013-07-10 18:12           ` Guenter Roeck [this message]
2013-07-10 18:12             ` Guenter Roeck
2013-07-10 18:12             ` [lm-sensors] " Guenter Roeck
     [not found]             ` <20130710181248.GA22430-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-07-10 18:49               ` Thierry Reding
2013-07-10 18:49                 ` Thierry Reding
2013-07-10 18:49                 ` [lm-sensors] " Thierry Reding
2013-07-11  8:36               ` Wei Ni
2013-07-11  8:36                 ` Wei Ni
2013-07-11  8:36                 ` [lm-sensors] " Wei Ni
2013-07-10 18:18       ` Guenter Roeck
2013-07-10 18:18         ` Guenter Roeck
2013-07-10 18:18         ` [lm-sensors] " Guenter Roeck
     [not found]         ` <20130710181820.GB22430-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-07-11  8:40           ` Wei Ni
2013-07-11  8:40             ` Wei Ni
2013-07-11  8:40             ` [lm-sensors] " Wei Ni
2013-07-10 11:25 ` [PATCH v2 3/3] hwmon: (lm90) use enums for the indexes of temp8 and temp11 Wei Ni
2013-07-10 11:25   ` Wei Ni
2013-07-10 11:25   ` [lm-sensors] " Wei Ni
2013-07-10 18:25   ` Guenter Roeck
2013-07-10 18:25     ` [lm-sensors] " Guenter Roeck

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=20130710181248.GA22430@roeck-us.net \
    --to=linux-0h96xk9xttrk1umjsbkqmq@public.gmane.org \
    --cc=khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=lm-sensors-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org \
    --cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org \
    --cc=thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=wni-DDmLM1+adcrQT0dZR+AlfA@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 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.