All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org>
To: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
Cc: Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>,
	Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
	Greg Kroah-Hartman <gregkh-l3A5Bk7waGM@public.gmane.org>,
	Ben Dooks <ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>,
	Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>,
	Russell King <linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org>,
	Andrew Chew <achew-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
	linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	devel-gWbeCf7V1WCQmaza687I9mD2FQJk+8+b@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: Re: [PATCH V3 1/5] i2c: Add irq_gpio field to struct i2c_client, i2c_board_info.
Date: Tue, 20 Sep 2011 09:54:48 +0100	[thread overview]
Message-ID: <4E7854D8.7000603@cam.ac.uk> (raw)
In-Reply-To: <20110920041629.GC30517-e0URQFbLeQY2iJbIjFUEsiwD8/FfD2ys@public.gmane.org>

On 09/20/11 05:16, Grant Likely wrote:
> On Fri, Sep 02, 2011 at 08:56:20AM +0200, Jean Delvare wrote:
>> Stephen,
>>
>> Can you please fix your e-mail client / system / whatever so that your
>> patch series are no longer sent duplicated?
>>
>> On Thu,  1 Sep 2011 16:04:27 -0600, Stephen Warren wrote:
>>> Some devices use a single pin as both an IRQ and a GPIO. In that case,
>>> irq_gpio is the GPIO ID for that pin. Not all drivers use this feature.
>>> Where they do, and the use of this feature is optional, and the system
>>> wishes to disable this feature, this field must be explicitly set to a
>>> defined invalid GPIO ID, such as -1.
>>>
>>> Signed-off-by: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
>>> ---
>>> v3: Also add the field to i2c_board_info, and copy the field from
>>>     i2c_board_info to i2c_client upon instantiation
>>
>> I don't get the idea. The i2c core doesn't make any use of the field,
>> and that field will only be used by a few drivers amongst the 420+
>> i2c drivers in the tree. This looks like a waste of memory. What's wrong
>> with including the new field in the private platform or arch data
>> structure for drivers which need it?
> 
> I have to second the concern; but for a different reason.  This
> shouldn't even remotely be necessary.  If the pin is used as an
> interrupt, then interrupt controller driver (which I would assume is
> also the gpio controller driver) should be responsible for setting up
> the pin so that it can be used correctly as a irq line.  Why does the
> gpio number need to be explicitly passed?
The particular driver covered here is somewhat of a false positive.
It really ought to be rewritten to do everything 'properly' with
interrupts.  Right now no one with the inclination has the hardware
to fix it up.

The nasty case we are trying to cover is peripherals that use level
interrupts talking to gpio chips that only do edge triggered ones.
We use the pin as an irq but have to query it as a gpio to discover
if the sneaky chip raised it again without it actually going low.

There are sometimes work arounds involving polling registers on
the device to check if the interrupt is active, but give the bus is
slow, pinging the gpio to find out it's state is often much faster.

So it's a dirty hack for dirty hardware.  Having said that I agree
that it's a niche case and certainly shouldn't be part of any core
code, unless it is done right at the core in the generic interrupt
code and previous discussions suggest that is tricky to say the least!

WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron <jic23@cam.ac.uk>
To: Grant Likely <grant.likely@secretlab.ca>
Cc: Jean Delvare <khali@linux-fr.org>,
	Stephen Warren <swarren@nvidia.com>,
	Greg Kroah-Hartman <gregkh@suse.de>,
	Ben Dooks <ben-linux@fluff.org>, Arnd Bergmann <arnd@arndb.de>,
	Russell King <linux@arm.linux.org.uk>,
	Andrew Chew <achew@nvidia.com>,
	linux-iio@vger.kernel.org, devel@driverdev.osuosl.org,
	linux-kernel@vger.kernel.org, linux-tegra@vger.kernel.org,
	linux-i2c@vger.kernel.org,
	spi-devel-general@lists.sourceforge.net
Subject: Re: [PATCH V3 1/5] i2c: Add irq_gpio field to struct i2c_client, i2c_board_info.
Date: Tue, 20 Sep 2011 09:54:48 +0100	[thread overview]
Message-ID: <4E7854D8.7000603@cam.ac.uk> (raw)
In-Reply-To: <20110920041629.GC30517@ponder.secretlab.ca>

On 09/20/11 05:16, Grant Likely wrote:
> On Fri, Sep 02, 2011 at 08:56:20AM +0200, Jean Delvare wrote:
>> Stephen,
>>
>> Can you please fix your e-mail client / system / whatever so that your
>> patch series are no longer sent duplicated?
>>
>> On Thu,  1 Sep 2011 16:04:27 -0600, Stephen Warren wrote:
>>> Some devices use a single pin as both an IRQ and a GPIO. In that case,
>>> irq_gpio is the GPIO ID for that pin. Not all drivers use this feature.
>>> Where they do, and the use of this feature is optional, and the system
>>> wishes to disable this feature, this field must be explicitly set to a
>>> defined invalid GPIO ID, such as -1.
>>>
>>> Signed-off-by: Stephen Warren <swarren@nvidia.com>
>>> ---
>>> v3: Also add the field to i2c_board_info, and copy the field from
>>>     i2c_board_info to i2c_client upon instantiation
>>
>> I don't get the idea. The i2c core doesn't make any use of the field,
>> and that field will only be used by a few drivers amongst the 420+
>> i2c drivers in the tree. This looks like a waste of memory. What's wrong
>> with including the new field in the private platform or arch data
>> structure for drivers which need it?
> 
> I have to second the concern; but for a different reason.  This
> shouldn't even remotely be necessary.  If the pin is used as an
> interrupt, then interrupt controller driver (which I would assume is
> also the gpio controller driver) should be responsible for setting up
> the pin so that it can be used correctly as a irq line.  Why does the
> gpio number need to be explicitly passed?
The particular driver covered here is somewhat of a false positive.
It really ought to be rewritten to do everything 'properly' with
interrupts.  Right now no one with the inclination has the hardware
to fix it up.

The nasty case we are trying to cover is peripherals that use level
interrupts talking to gpio chips that only do edge triggered ones.
We use the pin as an irq but have to query it as a gpio to discover
if the sneaky chip raised it again without it actually going low.

There are sometimes work arounds involving polling registers on
the device to check if the interrupt is active, but give the bus is
slow, pinging the gpio to find out it's state is often much faster.

So it's a dirty hack for dirty hardware.  Having said that I agree
that it's a niche case and certainly shouldn't be part of any core
code, unless it is done right at the core in the generic interrupt
code and previous discussions suggest that is tricky to say the least!



  parent reply	other threads:[~2011-09-20  8:54 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-01 22:04 [PATCH V3 1/5] i2c: Add irq_gpio field to struct i2c_client, i2c_board_info Stephen Warren
2011-09-01 22:04 ` Stephen Warren
2011-09-01 22:04 ` Stephen Warren
2011-09-01 22:04 ` [PATCH V3 2/5] spi: Add irq_gpio field to struct spi_device, spi_board_info Stephen Warren
2011-09-01 22:04   ` Stephen Warren
2011-09-01 22:04   ` Stephen Warren
     [not found] ` <1314914676-28397-1-git-send-email-swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2011-09-01 22:04   ` [PATCH V3 3/5] staging:iio:magnetometer:ak8975 Don't use irq_to_gpio() Stephen Warren
2011-09-01 22:04     ` Stephen Warren
2011-09-01 22:04     ` Stephen Warren
2011-09-02  6:56   ` [PATCH V3 1/5] i2c: Add irq_gpio field to struct i2c_client, i2c_board_info Jean Delvare
2011-09-02  6:56     ` Jean Delvare
     [not found]     ` <20110902085620.4ad918c4-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2011-09-02  9:19       ` Jonathan Cameron
2011-09-02  9:19         ` Jonathan Cameron
     [not found]         ` <4E609F9C.5020403-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org>
2011-09-02  9:24           ` Jean Delvare
2011-09-02  9:24             ` Jean Delvare
2011-09-02  9:24             ` Jean Delvare
     [not found]             ` <20110902112435.69c9e8f7-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2011-09-02 18:24               ` Stephen Warren
2011-09-02 18:24                 ` Stephen Warren
2011-09-02 18:24                 ` Stephen Warren
     [not found]                 ` <74CDBE0F657A3D45AFBB94109FB122FF04B327A628-C7FfzLzN0UxDw2glCA4ptUEOCMrvLtNR@public.gmane.org>
2011-09-06 22:57                   ` Greg KH
2011-09-06 22:57                     ` Greg KH
2011-09-06 22:57                     ` Greg KH
2011-09-19 21:59                     ` Stephen Warren
2011-09-19 21:59                       ` Stephen Warren
2011-09-19 21:59                       ` Stephen Warren
2011-09-20  4:16       ` Grant Likely
2011-09-20  4:16         ` Grant Likely
     [not found]         ` <20110920041629.GC30517-e0URQFbLeQY2iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
2011-09-20  8:54           ` Jonathan Cameron [this message]
2011-09-20  8:54             ` Jonathan Cameron
2011-09-01 22:04 ` [PATCH V3 4/5] staging:iio:magnetometer:ak8975: Don't assume 0 is an invalid GPIO Stephen Warren
2011-09-01 22:04   ` Stephen Warren
2011-09-01 22:04   ` Stephen Warren
2011-09-01 22:04 ` [PATCH V3 5/5] staging:iio:magnetometer:ak8975: Fix probe() error-handling Stephen Warren
2011-09-01 22:04   ` Stephen Warren
2011-09-01 22:04   ` Stephen Warren
2011-09-01 22:04 ` [PATCH V3 1/5] i2c: Add irq_gpio field to struct i2c_client, i2c_board_info Stephen Warren
2011-09-01 22:04   ` Stephen Warren
2011-09-01 22:04   ` Stephen Warren
2011-09-01 22:04 ` [PATCH V3 2/5] spi: Add irq_gpio field to struct spi_device, spi_board_info Stephen Warren
2011-09-01 22:04   ` Stephen Warren
2011-09-01 22:04   ` Stephen Warren
2011-09-01 22:04 ` [PATCH V3 3/5] staging:iio:magnetometer:ak8975 Don't use irq_to_gpio() Stephen Warren
2011-09-01 22:04   ` Stephen Warren
2011-09-01 22:04   ` Stephen Warren
2011-09-01 22:04 ` [PATCH V3 4/5] staging:iio:magnetometer:ak8975: Don't assume 0 is an invalid GPIO Stephen Warren
2011-09-01 22:04   ` Stephen Warren
2011-09-01 22:04   ` Stephen Warren
2011-09-01 22:04 ` [PATCH V3 5/5] staging:iio:magnetometer:ak8975: Fix probe() error-handling Stephen Warren
2011-09-01 22:04   ` Stephen Warren
2011-09-01 22:04   ` Stephen Warren

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=4E7854D8.7000603@cam.ac.uk \
    --to=jic23-kwpb1pkirijaa/9udqfwiw@public.gmane.org \
    --cc=achew-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
    --cc=arnd-r2nGTMty4D4@public.gmane.org \
    --cc=ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org \
    --cc=devel-gWbeCf7V1WCQmaza687I9mD2FQJk+8+b@public.gmane.org \
    --cc=grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org \
    --cc=gregkh-l3A5Bk7waGM@public.gmane.org \
    --cc=khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org \
    --cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org \
    --cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    --cc=swarren-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.