devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Lorenzo Bianconi
	<lorenzo.bianconi83-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	lorenzo.bianconi-qxv4g6HH51o@public.gmane.org,
	Linus Walleij
	<linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
	Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>,
	Jason Cooper <jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org>,
	Marc Zyngier <marc.zyngier-5wv7dgnIgG8@public.gmane.org>
Subject: Re: [PATCH 5/9] iio: humidity: hts221: support active-low interrupts
Date: Sun, 9 Jul 2017 19:39:51 +0100	[thread overview]
Message-ID: <20170709193951.14caff79@kernel.org> (raw)
In-Reply-To: <20170709165704.26311-6-lorenzo.bianconi-qxv4g6HH51o@public.gmane.org>

On Sun,  9 Jul 2017 18:57:00 +0200
Lorenzo Bianconi <lorenzo.bianconi83-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:

> Add support for active low interrupts (IRQF_TRIGGER_LOW and
> IRQF_TRIGGER_FALLING). Configure the device as active high or low
> according to the requested irq line.
> 
> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi-qxv4g6HH51o@public.gmane.org>
Hi Lorenzo,

Sorry, you are getting caught up in a more general question I'd like to 
pin down an answer for...

What should we be doing if we have a part that supports both high and
low interrupts and/or rising and falling?

We actually have more than one possible thing we are configuring with
one parameter.  If we are looking at shared interrupts or level
converters it's more than possible we have an inversion going on between
the two.   How is this represented to the two ends?

What's the right way of doing this?

I've added a few CCs that I think might chip in on this question!

My personal gut feeling is that the inverter should have explicit
representation in the kernel.  We should be able to instantiate an
irq_chip which is responsible for flipping it's sense.

You request an active high input on one side and it deals with
the active low that needs to be requested upstream.

Chances are I'm missing something and this is already well handled!

Jonathan
> ---
>  drivers/iio/humidity/hts221.h        |  1 +
>  drivers/iio/humidity/hts221_buffer.c | 11 +++++++++++
>  drivers/iio/humidity/hts221_core.c   |  3 +--
>  3 files changed, 13 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/iio/humidity/hts221.h b/drivers/iio/humidity/hts221.h
> index 7b5691a6df53..0fbc89fe213d 100644
> --- a/drivers/iio/humidity/hts221.h
> +++ b/drivers/iio/humidity/hts221.h
> @@ -67,6 +67,7 @@ struct hts221_hw {
>  extern const struct dev_pm_ops hts221_pm_ops;
>  
>  int hts221_config_drdy(struct hts221_hw *hw, bool enable);
> +int hts221_write_with_mask(struct hts221_hw *hw, u8 addr, u8 mask, u8 val);
>  int hts221_probe(struct iio_dev *iio_dev);
>  int hts221_set_enable(struct hts221_hw *hw, bool enable);
>  int hts221_allocate_buffers(struct hts221_hw *hw);
> diff --git a/drivers/iio/humidity/hts221_buffer.c b/drivers/iio/humidity/hts221_buffer.c
> index c4ed153ad397..ad5222295b2c 100644
> --- a/drivers/iio/humidity/hts221_buffer.c
> +++ b/drivers/iio/humidity/hts221_buffer.c
> @@ -22,6 +22,8 @@
>  
>  #include "hts221.h"
>  
> +#define HTS221_REG_DRDY_HL_ADDR		0x22
> +#define HTS221_REG_DRDY_HL_MASK		BIT(7)
>  #define HTS221_REG_STATUS_ADDR		0x27
>  #define HTS221_RH_DRDY_MASK		BIT(1)
>  #define HTS221_TEMP_DRDY_MASK		BIT(0)
> @@ -67,6 +69,7 @@ static irqreturn_t hts221_trigger_handler_thread(int irq, void *private)
>  int hts221_allocate_trigger(struct hts221_hw *hw)
>  {
>  	struct iio_dev *iio_dev = iio_priv_to_dev(hw);
> +	bool irq_active_low = false;
>  	unsigned long irq_type;
>  	int err;
>  
> @@ -76,6 +79,10 @@ int hts221_allocate_trigger(struct hts221_hw *hw)
>  	case IRQF_TRIGGER_HIGH:
>  	case IRQF_TRIGGER_RISING:
>  		break;
> +	case IRQF_TRIGGER_LOW:
> +	case IRQF_TRIGGER_FALLING:
> +		irq_active_low = true;
> +		break;
>  	default:
>  		dev_info(hw->dev,
>  			 "mode %lx unsupported, using IRQF_TRIGGER_RISING\n",
> @@ -84,6 +91,10 @@ int hts221_allocate_trigger(struct hts221_hw *hw)
>  		break;
>  	}
>  
> +	err = hts221_write_with_mask(hw, HTS221_REG_DRDY_HL_ADDR,
> +				     HTS221_REG_DRDY_HL_MASK, irq_active_low);
> +	if (err < 0)
> +		return err;
>  	err = devm_request_threaded_irq(hw->dev, hw->irq, NULL,
>  					hts221_trigger_handler_thread,
>  					irq_type | IRQF_ONESHOT,
> diff --git a/drivers/iio/humidity/hts221_core.c b/drivers/iio/humidity/hts221_core.c
> index 7d30e2594a58..dfacf64a6f2e 100644
> --- a/drivers/iio/humidity/hts221_core.c
> +++ b/drivers/iio/humidity/hts221_core.c
> @@ -134,8 +134,7 @@ static const struct iio_chan_spec hts221_channels[] = {
>  	IIO_CHAN_SOFT_TIMESTAMP(2),
>  };
>  
> -static int hts221_write_with_mask(struct hts221_hw *hw, u8 addr, u8 mask,
> -				  u8 val)
> +int hts221_write_with_mask(struct hts221_hw *hw, u8 addr, u8 mask, u8 val)
>  {
>  	u8 data;
>  	int err;

  parent reply	other threads:[~2017-07-09 18:39 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-09 16:56 [PATCH 0/9] hts221: add new features and fix power-off procedure Lorenzo Bianconi
     [not found] ` <20170709165704.26311-1-lorenzo.bianconi-qxv4g6HH51o@public.gmane.org>
2017-07-09 16:56   ` [PATCH 1/9] iio: humidity: hts221: refactor write_with_mask code Lorenzo Bianconi
     [not found]     ` <20170709165704.26311-2-lorenzo.bianconi-qxv4g6HH51o@public.gmane.org>
2017-07-09 18:28       ` Jonathan Cameron
     [not found]         ` <20170709192827.2c343108-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-07-09 21:18           ` Lorenzo Bianconi
     [not found]             ` <CAA2SeNJmUFp7WaOsAEq+yLMSKrzQVkhmyMhB2OVWsbBAmv4nCg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-10 20:47               ` Jonathan Cameron
2017-07-09 16:56   ` [PATCH 2/9] iio: humidity: hts221: move BDU configuration in probe routine Lorenzo Bianconi
     [not found]     ` <20170709165704.26311-3-lorenzo.bianconi-qxv4g6HH51o@public.gmane.org>
2017-07-09 18:29       ` Jonathan Cameron
2017-07-09 16:56   ` [PATCH 3/9] iio: humidity: hts221: do not overwrite reserved data during power-down Lorenzo Bianconi
     [not found]     ` <20170709165704.26311-4-lorenzo.bianconi-qxv4g6HH51o@public.gmane.org>
2017-07-09 18:30       ` Jonathan Cameron
     [not found]         ` <20170709193042.330fcd60-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-07-09 21:26           ` Lorenzo Bianconi
2017-07-09 16:56   ` [PATCH 4/9] iio: humidity: hts221: avoid useless ODR reconfiguration Lorenzo Bianconi
     [not found]     ` <20170709165704.26311-5-lorenzo.bianconi-qxv4g6HH51o@public.gmane.org>
2017-07-09 18:32       ` Jonathan Cameron
     [not found]         ` <20170709193208.6864b158-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-07-09 21:27           ` Lorenzo Bianconi
2017-07-09 16:57   ` [PATCH 5/9] iio: humidity: hts221: support active-low interrupts Lorenzo Bianconi
     [not found]     ` <20170709165704.26311-6-lorenzo.bianconi-qxv4g6HH51o@public.gmane.org>
2017-07-09 18:39       ` Jonathan Cameron [this message]
     [not found]         ` <20170709193951.14caff79-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-07-10  9:36           ` Marc Zyngier
     [not found]             ` <ceef5860-91ee-a922-0dd7-8f2698192b9b-5wv7dgnIgG8@public.gmane.org>
2017-07-11 18:52               ` Jonathan Cameron
2017-07-09 16:57   ` [PATCH 6/9] dt-bindings: " Lorenzo Bianconi
     [not found]     ` <20170709165704.26311-7-lorenzo.bianconi-qxv4g6HH51o@public.gmane.org>
2017-07-11  2:49       ` Rob Herring
2017-07-09 16:57   ` [PATCH 7/9] iio: humidity: hts221: support open drain mode Lorenzo Bianconi
2017-07-09 16:57   ` [PATCH 8/9] dt-bindings: " Lorenzo Bianconi
     [not found]     ` <20170709165704.26311-9-lorenzo.bianconi-qxv4g6HH51o@public.gmane.org>
2017-07-11  2:51       ` Rob Herring
2017-07-11 18:26         ` Jonathan Cameron
     [not found]           ` <20170711192656.7fd08a1c-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-07-11 18:42             ` Rob Herring
     [not found]               ` <CAL_JsqJa7JeofpG=66AnVrTP4XtVrp9B4-QoLTyK08GzF4L5uQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-11 18:56                 ` Jonathan Cameron
     [not found]                   ` <0462CB71-6762-48F2-99B3-EA62FF81C280-tko9wxEg+fIOOJlXag/Snyp2UmYkHbXO@public.gmane.org>
2017-07-15 14:32                     ` Lorenzo Bianconi
     [not found]                       ` <CAA2SeN+2T2-G1khRNpNzccesX=cip0ConT11RJRV-HB8Ojk0pA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-17 11:49                         ` Jonathan Cameron
2017-07-09 16:57   ` [PATCH 9/9] iio: humidity: hts221: move drdy enable logic in hts221_trig_set_state() Lorenzo Bianconi
     [not found]     ` <20170709165704.26311-10-lorenzo.bianconi-qxv4g6HH51o@public.gmane.org>
2017-07-09 18:41       ` Jonathan Cameron
     [not found]         ` <20170709194123.39fd6914-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-07-09 21:28           ` Lorenzo Bianconi
     [not found]             ` <CAA2SeNLhBbTbMGDHyXGN02V4n0RHrwK-Bg0D_q9phpcEa3e7Rw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-16  9:45               ` Lorenzo Bianconi
     [not found]                 ` <CAA2SeNK6dd=myMk59j1To9GtvBaj1T8XXwcaqrtO8V5s-bM5WQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-16 19:50                   ` Jonathan Cameron

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=20170709193951.14caff79@kernel.org \
    --to=jic23-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org \
    --cc=linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
    --cc=linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=lorenzo.bianconi-qxv4g6HH51o@public.gmane.org \
    --cc=lorenzo.bianconi83-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=marc.zyngier-5wv7dgnIgG8@public.gmane.org \
    --cc=tglx-hfZtesqFncYOwBW4kG4KsQ@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).