Merge master.kernel.org:/home/rmk/linux-2.6-arm
* master.kernel.org:/home/rmk/linux-2.6-arm: [ARM] Fix Integrator and Versatile interrupt initialisation [ARM] 3546/1: PATCH: subtle lost interrupts bug on i.MX [ARM] 3547/1: PXA-OHCI: Allow platforms to specify a power budget [ARM] Fix Neponset IRQ handling
This commit is contained in:
commit
37b0d1dedc
|
@ -127,7 +127,7 @@ static void
|
|||
imx_gpio_ack_irq(unsigned int irq)
|
||||
{
|
||||
DEBUG_IRQ("%s: irq %d\n", __FUNCTION__, irq);
|
||||
ISR(IRQ_TO_REG(irq)) |= 1 << ((irq - IRQ_GPIOA(0)) % 32);
|
||||
ISR(IRQ_TO_REG(irq)) = 1 << ((irq - IRQ_GPIOA(0)) % 32);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -232,8 +232,6 @@ static void __init intcp_init_irq(void)
|
|||
for (i = IRQ_PIC_START; i <= IRQ_PIC_END; i++) {
|
||||
if (i == 11)
|
||||
i = 22;
|
||||
if (i == IRQ_CP_CPPLDINT)
|
||||
i++;
|
||||
if (i == 29)
|
||||
break;
|
||||
set_irq_chip(i, &pic_chip);
|
||||
|
@ -259,8 +257,7 @@ static void __init intcp_init_irq(void)
|
|||
set_irq_flags(i, IRQF_VALID | IRQF_PROBE);
|
||||
}
|
||||
|
||||
set_irq_handler(IRQ_CP_CPPLDINT, sic_handle_irq);
|
||||
pic_unmask_irq(IRQ_CP_CPPLDINT);
|
||||
set_irq_chained_handler(IRQ_CP_CPPLDINT, sic_handle_irq);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -371,6 +371,7 @@ static int spitz_ohci_init(struct device *dev)
|
|||
static struct pxaohci_platform_data spitz_ohci_platform_data = {
|
||||
.port_mode = PMM_NPS_MODE,
|
||||
.init = spitz_ohci_init,
|
||||
.power_budget = 150,
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -59,6 +59,14 @@ neponset_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *reg
|
|||
if (irr & (IRR_ETHERNET | IRR_USAR)) {
|
||||
desc->chip->mask(irq);
|
||||
|
||||
/*
|
||||
* Ack the interrupt now to prevent re-entering
|
||||
* this neponset handler. Again, this is safe
|
||||
* since we'll check the IRR register prior to
|
||||
* leaving.
|
||||
*/
|
||||
desc->chip->ack(irq);
|
||||
|
||||
if (irr & IRR_ETHERNET) {
|
||||
d = irq_desc + IRQ_NEPONSET_SMC9196;
|
||||
desc_handle_irq(IRQ_NEPONSET_SMC9196, d, regs);
|
||||
|
|
|
@ -112,10 +112,9 @@ void __init versatile_init_irq(void)
|
|||
{
|
||||
unsigned int i;
|
||||
|
||||
vic_init(VA_VIC_BASE, IRQ_VIC_START, ~(1 << 31));
|
||||
vic_init(VA_VIC_BASE, IRQ_VIC_START, ~0);
|
||||
|
||||
set_irq_handler(IRQ_VICSOURCE31, sic_handle_irq);
|
||||
enable_irq(IRQ_VICSOURCE31);
|
||||
set_irq_chained_handler(IRQ_VICSOURCE31, sic_handle_irq);
|
||||
|
||||
/* Do second interrupt controller */
|
||||
writel(~0, VA_SIC_BASE + SIC_IRQ_ENABLE_CLEAR);
|
||||
|
|
|
@ -185,6 +185,9 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, struct platform_device
|
|||
/* Select Power Management Mode */
|
||||
pxa27x_ohci_select_pmm(inf->port_mode);
|
||||
|
||||
if (inf->power_budget)
|
||||
hcd->power_budget = inf->power_budget;
|
||||
|
||||
ohci_hcd_init(hcd_to_ohci(hcd));
|
||||
|
||||
retval = usb_add_hcd(hcd, pdev->resource[1].start, SA_INTERRUPT);
|
||||
|
|
|
@ -11,6 +11,8 @@ struct pxaohci_platform_data {
|
|||
#define PMM_NPS_MODE 1
|
||||
#define PMM_GLOBAL_MODE 2
|
||||
#define PMM_PERPORT_MODE 3
|
||||
|
||||
int power_budget;
|
||||
};
|
||||
|
||||
extern void pxa_set_ohci_info(struct pxaohci_platform_data *info);
|
||||
|
|
Loading…
Reference in New Issue