Message ID | 1349263201-422-1-git-send-email-t.figa@samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Tomasz, On Wed, Oct 03, 2012 at 01:20:00PM +0200, Tomasz Figa wrote: > On modern platforms using device tree and non-legacy IRQ domains there > is usually no way to perform direct translation between GPIO and IRQ, > because the IRQ of interest is not mapped yet into sparse IRQ namespace. > > This patch modifies the gpio_keys driver to parse IRQ from device tree > and use gpio_to_irq only as a fallback. This means that this change would need to be applied to every driver that currently maps gpio to IRQ. Why can't gpio_to_irq() be fixed instead? Thanks.
Hi Dmitry, On Thursday 04 of October 2012 23:23:15 Dmitry Torokhov wrote: > Hi Tomasz, > > On Wed, Oct 03, 2012 at 01:20:00PM +0200, Tomasz Figa wrote: > > On modern platforms using device tree and non-legacy IRQ domains there > > is usually no way to perform direct translation between GPIO and IRQ, > > because the IRQ of interest is not mapped yet into sparse IRQ > > namespace. > > > > This patch modifies the gpio_keys driver to parse IRQ from device tree > > and use gpio_to_irq only as a fallback. > > This means that this change would need to be applied to every driver > that currently maps gpio to IRQ. Why can't gpio_to_irq() be fixed > instead? > Now when I think of it again, there is a possibility of creating an IRQ mapping in .to_irq callback of GPIO chip, if it does not exist yet. This should be a better solution indeed. I will send a patch for pinctrl-samsung driver adding it. Please disregard this patch. Best regards,
diff --git a/Documentation/devicetree/bindings/gpio/gpio_keys.txt b/Documentation/devicetree/bindings/gpio/gpio_keys.txt index 5c2c021..7f318a5 100644 --- a/Documentation/devicetree/bindings/gpio/gpio_keys.txt +++ b/Documentation/devicetree/bindings/gpio/gpio_keys.txt @@ -20,6 +20,8 @@ Optional subnode-properties: - debounce-interval: Debouncing interval time in milliseconds. If not specified defaults to 5. - gpio-key,wakeup: Boolean, button can wake-up the system. + - interrupt: Interrupt used for this key (required if no translation + between GPIO and IRQ is available). Example nodes: diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c index 6a68041..a33660c 100644 --- a/drivers/input/keyboard/gpio_keys.c +++ b/drivers/input/keyboard/gpio_keys.c @@ -28,6 +28,7 @@ #include <linux/gpio.h> #include <linux/of_platform.h> #include <linux/of_gpio.h> +#include <linux/of_irq.h> #include <linux/spinlock.h> struct gpio_button_data { @@ -464,7 +465,7 @@ static int __devinit gpio_keys_setup_key(struct platform_device *pdev, button->debounce_interval; } - irq = gpio_to_irq(button->gpio); + irq = (button->irq) ? : gpio_to_irq(button->gpio); if (irq < 0) { error = irq; dev_err(dev, @@ -597,6 +598,7 @@ gpio_keys_get_devtree_pdata(struct device *dev) button = &pdata->buttons[i++]; + button->irq = irq_of_parse_and_map(pp, 0); button->gpio = of_get_gpio_flags(pp, 0, &flags); button->active_low = flags & OF_GPIO_ACTIVE_LOW;
On modern platforms using device tree and non-legacy IRQ domains there is usually no way to perform direct translation between GPIO and IRQ, because the IRQ of interest is not mapped yet into sparse IRQ namespace. This patch modifies the gpio_keys driver to parse IRQ from device tree and use gpio_to_irq only as a fallback. Signed-off-by: Tomasz Figa <t.figa@samsung.com> --- Documentation/devicetree/bindings/gpio/gpio_keys.txt | 2 ++ drivers/input/keyboard/gpio_keys.c | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-)