All of lore.kernel.org
 help / color / mirror / Atom feed
From: Caesar Wang <wxt@rock-chips.com>
To: edubezval@gmail.com, rui.zhang@intel.com
Cc: linux-rockchip@lists.infradead.org, linux-pm@vger.kernel.org,
	briannorris@chromium.org, linux-kernel@vger.kernel.org,
	smbarber@chromium.org, Caesar Wang <wxt@rock-chips.com>
Subject: [PATCH v4 4/5] thermal: rockchip: optimize the conversion table
Date: Mon, 12 Dec 2016 19:05:34 +0800	[thread overview]
Message-ID: <1481540735-12710-5-git-send-email-wxt@rock-chips.com> (raw)
In-Reply-To: <1481540735-12710-1-git-send-email-wxt@rock-chips.com>

In order to support the valid temperature can conver to analog value.
The rockchip thermal driver has not supported the all valid temperature
to convert the analog value. (e.g.: 61C, 62C, 63C....)

For example:
In some cases, we need adjust the trip point.
$cd /sys/class/thermal/thermal_zone*
$echo 68000 > trip_point_0_temp
That will return the max analogic value indicates the invalid before
posting this patch.

So, this patch will optimize the conversion table to support the other
cases.

Signed-off-by: Caesar Wang <wxt@rock-chips.com>
---

Changes in v4:
- Print a better name.
- As Eduardo commented on https://patchwork.kernel.org/patch/9449313/
- remove the Brain's review for previous version, since the new version
  update something.

Changes in v3: None
Changes in v2:
- improve the commit as Brian commnets on https://patchwork.kernel.org/patch/9440985

Changes in v1: None

 drivers/thermal/rockchip_thermal.c | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/drivers/thermal/rockchip_thermal.c b/drivers/thermal/rockchip_thermal.c
index f027b86..cacc12b 100644
--- a/drivers/thermal/rockchip_thermal.c
+++ b/drivers/thermal/rockchip_thermal.c
@@ -317,6 +317,7 @@ static const struct tsadc_table rk3288_code_table[] = {
 	{3452, 115000},
 	{3437, 120000},
 	{3421, 125000},
+	{0, 125000},
 };
 
 static const struct tsadc_table rk3368_code_table[] = {
@@ -401,10 +402,12 @@ static u32 rk_tsadcv2_temp_to_code(const struct chip_tsadc_table *table,
 				   int temp)
 {
 	int high, low, mid;
+	unsigned long num;
+	unsigned int denom;
 	u32 error = table->data_mask;
 
 	low = 0;
-	high = table->length - 1;
+	high = (table->length - 1) - 1; /* ignore the last check for table */
 	mid = (high + low) / 2;
 
 	/* Return mask code data when the temp is over table range */
@@ -421,6 +424,26 @@ static u32 rk_tsadcv2_temp_to_code(const struct chip_tsadc_table *table,
 		mid = (low + high) / 2;
 	}
 
+	/*
+	 * The conversion code granularity provided by the table. Let's
+	 * assume that the relationship between temperature and
+	 * analog value between 2 table entries is linear and interpolate
+	 * to produce less granular result.
+	 */
+	num = abs(table->id[mid + 1].code - table->id[mid].code);
+	num *= temp - table->id[mid].temp;
+	denom = table->id[mid + 1].temp - table->id[mid].temp;
+
+	switch (table->mode) {
+	case ADC_DECREMENT:
+		return table->id[mid].code - (num / denom);
+	case ADC_INCREMENT:
+		return table->id[mid].code + (num / denom);
+	default:
+		pr_err("%s: unknown table mode: %d\n", __func__, table->mode);
+		return error;
+	}
+
 exit:
 	pr_err("%s: invalid temperature, temp=%d error=%d\n",
 	       __func__, temp, error);
-- 
2.7.4

  parent reply	other threads:[~2016-12-12 11:06 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-12 11:05 [PATCH v4 0/5] thermal: fixes the rockchip thermal Caesar Wang
2016-12-12 11:05 ` [PATCH v4 1/5] thermal: rockchip: improve conversion error messages Caesar Wang
2016-12-12 11:05 ` [PATCH v4 2/5] thermal: rockchip: don't pass table structs by value Caesar Wang
2016-12-12 11:05 ` [PATCH v4 3/5] thermal: rockchip: fixes invalid temperature case Caesar Wang
2016-12-12 11:05   ` Caesar Wang
2016-12-12 11:05 ` Caesar Wang [this message]
2016-12-12 11:05 ` [PATCH v4 5/5] thermal: rockchip: handle set_trips without the trip points Caesar Wang
2016-12-30 16:11 ` [PATCH v4 0/5] thermal: fixes the rockchip thermal ayaka
2017-01-02 13:16   ` Caesar Wang
2017-01-02 23:57     ` Randy Li
2017-01-02 23:57       ` Randy Li
2017-01-03  1:02       ` Caesar Wang
2017-01-03  1:13         ` Randy Li
2017-01-03 16:30           ` ayaka
2017-01-03 16:30             ` ayaka
2017-01-14 16:54             ` Eduardo Valentin
2017-01-15  3:35               ` ayaka

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=1481540735-12710-5-git-send-email-wxt@rock-chips.com \
    --to=wxt@rock-chips.com \
    --cc=briannorris@chromium.org \
    --cc=edubezval@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=rui.zhang@intel.com \
    --cc=smbarber@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.