linux/drivers/acpi/pmic
Hans de Goede 2b531d7159 ACPI / PMIC: xpower: Fix TS-pin current-source handling
The current-source used for the battery temp-sensor (TS) is shared with the
GPADC. For proper fuel-gauge and charger operation the TS current-source
needs to be permanently on. But to read the GPADC we need to temporary
switch the TS current-source to ondemand, so that the GPADC can use it,
otherwise we will always read an all 0 value.

The switching from on to on-ondemand is not necessary when the TS
current-source is off (this happens on devices which do not have a TS).

Prior to this commit there were 2 issues with our handling of the TS
current-source switching:

 1) We were writing hardcoded values to the ADC TS pin-ctrl register,
 overwriting various other unrelated bits. Specifically we were overwriting
 the current-source setting for the TS and GPIO0 pins, forcing it to 80ųA
 independent of its original setting. On a Chuwi Vi10 tablet this was
 causing us to get a too high adc value (due to a too high current-source)
 resulting in acpi_lpat_raw_to_temp() returning -ENOENT, resulting in:

ACPI Error: AE_ERROR, Returned by Handler for [UserDefinedRegion]
ACPI Error: Method parse/execution failed \_SB.SXP1._TMP, AE_ERROR

This commit fixes this by using regmap_update_bits to change only the
relevant bits.

 2) At the end of intel_xpower_pmic_get_raw_temp() we were unconditionally
 enabling the TS current-source even on devices where the TS-pin is not used
 and the current-source thus was off on entry of the function.

This commit fixes this by checking if the TS current-source is off when
entering intel_xpower_pmic_get_raw_temp() and if so it is left as is.

Fixes: 58eefe2f3f (ACPI / PMIC: xpower: Do pinswitch ... reading GPADC)
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: 4.14+ <stable@vger.kernel.org> # 4.14+
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-01-07 12:21:38 +01:00
..
intel_pmic.c ACPI / PMIC: remove modular references from non-modular code 2016-07-16 03:03:14 +02:00
intel_pmic.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
intel_pmic_bxtwc.c ACPI / PMIC: Convert drivers to use SPDX identifier 2018-09-10 12:57:55 +02:00
intel_pmic_chtdc_ti.c ACPI / PMIC: Convert drivers to use SPDX identifier 2018-09-10 12:57:55 +02:00
intel_pmic_chtwc.c ACPI / PMIC: Convert drivers to use SPDX identifier 2018-09-10 12:57:55 +02:00
intel_pmic_crc.c ACPI / PMIC: Convert drivers to use SPDX identifier 2018-09-10 12:57:55 +02:00
intel_pmic_xpower.c ACPI / PMIC: xpower: Fix TS-pin current-source handling 2019-01-07 12:21:38 +01:00
tps68470_pmic.c ACPI / PMIC: Sort headers alphabetically 2018-09-10 12:57:04 +02:00