lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ADE657CA350FB648AAC2C43247A983F001F3883899A6@AUSP01VMBX24.collaborationhost.net>
Date:	Thu, 11 Aug 2011 12:48:24 -0500
From:	H Hartley Sweeten <hartleys@...ionengravers.com>
To:	Linus Walleij <linus.walleij@...aro.org>
CC:	Ryan Mallon <rmallon@...il.com>,
	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
	Grant Likely <grant.likely@...retlab.ca>,
	Lee Jones <lee.jones@...aro.org>,
	"linux-arm-kernel@...ts.infradead.org" 
	<linux-arm-kernel@...ts.infradead.org>,
	Linus Walleij <linus.walleij@...ricsson.com>
Subject: RE: [PATCH 10/19] mach-ep93xx: break out GPIO driver specifics

On Thursday, August 11, 2011 10:16 AM, H Hartley Sweeten wrote:
> On Thursday, August 11, 2011 5:29 AM, Linus Walleij wrote:
>> On Wed, Aug 10, 2011 at 7:23 PM, H Hartley Sweeten wrote:
>>> On Wednesday, August 10, 2011 5:18 AM, Linus Walleij wrote:
>>>> +#include "gpio-ep93xx.h"
>>>
>>> Why this form?  Isn't <mach/gpio-ep93xx.h> the preferred form?
>>
>> This is to make the inclusion very local. The only reason it is
>> included at all is to get EP93XX_GPIO_LINE_MAX_IRQ,
>> nothing else.
>
> Hmm..  It is needed for gpio_to_irq()...
>
> The only other user of that define is drivers/gpio/gpio-ep93xx.c.
>
> To follow the intentions of this patch it would be nice to remove this 
> include from <mach/gpio.h> and add <mach/gpio-ep93xx.h> to the gpio driver.
> But, any user of gpio_to_irq() whould also have to include <mach/gpio-ep93xx.h>
> also.
>
> The other solution is to hook up the gpiolib to_irq callback in
> gpio-ep93xx and do:
>
> #define gpio_to_irq	__gpio_to_irq
>
> Maybe this is a better option?

BTW, I have a patch for this if you want.

----

gpio-ep93xx: hookup the to_irq callback in the driver

Remove the ep93xx machine specific dependencies for gpio_to_irq() by
hooking up the callback in the driver and using __gpio_to_irq.

Signed-off-by: H Hartley Sweeten <hsweeten@...ionengravers.com>

---

diff --git a/arch/arm/mach-ep93xx/include/mach/gpio.h b/arch/arm/mach-ep93xx/include/mach/gpio.h
index 071f676..76c68fa 100644
--- a/arch/arm/mach-ep93xx/include/mach/gpio.h
+++ b/arch/arm/mach-ep93xx/include/mach/gpio.h
@@ -99,14 +99,7 @@
 /* maximum value for irq capable line identifiers */
 #define EP93XX_GPIO_LINE_MAX_IRQ	EP93XX_GPIO_LINE_F(7)
 
-/*
- * Map GPIO A0..A7  (0..7)  to irq 64..71,
- *          B0..B7  (7..15) to irq 72..79, and
- *          F0..F7 (16..24) to irq 80..87.
- */
-#define gpio_to_irq(gpio)	\
-	(((gpio) <= EP93XX_GPIO_LINE_MAX_IRQ) ? (64 + (gpio)) : -EINVAL)
-
+#define gpio_to_irq		__gpio_to_irq
 #define irq_to_gpio(irq)	((irq) - gpio_to_irq(0))
 
 #endif
diff --git a/drivers/gpio/gpio-ep93xx.c b/drivers/gpio/gpio-ep93xx.c
index 468b27d..6a56895 100644
--- a/drivers/gpio/gpio-ep93xx.c
+++ b/drivers/gpio/gpio-ep93xx.c
@@ -308,6 +308,21 @@ static int ep93xx_gpio_set_debounce(struct gpio_chip *chip,
 	return 0;
 }
 
+/*
+ * Map GPIO A0..A7  (0..7)  to irq 64..71,
+ *          B0..B7  (7..15) to irq 72..79, and
+ *          F0..F7 (16..24) to irq 80..87.
+ */
+static int ep93xx_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
+{
+	int gpio = chip->base + offset;
+
+	if (gpio > EP93XX_GPIO_LINE_MAX_IRQ)
+		return -EINVAL;
+
+	return 64 + gpio;
+}
+
 static int ep93xx_gpio_add_bank(struct bgpio_chip *bgc, struct device *dev,
 	void __iomem *mmio_base, struct ep93xx_gpio_bank *bank)
 {
@@ -322,8 +337,10 @@ static int ep93xx_gpio_add_bank(struct bgpio_chip *bgc, struct device *dev,
 	bgc->gc.label = bank->label;
 	bgc->gc.base = bank->base;
 
-	if (bank->has_debounce)
+	if (bank->has_debounce) {
 		bgc->gc.set_debounce = ep93xx_gpio_set_debounce;
+		bgc->gc.to_irq = ep93xx_gpio_to_irq;
+	}
 
 	return gpiochip_add(&bgc->gc);
 }
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ