From patchwork Mon Nov 28 11:12:03 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Caesar Wang X-Patchwork-Id: 9449313 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 0B48D6071C for ; Mon, 28 Nov 2016 11:13:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EF85F20410 for ; Mon, 28 Nov 2016 11:13:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E41D326598; Mon, 28 Nov 2016 11:13:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 687A520410 for ; Mon, 28 Nov 2016 11:13:10 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.85_2 #1 (Red Hat Linux)) id 1cBJry-0006PY-0F; Mon, 28 Nov 2016 11:13:10 +0000 Received: from mail-pf0-f193.google.com ([209.85.192.193]) by bombadil.infradead.org with esmtps (Exim 4.85_2 #1 (Red Hat Linux)) id 1cBJrt-0006HF-Nr for linux-rockchip@lists.infradead.org; Mon, 28 Nov 2016 11:13:06 +0000 Received: by mail-pf0-f193.google.com with SMTP id 144so6348715pfv.0 for ; Mon, 28 Nov 2016 03:12:45 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=a9fS1jr9PSDvkxjnXN+WmK/oqrB/5youFxR1EZtD30Y=; b=H2+++ni8V5g1KU5FCxYNBPbtYWRCLkMlDfr7EZ1k7daddHdvv93LkQILBLNT39Vlbl PKREAcwKgY194WXrbdNeY3sm5irOeBcKk5kcVOWLDk721Os8oCyeT9euQ25NZwVHGTEj vLjKjeDZCs38PyTtoF7Ygq7Hh4NXoJnJurEclv2Y9whbVNxF8TxoXnLgGalblPlXl9nT wBU5iM9m+DofLAsJijDOZIYn8FhF4h8JvVyi+Z/j8HWJ7ooCgBXlksOJctwVri3m+G7h /3INi+xw6hdrtid2Mz8AFap+w0xwL1vL3IvwuD4pHsHsz0gRLohyN8PlPqKScWP/QR2b HlUA== X-Gm-Message-State: AKaTC013ZfVGmy97uy2yfXmOnn+kziMabQimY22FSgZ2IEEizmE5/bdE4bceSF6AUOWaTQ== X-Received: by 10.98.69.133 with SMTP id n5mr21392624pfi.160.1480331564842; Mon, 28 Nov 2016 03:12:44 -0800 (PST) Received: from localhost.localdomain ([103.29.142.67]) by smtp.gmail.com with ESMTPSA id y20sm86586905pfj.26.2016.11.28.03.12.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 28 Nov 2016 03:12:44 -0800 (PST) From: Caesar Wang To: rui.zhang@intel.com, edubezval@gmail.com Subject: [PATCH v3 4/5] thermal: rockchip: optimize the conversion table Date: Mon, 28 Nov 2016 19:12:03 +0800 Message-Id: <1480331524-18741-5-git-send-email-wxt@rock-chips.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1480331524-18741-1-git-send-email-wxt@rock-chips.com> References: <1480331524-18741-1-git-send-email-wxt@rock-chips.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20161128_031305_886284_04BBE05F X-CRM114-Status: GOOD ( 11.53 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: heiko@sntech.de, linux-pm@vger.kernel.org, briannorris@chromium.org, linux-kernel@vger.kernel.org, smbarber@chromium.org, linux-rockchip@lists.infradead.org, Caesar Wang MIME-Version: 1.0 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+patchwork-linux-rockchip=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP 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 Reviewed-by: Brian Norris --- 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 | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/thermal/rockchip_thermal.c b/drivers/thermal/rockchip_thermal.c index ca1730e..660ed3b 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; } + /* + * 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);