ACPI / scan: fix enumeration (visited) flags for bus rescans
authorOctavian Purdila <octavian.purdila@intel.com>
Fri, 8 Jul 2016 16:13:08 +0000 (19:13 +0300)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 8 Jul 2016 19:52:34 +0000 (21:52 +0200)
commit10c7e20b2ff3caa5a8c0e7d60aef5a9c86e60ce8
tree8931f22bd95059c3872b4363314ba2bb547703ee
parent14d24c39e7f4de1bd3aa3a0379ad3c0d8129a155
ACPI / scan: fix enumeration (visited) flags for bus rescans

If the ACPI tables change as a result of a dinamically loaded table
and a bus rescan is required the enumeration/visited flag are not
consistent.

I2C/SPI are not directly enumerated in acpi_bus_attach(), however
the visited flag is set. This makes it impossible to check if an
ACPI device has already been enumerated by the I2C and SPI
subsystems. To fix this issue we only set the visited flags if
the device is not I2C or SPI.

With this change we also need to remove setting visited to false
from acpi_bus_attach(), otherwise if we rescan already enumerated
I2C/SPI devices we try to re-enumerate them.

Note that I2C/SPI devices can be enumerated either via a scan handler
(when using PRP0001) or via regular device_attach(). In either case
the flow goes through acpi_default_enumeration() which makes it the
ideal place to mark the ACPI device as enumerated.

Signed-off-by: Octavian Purdila <octavian.purdila@intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/scan.c
include/linux/acpi.h