ACPI: PMIC: allow drivers to provide a custom lpat_raw_to_temp() function
authorHans de Goede <hdegoede@redhat.com>
Fri, 26 Nov 2021 15:21:08 +0000 (16:21 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 8 Dec 2021 14:34:57 +0000 (15:34 +0100)
The LPAT tables used in the DSDT for some PMICs require special handling,
allow the PMIC OpRegion drivers to provide an alternative implementation
by adding a lpat_raw_to_temp function pointer to struct pmic_table;
and initialize this to the default acpi_lpat_raw_to_temp function
for all PMICs.

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

index 98bbfd9..f20dbda 100644 (file)
@@ -95,7 +95,7 @@ static int pmic_read_temp(struct intel_pmic_opregion *opregion,
                return 0;
        }
 
-       temp = acpi_lpat_raw_to_temp(opregion->lpat_table, raw_temp);
+       temp = opregion->data->lpat_raw_to_temp(opregion->lpat_table, raw_temp);
        if (temp < 0)
                return temp;
 
index 467a399..d956b03 100644 (file)
@@ -2,6 +2,8 @@
 #ifndef __INTEL_PMIC_H
 #define __INTEL_PMIC_H
 
+#include <acpi/acpi_lpat.h>
+
 struct pmic_table {
        int address;    /* operation region address */
        int reg;        /* corresponding thermal register */
@@ -17,6 +19,8 @@ struct intel_pmic_opregion_data {
        int (*update_policy)(struct regmap *r, int reg, int bit, int enable);
        int (*exec_mipi_pmic_seq_element)(struct regmap *r, u16 i2c_address,
                                          u32 reg_address, u32 value, u32 mask);
+       int (*lpat_raw_to_temp)(struct acpi_lpat_conversion_table *lpat_table,
+                               int raw);
        struct pmic_table *power_table;
        int power_table_count;
        struct pmic_table *thermal_table;
index 6620ce0..e247615 100644 (file)
@@ -376,6 +376,7 @@ static const struct intel_pmic_opregion_data intel_bxtwc_pmic_opregion_data = {
        .update_aux     = intel_bxtwc_pmic_update_aux,
        .get_policy     = intel_bxtwc_pmic_get_policy,
        .update_policy  = intel_bxtwc_pmic_update_policy,
+       .lpat_raw_to_temp = acpi_lpat_raw_to_temp,
        .power_table      = power_table,
        .power_table_count = ARRAY_SIZE(power_table),
        .thermal_table     = thermal_table,
index 8a1d895..9ea79f2 100644 (file)
@@ -278,6 +278,7 @@ static const struct intel_pmic_opregion_data intel_crc_pmic_opregion_data = {
        .update_aux     = intel_crc_pmic_update_aux,
        .get_policy     = intel_crc_pmic_get_policy,
        .update_policy  = intel_crc_pmic_update_policy,
+       .lpat_raw_to_temp = acpi_lpat_raw_to_temp,
        .power_table    = power_table,
        .power_table_count= ARRAY_SIZE(power_table),
        .thermal_table  = thermal_table,
index d8266d2..f9301c6 100644 (file)
@@ -24,6 +24,7 @@
  * CHT Crystal Cove PMIC.
  */
 static const struct intel_pmic_opregion_data intel_chtcrc_pmic_opregion_data = {
+       .lpat_raw_to_temp = acpi_lpat_raw_to_temp,
        .pmic_i2c_address = 0x6e,
 };
 
index cb444dd..418eec5 100644 (file)
@@ -98,6 +98,7 @@ static const struct intel_pmic_opregion_data chtdc_ti_pmic_opregion_data = {
        .get_power = chtdc_ti_pmic_get_power,
        .update_power = chtdc_ti_pmic_update_power,
        .get_raw_temp = chtdc_ti_pmic_get_raw_temp,
+       .lpat_raw_to_temp = acpi_lpat_raw_to_temp,
        .power_table = chtdc_ti_power_table,
        .power_table_count = ARRAY_SIZE(chtdc_ti_power_table),
        .thermal_table = chtdc_ti_thermal_table,
index 59385a9..f2c42f4 100644 (file)
@@ -257,6 +257,7 @@ static const struct intel_pmic_opregion_data intel_cht_wc_pmic_opregion_data = {
        .get_power              = intel_cht_wc_pmic_get_power,
        .update_power           = intel_cht_wc_pmic_update_power,
        .exec_mipi_pmic_seq_element = intel_cht_wc_exec_mipi_pmic_seq_element,
+       .lpat_raw_to_temp       = acpi_lpat_raw_to_temp,
        .power_table            = power_table,
        .power_table_count      = ARRAY_SIZE(power_table),
 };
index b5f4d81..e844bc1 100644 (file)
@@ -298,6 +298,7 @@ static const struct intel_pmic_opregion_data intel_xpower_pmic_opregion_data = {
        .update_power = intel_xpower_pmic_update_power,
        .get_raw_temp = intel_xpower_pmic_get_raw_temp,
        .exec_mipi_pmic_seq_element = intel_xpower_exec_mipi_pmic_seq_element,
+       .lpat_raw_to_temp = acpi_lpat_raw_to_temp,
        .power_table = power_table,
        .power_table_count = ARRAY_SIZE(power_table),
        .thermal_table = thermal_table,