]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ACPI / PMIC: Do not register handlers for unhandled OpRegions
authorHans de Goede <hdegoede@redhat.com>
Thu, 24 Oct 2019 21:38:24 +0000 (23:38 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 25 Oct 2019 09:43:08 +0000 (11:43 +0200)
For some model PMIC's used on Intel boards we do not know how to
handle the power or thermal opregions because we have no documentation.

For example in the intel_pmic_chtwc.c driver thermal_table_count is 0,
which means that our PMIC_THERMAL_OPREGION_ID handler will always fail
with AE_BAD_PARAMETER, in this case it is better to simply not register
the handler at all.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/pmic/intel_pmic.c

index 452041398b347f67919f002b148730129919276e..a371f273f99dd59de3a4d13eaa3e9d888def59bc 100644 (file)
@@ -252,7 +252,7 @@ int intel_pmic_install_opregion_handler(struct device *dev, acpi_handle handle,
                                        struct regmap *regmap,
                                        struct intel_pmic_opregion_data *d)
 {
-       acpi_status status;
+       acpi_status status = AE_OK;
        struct intel_pmic_opregion *opregion;
        int ret;
 
@@ -270,7 +270,8 @@ int intel_pmic_install_opregion_handler(struct device *dev, acpi_handle handle,
        opregion->regmap = regmap;
        opregion->lpat_table = acpi_lpat_get_conversion_table(handle);
 
-       status = acpi_install_address_space_handler(handle,
+       if (d->power_table_count)
+               status = acpi_install_address_space_handler(handle,
                                                    PMIC_POWER_OPREGION_ID,
                                                    intel_pmic_power_handler,
                                                    NULL, opregion);
@@ -279,7 +280,8 @@ int intel_pmic_install_opregion_handler(struct device *dev, acpi_handle handle,
                goto out_error;
        }
 
-       status = acpi_install_address_space_handler(handle,
+       if (d->thermal_table_count)
+               status = acpi_install_address_space_handler(handle,
                                                    PMIC_THERMAL_OPREGION_ID,
                                                    intel_pmic_thermal_handler,
                                                    NULL, opregion);
@@ -301,12 +303,16 @@ int intel_pmic_install_opregion_handler(struct device *dev, acpi_handle handle,
        return 0;
 
 out_remove_thermal_handler:
-       acpi_remove_address_space_handler(handle, PMIC_THERMAL_OPREGION_ID,
-                                         intel_pmic_thermal_handler);
+       if (d->thermal_table_count)
+               acpi_remove_address_space_handler(handle,
+                                                 PMIC_THERMAL_OPREGION_ID,
+                                                 intel_pmic_thermal_handler);
 
 out_remove_power_handler:
-       acpi_remove_address_space_handler(handle, PMIC_POWER_OPREGION_ID,
-                                         intel_pmic_power_handler);
+       if (d->power_table_count)
+               acpi_remove_address_space_handler(handle,
+                                                 PMIC_POWER_OPREGION_ID,
+                                                 intel_pmic_power_handler);
 
 out_error:
        acpi_lpat_free_conversion_table(opregion->lpat_table);