diff options
Diffstat (limited to 'drivers/pnp')
-rw-r--r-- | drivers/pnp/pnpacpi/rsparser.c | 15 | ||||
-rw-r--r-- | drivers/pnp/pnpbios/rsparser.c | 2 | ||||
-rw-r--r-- | drivers/pnp/resource.c | 2 |
3 files changed, 14 insertions, 5 deletions
diff --git a/drivers/pnp/pnpacpi/rsparser.c b/drivers/pnp/pnpacpi/rsparser.c index dd61e09029b1..75575f6c349c 100644 --- a/drivers/pnp/pnpacpi/rsparser.c +++ b/drivers/pnp/pnpacpi/rsparser.c | |||
@@ -160,7 +160,7 @@ static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res, | |||
160 | acpi_register_gsi(res->data.irq.interrupts[0], | 160 | acpi_register_gsi(res->data.irq.interrupts[0], |
161 | res->data.irq.edge_level, | 161 | res->data.irq.edge_level, |
162 | res->data.irq.active_high_low)); | 162 | res->data.irq.active_high_low)); |
163 | pcibios_penalize_isa_irq(res->data.irq.interrupts[0]); | 163 | pcibios_penalize_isa_irq(res->data.irq.interrupts[0], 1); |
164 | } | 164 | } |
165 | break; | 165 | break; |
166 | 166 | ||
@@ -171,7 +171,7 @@ static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res, | |||
171 | acpi_register_gsi(res->data.extended_irq.interrupts[0], | 171 | acpi_register_gsi(res->data.extended_irq.interrupts[0], |
172 | res->data.extended_irq.edge_level, | 172 | res->data.extended_irq.edge_level, |
173 | res->data.extended_irq.active_high_low)); | 173 | res->data.extended_irq.active_high_low)); |
174 | pcibios_penalize_isa_irq(res->data.extended_irq.interrupts[0]); | 174 | pcibios_penalize_isa_irq(res->data.extended_irq.interrupts[0], 1); |
175 | } | 175 | } |
176 | break; | 176 | break; |
177 | case ACPI_RSTYPE_DMA: | 177 | case ACPI_RSTYPE_DMA: |
@@ -444,6 +444,7 @@ pnpacpi_parse_fixed_mem32_option(struct pnp_option *option, | |||
444 | 444 | ||
445 | struct acpipnp_parse_option_s { | 445 | struct acpipnp_parse_option_s { |
446 | struct pnp_option *option; | 446 | struct pnp_option *option; |
447 | struct pnp_option *option_independent; | ||
447 | struct pnp_dev *dev; | 448 | struct pnp_dev *dev; |
448 | }; | 449 | }; |
449 | 450 | ||
@@ -507,7 +508,14 @@ static acpi_status pnpacpi_option_resource(struct acpi_resource *res, | |||
507 | parse_data->option = option; | 508 | parse_data->option = option; |
508 | break; | 509 | break; |
509 | case ACPI_RSTYPE_END_DPF: | 510 | case ACPI_RSTYPE_END_DPF: |
510 | return AE_CTRL_TERMINATE; | 511 | /*only one EndDependentFn is allowed*/ |
512 | if (!parse_data->option_independent) { | ||
513 | pnp_warn("PnPACPI: more than one EndDependentFn"); | ||
514 | return AE_ERROR; | ||
515 | } | ||
516 | parse_data->option = parse_data->option_independent; | ||
517 | parse_data->option_independent = NULL; | ||
518 | break; | ||
511 | default: | 519 | default: |
512 | pnp_warn("PnPACPI: unknown resource type %d", res->id); | 520 | pnp_warn("PnPACPI: unknown resource type %d", res->id); |
513 | return AE_ERROR; | 521 | return AE_ERROR; |
@@ -525,6 +533,7 @@ acpi_status pnpacpi_parse_resource_option_data(acpi_handle handle, | |||
525 | parse_data.option = pnp_register_independent_option(dev); | 533 | parse_data.option = pnp_register_independent_option(dev); |
526 | if (!parse_data.option) | 534 | if (!parse_data.option) |
527 | return AE_ERROR; | 535 | return AE_ERROR; |
536 | parse_data.option_independent = parse_data.option; | ||
528 | parse_data.dev = dev; | 537 | parse_data.dev = dev; |
529 | status = acpi_walk_resources(handle, METHOD_NAME__PRS, | 538 | status = acpi_walk_resources(handle, METHOD_NAME__PRS, |
530 | pnpacpi_option_resource, &parse_data); | 539 | pnpacpi_option_resource, &parse_data); |
diff --git a/drivers/pnp/pnpbios/rsparser.c b/drivers/pnp/pnpbios/rsparser.c index 79bce7b75740..9001b6f0204d 100644 --- a/drivers/pnp/pnpbios/rsparser.c +++ b/drivers/pnp/pnpbios/rsparser.c | |||
@@ -64,7 +64,7 @@ pnpbios_parse_allocated_irqresource(struct pnp_resource_table * res, int irq) | |||
64 | } | 64 | } |
65 | res->irq_resource[i].start = | 65 | res->irq_resource[i].start = |
66 | res->irq_resource[i].end = (unsigned long) irq; | 66 | res->irq_resource[i].end = (unsigned long) irq; |
67 | pcibios_penalize_isa_irq(irq); | 67 | pcibios_penalize_isa_irq(irq, 1); |
68 | } | 68 | } |
69 | } | 69 | } |
70 | 70 | ||
diff --git a/drivers/pnp/resource.c b/drivers/pnp/resource.c index 2d1322dd7e19..887ad8939349 100644 --- a/drivers/pnp/resource.c +++ b/drivers/pnp/resource.c | |||
@@ -102,7 +102,7 @@ int pnp_register_irq_resource(struct pnp_option *option, struct pnp_irq *data) | |||
102 | 102 | ||
103 | for (i = 0; i < 16; i++) | 103 | for (i = 0; i < 16; i++) |
104 | if (test_bit(i, data->map)) | 104 | if (test_bit(i, data->map)) |
105 | pcibios_penalize_isa_irq(i); | 105 | pcibios_penalize_isa_irq(i, 0); |
106 | } | 106 | } |
107 | #endif | 107 | #endif |
108 | return 0; | 108 | return 0; |