From: Brian Norris <briannorris@chromium.org>
To: Caesar Wang <wxt@rock-chips.com>
Cc: edubezval@gmail.com, rui.zhang@intel.com,
linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
linux-rockchip@lists.infradead.org, heiko@sntech.de,
smbarber@chromium.org
Subject: Re: [PATCH 4/5] thermal: rockchip: optimize the conversion table
Date: Tue, 22 Nov 2016 13:47:40 -0800 [thread overview]
Message-ID: <20161122214739.GA46981@google.com> (raw)
In-Reply-To: <1479818088-6007-5-git-send-email-wxt@rock-chips.com>
On Tue, Nov 22, 2016 at 08:34:47PM +0800, Caesar Wang wrote:
> In order to support the valid temperature can conver to analog value.
> The rockchip thermal has not supported the all valid temperature.
>
> 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 report the error message before posting this patch.
Notably, this only printed an error in the kernel log. It didn't return
an error to the actual API, and instead it just programmed a 0 trip
point (or MASK, as of your previous patch). So you were lying to the
thermal core, which would still tell you that you programmed 68000 to
the trip point when you check:
cat trip_point_0_temp
It's important to describe what you're fixing, so please reword the
commit log a bit.
> Signed-off-by: Caesar Wang <wxt@rock-chips.com>
> ---
>
> drivers/thermal/rockchip_thermal.c | 23 +++++++++++++++++++++++
> 1 file changed, 23 insertions(+)
>
> diff --git a/drivers/thermal/rockchip_thermal.c b/drivers/thermal/rockchip_thermal.c
> index 535f1fa..f4d4be9 100644
> --- a/drivers/thermal/rockchip_thermal.c
> +++ b/drivers/thermal/rockchip_thermal.c
> @@ -401,6 +401,8 @@ 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;
> @@ -421,6 +423,27 @@ static u32 rk_tsadcv2_temp_to_code(const struct chip_tsadc_table *table,
> mid = (low + high) / 2;
> }
If you manage to exit the above loop, you're assuming that:
table->id[mid].temp < temp
I believe that's the case due to the round-down nature of the
mid = (low + high) / 2
computation, but it's still a bit hard to reason about your binary
search loop.
Anyway, I think this is correct, so if you improve the commit message:
Reviewed-by: Brian Norris <briannorris@chromium.org>
>
> + /*
> + * 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].code - table->id[mid + 1].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: invalid conversion 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
>
next prev parent reply other threads:[~2016-11-22 21:47 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-22 12:34 [PATCH 0/5] thermal: rockchip: optimization to improve the driver Caesar Wang
2016-11-22 12:34 ` [PATCH 1/5] thermal: rockchip: improve conversion error messages Caesar Wang
2016-11-22 12:34 ` [PATCH 2/5] thermal: rockchip: don't pass table structs by value Caesar Wang
2016-11-22 12:34 ` [PATCH 3/5] thermal: rockchip: fixes invalid temperature case Caesar Wang
2016-11-22 20:57 ` Brian Norris
2016-11-22 21:52 ` Brian Norris
[not found] ` <20161122215240.GA52900-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2016-11-23 2:06 ` Caesar Wang
2016-11-23 2:33 ` Brian Norris
2016-11-23 3:03 ` Caesar Wang
2016-11-23 4:36 ` Brian Norris
2016-11-22 12:34 ` [PATCH 4/5] thermal: rockchip: optimize the conversion table Caesar Wang
2016-11-22 21:47 ` Brian Norris [this message]
2016-11-22 12:34 ` [PATCH 5/5] thermal: rockchip: handle the set_trips without the trip points Caesar Wang
2016-11-22 20:51 ` Brian Norris
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=20161122214739.GA46981@google.com \
--to=briannorris@chromium.org \
--cc=edubezval@gmail.com \
--cc=heiko@sntech.de \
--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 \
--cc=wxt@rock-chips.com \
/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).