Re: [PATCH v2 1/2] Input: gpio-keys - allow platform to specify exact irq flags

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Nov 24, 2009 at 12:05:57PM +0100, ext Ferenc Wagner wrote:
[snip]
> >> Or let for example -1 mean 0, which is ugly, to say the least.
> >
> > How about adding (again) new field: bool custom_irqflags?
> 
> Thinking about it, since multiple buttons can share a single IRQ, this
> can't be a per-button field after all.  Perhaps a better solution would
> be adding a new mapping to the platform data:
> 
> struct gpio_keys_irq {
>         int irq;
>         int irqflags;
>         int wakeup;                 /* replace the per-button field */
> }
> 
> struct gpio_keys_platform_data {
>         struct gpio_keys_button *buttons;
>         int nbuttons;
>         unsigned int rep:1;
>         struct gpio_keys_irq *irqs; /* new member */
>         int nirqs;                  /* new member */
> };

OK. This seems reasonable.

> >> Anyway, I'd much prefer an implementation which doesn't work against
> >> having multiple buttons on a single IRQ line, which is the case for
> >> example in arch/mips/bcm47xx/gpio.c.  Then the IRQ could still be
> >> disabled if all its buttons are disabled, unless it's shared with
> >> another driver (and IRQF_SHARED would control this aspect sharing).
> >
> > Do you mean something like:
> >
> > 	if (button->custom_irqflags) {
> > 		if (button->irqflags & IRQF_SHARED) {
> > 			/* cannot mute this button */
> > 		} else {
> > 			...
> > 	}
> 
> Not quite, because the default irqflags contain IRQF_SHARED.  More like:
> 
> disable_button (this);
> if (button->custom_irqflags && !(button->irqflags & IRQF_SHARED)
>     && (all buttons on this IRQ are disabled)) {
>         disable_irq (gpio_to_irq (this));
> }

I actually meant this code snippet to be in the function gpio_keys_setup_key()
where it only checks whether button can be disabled. Sorry for forgotting
to mention the context.

> > In our case, we only have 1:1 mapping between GPIO lines and buttons so
> > current version works but if there are any (possible) users for this kind
> > of setup I can implement it.
> 
> I quoted (and own) a platform with such arrangement.  I'm somewhat short
> on time to work on this hobby project, but of course I don't expect you
> to do the heavy lifting.  Unfortunately I haven't yet managed to get a
> clear picture about how to properly attack it (the problem is GPIO
> access from the IRQ handler, if you didn't read the thread), so I
> couldn't produce acceptable code (even though in my case gpio_get_value
> can't sleep, so I've got working code).  Meanwhile, I'm trying to do my
> best to not let things go in a direction which makes this change harder
> that it currently is.  I'm really sorry this hurts your efforts.

Thanks for clarifying things. It really don't hurt my efforts; I get
paid for doing this :)

So I'll try to implement this gpio-keys muting so that it allows
also multiple buttons to share single IRQ line.

Thanks,
MW
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux