diff options
Diffstat (limited to 'arch/x86/kernel/acpi/boot.c')
| -rw-r--r-- | arch/x86/kernel/acpi/boot.c | 26 | 
1 files changed, 13 insertions, 13 deletions
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index d1626364a28a..b9e30daa0881 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c @@ -611,20 +611,20 @@ void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)  int acpi_gsi_to_irq(u32 gsi, unsigned int *irqp)  { -	int irq; - -	if (acpi_irq_model == ACPI_IRQ_MODEL_PIC) { -		*irqp = gsi; -	} else { -		mutex_lock(&acpi_ioapic_lock); -		irq = mp_map_gsi_to_irq(gsi, -					IOAPIC_MAP_ALLOC | IOAPIC_MAP_CHECK); -		mutex_unlock(&acpi_ioapic_lock); -		if (irq < 0) -			return -1; -		*irqp = irq; +	int rc, irq, trigger, polarity; + +	rc = acpi_get_override_irq(gsi, &trigger, &polarity); +	if (rc == 0) { +		trigger = trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE; +		polarity = polarity ? ACPI_ACTIVE_LOW : ACPI_ACTIVE_HIGH; +		irq = acpi_register_gsi(NULL, gsi, trigger, polarity); +		if (irq >= 0) { +			*irqp = irq; +			return 0; +		}  	} -	return 0; + +	return -1;  }  EXPORT_SYMBOL_GPL(acpi_gsi_to_irq);  |