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:
@@ -127,7 +127,7 @@ static void
|
|||||||
imx_gpio_ack_irq(unsigned int irq)
|
imx_gpio_ack_irq(unsigned int irq)
|
||||||
{
|
{
|
||||||
DEBUG_IRQ("%s: irq %d\n", __FUNCTION__, 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
|
static void
|
||||||
|
@@ -232,8 +232,6 @@ static void __init intcp_init_irq(void)
|
|||||||
for (i = IRQ_PIC_START; i <= IRQ_PIC_END; i++) {
|
for (i = IRQ_PIC_START; i <= IRQ_PIC_END; i++) {
|
||||||
if (i == 11)
|
if (i == 11)
|
||||||
i = 22;
|
i = 22;
|
||||||
if (i == IRQ_CP_CPPLDINT)
|
|
||||||
i++;
|
|
||||||
if (i == 29)
|
if (i == 29)
|
||||||
break;
|
break;
|
||||||
set_irq_chip(i, &pic_chip);
|
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_flags(i, IRQF_VALID | IRQF_PROBE);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_irq_handler(IRQ_CP_CPPLDINT, sic_handle_irq);
|
set_irq_chained_handler(IRQ_CP_CPPLDINT, sic_handle_irq);
|
||||||
pic_unmask_irq(IRQ_CP_CPPLDINT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -371,6 +371,7 @@ static int spitz_ohci_init(struct device *dev)
|
|||||||
static struct pxaohci_platform_data spitz_ohci_platform_data = {
|
static struct pxaohci_platform_data spitz_ohci_platform_data = {
|
||||||
.port_mode = PMM_NPS_MODE,
|
.port_mode = PMM_NPS_MODE,
|
||||||
.init = spitz_ohci_init,
|
.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)) {
|
if (irr & (IRR_ETHERNET | IRR_USAR)) {
|
||||||
desc->chip->mask(irq);
|
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) {
|
if (irr & IRR_ETHERNET) {
|
||||||
d = irq_desc + IRQ_NEPONSET_SMC9196;
|
d = irq_desc + IRQ_NEPONSET_SMC9196;
|
||||||
desc_handle_irq(IRQ_NEPONSET_SMC9196, d, regs);
|
desc_handle_irq(IRQ_NEPONSET_SMC9196, d, regs);
|
||||||
|
@@ -112,10 +112,9 @@ void __init versatile_init_irq(void)
|
|||||||
{
|
{
|
||||||
unsigned int i;
|
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);
|
set_irq_chained_handler(IRQ_VICSOURCE31, sic_handle_irq);
|
||||||
enable_irq(IRQ_VICSOURCE31);
|
|
||||||
|
|
||||||
/* Do second interrupt controller */
|
/* Do second interrupt controller */
|
||||||
writel(~0, VA_SIC_BASE + SIC_IRQ_ENABLE_CLEAR);
|
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 */
|
/* Select Power Management Mode */
|
||||||
pxa27x_ohci_select_pmm(inf->port_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));
|
ohci_hcd_init(hcd_to_ohci(hcd));
|
||||||
|
|
||||||
retval = usb_add_hcd(hcd, pdev->resource[1].start, SA_INTERRUPT);
|
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_NPS_MODE 1
|
||||||
#define PMM_GLOBAL_MODE 2
|
#define PMM_GLOBAL_MODE 2
|
||||||
#define PMM_PERPORT_MODE 3
|
#define PMM_PERPORT_MODE 3
|
||||||
|
|
||||||
|
int power_budget;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern void pxa_set_ohci_info(struct pxaohci_platform_data *info);
|
extern void pxa_set_ohci_info(struct pxaohci_platform_data *info);
|
||||||
|
Reference in New Issue
Block a user