All of lore.kernel.org
 help / color / mirror / Atom feed
From: Amit Kucheria <amit.kucheria@linaro.org>
To: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org,
	bjorn.andersson@linaro.org, edubezval@gmail.com,
	agross@kernel.org, masneyb@onstation.org, swboyd@chromium.org,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Rob Herring <robh+dt@kernel.org>, Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Subject: [PATCH v3 14/15] drivers: thermal: tsens: Create function to return sign-extended temperature
Date: Wed, 11 Sep 2019 12:46:31 +0530	[thread overview]
Message-ID: <a70e3fd63774f87d24374c12f63c2f311d6d4ba5.1568185732.git.amit.kucheria@linaro.org> (raw)
In-Reply-To: <cover.1568185732.git.amit.kucheria@linaro.org>
In-Reply-To: <cover.1568185732.git.amit.kucheria@linaro.org>

Hide the details of how to convert values read from TSENS HW to mCelsius
behind a function. All versions of the IP can be supported as a result.

Signed-off-by: Amit Kucheria <amit.kucheria@linaro.org>
---
 drivers/thermal/qcom/tsens-common.c | 50 +++++++++++++++++++++--------
 1 file changed, 36 insertions(+), 14 deletions(-)

diff --git a/drivers/thermal/qcom/tsens-common.c b/drivers/thermal/qcom/tsens-common.c
index ea2c46cc6a66..6b6b3841c2d0 100644
--- a/drivers/thermal/qcom/tsens-common.c
+++ b/drivers/thermal/qcom/tsens-common.c
@@ -84,13 +84,46 @@ static inline int code_to_degc(u32 adc_code, const struct tsens_sensor *s)
 	return degc;
 }
 
+/**
+ * tsens_hw_to_mC - Return sign-extended temperature in mCelsius.
+ * @s:     Pointer to sensor struct
+ * @field: Index into regmap_field array pointing to temperature data
+ *
+ * This function handles temperature returned in ADC code or deciCelsius
+ * depending on IP version.
+ *
+ * Return: Temperature in milliCelsius on success, a negative errno will
+ * be returned in error cases
+ */
+static int tsens_hw_to_mC(struct tsens_sensor *s, int field)
+{
+	struct tsens_priv *priv = s->priv;
+	u32 resolution;
+	u32 temp = 0;
+	int ret;
+
+	resolution = priv->fields[LAST_TEMP_0].msb -
+		priv->fields[LAST_TEMP_0].lsb;
+
+	ret = regmap_field_read(priv->rf[field], &temp);
+	if (ret)
+		return ret;
+
+	/* Convert temperature from ADC code to milliCelsius */
+	if (priv->feat->adc)
+		return code_to_degc(temp, s) * 1000;
+
+	/* deciCelsius -> milliCelsius along with sign extension */
+	return sign_extend32(temp, resolution) * 100;
+}
+
 int get_temp_tsens_valid(struct tsens_sensor *s, int *temp)
 {
 	struct tsens_priv *priv = s->priv;
 	int hw_id = s->hw_id;
 	u32 temp_idx = LAST_TEMP_0 + hw_id;
 	u32 valid_idx = VALID_0 + hw_id;
-	u32 last_temp = 0, valid, mask;
+	u32 valid;
 	int ret;
 
 	ret = regmap_field_read(priv->rf[valid_idx], &valid);
@@ -108,19 +141,7 @@ int get_temp_tsens_valid(struct tsens_sensor *s, int *temp)
 	}
 
 	/* Valid bit is set, OK to read the temperature */
-	ret = regmap_field_read(priv->rf[temp_idx], &last_temp);
-	if (ret)
-		return ret;
-
-	if (priv->feat->adc) {
-		/* Convert temperature from ADC code to milliCelsius */
-		*temp = code_to_degc(last_temp, s) * 1000;
-	} else {
-		mask = GENMASK(priv->fields[LAST_TEMP_0].msb,
-			       priv->fields[LAST_TEMP_0].lsb);
-		/* Convert temperature from deciCelsius to milliCelsius */
-		*temp = sign_extend32(last_temp, fls(mask) - 1) * 100;
-	}
+	*temp = tsens_hw_to_mC(s, temp_idx);
 
 	return 0;
 }
@@ -310,6 +331,7 @@ int __init init_common(struct tsens_priv *priv)
 			goto err_put_device;
 		}
 	}
+
 	for (i = 0, j = VALID_0; i < priv->feat->max_sensors; i++, j++) {
 		priv->rf[j] = devm_regmap_field_alloc(dev, priv->tm_map,
 						      priv->fields[j]);
-- 
2.17.1


  parent reply	other threads:[~2019-09-11  7:17 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-11  7:16 [PATCH v3 00/15] thermal: qcom: tsens: Add interrupt support Amit Kucheria
2019-09-11  7:16 ` [PATCH v3 01/15] drivers: thermal: tsens: Get rid of id field in tsens_sensor Amit Kucheria
2019-09-11  7:16 ` [PATCH v3 02/15] drivers: thermal: tsens: Simplify code flow in tsens_probe Amit Kucheria
2019-09-11  7:16 ` [PATCH v3 03/15] drivers: thermal: tsens: Add __func__ identifier to debug statements Amit Kucheria
2019-09-11  7:16 ` [PATCH v3 04/15] drivers: thermal: tsens: Add debugfs support Amit Kucheria
2019-09-11  7:16 ` [PATCH v3 05/15] arm: dts: msm8974: thermal: Add thermal zones for each sensor Amit Kucheria
2019-09-11  7:16 ` [PATCH v3 06/15] arm64: dts: msm8916: thermal: Fixup HW ids for cpu sensors Amit Kucheria
2019-09-11  7:16 ` [PATCH v3 07/15] dt-bindings: thermal: tsens: Convert over to a yaml schema Amit Kucheria
2019-09-17 19:06   ` Rob Herring
2019-09-20 21:42     ` Amit Kucheria
2019-09-20 21:42       ` Amit Kucheria
2019-09-11  7:16 ` [PATCH v3 08/15] arm64: dts: sdm845: thermal: Add interrupt support Amit Kucheria
2019-09-11  7:16 ` [PATCH v3 09/15] arm64: dts: msm8996: " Amit Kucheria
2019-09-11  7:16 ` [PATCH v3 10/15] arm64: dts: msm8998: " Amit Kucheria
2019-09-11  7:16 ` [PATCH v3 11/15] arm64: dts: qcs404: " Amit Kucheria
2019-09-11  7:16 ` [PATCH v3 12/15] arm: dts: msm8974: " Amit Kucheria
2019-09-11  7:16 ` [PATCH v3 13/15] arm64: dts: msm8916: " Amit Kucheria
2019-09-11  7:16 ` Amit Kucheria [this message]
2019-09-11  7:16 ` [PATCH v3 15/15] drivers: thermal: tsens: " Amit Kucheria

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=a70e3fd63774f87d24374c12f63c2f311d6d4ba5.1568185732.git.amit.kucheria@linaro.org \
    --to=amit.kucheria@linaro.org \
    --cc=agross@kernel.org \
    --cc=bjorn.andersson@linaro.org \
    --cc=daniel.lezcano@linaro.org \
    --cc=edubezval@gmail.com \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=masneyb@onstation.org \
    --cc=robh+dt@kernel.org \
    --cc=rui.zhang@intel.com \
    --cc=swboyd@chromium.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.