From patchwork Mon Dec 12 11:05:34 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Caesar Wang X-Patchwork-Id: 9470433 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 7E58360573 for ; Mon, 12 Dec 2016 11:06:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6FA0D2845A for ; Mon, 12 Dec 2016 11:06:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6462628472; Mon, 12 Dec 2016 11:06: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.4 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM 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 18F4E2845A for ; Mon, 12 Dec 2016 11:06:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932687AbcLLLGL (ORCPT ); Mon, 12 Dec 2016 06:06:11 -0500 Received: from mail-pf0-f196.google.com ([209.85.192.196]:35389 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932181AbcLLLGK (ORCPT ); Mon, 12 Dec 2016 06:06:10 -0500 Received: by mail-pf0-f196.google.com with SMTP id i88so381121pfk.2; Mon, 12 Dec 2016 03:06:10 -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=voggPDbCcyZXMw2+vN1Jj153smsOmXlTg4qgtQj9zDw=; b=OtxYZlzGPTIz/3crCaKqdkS5Jt54hg63f2uaQPAhjt1gkesNYtM5URyvoNd9l58MGV /UoAcC1QqpEQ+Oi4tonER4med6LMRwG4exEPxHoVGp/Wy1hbWRmQkaz7qMhMhaCDRJh5 fQa5l4+nquGF7gSNSO09uzLDmS0PwNPJESZvHQo69hD5/4/GCqJCzZcJSgyxMi2bKUn6 crz+cN5dBlGVHH9PHvNF1k/8rRLBKVaOXJXFKswlFyuTTCNvHxJFivDJkM0eH/jC6wDe XqUdxkB1nKFW38BYg3LAJ/0xCB0GvkrlefU+NyVUKEt30Zl3vBX9MVLW+SzQPXEgMoxE sVPw== X-Gm-Message-State: AKaTC0375c5IMk4mADsaId/bQOAKkxfW0EwBy2nxMZIcaUGHY2vn36g4llV/uHfe2VyHBA== X-Received: by 10.98.144.213 with SMTP id q82mr94215731pfk.56.1481540769921; Mon, 12 Dec 2016 03:06:09 -0800 (PST) Received: from localhost.localdomain ([47.89.33.70]) by smtp.gmail.com with ESMTPSA id i124sm76047411pgd.15.2016.12.12.03.06.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 12 Dec 2016 03:06:08 -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 v4 4/5] thermal: rockchip: optimize the conversion table Date: Mon, 12 Dec 2016 19:05:34 +0800 Message-Id: <1481540735-12710-5-git-send-email-wxt@rock-chips.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1481540735-12710-1-git-send-email-wxt@rock-chips.com> References: <1481540735-12710-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 --- 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);