Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 231325
b: refs/heads/master
c: c1d065e
h: refs/heads/master
i:
  231323: 5c86218
v: v3
  • Loading branch information
Lennert Buytenhek committed Jan 13, 2011
1 parent 0303f0d commit 0ee271b
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 43 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: 6e8f54fad5b2e15b64595d6ededb316d713db102
refs/heads/master: c1d065e696b8a1e0486a25fa2a804da0d2d6d98c
55 changes: 31 additions & 24 deletions trunk/arch/arm/mach-ixp23xx/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -111,9 +111,9 @@ enum ixp23xx_irq_type {

static void ixp23xx_config_irq(unsigned int, enum ixp23xx_irq_type);

static int ixp23xx_irq_set_type(unsigned int irq, unsigned int type)
static int ixp23xx_irq_set_type(struct irq_data *d, unsigned int type)
{
int line = irq - IRQ_IXP23XX_GPIO6 + 6;
int line = d->irq - IRQ_IXP23XX_GPIO6 + 6;
u32 int_style;
enum ixp23xx_irq_type irq_type;
volatile u32 *int_reg;
Expand Down Expand Up @@ -149,7 +149,7 @@ static int ixp23xx_irq_set_type(unsigned int irq, unsigned int type)
return -EINVAL;
}

ixp23xx_config_irq(irq, irq_type);
ixp23xx_config_irq(d->irq, irq_type);

if (line >= 8) { /* pins 8-15 */
line -= 8;
Expand All @@ -173,9 +173,10 @@ static int ixp23xx_irq_set_type(unsigned int irq, unsigned int type)
return 0;
}

static void ixp23xx_irq_mask(unsigned int irq)
static void ixp23xx_irq_mask(struct irq_data *d)
{
volatile unsigned long *intr_reg;
unsigned int irq = d->irq;

if (irq >= 56)
irq += 8;
Expand All @@ -184,9 +185,9 @@ static void ixp23xx_irq_mask(unsigned int irq)
*intr_reg &= ~(1 << (irq % 32));
}

static void ixp23xx_irq_ack(unsigned int irq)
static void ixp23xx_irq_ack(struct irq_data *d)
{
int line = irq - IRQ_IXP23XX_GPIO6 + 6;
int line = d->irq - IRQ_IXP23XX_GPIO6 + 6;

if ((line < 6) || (line > 15))
return;
Expand All @@ -198,11 +199,12 @@ static void ixp23xx_irq_ack(unsigned int irq)
* Level triggered interrupts on GPIO lines can only be cleared when the
* interrupt condition disappears.
*/
static void ixp23xx_irq_level_unmask(unsigned int irq)
static void ixp23xx_irq_level_unmask(struct irq_data *d)
{
volatile unsigned long *intr_reg;
unsigned int irq = d->irq;

ixp23xx_irq_ack(irq);
ixp23xx_irq_ack(d);

if (irq >= 56)
irq += 8;
Expand All @@ -211,9 +213,10 @@ static void ixp23xx_irq_level_unmask(unsigned int irq)
*intr_reg |= (1 << (irq % 32));
}

static void ixp23xx_irq_edge_unmask(unsigned int irq)
static void ixp23xx_irq_edge_unmask(struct irq_data *d)
{
volatile unsigned long *intr_reg;
unsigned int irq = d->irq;

if (irq >= 56)
irq += 8;
Expand All @@ -223,26 +226,30 @@ static void ixp23xx_irq_edge_unmask(unsigned int irq)
}

static struct irq_chip ixp23xx_irq_level_chip = {
.ack = ixp23xx_irq_mask,
.mask = ixp23xx_irq_mask,
.unmask = ixp23xx_irq_level_unmask,
.set_type = ixp23xx_irq_set_type
.irq_ack = ixp23xx_irq_mask,
.irq_mask = ixp23xx_irq_mask,
.irq_unmask = ixp23xx_irq_level_unmask,
.irq_set_type = ixp23xx_irq_set_type
};

static struct irq_chip ixp23xx_irq_edge_chip = {
.ack = ixp23xx_irq_ack,
.mask = ixp23xx_irq_mask,
.unmask = ixp23xx_irq_edge_unmask,
.set_type = ixp23xx_irq_set_type
.irq_ack = ixp23xx_irq_ack,
.irq_mask = ixp23xx_irq_mask,
.irq_unmask = ixp23xx_irq_edge_unmask,
.irq_set_type = ixp23xx_irq_set_type
};

static void ixp23xx_pci_irq_mask(unsigned int irq)
static void ixp23xx_pci_irq_mask(struct irq_data *d)
{
unsigned int irq = d->irq;

*IXP23XX_PCI_XSCALE_INT_ENABLE &= ~(1 << (IRQ_IXP23XX_INTA + 27 - irq));
}

static void ixp23xx_pci_irq_unmask(unsigned int irq)
static void ixp23xx_pci_irq_unmask(struct irq_data *d)
{
unsigned int irq = d->irq;

*IXP23XX_PCI_XSCALE_INT_ENABLE |= (1 << (IRQ_IXP23XX_INTA + 27 - irq));
}

Expand All @@ -256,7 +263,7 @@ static void pci_handler(unsigned int irq, struct irq_desc *desc)

pci_interrupt = *IXP23XX_PCI_XSCALE_INT_STATUS;

desc->chip->ack(irq);
desc->irq_data.chip->irq_ack(&desc->irq_data);

/* See which PCI_INTA, or PCI_INTB interrupted */
if (pci_interrupt & (1 << 26)) {
Expand All @@ -269,13 +276,13 @@ static void pci_handler(unsigned int irq, struct irq_desc *desc)

generic_handle_irq(irqno);

desc->chip->unmask(irq);
desc->irq_data.chip->irq_unmask(&desc->irq_data);
}

static struct irq_chip ixp23xx_pci_irq_chip = {
.ack = ixp23xx_pci_irq_mask,
.mask = ixp23xx_pci_irq_mask,
.unmask = ixp23xx_pci_irq_unmask
.irq_ack = ixp23xx_pci_irq_mask,
.irq_mask = ixp23xx_pci_irq_mask,
.irq_unmask = ixp23xx_pci_irq_unmask
};

static void ixp23xx_config_irq(unsigned int irq, enum ixp23xx_irq_type type)
Expand Down
36 changes: 18 additions & 18 deletions trunk/arch/arm/mach-ixp23xx/ixdp2351.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,14 @@
/*
* IXDP2351 Interrupt Handling
*/
static void ixdp2351_inta_mask(unsigned int irq)
static void ixdp2351_inta_mask(struct irq_data *d)
{
*IXDP2351_CPLD_INTA_MASK_SET_REG = IXDP2351_INTA_IRQ_MASK(irq);
*IXDP2351_CPLD_INTA_MASK_SET_REG = IXDP2351_INTA_IRQ_MASK(d->irq);
}

static void ixdp2351_inta_unmask(unsigned int irq)
static void ixdp2351_inta_unmask(struct irq_data *d)
{
*IXDP2351_CPLD_INTA_MASK_CLR_REG = IXDP2351_INTA_IRQ_MASK(irq);
*IXDP2351_CPLD_INTA_MASK_CLR_REG = IXDP2351_INTA_IRQ_MASK(d->irq);
}

static void ixdp2351_inta_handler(unsigned int irq, struct irq_desc *desc)
Expand All @@ -64,7 +64,7 @@ static void ixdp2351_inta_handler(unsigned int irq, struct irq_desc *desc)
*IXDP2351_CPLD_INTA_STAT_REG & IXDP2351_INTA_IRQ_VALID;
int i;

desc->chip->mask(irq);
desc->irq_data.chip->irq_mask(&desc->irq_data);

for (i = 0; i < IXDP2351_INTA_IRQ_NUM; i++) {
if (ex_interrupt & (1 << i)) {
Expand All @@ -74,23 +74,23 @@ static void ixdp2351_inta_handler(unsigned int irq, struct irq_desc *desc)
}
}

desc->chip->unmask(irq);
desc->irq_data.chip->irq_unmask(&desc->irq_data);
}

static struct irq_chip ixdp2351_inta_chip = {
.ack = ixdp2351_inta_mask,
.mask = ixdp2351_inta_mask,
.unmask = ixdp2351_inta_unmask
.irq_ack = ixdp2351_inta_mask,
.irq_mask = ixdp2351_inta_mask,
.irq_unmask = ixdp2351_inta_unmask
};

static void ixdp2351_intb_mask(unsigned int irq)
static void ixdp2351_intb_mask(struct irq_data *d)
{
*IXDP2351_CPLD_INTB_MASK_SET_REG = IXDP2351_INTB_IRQ_MASK(irq);
*IXDP2351_CPLD_INTB_MASK_SET_REG = IXDP2351_INTB_IRQ_MASK(d->irq);
}

static void ixdp2351_intb_unmask(unsigned int irq)
static void ixdp2351_intb_unmask(struct irq_data *d)
{
*IXDP2351_CPLD_INTB_MASK_CLR_REG = IXDP2351_INTB_IRQ_MASK(irq);
*IXDP2351_CPLD_INTB_MASK_CLR_REG = IXDP2351_INTB_IRQ_MASK(d->irq);
}

static void ixdp2351_intb_handler(unsigned int irq, struct irq_desc *desc)
Expand All @@ -99,7 +99,7 @@ static void ixdp2351_intb_handler(unsigned int irq, struct irq_desc *desc)
*IXDP2351_CPLD_INTB_STAT_REG & IXDP2351_INTB_IRQ_VALID;
int i;

desc->chip->ack(irq);
desc->irq_data.chip->irq_ack(&desc->irq_data);

for (i = 0; i < IXDP2351_INTB_IRQ_NUM; i++) {
if (ex_interrupt & (1 << i)) {
Expand All @@ -109,13 +109,13 @@ static void ixdp2351_intb_handler(unsigned int irq, struct irq_desc *desc)
}
}

desc->chip->unmask(irq);
desc->irq_data.chip->irq_unmask(&desc->irq_data);
}

static struct irq_chip ixdp2351_intb_chip = {
.ack = ixdp2351_intb_mask,
.mask = ixdp2351_intb_mask,
.unmask = ixdp2351_intb_unmask
.irq_ack = ixdp2351_intb_mask,
.irq_mask = ixdp2351_intb_mask,
.irq_unmask = ixdp2351_intb_unmask
};

void __init ixdp2351_init_irq(void)
Expand Down

0 comments on commit 0ee271b

Please sign in to comment.