aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm2708/patches-3.10/0154-gpio-support-low-and-high-level-interrupts.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm2708/patches-3.10/0154-gpio-support-low-and-high-level-interrupts.patch')
-rw-r--r--target/linux/brcm2708/patches-3.10/0154-gpio-support-low-and-high-level-interrupts.patch120
1 files changed, 0 insertions, 120 deletions
diff --git a/target/linux/brcm2708/patches-3.10/0154-gpio-support-low-and-high-level-interrupts.patch b/target/linux/brcm2708/patches-3.10/0154-gpio-support-low-and-high-level-interrupts.patch
deleted file mode 100644
index bec567779e..0000000000
--- a/target/linux/brcm2708/patches-3.10/0154-gpio-support-low-and-high-level-interrupts.patch
+++ /dev/null
@@ -1,120 +0,0 @@
-From 504b5a3a5f492deccf35a3ed5e7b9a48a069ece2 Mon Sep 17 00:00:00 2001
-From: popcornmix <popcornmix@gmail.com>
-Date: Thu, 9 Jan 2014 16:05:20 +0000
-Subject: [PATCH 154/196] gpio: support low and high level interrupts
-
----
- arch/arm/mach-bcm2708/bcm2708_gpio.c | 52 +++++++++++++++++++++++++-----------
- 1 file changed, 37 insertions(+), 15 deletions(-)
-
-diff --git a/arch/arm/mach-bcm2708/bcm2708_gpio.c b/arch/arm/mach-bcm2708/bcm2708_gpio.c
-index 96fae74..1d93ad8 100644
---- a/arch/arm/mach-bcm2708/bcm2708_gpio.c
-+++ b/arch/arm/mach-bcm2708/bcm2708_gpio.c
-@@ -58,6 +58,8 @@ struct bcm2708_gpio {
- struct gpio_chip gc;
- unsigned long rising;
- unsigned long falling;
-+ unsigned long high;
-+ unsigned long low;
- };
-
- static int bcm2708_set_function(struct gpio_chip *gc, unsigned offset,
-@@ -145,20 +147,22 @@ static int bcm2708_gpio_irq_set_type(struct irq_data *d, unsigned type)
- unsigned irq = d->irq;
- struct bcm2708_gpio *gpio = irq_get_chip_data(irq);
-
-- if (type & ~(IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING))
-+ gpio->rising &= ~(1 << __bcm2708_irq_to_gpio(irq));
-+ gpio->falling &= ~(1 << __bcm2708_irq_to_gpio(irq));
-+ gpio->high &= ~(1 << __bcm2708_irq_to_gpio(irq));
-+ gpio->low &= ~(1 << __bcm2708_irq_to_gpio(irq));
-+
-+ if (type & ~(IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING | IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
- return -EINVAL;
-
-- if (type & IRQ_TYPE_EDGE_RISING) {
-+ if (type & IRQ_TYPE_EDGE_RISING)
- gpio->rising |= (1 << __bcm2708_irq_to_gpio(irq));
-- } else {
-- gpio->rising &= ~(1 << __bcm2708_irq_to_gpio(irq));
-- }
--
-- if (type & IRQ_TYPE_EDGE_FALLING) {
-+ if (type & IRQ_TYPE_EDGE_FALLING)
- gpio->falling |= (1 << __bcm2708_irq_to_gpio(irq));
-- } else {
-- gpio->falling &= ~(1 << __bcm2708_irq_to_gpio(irq));
-- }
-+ if (type & IRQ_TYPE_LEVEL_HIGH)
-+ gpio->high |= (1 << __bcm2708_irq_to_gpio(irq));
-+ if (type & IRQ_TYPE_LEVEL_LOW)
-+ gpio->low |= (1 << __bcm2708_irq_to_gpio(irq));
- return 0;
- }
-
-@@ -168,13 +172,17 @@ static void bcm2708_gpio_irq_mask(struct irq_data *d)
- struct bcm2708_gpio *gpio = irq_get_chip_data(irq);
- unsigned gn = __bcm2708_irq_to_gpio(irq);
- unsigned gb = gn / 32;
-- unsigned long rising = readl(gpio->base + GPIOREN(gb));
-+ unsigned long rising = readl(gpio->base + GPIOREN(gb));
- unsigned long falling = readl(gpio->base + GPIOFEN(gb));
-+ unsigned long high = readl(gpio->base + GPIOHEN(gb));
-+ unsigned long low = readl(gpio->base + GPIOLEN(gb));
-
- gn = gn % 32;
-
-- writel(rising & ~(1 << gn), gpio->base + GPIOREN(gb));
-+ writel(rising & ~(1 << gn), gpio->base + GPIOREN(gb));
- writel(falling & ~(1 << gn), gpio->base + GPIOFEN(gb));
-+ writel(high & ~(1 << gn), gpio->base + GPIOHEN(gb));
-+ writel(low & ~(1 << gn), gpio->base + GPIOLEN(gb));
- }
-
- static void bcm2708_gpio_irq_unmask(struct irq_data *d)
-@@ -183,24 +191,38 @@ static void bcm2708_gpio_irq_unmask(struct irq_data *d)
- struct bcm2708_gpio *gpio = irq_get_chip_data(irq);
- unsigned gn = __bcm2708_irq_to_gpio(irq);
- unsigned gb = gn / 32;
-- unsigned long rising = readl(gpio->base + GPIOREN(gb));
-+ unsigned long rising = readl(gpio->base + GPIOREN(gb));
- unsigned long falling = readl(gpio->base + GPIOFEN(gb));
-+ unsigned long high = readl(gpio->base + GPIOHEN(gb));
-+ unsigned long low = readl(gpio->base + GPIOLEN(gb));
-
- gn = gn % 32;
-
- writel(1 << gn, gpio->base + GPIOEDS(gb));
-
- if (gpio->rising & (1 << gn)) {
-- writel(rising | (1 << gn), gpio->base + GPIOREN(gb));
-+ writel(rising | (1 << gn), gpio->base + GPIOREN(gb));
- } else {
- writel(rising & ~(1 << gn), gpio->base + GPIOREN(gb));
- }
-
- if (gpio->falling & (1 << gn)) {
-- writel(falling | (1 << gn), gpio->base + GPIOFEN(gb));
-+ writel(falling | (1 << gn), gpio->base + GPIOFEN(gb));
- } else {
- writel(falling & ~(1 << gn), gpio->base + GPIOFEN(gb));
- }
-+
-+ if (gpio->high & (1 << gn)) {
-+ writel(high | (1 << gn), gpio->base + GPIOHEN(gb));
-+ } else {
-+ writel(high & ~(1 << gn), gpio->base + GPIOHEN(gb));
-+ }
-+
-+ if (gpio->low & (1 << gn)) {
-+ writel(low | (1 << gn), gpio->base + GPIOLEN(gb));
-+ } else {
-+ writel(low & ~(1 << gn), gpio->base + GPIOLEN(gb));
-+ }
- }
-
- static struct irq_chip bcm2708_irqchip = {
---
-1.9.1
-