public inbox for linux-tegra@vger.kernel.org
 help / color / mirror / Atom feed
From: Jean Delvare <khali@linux-fr.org>
To: Wei Ni <wni@nvidia.com>
Cc: linux@roeck-us.net, thierry.reding@gmail.com,
	lm-sensors@lm-sensors.org, linux-kernel@vger.kernel.org,
	linux-tegra@vger.kernel.org
Subject: Re: [PATCH v3 3/4] hwmon: (lm90) add support to handle IRQ
Date: Thu, 18 Jul 2013 17:58:22 +0200	[thread overview]
Message-ID: <20130718175822.62c358bf@endymion.delvare> (raw)
In-Reply-To: <1373615287-18502-4-git-send-email-wni@nvidia.com>

Hi Wei,

On Fri, 12 Jul 2013 15:48:06 +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 |   24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
> index c90037f..1cc3d19 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
> @@ -1460,6 +1461,17 @@ static bool lm90_is_tripped(struct i2c_client *client)
>  	return true;
>  }
>  
> +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);

Why are you passing data as the dev_id in the first place, instead of
client? It's easier to get the data when you have the client
(i2c_get_clientdata) than the other way around.

> +
> +	if (lm90_is_tripped(client))
> +		return IRQ_HANDLED;
> +	else
> +		return IRQ_NONE;
> +}
> +
>  static int lm90_probe(struct i2c_client *client,
>  		      const struct i2c_device_id *id)
>  {
> @@ -1536,6 +1548,18 @@ static int lm90_probe(struct i2c_client *client,
>  		goto exit_remove_files;
>  	}
>  
> +	if (client->irq >= 0) {

I though you had agreed to just check for (client->irq)?

> +		dev_dbg(dev, "lm90 IRQ: %d\n", client->irq);

The "lm90" is redundant, dev_dbg will use the chip name as a prefix.

> +		err = devm_request_threaded_irq(dev, client->irq,
> +						NULL, lm90_irq_thread,
> +						IRQF_TRIGGER_LOW | IRQF_ONESHOT,
> +						"lm90", data);
> +		if (err < 0) {
> +			dev_err(dev, "cannot request interrupt\n");

You should include the IRQ number in the error message, it is useful
for investigating the issue. Not everyone will have the debugging
message above enabled.

> +			goto exit_remove_files;
> +		}
> +	}
> +
>  	return 0;
>  
>  exit_remove_files:

That's it for the code. Now I'm not sure I understand what you are
trying to do and what this is all good for.

First of all, how is the chip wired on your system? You are using an
NCT1008, right? Which output of the chip is connected to your interrupt
line, THERM or ALERT/THERM2? ALERT is normally used for SMBus Alert but
I suppose it could be used for an interrupt too. THERM and THERM2 OTOH
are comparator outputs, they stay low as long as the temperature are
above the therm limits. Reading the status register won't bring them
back up as I understand it, and contrary to the ALERT output, they
can't be masked. Won't this result in an interrupt flood if using
IRQF_TRIGGER_LOW? Have you tested your code already?

Also I don't think just logging an error message is the right thing to
do in the case of overheating. The code to handle SMBus alerts is from
me, and it does indeed just log the problems, but it was really only
meant as a proof of concept when I first added support for SMBus Alert.
Today we could do better than this, starting with issuing sysfs
notifications to the relevant alarm files (several other hwmon drivers
are doing that already.)

For a real system, if the THERM output is connected to an interrupt line
(instead of directly to a fan controller) I would expect the platform
to provide a callback to handle thermal events and take whatever
appropriate measure is needed (e.g. throttling.) Just logging the
problem won't save the system, by the time someone looks at the log it
might be too late.

-- 
Jean Delvare

  reply	other threads:[~2013-07-18 15:58 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-12  7:48 [PATCH v3 0/4] Lm90 Enhancements Wei Ni
2013-07-12  7:48 ` [PATCH v3 1/4] hwmon: (lm90) split set&show temp as common codes Wei Ni
     [not found]   ` <1373615287-18502-2-git-send-email-wni-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-07-12 13:26     ` Jean Delvare
     [not found]       ` <20130712152615.23464a6b-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2013-07-12 13:50         ` Guenter Roeck
     [not found]           ` <20130712135000.GA3386-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-07-12 14:30             ` Jean Delvare
2013-07-12 14:40               ` Guenter Roeck
2013-07-15  6:25                 ` Wei Ni
2013-07-15  7:24                   ` Jean Delvare
     [not found]                     ` <20130715092415.6d082aa2-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2013-07-15  9:14                       ` Wei Ni
     [not found]                         ` <51E3BD5F.6060806-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-07-15 17:52                           ` Jean Delvare
2013-07-17  4:26                     ` Thierry Reding
2013-07-17  5:14                       ` Guenter Roeck
2013-07-17  6:26                         ` Wei Ni
2013-07-17  9:11                           ` Jean Delvare
2013-07-17  9:54                             ` Wei Ni
2013-07-15  6:05         ` Wei Ni
     [not found]           ` <51E39114.505-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-07-15  7:29             ` Jean Delvare
     [not found] ` <1373615287-18502-1-git-send-email-wni-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-07-12  7:48   ` [PATCH v3 2/4] hwmon: (lm90) use macro defines for the status bit Wei Ni
2013-07-15 16:57     ` Jean Delvare
     [not found]       ` <20130715185727.4ebde8c4-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2013-07-15 17:33         ` Guenter Roeck
     [not found]           ` <20130715173322.GA20484-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-10-30 15:33             ` Jean Delvare
     [not found]               ` <20131030163326.4e7e0cfc-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2013-10-30 16:11                 ` Guenter Roeck
2013-10-30 16:56                 ` Guenter Roeck
2013-07-17  7:03         ` Wei Ni
2013-07-17  7:09           ` Wei Ni
     [not found]           ` <51E641C7.4000107-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-07-17  8:28             ` Jean Delvare
2013-07-17  9:29               ` Wei Ni
     [not found]                 ` <51E663FC.5050209-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-07-17  9:46                   ` Jean Delvare
2013-07-12  7:48 ` [PATCH v3 3/4] hwmon: (lm90) add support to handle IRQ Wei Ni
2013-07-18 15:58   ` Jean Delvare [this message]
     [not found]     ` <20130718175822.62c358bf-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2013-07-19  6:41       ` Wei Ni
     [not found]         ` <51E8DFB2.9070701-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-07-24  7:46           ` Wei Ni
2013-07-24  8:08             ` Jean Delvare
2013-07-27 15:02         ` Jean Delvare
2013-07-29 10:14           ` Wei Ni
     [not found]             ` <51F640A0.4040809-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-07-29 15:58               ` Jean Delvare
     [not found]                 ` <20130729175835.795dba2b-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2013-07-30  8:18                   ` Wei Ni
     [not found]                     ` <51F776DB.3060104-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-09-16 12:34                       ` Jean Delvare
2013-07-12  7:48 ` [PATCH v3 4/4] hwmon: (lm90) use enums for the indexes of temp8 and temp11 Wei Ni
     [not found]   ` <1373615287-18502-5-git-send-email-wni-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-07-27 15:38     ` Jean Delvare
     [not found]       ` <20130727173830.14cb5b21-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2013-07-29 11:15         ` Wei Ni
     [not found]           ` <51F64EC0.800-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-07-29 15:48             ` Jean Delvare

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=20130718175822.62c358bf@endymion.delvare \
    --to=khali@linux-fr.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=lm-sensors@lm-sensors.org \
    --cc=thierry.reding@gmail.com \
    --cc=wni@nvidia.com \
    /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