]> git.karo-electronics.de Git - karo-tx-linux.git/commit
ACPI / resources: call acpi_get_override_irq() only for legacy IRQ resources
authorMika Westerberg <mika.westerberg@linux.intel.com>
Mon, 20 May 2013 15:41:45 +0000 (15:41 +0000)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 27 May 2013 12:43:26 +0000 (14:43 +0200)
commit754ae73a0dbacb33e5fd5cd1426a630883b32eea
tree6be3fe89bcbddd52cdd715e3387f5ea853e8ff6f
parent99d44ca0d648800fe464f0cb7c3793b93160edbb
ACPI / resources: call acpi_get_override_irq() only for legacy IRQ resources

acpi_get_override_irq() was added because there was a problem with buggy
BIOSes passing wrong IRQ() resource for the RTC IRQ. Commit that added
the workaround is 61fd47e0c8476 (ACPI: fix two IRQ8 issues in IOAPIC
mode).

With ACPI 5 enumerated devices there are typically one or more extended IRQ
resources for a device (and these IRQs can be shared). However, the
acpi_get_override_irq() workaround forces all IRQs in range 0 - 15 (the
legacy ISA IRQs) to be edge triggered, active high as can be seen from the
dmesg below:

ACPI: IRQ 6 override to edge, high
ACPI: IRQ 7 override to edge, high
ACPI: IRQ 7 override to edge, high
ACPI: IRQ 13 override to edge, high

Also /proc/interrupts for the I2C controllers (INT33C2 and INT33C3) shows
the same thing:

7:          4          0          0          0   IO-APIC-edge INT33C2:00, INT33C3:00

The _CSR method for INT33C2 (and INT33C3) device returns following
resource:

Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,, )
{
0x00000007,
}

which states that this is supposed to be level triggered, active low,
shared IRQ instead.

Fix this by making sure that acpi_get_override_irq() gets only called when
we are dealing with legacy IRQ() or IRQNoFlags() descriptors.

While we are there correct pr_warning() to print the right triggering
value.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/resource.c