All of lore.kernel.org
 help / color / mirror / Atom feed
From: <harald@ccbib.org>
To: Richard Weinberger <richard@nod.at>
Cc: <jic23@kernel.org>, <knaack.h@gmx.de>, <lars@metafoo.de>,
	<pmeerw@pmeerw.net>, <sanjeev_sharma@mentor.com>,
	<linux-iio@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 2/4] iio: dht11: IRQ fixes
Date: Sat, 06 Dec 2014 18:21:18 +0100	[thread overview]
Message-ID: <bc157395b51e63648d1d1970e16ad6e7@imap.cosmopool.net> (raw)
In-Reply-To: <1417563176-31972-3-git-send-email-richard@nod.at>

Hi Richard,

finally got around to test this patch on all HW I have.

As expected the preamble needs to be shortend by two edges:
With your patch in its current form, the driver stops to work
reliably with DHT11. Also with DHT22 you get some delay when
reading the data, because you always wait for the timeout to
happen, before trying to decode the data.

Since your patch title includes "fix", the commit message
probably should mention that the patch as a side effect
changes behaviour - even if it's just diagnostic messages.

Thanks,
Harald

On Wed,  3 Dec 2014 00:32:54 +0100, Richard Weinberger <richard@nod.at>
wrote:
> Signed-off-by: Richard Weinberger <richard@nod.at>
> ---
>  drivers/iio/humidity/dht11.c | 56
>  ++++++++++++++++++++++++--------------------
>  1 file changed, 30 insertions(+), 26 deletions(-)
> 
> diff --git a/drivers/iio/humidity/dht11.c b/drivers/iio/humidity/dht11.c
> index 168ebc4..0023699 100644
> --- a/drivers/iio/humidity/dht11.c
> +++ b/drivers/iio/humidity/dht11.c
> @@ -140,6 +140,27 @@ static int dht11_decode(struct dht11 *dht11, int
> offset)
>  	return 0;
>  }
>  
> +/*
> + * IRQ handler called on GPIO edges
> + */
> +static irqreturn_t dht11_handle_irq(int irq, void *data)
> +{
> +	struct iio_dev *iio = data;
> +	struct dht11 *dht11 = iio_priv(iio);
> +
> +	/* TODO: Consider making the handler safe for IRQ sharing */
> +	if (dht11->num_edges < DHT11_EDGES_PER_READ && dht11->num_edges >= 0)
{
> +		dht11->edges[dht11->num_edges].ts = iio_get_time_ns();
> +		dht11->edges[dht11->num_edges++].value =
> +						gpio_get_value(dht11->gpio);
> +
> +		if (dht11->num_edges >= DHT11_EDGES_PER_READ)
> +			complete(&dht11->completion);
> +	}
> +
> +	return IRQ_HANDLED;
> +}
> +
>  static int dht11_read_raw(struct iio_dev *iio_dev,
>  			const struct iio_chan_spec *chan,
>  			int *val, int *val2, long m)
> @@ -160,8 +181,17 @@ static int dht11_read_raw(struct iio_dev *iio_dev,
>  		if (ret)
>  			goto err;
>  
> +		ret = request_irq(dht11->irq, dht11_handle_irq,
> +				  IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
> +				  iio_dev->name, iio_dev);
> +		if (ret)
> +			goto err;
> +
>  		ret = wait_for_completion_killable_timeout(&dht11->completion,
>  								 HZ);
> +
> +		free_irq(dht11->irq, iio_dev);
> +
>  		if (ret == 0 && dht11->num_edges < DHT11_EDGES_PER_READ - 1) {
>  			dev_err(&iio_dev->dev,
>  					"Only %d signal edges detected\n",
> @@ -197,27 +227,6 @@ static const struct iio_info dht11_iio_info = {
>  	.read_raw		= dht11_read_raw,
>  };
>  
> -/*
> - * IRQ handler called on GPIO edges
> -*/
> -static irqreturn_t dht11_handle_irq(int irq, void *data)
> -{
> -	struct iio_dev *iio = data;
> -	struct dht11 *dht11 = iio_priv(iio);
> -
> -	/* TODO: Consider making the handler safe for IRQ sharing */
> -	if (dht11->num_edges < DHT11_EDGES_PER_READ && dht11->num_edges >= 0)
{
> -		dht11->edges[dht11->num_edges].ts = iio_get_time_ns();
> -		dht11->edges[dht11->num_edges++].value =
> -						gpio_get_value(dht11->gpio);
> -
> -		if (dht11->num_edges >= DHT11_EDGES_PER_READ)
> -			complete(&dht11->completion);
> -	}
> -
> -	return IRQ_HANDLED;
> -}
> -
>  static const struct iio_chan_spec dht11_chan_spec[] = {
>  	{ .type = IIO_TEMP,
>  		.info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED), },
> @@ -260,11 +269,6 @@ static int dht11_probe(struct platform_device
*pdev)
>  		dev_err(dev, "GPIO %d has no interrupt\n", dht11->gpio);
>  		return -EINVAL;
>  	}
> -	ret = devm_request_irq(dev, dht11->irq, dht11_handle_irq,
> -				IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
> -				pdev->name, iio);
> -	if (ret)
> -		return ret;
>  
>  	dht11->timestamp = iio_get_time_ns() - DHT11_DATA_VALID_TIME - 1;
>  	dht11->num_edges = -1;

  parent reply	other threads:[~2014-12-06 17:21 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-02 23:32 iio: dht11 Updates Richard Weinberger
2014-12-02 23:32 ` [PATCH 1/4] iio: dht11: Add locking Richard Weinberger
2014-12-14 12:31   ` Hartmut Knaack
2014-12-14 14:06     ` Richard Weinberger
2014-12-02 23:32 ` [PATCH 2/4] iio: dht11: IRQ fixes Richard Weinberger
2014-12-02 23:35   ` Richard Weinberger
2014-12-06 17:21   ` harald [this message]
2014-12-02 23:32 ` [PATCH 3/4] iio: dht11: Logging updates Richard Weinberger
2014-12-03 12:58   ` Harald Geyer
2014-12-03 13:11     ` Richard Weinberger
2014-12-03 13:56       ` Harald Geyer
2014-12-03 21:30         ` Richard Weinberger
2014-12-04 14:25           ` Harald Geyer
2014-12-02 23:32 ` [PATCH 4/4] iio: dht11: Fix out-of-bounds read Richard Weinberger
2014-12-14 12:32   ` Hartmut Knaack
2014-12-03 12:18 ` iio: dht11 Updates Harald Geyer
2014-12-03 13:15   ` Richard Weinberger
2014-12-03 14:08     ` Harald Geyer
2014-12-03 14:29       ` Richard Weinberger
2014-12-03 22:05       ` Richard Weinberger
2014-12-04 13:45         ` Harald Geyer
2014-12-04 14:15           ` Richard Weinberger
2014-12-03 20:20   ` Richard Weinberger
2014-12-04 16:08     ` Harald Geyer
2015-01-01 12:38 ` Jonathan Cameron
2015-01-01 21:18   ` harald
2015-01-02 11:28     ` Richard Weinberger
2015-01-04 11:01       ` Jonathan Cameron
2015-01-05 13:49         ` [PATCHv2 1/3] iio: dht11: Fix out-of-bounds read Harald Geyer
2015-01-05 13:55           ` Richard Weinberger
2015-01-06  5:39             ` sanjeev sharma
2015-01-07 12:15             ` [PATCHv2 1/3,RESEND] " Harald Geyer
2015-01-10 11:14               ` Jonathan Cameron
2015-01-10 18:39                 ` Richard Weinberger
2015-01-12 11:26                   ` Harald Geyer
2015-01-12 11:27                     ` Richard Weinberger
2015-01-07 12:18             ` [PATCHv2 2/3,RESEND] iio: dht11: Add locking Harald Geyer
2015-01-10 11:16               ` Jonathan Cameron
2015-02-22 10:44                 ` Richard Weinberger
2015-02-25 12:01                   ` Jonathan Cameron
2015-01-07 12:22             ` [PATCHv2 3/3,RESEND] iio: dht11: IRQ fixes Harald Geyer

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=bc157395b51e63648d1d1970e16ad6e7@imap.cosmopool.net \
    --to=harald@ccbib.org \
    --cc=jic23@kernel.org \
    --cc=knaack.h@gmx.de \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pmeerw@pmeerw.net \
    --cc=richard@nod.at \
    --cc=sanjeev_sharma@mentor.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 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.