From patchwork Wed Nov 23 14:29:33 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Caesar Wang X-Patchwork-Id: 9443517 X-Patchwork-Delegate: eduardo.valentin@ti.com 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 742F960779 for ; Wed, 23 Nov 2016 14:31:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 678D426CFF for ; Wed, 23 Nov 2016 14:31:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5C9BF26D08; Wed, 23 Nov 2016 14:31:39 +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=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D765B26D05 for ; Wed, 23 Nov 2016 14:31:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S938587AbcKWOaO (ORCPT ); Wed, 23 Nov 2016 09:30:14 -0500 Received: from mail-pg0-f66.google.com ([74.125.83.66]:34272 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S937243AbcKWO35 (ORCPT ); Wed, 23 Nov 2016 09:29:57 -0500 Received: by mail-pg0-f66.google.com with SMTP id e9so1221589pgc.1; Wed, 23 Nov 2016 06:29:56 -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=OZZdkhBMbyVQmysvA30QT1qsSxmyhAhsxY812zVNiT8=; b=gT7pYH3rjf0A7ftSEY5FnI5F6oz3QpwrhTul3uP5ywREzYRjO2+jCi7VWSc7o7n984 fybYiV6cZknTyjnJucOm6NdV0T+H8ElKoXcWWLyShiQMGAPV21cRaMwbmc5yTrRYbP24 ODkYwif7cmOSvFoJSjpqRLBzc51nxo/KHdRi96gEPQnlfGtQjgClj51QkZuvG5dloxl/ qKiSedXlatevuqu3M+rL8b5UEockYSJK2QfmpZROPP+cUwHSDsqQK5e7OkznMQKGmX2F +9OKKrwxiRBbYFmmqeucKl/+3tIfQK/7RckyQxH44IW7Qupdq6KGiCOkT64G0k/Twl9H zekw== X-Gm-Message-State: AKaTC02rHVOrhQu3Is34ivNNKCxb6KmYDfxxhsHs5F6WWmiCNxXeNbRahmp0caA09aUdlQ== X-Received: by 10.98.4.134 with SMTP id 128mr3132335pfe.156.1479911396245; Wed, 23 Nov 2016 06:29:56 -0800 (PST) Received: from localhost.localdomain ([103.29.142.67]) by smtp.gmail.com with ESMTPSA id y29sm53385351pfd.63.2016.11.23.06.29.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 23 Nov 2016 06:29:55 -0800 (PST) From: Caesar Wang 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 Subject: [PATCH v2 4/5] thermal: rockchip: optimize the conversion table Date: Wed, 23 Nov 2016 22:29:33 +0800 Message-Id: <1479911374-22006-5-git-send-email-wxt@rock-chips.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1479911374-22006-1-git-send-email-wxt@rock-chips.com> References: <1479911374-22006-1-git-send-email-wxt@rock-chips.com> Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.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 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 e243e40..0d50df7 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);