]> err.no Git - linux-2.6/blobdiff - drivers/pnp/pnpacpi/rsparser.c
Merge ../to-linus
[linux-2.6] / drivers / pnp / pnpacpi / rsparser.c
index dd61e09029b1dc9a7de01dbf6443ce992a4ccfb6..1e296cbef00497b16816a6f19435666cebc60005 100644 (file)
@@ -81,7 +81,7 @@ pnpacpi_parse_allocated_irqresource(struct pnp_resource_table * res, int irq)
                i++;
        if (i < PNP_MAX_IRQ) {
                res->irq_resource[i].flags = IORESOURCE_IRQ;  //Also clears _UNSET flag
-               if (irq == -1) {
+               if (irq < 0) {
                        res->irq_resource[i].flags |= IORESOURCE_DISABLED;
                        return;
                }
@@ -160,7 +160,7 @@ static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
                                acpi_register_gsi(res->data.irq.interrupts[0],
                                        res->data.irq.edge_level,
                                        res->data.irq.active_high_low));
-                       pcibios_penalize_isa_irq(res->data.irq.interrupts[0]);
+                       pcibios_penalize_isa_irq(res->data.irq.interrupts[0], 1);
                }
                break;
 
@@ -171,7 +171,7 @@ static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
                                acpi_register_gsi(res->data.extended_irq.interrupts[0],
                                        res->data.extended_irq.edge_level,
                                        res->data.extended_irq.active_high_low));
-                       pcibios_penalize_isa_irq(res->data.extended_irq.interrupts[0]);
+                       pcibios_penalize_isa_irq(res->data.extended_irq.interrupts[0], 1);
                }
                break;
        case ACPI_RSTYPE_DMA:
@@ -444,6 +444,7 @@ pnpacpi_parse_fixed_mem32_option(struct pnp_option *option,
 
 struct acpipnp_parse_option_s {
        struct pnp_option *option;
+       struct pnp_option *option_independent;
        struct pnp_dev *dev;
 };
 
@@ -507,7 +508,14 @@ static acpi_status pnpacpi_option_resource(struct acpi_resource *res,
                        parse_data->option = option;    
                        break;
                case ACPI_RSTYPE_END_DPF:
-                       return AE_CTRL_TERMINATE;
+                       /*only one EndDependentFn is allowed*/
+                       if (!parse_data->option_independent) {
+                               pnp_warn("PnPACPI: more than one EndDependentFn");
+                               return AE_ERROR;
+                       }
+                       parse_data->option = parse_data->option_independent;
+                       parse_data->option_independent = NULL;
+                       break;
                default:
                        pnp_warn("PnPACPI: unknown resource type %d", res->id);
                        return AE_ERROR;
@@ -525,6 +533,7 @@ acpi_status pnpacpi_parse_resource_option_data(acpi_handle handle,
        parse_data.option = pnp_register_independent_option(dev);
        if (!parse_data.option)
                return AE_ERROR;
+       parse_data.option_independent = parse_data.option;
        parse_data.dev = dev;
        status = acpi_walk_resources(handle, METHOD_NAME__PRS, 
                pnpacpi_option_resource, &parse_data);