Commit 64c4813d authored by Linus Torvalds's avatar Linus Torvalds

Merge master.kernel.org:/home/rmk/linux-2.6-arm

parents babf68de 664399e1
...@@ -177,7 +177,7 @@ static void locomo_handler(unsigned int irq, struct irqdesc *desc, ...@@ -177,7 +177,7 @@ static void locomo_handler(unsigned int irq, struct irqdesc *desc,
d = irq_desc + irq; d = irq_desc + irq;
for (i = 0; i <= 3; i++, d++, irq++) { for (i = 0; i <= 3; i++, d++, irq++) {
if (req & (0x0100 << i)) { if (req & (0x0100 << i)) {
d->handle(irq, d, regs); desc_handle_irq(irq, d, regs);
} }
} }
...@@ -220,7 +220,7 @@ static void locomo_key_handler(unsigned int irq, struct irqdesc *desc, ...@@ -220,7 +220,7 @@ static void locomo_key_handler(unsigned int irq, struct irqdesc *desc,
if (locomo_readl(mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC) & 0x0001) { if (locomo_readl(mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC) & 0x0001) {
d = irq_desc + LOCOMO_IRQ_KEY_START; d = irq_desc + LOCOMO_IRQ_KEY_START;
d->handle(LOCOMO_IRQ_KEY_START, d, regs); desc_handle_irq(LOCOMO_IRQ_KEY_START, d, regs);
} }
} }
...@@ -273,7 +273,7 @@ static void locomo_gpio_handler(unsigned int irq, struct irqdesc *desc, ...@@ -273,7 +273,7 @@ static void locomo_gpio_handler(unsigned int irq, struct irqdesc *desc,
d = irq_desc + LOCOMO_IRQ_GPIO_START; d = irq_desc + LOCOMO_IRQ_GPIO_START;
for (i = 0; i <= 15; i++, irq++, d++) { for (i = 0; i <= 15; i++, irq++, d++) {
if (req & (0x0001 << i)) { if (req & (0x0001 << i)) {
d->handle(irq, d, regs); desc_handle_irq(irq, d, regs);
} }
} }
} }
...@@ -328,7 +328,7 @@ static void locomo_lt_handler(unsigned int irq, struct irqdesc *desc, ...@@ -328,7 +328,7 @@ static void locomo_lt_handler(unsigned int irq, struct irqdesc *desc,
if (locomo_readl(mapbase + LOCOMO_LTINT) & 0x0001) { if (locomo_readl(mapbase + LOCOMO_LTINT) & 0x0001) {
d = irq_desc + LOCOMO_IRQ_LT_START; d = irq_desc + LOCOMO_IRQ_LT_START;
d->handle(LOCOMO_IRQ_LT_START, d, regs); desc_handle_irq(LOCOMO_IRQ_LT_START, d, regs);
} }
} }
...@@ -379,7 +379,7 @@ static void locomo_spi_handler(unsigned int irq, struct irqdesc *desc, ...@@ -379,7 +379,7 @@ static void locomo_spi_handler(unsigned int irq, struct irqdesc *desc,
for (i = 0; i <= 3; i++, irq++, d++) { for (i = 0; i <= 3; i++, irq++, d++) {
if (req & (0x0001 << i)) { if (req & (0x0001 << i)) {
d->handle(irq, d, regs); desc_handle_irq(irq, d, regs);
} }
} }
} }
...@@ -651,15 +651,15 @@ __locomo_probe(struct device *me, struct resource *mem, int irq) ...@@ -651,15 +651,15 @@ __locomo_probe(struct device *me, struct resource *mem, int irq)
return ret; return ret;
} }
static void __locomo_remove(struct locomo *lchip) static int locomo_remove_child(struct device *dev, void *data)
{ {
struct list_head *l, *n; device_unregister(dev);
return 0;
list_for_each_safe(l, n, &lchip->dev->children) { }
struct device *d = list_to_dev(l);
device_unregister(d); static void __locomo_remove(struct locomo *lchip)
} {
device_for_each_child(lchip->dev, NULL, locomo_remove_child);
if (lchip->irq != NO_IRQ) { if (lchip->irq != NO_IRQ) {
set_irq_chained_handler(lchip->irq, NULL); set_irq_chained_handler(lchip->irq, NULL);
......
...@@ -268,8 +268,8 @@ static struct irqchip sa1111_low_chip = { ...@@ -268,8 +268,8 @@ static struct irqchip sa1111_low_chip = {
.mask = sa1111_mask_lowirq, .mask = sa1111_mask_lowirq,
.unmask = sa1111_unmask_lowirq, .unmask = sa1111_unmask_lowirq,
.retrigger = sa1111_retrigger_lowirq, .retrigger = sa1111_retrigger_lowirq,
.type = sa1111_type_lowirq, .set_type = sa1111_type_lowirq,
.wake = sa1111_wake_lowirq, .set_wake = sa1111_wake_lowirq,
}; };
static void sa1111_mask_highirq(unsigned int irq) static void sa1111_mask_highirq(unsigned int irq)
...@@ -364,8 +364,8 @@ static struct irqchip sa1111_high_chip = { ...@@ -364,8 +364,8 @@ static struct irqchip sa1111_high_chip = {
.mask = sa1111_mask_highirq, .mask = sa1111_mask_highirq,
.unmask = sa1111_unmask_highirq, .unmask = sa1111_unmask_highirq,
.retrigger = sa1111_retrigger_highirq, .retrigger = sa1111_retrigger_highirq,
.type = sa1111_type_highirq, .set_type = sa1111_type_highirq,
.wake = sa1111_wake_highirq, .set_wake = sa1111_wake_highirq,
}; };
static void sa1111_setup_irq(struct sa1111 *sachip) static void sa1111_setup_irq(struct sa1111 *sachip)
......
...@@ -585,7 +585,7 @@ ecard_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) ...@@ -585,7 +585,7 @@ ecard_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
if (pending) { if (pending) {
struct irqdesc *d = irq_desc + ec->irq; struct irqdesc *d = irq_desc + ec->irq;
d->handle(ec->irq, d, regs); desc_handle_irq(ec->irq, d, regs);
called ++; called ++;
} }
} }
...@@ -632,7 +632,7 @@ ecard_irqexp_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *reg ...@@ -632,7 +632,7 @@ ecard_irqexp_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *reg
* Serial cards should go in 0/1, ethernet/scsi in 2/3 * Serial cards should go in 0/1, ethernet/scsi in 2/3
* otherwise you will lose serial data at high speeds! * otherwise you will lose serial data at high speeds!
*/ */
d->handle(ec->irq, d, regs); desc_handle_irq(ec->irq, d, regs);
} else { } else {
printk(KERN_WARNING "card%d: interrupt from unclaimed " printk(KERN_WARNING "card%d: interrupt from unclaimed "
"card???\n", slot); "card???\n", slot);
......
...@@ -207,8 +207,8 @@ void enable_irq_wake(unsigned int irq) ...@@ -207,8 +207,8 @@ void enable_irq_wake(unsigned int irq)
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&irq_controller_lock, flags); spin_lock_irqsave(&irq_controller_lock, flags);
if (desc->chip->wake) if (desc->chip->set_wake)
desc->chip->wake(irq, 1); desc->chip->set_wake(irq, 1);
spin_unlock_irqrestore(&irq_controller_lock, flags); spin_unlock_irqrestore(&irq_controller_lock, flags);
} }
EXPORT_SYMBOL(enable_irq_wake); EXPORT_SYMBOL(enable_irq_wake);
...@@ -219,8 +219,8 @@ void disable_irq_wake(unsigned int irq) ...@@ -219,8 +219,8 @@ void disable_irq_wake(unsigned int irq)
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&irq_controller_lock, flags); spin_lock_irqsave(&irq_controller_lock, flags);
if (desc->chip->wake) if (desc->chip->set_wake)
desc->chip->wake(irq, 0); desc->chip->set_wake(irq, 0);
spin_unlock_irqrestore(&irq_controller_lock, flags); spin_unlock_irqrestore(&irq_controller_lock, flags);
} }
EXPORT_SYMBOL(disable_irq_wake); EXPORT_SYMBOL(disable_irq_wake);
...@@ -517,7 +517,7 @@ static void do_pending_irqs(struct pt_regs *regs) ...@@ -517,7 +517,7 @@ static void do_pending_irqs(struct pt_regs *regs)
list_for_each_safe(l, n, &head) { list_for_each_safe(l, n, &head) {
desc = list_entry(l, struct irqdesc, pend); desc = list_entry(l, struct irqdesc, pend);
list_del_init(&desc->pend); list_del_init(&desc->pend);
desc->handle(desc - irq_desc, desc, regs); desc_handle_irq(desc - irq_desc, desc, regs);
} }
/* /*
...@@ -545,7 +545,7 @@ asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) ...@@ -545,7 +545,7 @@ asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs)
irq_enter(); irq_enter();
spin_lock(&irq_controller_lock); spin_lock(&irq_controller_lock);
desc->handle(irq, desc, regs); desc_handle_irq(irq, desc, regs);
/* /*
* Now re-run any pending interrupts. * Now re-run any pending interrupts.
...@@ -624,9 +624,9 @@ int set_irq_type(unsigned int irq, unsigned int type) ...@@ -624,9 +624,9 @@ int set_irq_type(unsigned int irq, unsigned int type)
} }
desc = irq_desc + irq; desc = irq_desc + irq;
if (desc->chip->type) { if (desc->chip->set_type) {
spin_lock_irqsave(&irq_controller_lock, flags); spin_lock_irqsave(&irq_controller_lock, flags);
ret = desc->chip->type(irq, type); ret = desc->chip->set_type(irq, type);
spin_unlock_irqrestore(&irq_controller_lock, flags); spin_unlock_irqrestore(&irq_controller_lock, flags);
} }
...@@ -846,8 +846,8 @@ unsigned long probe_irq_on(void) ...@@ -846,8 +846,8 @@ unsigned long probe_irq_on(void)
irq_desc[i].probing = 1; irq_desc[i].probing = 1;
irq_desc[i].triggered = 0; irq_desc[i].triggered = 0;
if (irq_desc[i].chip->type) if (irq_desc[i].chip->set_type)
irq_desc[i].chip->type(i, IRQT_PROBE); irq_desc[i].chip->set_type(i, IRQT_PROBE);
irq_desc[i].chip->unmask(i); irq_desc[i].chip->unmask(i);
irqs += 1; irqs += 1;
} }
......
...@@ -110,7 +110,7 @@ int __cpuinit __cpu_up(unsigned int cpu) ...@@ -110,7 +110,7 @@ int __cpuinit __cpu_up(unsigned int cpu)
* We need to tell the secondary core where to find * We need to tell the secondary core where to find
* its stack and the page tables. * its stack and the page tables.
*/ */
secondary_data.stack = (void *)idle->thread_info + THREAD_SIZE - 8; secondary_data.stack = (void *)idle->thread_info + THREAD_START_SP;
secondary_data.pgdir = virt_to_phys(pgd); secondary_data.pgdir = virt_to_phys(pgd);
wmb(); wmb();
......
...@@ -95,7 +95,7 @@ isa_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) ...@@ -95,7 +95,7 @@ isa_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
} }
desc = irq_desc + isa_irq; desc = irq_desc + isa_irq;
desc->handle(isa_irq, desc, regs); desc_handle_irq(isa_irq, desc, regs);
} }
static struct irqaction irq_cascade = { .handler = no_action, .name = "cascade", }; static struct irqaction irq_cascade = { .handler = no_action, .name = "cascade", };
......
...@@ -108,7 +108,7 @@ h720x_gpio_handler(unsigned int mask, unsigned int irq, ...@@ -108,7 +108,7 @@ h720x_gpio_handler(unsigned int mask, unsigned int irq,
while (mask) { while (mask) {
if (mask & 1) { if (mask & 1) {
IRQDBG("handling irq %d\n", irq); IRQDBG("handling irq %d\n", irq);
desc->handle(irq, desc, regs); desc_handle_irq(irq, desc, regs);
} }
irq++; irq++;
desc++; desc++;
......
...@@ -126,7 +126,7 @@ h7202_timerx_demux_handler(unsigned int irq_unused, struct irqdesc *desc, ...@@ -126,7 +126,7 @@ h7202_timerx_demux_handler(unsigned int irq_unused, struct irqdesc *desc,
desc = irq_desc + irq; desc = irq_desc + irq;
while (mask) { while (mask) {
if (mask & 1) if (mask & 1)
desc->handle(irq, desc, regs); desc_handle_irq(irq, desc, regs);
irq++; irq++;
desc++; desc++;
mask >>= 1; mask >>= 1;
......
...@@ -152,7 +152,7 @@ imx_gpio_handler(unsigned int mask, unsigned int irq, ...@@ -152,7 +152,7 @@ imx_gpio_handler(unsigned int mask, unsigned int irq,
while (mask) { while (mask) {
if (mask & 1) { if (mask & 1) {
DEBUG_IRQ("handling irq %d\n", irq); DEBUG_IRQ("handling irq %d\n", irq);
desc->handle(irq, desc, regs); desc_handle_irq(irq, desc, regs);
} }
irq++; irq++;
desc++; desc++;
...@@ -214,7 +214,7 @@ static struct irqchip imx_gpio_chip = { ...@@ -214,7 +214,7 @@ static struct irqchip imx_gpio_chip = {
.ack = imx_gpio_ack_irq, .ack = imx_gpio_ack_irq,
.mask = imx_gpio_mask_irq, .mask = imx_gpio_mask_irq,
.unmask = imx_gpio_unmask_irq, .unmask = imx_gpio_unmask_irq,
.type = imx_gpio_irq_type, .set_type = imx_gpio_irq_type,
}; };
void __init void __init
......
...@@ -170,7 +170,7 @@ sic_handle_irq(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) ...@@ -170,7 +170,7 @@ sic_handle_irq(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
irq += IRQ_SIC_START; irq += IRQ_SIC_START;
desc = irq_desc + irq; desc = irq_desc + irq;
desc->handle(irq, desc, regs); desc_handle_irq(irq, desc, regs);
} while (status); } while (status);
} }
......
...@@ -317,7 +317,7 @@ static void ixp2000_GPIO_irq_handler(unsigned int irq, struct irqdesc *desc, str ...@@ -317,7 +317,7 @@ static void ixp2000_GPIO_irq_handler(unsigned int irq, struct irqdesc *desc, str
for (i = 0; i <= 7; i++) { for (i = 0; i <= 7; i++) {
if (status & (1<<i)) { if (status & (1<<i)) {
desc = irq_desc + i + IRQ_IXP2000_GPIO0; desc = irq_desc + i + IRQ_IXP2000_GPIO0;
desc->handle(i + IRQ_IXP2000_GPIO0, desc, regs); desc_handle_irq(i + IRQ_IXP2000_GPIO0, desc, regs);
} }
} }
} }
...@@ -380,10 +380,10 @@ static void ixp2000_GPIO_irq_unmask(unsigned int irq) ...@@ -380,10 +380,10 @@ static void ixp2000_GPIO_irq_unmask(unsigned int irq)
} }
static struct irqchip ixp2000_GPIO_irq_chip = { static struct irqchip ixp2000_GPIO_irq_chip = {
.type = ixp2000_GPIO_irq_type, .ack = ixp2000_GPIO_irq_mask_ack,
.ack = ixp2000_GPIO_irq_mask_ack, .mask = ixp2000_GPIO_irq_mask,
.mask = ixp2000_GPIO_irq_mask, .unmask = ixp2000_GPIO_irq_unmask
.unmask = ixp2000_GPIO_irq_unmask .set_type = ixp2000_GPIO_irq_type,
}; };
static void ixp2000_pci_irq_mask(unsigned int irq) static void ixp2000_pci_irq_mask(unsigned int irq)
......
...@@ -133,7 +133,7 @@ static void ixdp2x00_irq_handler(unsigned int irq, struct irqdesc *desc, struct ...@@ -133,7 +133,7 @@ static void ixdp2x00_irq_handler(unsigned int irq, struct irqdesc *desc, struct
struct irqdesc *cpld_desc; struct irqdesc *cpld_desc;
int cpld_irq = IXP2000_BOARD_IRQ(0) + i; int cpld_irq = IXP2000_BOARD_IRQ(0) + i;
cpld_desc = irq_desc + cpld_irq; cpld_desc = irq_desc + cpld_irq;
cpld_desc->handle(cpld_irq, cpld_desc, regs); desc_handle_irq(cpld_irq, cpld_desc, regs);
} }
} }
......
...@@ -82,7 +82,7 @@ static void ixdp2x01_irq_handler(unsigned int irq, struct irqdesc *desc, struct ...@@ -82,7 +82,7 @@ static void ixdp2x01_irq_handler(unsigned int irq, struct irqdesc *desc, struct
struct irqdesc *cpld_desc; struct irqdesc *cpld_desc;
int cpld_irq = IXP2000_BOARD_IRQ(0) + i; int cpld_irq = IXP2000_BOARD_IRQ(0) + i;
cpld_desc = irq_desc + cpld_irq; cpld_desc = irq_desc + cpld_irq;
cpld_desc->handle(cpld_irq, cpld_desc, regs); desc_handle_irq(cpld_irq, cpld_desc, regs);
} }
} }
......
...@@ -13,4 +13,4 @@ extern struct sys_timer lh7a40x_timer; ...@@ -13,4 +13,4 @@ extern struct sys_timer lh7a40x_timer;
extern void lh7a400_init_irq (void); extern void lh7a400_init_irq (void);
extern void lh7a404_init_irq (void); extern void lh7a404_init_irq (void);
#define IRQ_DISPATCH(irq) irq_desc[irq].handle ((irq), &irq_desc[irq], regs) #define IRQ_DISPATCH(irq) desc_handle_irq((irq),(irq_desc + irq), regs)
...@@ -102,7 +102,7 @@ void innovator_fpga_IRQ_demux(unsigned int irq, struct irqdesc *desc, ...@@ -102,7 +102,7 @@ void innovator_fpga_IRQ_demux(unsigned int irq, struct irqdesc *desc,
fpga_irq++, stat >>= 1) { fpga_irq++, stat >>= 1) {
if (stat & 1) { if (stat & 1) {
d = irq_desc + fpga_irq; d = irq_desc + fpga_irq;
d->handle(fpga_irq, d, regs); desc_handle_irq(fpga_irq, d, regs);
} }
} }
} }
......
...@@ -133,7 +133,7 @@ static struct irqchip pxa_low_gpio_chip = { ...@@ -133,7 +133,7 @@ static struct irqchip pxa_low_gpio_chip = {
.ack = pxa_ack_low_gpio, .ack = pxa_ack_low_gpio,
.mask = pxa_mask_low_irq, .mask = pxa_mask_low_irq,
.unmask = pxa_unmask_low_irq, .unmask = pxa_unmask_low_irq,
.type = pxa_gpio_irq_type, .set_type = pxa_gpio_irq_type,
}; };
/* /*
...@@ -157,7 +157,7 @@ static void pxa_gpio_demux_handler(unsigned int irq, struct irqdesc *desc, ...@@ -157,7 +157,7 @@ static void pxa_gpio_demux_handler(unsigned int irq, struct irqdesc *desc,
mask >>= 2; mask >>= 2;
do { do {
if (mask & 1) if (mask & 1)
desc->handle(irq, desc, regs); desc_handle_irq(irq, desc, regs);
irq++; irq++;
desc++; desc++;
mask >>= 1; mask >>= 1;
...@@ -172,7 +172,7 @@ static void pxa_gpio_demux_handler(unsigned int irq, struct irqdesc *desc, ...@@ -172,7 +172,7 @@ static void pxa_gpio_demux_handler(unsigned int irq, struct irqdesc *desc,
desc = irq_desc + irq; desc = irq_desc + irq;
do { do {
if (mask & 1) if (mask & 1)
desc->handle(irq, desc, regs); desc_handle_irq(irq, desc, regs);
irq++; irq++;
desc++; desc++;
mask >>= 1; mask >>= 1;
...@@ -187,7 +187,7 @@ static void pxa_gpio_demux_handler(unsigned int irq, struct irqdesc *desc, ...@@ -187,7 +187,7 @@ static void pxa_gpio_demux_handler(unsigned int irq, struct irqdesc *desc,
desc = irq_desc + irq; desc = irq_desc + irq;
do { do {
if (mask & 1) if (mask & 1)
desc->handle(irq, desc, regs); desc_handle_irq(irq, desc, regs);
irq++; irq++;
desc++; desc++;
mask >>= 1; mask >>= 1;
...@@ -203,7 +203,7 @@ static void pxa_gpio_demux_handler(unsigned int irq, struct irqdesc *desc, ...@@ -203,7 +203,7 @@ static void pxa_gpio_demux_handler(unsigned int irq, struct irqdesc *desc,
desc = irq_desc + irq; desc = irq_desc + irq;
do { do {
if (mask & 1) if (mask & 1)
desc->handle(irq, desc, regs); desc_handle_irq(irq, desc, regs);
irq++; irq++;
desc++; desc++;
mask >>= 1; mask >>= 1;
...@@ -241,7 +241,7 @@ static struct irqchip pxa_muxed_gpio_chip = { ...@@ -241,7 +241,7 @@ static struct irqchip pxa_muxed_gpio_chip = {
.ack = pxa_ack_muxed_gpio, .ack = pxa_ack_muxed_gpio,
.mask = pxa_mask_muxed_gpio, .mask = pxa_mask_muxed_gpio,
.unmask = pxa_unmask_muxed_gpio, .unmask = pxa_unmask_muxed_gpio,
.type = pxa_gpio_irq_type, .set_type = pxa_gpio_irq_type,
}; };
......
...@@ -84,7 +84,7 @@ static void lubbock_irq_handler(unsigned int irq, struct irqdesc *desc, ...@@ -84,7 +84,7 @@ static void lubbock_irq_handler(unsigned int irq, struct irqdesc *desc,
if (likely(pending)) { if (likely(pending)) {
irq = LUBBOCK_IRQ(0) + __ffs(pending); irq = LUBBOCK_IRQ(0) + __ffs(pending);
desc = irq_desc + irq; desc = irq_desc + irq;
desc->handle(irq, desc, regs); desc_handle_irq(irq, desc, regs);
} }
pending = LUB_IRQ_SET_CLR & lubbock_irq_enabled; pending = LUB_IRQ_SET_CLR & lubbock_irq_enabled;
} while (pending); } while (pending);
......
...@@ -72,7 +72,7 @@ static void mainstone_irq_handler(unsigned int irq, struct irqdesc *desc, ...@@ -72,7 +72,7 @@ static void mainstone_irq_handler(unsigned int irq, struct irqdesc *desc,
if (likely(pending)) { if (likely(pending)) {
irq = MAINSTONE_IRQ(0) + __ffs(pending); irq = MAINSTONE_IRQ(0) + __ffs(pending);
desc = irq_desc + irq; desc = irq_desc + irq;
desc->handle(irq, desc, regs); desc_handle_irq(irq, desc, regs);
} }
pending = MST_INTSETCLR & mainstone_irq_enabled; pending = MST_INTSETCLR & mainstone_irq_enabled;
} while (pending); } while (pending);
......
...@@ -124,7 +124,7 @@ bast_irq_pc104_demux(unsigned int irq, ...@@ -124,7 +124,7 @@ bast_irq_pc104_demux(unsigned int irq,
irqno = bast_pc104_irqs[i]; irqno = bast_pc104_irqs[i];
desc = irq_desc + irqno; desc = irq_desc + irqno;
desc->handle(irqno, desc, regs); desc_handle_irq(irqno, desc, regs);
} }
stat >>= 1; stat >>= 1;
......
...@@ -184,14 +184,14 @@ struct irqchip s3c_irq_level_chip = { ...@@ -184,14 +184,14 @@ struct irqchip s3c_irq_level_chip = {
.ack = s3c_irq_maskack, .ack = s3c_irq_maskack,
.mask = s3c_irq_mask, .mask = s3c_irq_mask,
.unmask = s3c_irq_unmask, .unmask = s3c_irq_unmask,
.wake = s3c_irq_wake .set_wake = s3c_irq_wake
}; };
static struct irqchip s3c_irq_chip = { static struct irqchip s3c_irq_chip = {
.ack = s3c_irq_ack, .ack = s3c_irq_ack,
.mask = s3c_irq_mask, .mask = s3c_irq_mask,
.unmask = s3c_irq_unmask, .unmask = s3c_irq_unmask,
.wake = s3c_irq_wake .set_wake = s3c_irq_wake
}; };
/* S3C2410_EINTMASK /* S3C2410_EINTMASK
...@@ -350,16 +350,16 @@ static struct irqchip s3c_irqext_chip = { ...@@ -350,16 +350,16 @@ static struct irqchip s3c_irqext_chip = {
.mask = s3c_irqext_mask, .mask = s3c_irqext_mask,
.unmask = s3c_irqext_unmask, .unmask = s3c_irqext_unmask,
.ack = s3c_irqext_ack, .ack = s3c_irqext_ack,
.type = s3c_irqext_type, .set_type = s3c_irqext_type,
.wake = s3c_irqext_wake .set_wake = s3c_irqext_wake
}; };
static struct irqchip s3c_irq_eint0t4 = { static struct irqchip s3c_irq_eint0t4 = {
.ack = s3c_irq_ack, .ack = s3c_irq_ack,
.mask = s3c_irq_mask, .mask = s3c_irq_mask,
.unmask = s3c_irq_unmask, .unmask = s3c_irq_unmask,
.wake = s3c_irq_wake, .set_wake = s3c_irq_wake,
.type = s3c_irqext_type, .set_type = s3c_irqext_type,
}; };
/* mask values for the parent registers for each of the interrupt types */ /* mask values for the parent registers for each of the interrupt types */
...@@ -496,11 +496,11 @@ static void s3c_irq_demux_adc(unsigned int irq, ...@@ -496,11 +496,11 @@ static void s3c_irq_demux_adc(unsigned int irq,
if (subsrc != 0) { if (subsrc != 0) {
if (subsrc & 1) { if (subsrc & 1) {
mydesc = irq_desc + IRQ_TC; mydesc = irq_desc + IRQ_TC;
mydesc->handle( IRQ_TC, mydesc, regs); desc_handle_irq(IRQ_TC, mydesc, regs);
} }
if (subsrc & 2) { if (subsrc & 2) {
mydesc = irq_desc + IRQ_ADC; mydesc = irq_desc + IRQ_ADC;
mydesc->handle(IRQ_ADC, mydesc, regs); desc_handle_irq(IRQ_ADC, mydesc, regs);
} }
} }
} }
...@@ -529,17 +529,17 @@ static void s3c_irq_demux_uart(unsigned int start, ...@@ -529,17 +529,17 @@ static void s3c_irq_demux_uart(unsigned int start,
desc = irq_desc + start; desc = irq_desc + start;
if (subsrc & 1) if (subsrc & 1)
desc->handle(start, desc, regs); desc_handle_irq(start, desc, regs);
desc++; desc++;
if (subsrc & 2) if (subsrc & 2)
desc->handle(start+1, desc, regs); desc_handle_irq(start+1, desc, regs);
desc++; desc++;
if (subsrc & 4) if (subsrc & 4)
desc->handle(start+2, desc, regs); desc_handle_irq(start+2, desc, regs);
} }
} }
......
...@@ -585,14 +585,16 @@ static int s3c2410_pm_enter(suspend_state_t state) ...@@ -585,14 +585,16 @@ static int s3c2410_pm_enter(suspend_state_t state)
s3c2410_pm_check_store(); s3c2410_pm_check_store();
// need to make some form of time-delta
/* send the cpu to sleep... */ /* send the cpu to sleep... */
__raw_writel(0x00, S3C2410_CLKCON); /* turn off clocks over sleep */ __raw_writel(0x00, S3C2410_CLKCON); /* turn off clocks over sleep */
s3c2410_cpu_suspend(regs_save); s3c2410_cpu_suspend(regs_save);
/* restore the cpu state */
cpu_init();
/* unset the return-from-sleep flag, to ensure reset */ /* unset the return-from-sleep flag, to ensure reset */
tmp = __raw_readl(S3C2410_GSTATUS2); tmp = __raw_readl(S3C2410_GSTATUS2);
......
...@@ -64,11 +64,11 @@ static void s3c_irq_demux_wdtac97(unsigned int irq, ...@@ -64,11 +64,11 @@ static void s3c_irq_demux_wdtac97(unsigned int irq,
if (subsrc != 0) { if (subsrc != 0) {
if (subsrc & 1) { if (subsrc & 1) {
mydesc = irq_desc + IRQ_S3C2440_WDT; mydesc = irq_desc + IRQ_S3C2440_WDT;
mydesc->handle( IRQ_S3C2440_WDT, mydesc, regs); desc_handle_irq(IRQ_S3C2440_WDT, mydesc, regs);
} }
if (subsrc & 2) { if (subsrc & 2) {
mydesc = irq_desc + IRQ_S3C2440_AC97; mydesc = irq_desc + IRQ_S3C2440_AC97;
mydesc->handle(IRQ_S3C2440_AC97, mydesc, regs); desc_handle_irq(IRQ_S3C2440_AC97, mydesc, regs);
} }
} }
} }
...@@ -122,11 +122,11 @@ static void s3c_irq_demux_cam(unsigned int irq, ...@@ -122,11 +122,11 @@ static void s3c_irq_demux_cam(unsigned int irq,
if (subsrc != 0) { if (subsrc != 0) {
if (subsrc & 1) { if (subsrc & 1) {
mydesc = irq_desc + IRQ_S3C2440_CAM_C; mydesc = irq_desc + IRQ_S3C2440_CAM_C;
mydesc->handle( IRQ_S3C2440_WDT, mydesc, regs); desc_handle_irq(IRQ_S3C2440_CAM_C, mydesc, regs);
} }
if (subsrc & 2) { if (subsrc & 2) {
mydesc = irq_desc + IRQ_S3C2440_CAM_P; mydesc = irq_desc + IRQ_S3C2440_CAM_P;
mydesc->handle(IRQ_S3C2440_AC97, mydesc, regs); desc_handle_irq(IRQ_S3C2440_CAM_P, mydesc, regs);
} }
} }
} }
......
...@@ -98,8 +98,8 @@ static struct irqchip sa1100_low_gpio_chip = { ...@@ -98,8 +98,8 @@ static struct irqchip sa1100_low_gpio_chip = {
.ack = sa1100_low_gpio_ack, .ack = sa1100_low_gpio_ack,
.mask = sa1100_low_gpio_mask, .mask = sa1100_low_gpio_mask,
.unmask = sa1100_low_gpio_unmask, .unmask = sa1100_low_gpio_unmask,
.type = sa1100_gpio_type, .set_type = sa1100_gpio_type,
.wake = sa1100_low_gpio_wake, .set_wake = sa1100_low_gpio_wake,
}; };
/* /*
...@@ -126,7 +126,7 @@ sa1100_high_gpio_handler(unsigned int irq, struct irqdesc *desc, ...@@ -126,7 +126,7 @@ sa1100_high_gpio_handler(unsigned int irq, struct irqdesc *desc,
mask >>= 11; mask >>= 11;
do { do {
if (mask & 1) if (mask & 1)
desc->handle(irq, desc, regs); desc_handle_irq(irq, desc, regs);
mask >>= 1; mask >>= 1;
irq++; irq++;
desc++; desc++;
...@@ -181,8 +181,8 @@ static struct irqchip sa1100_high_gpio_chip = { ...@@ -181,8 +181,8 @@ static struct irqchip sa1100_high_gpio_chip = {
.ack = sa1100_high_gpio_ack, .ack = sa1100_high_gpio_ack,
.mask = sa1100_high_gpio_mask, .mask = sa1100_high_gpio_mask,
.unmask = sa1100_high_gpio_unmask, .unmask = sa1100_high_gpio_unmask,
.type = sa1100_gpio_type, .set_type = sa1100_gpio_type,
.wake = sa1100_high_gpio_wake, .set_wake = sa1100_high_gpio_wake,
}; };
/* /*
......
...@@ -61,12 +61,12 @@ neponset_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *reg ...@@ -61,12 +61,12 @@ neponset_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *reg
if (irr & IRR_ETHERNET) { if (irr & IRR_ETHERNET) {
d = irq_desc + IRQ_NEPONSET_SMC9196; d = irq_desc + IRQ_NEPONSET_SMC9196;
d->handle(IRQ_NEPONSET_SMC9196, d, regs); desc_handle_irq(IRQ_NEPONSET_SMC9196, d, regs);
} }
if (irr & IRR_USAR) { if (irr & IRR_USAR) {
d = irq_desc + IRQ_NEPONSET_USAR; d = irq_desc + IRQ_NEPONSET_USAR;
d->handle(IRQ_NEPONSET_USAR, d, regs); desc_handle_irq(IRQ_NEPONSET_USAR, d, regs);
} }
desc->chip->unmask(irq); desc->chip->unmask(irq);
...@@ -74,7 +74,7 @@ neponset_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *reg ...@@ -74,7 +74,7 @@ neponset_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *reg
if (irr & IRR_SA1111) { if (irr & IRR_SA1111) {
d = irq_desc + IRQ_NEPONSET_SA1111; d = irq_desc + IRQ_NEPONSET_SA1111;
d->handle(IRQ_NEPONSET_SA1111, d, regs); desc_handle_irq(IRQ_NEPONSET_SA1111, d, regs);
} }
} }
} }
......
...@@ -108,7 +108,7 @@ sic_handle_irq(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) ...@@ -108,7 +108,7 @@ sic_handle_irq(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
irq += IRQ_SIC_START; irq += IRQ_SIC_START;
desc = irq_desc + irq; desc = irq_desc + irq;
desc->handle(irq, desc, regs); desc_handle_irq(irq, desc, regs);
} while (status); } while (status);
} }
......
...@@ -38,8 +38,8 @@ ENTRY(cpu_arm7_data_abort) ...@@ -38,8 +38,8 @@ ENTRY(cpu_arm7_data_abort)
mrc p15, 0, r1, c5, c0, 0 @ get FSR mrc p15, 0, r1, c5, c0, 0 @ get FSR
mrc p15, 0, r0, c6, c0, 0 @ get FAR mrc p15, 0, r0, c6, c0, 0 @ get FAR
ldr r8, [r0] @ read arm instruction ldr r8, [r0] @ read arm instruction
tst r8, #1 << 20 @ L = 1 -> write? tst r8, #1 << 20 @ L = 0 -> write?
orreq r1, r1, #1 << 8 @ yes. orreq r1, r1, #1 << 11 @ yes.
and r7, r8, #15 << 24 and r7, r8, #15 << 24
add pc, pc, r7, lsr #22 @ Now branch to the relevant processing routine add pc, pc, r7, lsr #22 @ Now branch to the relevant processing routine
nop nop
...@@ -71,8 +71,8 @@ ENTRY(cpu_arm6_data_abort) ...@@ -71,8 +71,8 @@ ENTRY(cpu_arm6_data_abort)
mrc p15, 0, r1, c5, c0, 0 @ get FSR mrc p15, 0, r1, c5, c0, 0 @ get FSR
mrc p15, 0, r0, c6, c0, 0 @ get FAR mrc p15, 0, r0, c6, c0, 0 @ get FAR
ldr r8, [r2] @ read arm instruction ldr r8, [r2] @ read arm instruction
tst r8, #1 << 20 @ L = 1 -> write? tst r8, #1 << 20 @ L = 0 -> write?
orreq r1, r1, #1 << 8 @ yes. orreq r1, r1, #1 << 11 @ yes.
and r7, r8, #14 << 24 and r7, r8, #14 << 24
teq r7, #8 << 24 @ was it ldm/stm teq r7, #8 << 24 @ was it ldm/stm
movne pc, lr movne pc, lr
......
...@@ -590,7 +590,7 @@ static void gpio_irq_handler(unsigned int irq, struct irqdesc *desc, ...@@ -590,7 +590,7 @@ static void gpio_irq_handler(unsigned int irq, struct irqdesc *desc,
if (!(isr & 1)) if (!(isr & 1))
continue; continue;
d = irq_desc + gpio_irq; d = irq_desc + gpio_irq;
d->handle(gpio_irq, d, regs); desc_handle_irq(gpio_irq, d, regs);
} }
} }
......
...@@ -246,7 +246,7 @@ static void __exit pxa2xx_pcmcia_exit(void) ...@@ -246,7 +246,7 @@ static void __exit pxa2xx_pcmcia_exit(void)
driver_unregister(&pxa2xx_pcmcia_driver); driver_unregister(&pxa2xx_pcmcia_driver);
} }
module_init(pxa2xx_pcmcia_init); fs_initcall(pxa2xx_pcmcia_init);
module_exit(pxa2xx_pcmcia_exit); module_exit(pxa2xx_pcmcia_exit);
MODULE_AUTHOR("Stefan Eletzhofer <stefan.eletzhofer@inquant.de> and Ian Molton <spyro@f2s.com>"); MODULE_AUTHOR("Stefan Eletzhofer <stefan.eletzhofer@inquant.de> and Ian Molton <spyro@f2s.com>");
......
...@@ -196,7 +196,7 @@ static void __exit mst_pcmcia_exit(void) ...@@ -196,7 +196,7 @@ static void __exit mst_pcmcia_exit(void)
platform_device_unregister(mst_pcmcia_device); platform_device_unregister(mst_pcmcia_device);
} }
module_init(mst_pcmcia_init); fs_initcall(mst_pcmcia_init);
module_exit(mst_pcmcia_exit); module_exit(mst_pcmcia_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
...@@ -257,7 +257,7 @@ static void __exit sharpsl_pcmcia_exit(void) ...@@ -257,7 +257,7 @@ static void __exit sharpsl_pcmcia_exit(void)
platform_device_unregister(sharpsl_pcmcia_device); platform_device_unregister(sharpsl_pcmcia_device);
} }
module_init(sharpsl_pcmcia_init); fs_initcall(sharpsl_pcmcia_init);
module_exit(sharpsl_pcmcia_exit); module_exit(sharpsl_pcmcia_exit);
MODULE_DESCRIPTION("Sharp SL Series PCMCIA Support"); MODULE_DESCRIPTION("Sharp SL Series PCMCIA Support");
......
...@@ -126,5 +126,5 @@ MODULE_AUTHOR("John Dorsey <john+@cs.cmu.edu>"); ...@@ -126,5 +126,5 @@ MODULE_AUTHOR("John Dorsey <john+@cs.cmu.edu>");
MODULE_DESCRIPTION("Linux PCMCIA Card Services: SA-11x0 Socket Controller"); MODULE_DESCRIPTION("Linux PCMCIA Card Services: SA-11x0 Socket Controller");
MODULE_LICENSE("Dual MPL/GPL"); MODULE_LICENSE("Dual MPL/GPL");
module_init(sa11x0_pcmcia_init); fs_initcall(sa11x0_pcmcia_init);
module_exit(sa11x0_pcmcia_exit); module_exit(sa11x0_pcmcia_exit);
...@@ -189,7 +189,7 @@ static void __exit sa1111_drv_pcmcia_exit(void) ...@@ -189,7 +189,7 @@ static void __exit sa1111_drv_pcmcia_exit(void)
sa1111_driver_unregister(&pcmcia_driver); sa1111_driver_unregister(&pcmcia_driver);
} }
module_init(sa1111_drv_pcmcia_init); fs_initcall(sa1111_drv_pcmcia_init);
module_exit(sa1111_drv_pcmcia_exit); module_exit(sa1111_drv_pcmcia_exit);
MODULE_DESCRIPTION("SA1111 PCMCIA card socket driver"); MODULE_DESCRIPTION("SA1111 PCMCIA card socket driver");
......
...@@ -189,7 +189,7 @@ static int __init sa11xx_pcmcia_init(void) ...@@ -189,7 +189,7 @@ static int __init sa11xx_pcmcia_init(void)
{ {
return 0; return 0;
} }
module_init(sa11xx_pcmcia_init); fs_initcall(sa11xx_pcmcia_init);
static void __exit sa11xx_pcmcia_exit(void) {} static void __exit sa11xx_pcmcia_exit(void) {}
......
...@@ -42,11 +42,11 @@ struct irqchip { ...@@ -42,11 +42,11 @@ struct irqchip {
/* /*
* Set the type of the IRQ. * Set the type of the IRQ.
*/ */
int (*type)(unsigned int, unsigned int); int (*set_type)(unsigned int, unsigned int);
/* /*
* Set wakeup-enable on the selected IRQ * Set wakeup-enable on the selected IRQ
*/ */
int (*wake)(unsigned int, unsigned int); int (*set_wake)(unsigned int, unsigned int);
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
/* /*
...@@ -91,6 +91,14 @@ struct irqdesc { ...@@ -91,6 +91,14 @@ struct irqdesc {
extern struct irqdesc irq_desc[]; extern struct irqdesc irq_desc[];
/*
* Helpful inline function for calling irq descriptor handlers.
*/
static inline void desc_handle_irq(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
{
desc->handle(irq, desc, regs);
}
/* /*
* This is internal. Do not use it. * This is internal. Do not use it.
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment