From 661620fcc819bbd09dec9f5c95a0ce4f9ba07b5d Mon Sep 17 00:00:00 2001 From: Jean-Christophe PLAGNIOL-VILLARD Date: Tue, 23 Oct 2012 15:56:41 +0200 Subject: [PATCH] --- yaml --- r: 336384 b: refs/heads/master c: a728c7cdd033f0cbeacc302d2409a2428e68e1be h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/pinctrl/pinctrl-at91.c | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 995ed28dc63c..14c0ab43287c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 525fae21317658ae556ca850f3004319004641d1 +refs/heads/master: a728c7cdd033f0cbeacc302d2409a2428e68e1be diff --git a/trunk/drivers/pinctrl/pinctrl-at91.c b/trunk/drivers/pinctrl/pinctrl-at91.c index f10fad2079c5..676b199d6d22 100644 --- a/trunk/drivers/pinctrl/pinctrl-at91.c +++ b/trunk/drivers/pinctrl/pinctrl-at91.c @@ -1255,9 +1255,33 @@ static int at91_gpio_irq_map(struct irq_domain *h, unsigned int virq, return 0; } +int at91_gpio_irq_domain_xlate(struct irq_domain *d, struct device_node *ctrlr, + const u32 *intspec, unsigned int intsize, + irq_hw_number_t *out_hwirq, unsigned int *out_type) +{ + struct at91_gpio_chip *at91_gpio = d->host_data; + int ret; + int pin = at91_gpio->chip.base + intspec[0]; + + if (WARN_ON(intsize < 2)) + return -EINVAL; + *out_hwirq = intspec[0]; + *out_type = intspec[1] & IRQ_TYPE_SENSE_MASK; + + ret = gpio_request(pin, ctrlr->full_name); + if (ret) + return ret; + + ret = gpio_direction_input(pin); + if (ret) + return ret; + + return 0; +} + static struct irq_domain_ops at91_gpio_ops = { .map = at91_gpio_irq_map, - .xlate = irq_domain_xlate_twocell, + .xlate = at91_gpio_irq_domain_xlate, }; static int at91_gpio_of_irq_setup(struct device_node *node,