On Fri, Nov 26, 2021 at 04:21:08PM +0100, Hans de Goede wrote: > 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 acpi_lpat_raw_to_temp() > for all PMICs. Reviewed-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxx> (see one nit-pick below) > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> > --- > drivers/acpi/pmic/intel_pmic.c | 2 +- > drivers/acpi/pmic/intel_pmic.h | 4 ++++ > drivers/acpi/pmic/intel_pmic_bxtwc.c | 1 + > drivers/acpi/pmic/intel_pmic_bytcrc.c | 1 + > drivers/acpi/pmic/intel_pmic_chtcrc.c | 1 + > drivers/acpi/pmic/intel_pmic_chtdc_ti.c | 1 + > drivers/acpi/pmic/intel_pmic_chtwc.c | 1 + > drivers/acpi/pmic/intel_pmic_xpower.c | 1 + > 8 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/drivers/acpi/pmic/intel_pmic.c b/drivers/acpi/pmic/intel_pmic.c > index 98bbfd99c709..f20dbda1a831 100644 > --- a/drivers/acpi/pmic/intel_pmic.c > +++ b/drivers/acpi/pmic/intel_pmic.c > @@ -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; > > diff --git a/drivers/acpi/pmic/intel_pmic.h b/drivers/acpi/pmic/intel_pmic.h > index 467a39966dc8..d956b03a6ca0 100644 > --- a/drivers/acpi/pmic/intel_pmic.h > +++ b/drivers/acpi/pmic/intel_pmic.h > @@ -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); Can be on one line. > struct pmic_table *power_table; > int power_table_count; > struct pmic_table *thermal_table; > diff --git a/drivers/acpi/pmic/intel_pmic_bxtwc.c b/drivers/acpi/pmic/intel_pmic_bxtwc.c > index 6620ce0833f6..e247615189fa 100644 > --- a/drivers/acpi/pmic/intel_pmic_bxtwc.c > +++ b/drivers/acpi/pmic/intel_pmic_bxtwc.c > @@ -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, > diff --git a/drivers/acpi/pmic/intel_pmic_bytcrc.c b/drivers/acpi/pmic/intel_pmic_bytcrc.c > index 8a1d895ed689..9ea79f210965 100644 > --- a/drivers/acpi/pmic/intel_pmic_bytcrc.c > +++ b/drivers/acpi/pmic/intel_pmic_bytcrc.c > @@ -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, > diff --git a/drivers/acpi/pmic/intel_pmic_chtcrc.c b/drivers/acpi/pmic/intel_pmic_chtcrc.c > index d8266d22cd8e..f9301c6f098e 100644 > --- a/drivers/acpi/pmic/intel_pmic_chtcrc.c > +++ b/drivers/acpi/pmic/intel_pmic_chtcrc.c > @@ -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, > }; > > diff --git a/drivers/acpi/pmic/intel_pmic_chtdc_ti.c b/drivers/acpi/pmic/intel_pmic_chtdc_ti.c > index cb444ddec5a0..418eec523025 100644 > --- a/drivers/acpi/pmic/intel_pmic_chtdc_ti.c > +++ b/drivers/acpi/pmic/intel_pmic_chtdc_ti.c > @@ -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, > diff --git a/drivers/acpi/pmic/intel_pmic_chtwc.c b/drivers/acpi/pmic/intel_pmic_chtwc.c > index 59385a9a05e5..f2c42f4c79ca 100644 > --- a/drivers/acpi/pmic/intel_pmic_chtwc.c > +++ b/drivers/acpi/pmic/intel_pmic_chtwc.c > @@ -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), > }; > diff --git a/drivers/acpi/pmic/intel_pmic_xpower.c b/drivers/acpi/pmic/intel_pmic_xpower.c > index b5f4d81c621f..e844bc1f3df5 100644 > --- a/drivers/acpi/pmic/intel_pmic_xpower.c > +++ b/drivers/acpi/pmic/intel_pmic_xpower.c > @@ -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, > -- > 2.33.1 > -- With Best Regards, Andy Shevchenko