stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Hans de Goede <hdegoede@redhat.com>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
Subject: [PATCH 4.20 32/57] ACPI / PMIC: xpower: Fix TS-pin current-source handling
Date: Tue, 15 Jan 2019 17:36:13 +0100	[thread overview]
Message-ID: <20190115154912.512345811@linuxfoundation.org> (raw)
In-Reply-To: <20190115154910.734892368@linuxfoundation.org>

4.20-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Hans de Goede <hdegoede@redhat.com>

commit 2b531d71595d2b5b12782a49b23c335869e2621e upstream.

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: 58eefe2f3f53 (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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/acpi/pmic/intel_pmic_xpower.c |   41 +++++++++++++++++++++++++++-------
 1 file changed, 33 insertions(+), 8 deletions(-)

--- a/drivers/acpi/pmic/intel_pmic_xpower.c
+++ b/drivers/acpi/pmic/intel_pmic_xpower.c
@@ -20,8 +20,11 @@
 #define GPI1_LDO_ON		(3 << 0)
 #define GPI1_LDO_OFF		(4 << 0)
 
-#define AXP288_ADC_TS_PIN_GPADC	0xf2
-#define AXP288_ADC_TS_PIN_ON	0xf3
+#define AXP288_ADC_TS_CURRENT_ON_OFF_MASK		GENMASK(1, 0)
+#define AXP288_ADC_TS_CURRENT_OFF			(0 << 0)
+#define AXP288_ADC_TS_CURRENT_ON_WHEN_CHARGING		(1 << 0)
+#define AXP288_ADC_TS_CURRENT_ON_ONDEMAND		(2 << 0)
+#define AXP288_ADC_TS_CURRENT_ON			(3 << 0)
 
 static struct pmic_table power_table[] = {
 	{
@@ -212,22 +215,44 @@ out:
  */
 static int intel_xpower_pmic_get_raw_temp(struct regmap *regmap, int reg)
 {
+	int ret, adc_ts_pin_ctrl;
 	u8 buf[2];
-	int ret;
 
-	ret = regmap_write(regmap, AXP288_ADC_TS_PIN_CTRL,
-			   AXP288_ADC_TS_PIN_GPADC);
+	/*
+	 * 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.
+	 *
+	 * Note that the switching from on to on-ondemand is not necessary
+	 * when the TS current-source is off (this happens on devices which
+	 * do not use the TS-pin).
+	 */
+	ret = regmap_read(regmap, AXP288_ADC_TS_PIN_CTRL, &adc_ts_pin_ctrl);
 	if (ret)
 		return ret;
 
-	/* After switching to the GPADC pin give things some time to settle */
-	usleep_range(6000, 10000);
+	if (adc_ts_pin_ctrl & AXP288_ADC_TS_CURRENT_ON_OFF_MASK) {
+		ret = regmap_update_bits(regmap, AXP288_ADC_TS_PIN_CTRL,
+					 AXP288_ADC_TS_CURRENT_ON_OFF_MASK,
+					 AXP288_ADC_TS_CURRENT_ON_ONDEMAND);
+		if (ret)
+			return ret;
+
+		/* Wait a bit after switching the current-source */
+		usleep_range(6000, 10000);
+	}
 
 	ret = regmap_bulk_read(regmap, AXP288_GP_ADC_H, buf, 2);
 	if (ret == 0)
 		ret = (buf[0] << 4) + ((buf[1] >> 4) & 0x0f);
 
-	regmap_write(regmap, AXP288_ADC_TS_PIN_CTRL, AXP288_ADC_TS_PIN_ON);
+	if (adc_ts_pin_ctrl & AXP288_ADC_TS_CURRENT_ON_OFF_MASK) {
+		regmap_update_bits(regmap, AXP288_ADC_TS_PIN_CTRL,
+				   AXP288_ADC_TS_CURRENT_ON_OFF_MASK,
+				   AXP288_ADC_TS_CURRENT_ON);
+	}
 
 	return ret;
 }



  parent reply	other threads:[~2019-01-15 16:45 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-15 16:35 [PATCH 4.20 00/57] 4.20.3-stable review Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 01/57] powerpc/tm: Unset MSR[TS] if not recheckpointing Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 02/57] Btrfs: fix deadlock when using free space tree due to block group creation Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 03/57] usbcore: Select only first configuration for non-UAC3 compliant devices Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 04/57] staging: rtl8188eu: Fix module loading from tasklet for CCMP encryption Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 05/57] staging: rtl8188eu: Fix module loading from tasklet for WEP encryption Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 06/57] cpufreq: scpi/scmi: Fix freeing of dynamic OPPs Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 07/57] cpufreq: scmi: Fix frequency invariance in slow path Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 08/57] x86, modpost: Replace last remnants of RETPOLINE with CONFIG_RETPOLINE Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 09/57] ALSA: hda/realtek - Support Dell headset mode for New AIO platform Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 10/57] ALSA: hda/realtek - Add unplug function into unplug state of Headset Mode for ALC225 Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 11/57] ALSA: hda/realtek - Disable headset Mic VREF for headset mode of ALC225 Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 12/57] CIFS: Fix adjustment of credits for MTU requests Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 13/57] CIFS: Do not set credits to 1 if the server didnt grant anything Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 14/57] CIFS: Do not hide EINTR after sending network packets Greg Kroah-Hartman
2019-01-15 19:22   ` Pavel Shilovskiy
2019-01-16  6:37     ` Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 15/57] CIFS: Fix credit computation for compounded requests Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 16/57] cifs: Fix potential OOB access of lock element array Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 17/57] cifs: check kzalloc return Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 18/57] ARM: davinci: dm355-evm: fix label names in GPIO lookup entries Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 19/57] ARM: davinci: da850-evm: " Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 20/57] ARM: davinci: omapl138-hawk: " Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 21/57] ARM: davinci: dm644x-evm: " Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 22/57] ARM: davinci: da830-evm: " Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 23/57] usb: cdc-acm: send ZLP for Telit 3G Intel based modems Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 24/57] USB: storage: dont insert sane sense for SPC3+ when bad sense specified Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 25/57] USB: storage: add quirk for SMI SM3350 Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 26/57] USB: Add USB_QUIRK_DELAY_CTRL_MSG quirk for Corsair K70 RGB Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 27/57] fork, memcg: fix cached_stacks case Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 28/57] slab: alien caches must not be initialized if the allocation of the alien cache failed Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 29/57] mm/usercopy.c: no check page span for stack objects Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 30/57] mm, memcg: fix reclaim deadlock with writeback Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 31/57] ACPI: power: Skip duplicate power resource references in _PRx Greg Kroah-Hartman
2019-01-15 16:36 ` Greg Kroah-Hartman [this message]
2019-01-15 16:36 ` [PATCH 4.20 33/57] ACPI/IORT: Fix rc_dma_get_range() Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 34/57] i2c: dev: prevent adapter retries and timeout being set as minus value Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 35/57] mtd: rawnand: qcom: fix memory corruption that causes panic Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 36/57] vfio/type1: Fix unmap overflow off-by-one Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 37/57] drm/amdgpu: Add new VegaM pci id Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 38/57] PCI: dwc: Use interrupt masking instead of disabling Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 39/57] PCI: dwc: Take lock when ACKing an interrupt Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 40/57] PCI: dwc: Move interrupt acking into the proper callback Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 41/57] drm/amd/display: Fix MST dp_blank REG_WAIT timeout Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 42/57] drm/fb-helper: Partially bring back workaround for bugs of SDL 1.2 Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 43/57] drm/i915: Unwind failure on pinning the gen7 ppgtt Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 44/57] drm/amdgpu: Dont ignore rc from drm_dp_mst_topology_mgr_resume() Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 45/57] drm/amdgpu: Dont fail resume process if resuming atomic state fails Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 46/57] rbd: dont return 0 on unmap if RBD_DEV_FLAG_REMOVING is set Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 47/57] ext4: make sure enough credits are reserved for dioread_nolock writes Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 48/57] ext4: fix a potential fiemap/page fault deadlock w/ inline_data Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 49/57] ext4: avoid kernel warning when writing the superblock to a dead device Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 50/57] ext4: use ext4_write_inode() when fsyncing w/o a journal Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 51/57] ext4: track writeback errors using the generic tracking infrastructure Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 52/57] ext4: fix special inode number checks in __ext4_iget() Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 53/57] mm: page_mapped: dont assume compound page is huge or THP Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 54/57] sunrpc: use-after-free in svc_process_common() Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 55/57] Btrfs: fix access to available allocation bits when starting balance Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 56/57] Btrfs: fix deadlock when enabling quotas due to concurrent snapshot creation Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 57/57] Btrfs: use nofs context when initializing security xattrs to avoid deadlock Greg Kroah-Hartman
2019-01-16  2:00 ` [PATCH 4.20 00/57] 4.20.3-stable review shuah
2019-01-16  6:56   ` Greg Kroah-Hartman
2019-01-16 11:47 ` Naresh Kamboju
2019-01-16 16:13   ` Greg Kroah-Hartman
2019-01-16 20:38 ` Guenter Roeck
2019-01-16 21:45   ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190115154912.512345811@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=hdegoede@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rafael.j.wysocki@intel.com \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).