From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Subject: [PATCH 2/4] ACPI / bus: Do not call _STA on battery devices with unmet dependencies Date: Thu, 18 Jan 2018 17:03:57 +0100 Message-ID: <20180118160359.29971-3-hdegoede@redhat.com> References: <20180118160359.29971-1-hdegoede@redhat.com> Return-path: Received: from mx1.redhat.com ([209.132.183.28]:44528 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933113AbeARQEO (ORCPT ); Thu, 18 Jan 2018 11:04:14 -0500 In-Reply-To: <20180118160359.29971-1-hdegoede@redhat.com> Sender: linux-acpi-owner@vger.kernel.org List-Id: linux-acpi@vger.kernel.org To: "Rafael J . Wysocki" , Len Brown , Bjorn Helgaas , Robert Moore , Lv Zheng Cc: Hans de Goede , linux-acpi@vger.kernel.org, linux-pci@vger.kernel.org, devel@acpica.org The battery code uses acpi_device->dep_unmet to check for unmet deps and if there are unmet deps it does not bind to the device to avoid errors about missing OpRegions when calling ACPI methods on the device. The missing OpRegions when there are unmet deps problem also applies to the _STA method of some battery devices and calling it too early results in errors like these: [ 0.123579] ACPI Error: No handler for Region [ECRM] (00000000ba9edc4c) [GenericSerialBus] (20170831/evregion-166) [ 0.123601] ACPI Error: Region GenericSerialBus (ID=9) has no handler (20170831/exfldio-299) [ 0.123618] ACPI Error: Method parse/execution failed \_SB.I2C1.BAT1._STA, AE_NOT_EXIST (20170831/psparse-550) This commit fixes these errors happening when acpi_get_bus_status gets called by checking dep_unmet for battery devices and reporting a status of 0 until all dependencies are met. Signed-off-by: Hans de Goede --- drivers/acpi/bus.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index 4d0979e02a28..1a5e36fab289 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c @@ -119,6 +119,12 @@ int acpi_bus_get_status(struct acpi_device *device) return 0; } + /* Battery devices must have their deps met before calling _STA */ + if (acpi_device_is_battery(device) && device->dep_unmet) { + acpi_set_device_status(device, 0); + return 0; + } + status = acpi_bus_get_status_handle(device->handle, &sta); if (ACPI_FAILURE(status)) return -ENODEV; -- 2.14.3