Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 48919
b: refs/heads/master
c: 271f5ca
h: refs/heads/master
i:
  48917: 7e314d8
  48915: 1381f01
  48911: a78b2ec
v: v3
  • Loading branch information
Lennert Buytenhek authored and Russell King committed Feb 8, 2007
1 parent 704a78d commit 019f073
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 10 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4932e397be71370b95f555f87d3b424d2b5ca57b
refs/heads/master: 271f5ca638b322248c6bb0a797284886f39ccce6
25 changes: 16 additions & 9 deletions trunk/arch/arm/mach-ep93xx/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,8 @@ struct sys_timer ep93xx_timer = {
/*************************************************************************
* GPIO handling for EP93xx
*************************************************************************/
static unsigned char gpio_int_enable[3];
static unsigned char gpio_int_unmasked[3];
static unsigned char gpio_int_enabled[3];
static unsigned char gpio_int_type1[3];
static unsigned char gpio_int_type2[3];

Expand All @@ -162,17 +163,17 @@ static void update_gpio_int_params(int abf)
__raw_writeb(0, EP93XX_GPIO_A_INT_ENABLE);
__raw_writeb(gpio_int_type2[0], EP93XX_GPIO_A_INT_TYPE2);
__raw_writeb(gpio_int_type1[0], EP93XX_GPIO_A_INT_TYPE1);
__raw_writeb(gpio_int_enable[0], EP93XX_GPIO_A_INT_ENABLE);
__raw_writeb(gpio_int_unmasked[0] & gpio_int_enabled[0], EP93XX_GPIO_A_INT_ENABLE);
} else if (abf == 1) {
__raw_writeb(0, EP93XX_GPIO_B_INT_ENABLE);
__raw_writeb(gpio_int_type2[1], EP93XX_GPIO_B_INT_TYPE2);
__raw_writeb(gpio_int_type1[1], EP93XX_GPIO_B_INT_TYPE1);
__raw_writeb(gpio_int_enable[1], EP93XX_GPIO_B_INT_ENABLE);
__raw_writeb(gpio_int_unmasked[1] & gpio_int_enabled[1], EP93XX_GPIO_B_INT_ENABLE);
} else if (abf == 2) {
__raw_writeb(0, EP93XX_GPIO_F_INT_ENABLE);
__raw_writeb(gpio_int_type2[2], EP93XX_GPIO_F_INT_TYPE2);
__raw_writeb(gpio_int_type1[2], EP93XX_GPIO_F_INT_TYPE1);
__raw_writeb(gpio_int_enable[2], EP93XX_GPIO_F_INT_ENABLE);
__raw_writeb(gpio_int_unmasked[2] & gpio_int_enabled[2], EP93XX_GPIO_F_INT_ENABLE);
} else {
BUG();
}
Expand Down Expand Up @@ -200,11 +201,11 @@ void gpio_line_config(int line, int direction)
if (direction == GPIO_OUT) {
if (line >= 0 && line < 16) {
/* Port A/B. */
gpio_int_enable[line >> 3] &= ~(1 << (line & 7));
gpio_int_unmasked[line >> 3] &= ~(1 << (line & 7));
update_gpio_int_params(line >> 3);
} else if (line >= 40 && line < 48) {
/* Port F. */
gpio_int_enable[2] &= ~(1 << (line & 7));
gpio_int_unmasked[2] &= ~(1 << (line & 7));
update_gpio_int_params(2);
}

Expand Down Expand Up @@ -290,7 +291,7 @@ static void ep93xx_gpio_irq_mask_ack(unsigned int irq)
int line = irq - IRQ_EP93XX_GPIO(0);
int port = line >> 3;

gpio_int_enable[port] &= ~(1 << (line & 7));
gpio_int_unmasked[port] &= ~(1 << (line & 7));
update_gpio_int_params(port);

if (port == 0) {
Expand All @@ -307,7 +308,7 @@ static void ep93xx_gpio_irq_mask(unsigned int irq)
int line = irq - IRQ_EP93XX_GPIO(0);
int port = line >> 3;

gpio_int_enable[port] &= ~(1 << (line & 7));
gpio_int_unmasked[port] &= ~(1 << (line & 7));
update_gpio_int_params(port);
}

Expand All @@ -316,7 +317,7 @@ static void ep93xx_gpio_irq_unmask(unsigned int irq)
int line = irq - IRQ_EP93XX_GPIO(0);
int port = line >> 3;

gpio_int_enable[port] |= 1 << (line & 7);
gpio_int_unmasked[port] |= 1 << (line & 7);
update_gpio_int_params(port);
}

Expand All @@ -342,17 +343,23 @@ static int ep93xx_gpio_irq_type(unsigned int irq, unsigned int type)
line &= 7;

if (type & IRQT_RISING) {
gpio_int_enabled[port] |= 1 << line;
gpio_int_type1[port] |= 1 << line;
gpio_int_type2[port] |= 1 << line;
} else if (type & IRQT_FALLING) {
gpio_int_enabled[port] |= 1 << line;
gpio_int_type1[port] |= 1 << line;
gpio_int_type2[port] &= ~(1 << line);
} else if (type & IRQT_HIGH) {
gpio_int_enabled[port] |= 1 << line;
gpio_int_type1[port] &= ~(1 << line);
gpio_int_type2[port] |= 1 << line;
} else if (type & IRQT_LOW) {
gpio_int_enabled[port] |= 1 << line;
gpio_int_type1[port] &= ~(1 << line);
gpio_int_type2[port] &= ~(1 << line);
} else {
gpio_int_enabled[port] &= ~(1 << line);
}
update_gpio_int_params(port);

Expand Down

0 comments on commit 019f073

Please sign in to comment.