[PATCH] HPET: handle multiple ACPI EXTENDED_IRQ resources
When the _CRS for a single HPET contains multiple EXTENDED_IRQ resources, we overwrote hdp->hd_nirqs every time we found one. So the driver worked when all the IRQs were described in a single EXTENDED_IRQ resource, but failed when multiple resources were used. (Strictly speaking, I think the latter is actually more correct, but both styles have been used.) Someday we should remove all the ACPI stuff from hpet.c and use PNP driver registration instead. But currently PNP_MAX_IRQ is 2, and HPETs often have more IRQs. Hint, hint, Adam :-) Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com> Acked-by: Bob Picco <robert.picco@hp.com> Cc: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> Cc: Len Brown <len.brown@intel.com> Cc: Adam Belay <ambx1@neo.rr.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
da965822ab
commit
be5efffb76
|
@ -956,22 +956,18 @@ static acpi_status hpet_resources(struct acpi_resource *res, void *data)
|
|||
}
|
||||
} else if (res->type == ACPI_RESOURCE_TYPE_EXTENDED_IRQ) {
|
||||
struct acpi_resource_extended_irq *irqp;
|
||||
int i;
|
||||
int i, irq;
|
||||
|
||||
irqp = &res->data.extended_irq;
|
||||
|
||||
if (irqp->interrupt_count > 0) {
|
||||
hdp->hd_nirqs = irqp->interrupt_count;
|
||||
for (i = 0; i < irqp->interrupt_count; i++) {
|
||||
irq = acpi_register_gsi(irqp->interrupts[i],
|
||||
irqp->triggering, irqp->polarity);
|
||||
if (irq < 0)
|
||||
return AE_ERROR;
|
||||
|
||||
for (i = 0; i < hdp->hd_nirqs; i++) {
|
||||
int rc =
|
||||
acpi_register_gsi(irqp->interrupts[i],
|
||||
irqp->triggering,
|
||||
irqp->polarity);
|
||||
if (rc < 0)
|
||||
return AE_ERROR;
|
||||
hdp->hd_irq[i] = rc;
|
||||
}
|
||||
hdp->hd_irq[hdp->hd_nirqs] = irq;
|
||||
hdp->hd_nirqs++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue