|
@@ -56,9 +56,11 @@ static int irq_flags(int triggering, int polarity, int shareable)
|
|
|
return flags;
|
|
|
}
|
|
|
|
|
|
-static void decode_irq_flags(int flag, int *triggering, int *polarity)
|
|
|
+static void decode_irq_flags(struct pnp_dev *dev, int flags, int *triggering,
|
|
|
+ int *polarity)
|
|
|
{
|
|
|
- switch (flag) {
|
|
|
+ switch (flags & (IORESOURCE_IRQ_LOWLEVEL | IORESOURCE_IRQ_HIGHLEVEL |
|
|
|
+ IORESOURCE_IRQ_LOWEDGE | IORESOURCE_IRQ_HIGHEDGE)) {
|
|
|
case IORESOURCE_IRQ_LOWLEVEL:
|
|
|
*triggering = ACPI_LEVEL_SENSITIVE;
|
|
|
*polarity = ACPI_ACTIVE_LOW;
|
|
@@ -75,6 +77,12 @@ static void decode_irq_flags(int flag, int *triggering, int *polarity)
|
|
|
*triggering = ACPI_EDGE_SENSITIVE;
|
|
|
*polarity = ACPI_ACTIVE_HIGH;
|
|
|
break;
|
|
|
+ default:
|
|
|
+ dev_err(&dev->dev, "can't encode invalid IRQ mode %#x\n",
|
|
|
+ flags);
|
|
|
+ *triggering = ACPI_EDGE_SENSITIVE;
|
|
|
+ *polarity = ACPI_ACTIVE_HIGH;
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -790,7 +798,7 @@ static void pnpacpi_encode_irq(struct pnp_dev *dev,
|
|
|
struct acpi_resource_irq *irq = &resource->data.irq;
|
|
|
int triggering, polarity;
|
|
|
|
|
|
- decode_irq_flags(p->flags & IORESOURCE_BITS, &triggering, &polarity);
|
|
|
+ decode_irq_flags(dev, p->flags, &triggering, &polarity);
|
|
|
irq->triggering = triggering;
|
|
|
irq->polarity = polarity;
|
|
|
if (triggering == ACPI_EDGE_SENSITIVE)
|
|
@@ -813,7 +821,7 @@ static void pnpacpi_encode_ext_irq(struct pnp_dev *dev,
|
|
|
struct acpi_resource_extended_irq *extended_irq = &resource->data.extended_irq;
|
|
|
int triggering, polarity;
|
|
|
|
|
|
- decode_irq_flags(p->flags & IORESOURCE_BITS, &triggering, &polarity);
|
|
|
+ decode_irq_flags(dev, p->flags, &triggering, &polarity);
|
|
|
extended_irq->producer_consumer = ACPI_CONSUMER;
|
|
|
extended_irq->triggering = triggering;
|
|
|
extended_irq->polarity = polarity;
|