Skip to content
  • Hans de Goede's avatar
    ACPI / PMIC: xpower: Fix TS-pin current-source handling · 2b531d71
    Hans de Goede authored
    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: 58eefe2f
    
     (ACPI / PMIC: xpower: Do pinswitch ... reading GPADC)
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Acked-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
    Cc: 4.14+ <stable@vger.kernel.org> # 4.14+
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    2b531d71