Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 76086
b: refs/heads/master
c: e4f586f
h: refs/heads/master
v: v3
  • Loading branch information
David Brownell authored and Haavard Skinnemoen committed Jan 25, 2008
1 parent 8385df0 commit 10f3f72
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 12 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: e7ba176b47db2ed53f258a6b4fe9d9fc6fa437a9
refs/heads/master: e4f586f280bbfa05c68f99df2db981356ee30533
18 changes: 7 additions & 11 deletions trunk/arch/avr32/mach-at32ap/extint.c
Original file line number Diff line number Diff line change
Expand Up @@ -130,8 +130,11 @@ static int eic_set_irq_type(unsigned int irq, unsigned int flow_type)
eic_writel(eic, EDGE, edge);
eic_writel(eic, LEVEL, level);

if (flow_type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
if (flow_type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) {
flow_type |= IRQ_LEVEL;
__set_irq_handler_unlocked(irq, handle_level_irq);
} else
__set_irq_handler_unlocked(irq, handle_edge_irq);
desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL);
desc->status |= flow_type;
}
Expand All @@ -151,9 +154,8 @@ static struct irq_chip eic_chip = {
static void demux_eic_irq(unsigned int irq, struct irq_desc *desc)
{
struct eic *eic = desc->handler_data;
struct irq_desc *ext_desc;
unsigned long status, pending;
unsigned int i, ext_irq;
unsigned int i;

status = eic_readl(eic, ISR);
pending = status & eic_readl(eic, IMR);
Expand All @@ -162,12 +164,7 @@ static void demux_eic_irq(unsigned int irq, struct irq_desc *desc)
i = fls(pending) - 1;
pending &= ~(1 << i);

ext_irq = i + eic->first_irq;
ext_desc = irq_desc + ext_irq;
if (ext_desc->status & IRQ_LEVEL)
handle_level_irq(ext_irq, ext_desc);
else
handle_edge_irq(ext_irq, ext_desc);
generic_handle_irq(i + eic->first_irq);
}
}

Expand Down Expand Up @@ -236,9 +233,8 @@ static int __init eic_probe(struct platform_device *pdev)
eic->chip = &eic_chip;

for (i = 0; i < nr_irqs; i++) {
/* NOTE the handler we set here is ignored by the demux */
set_irq_chip_and_handler(eic->first_irq + i, &eic_chip,
handle_level_irq);
handle_edge_irq);
set_irq_chip_data(eic->first_irq + i, eic);
}

Expand Down

0 comments on commit 10f3f72

Please sign in to comment.