From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757591AbbKFTLe (ORCPT ); Fri, 6 Nov 2015 14:11:34 -0500 Received: from mail-pa0-f41.google.com ([209.85.220.41]:36188 "EHLO mail-pa0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751046AbbKFTLb (ORCPT ); Fri, 6 Nov 2015 14:11:31 -0500 Date: Fri, 6 Nov 2015 11:11:27 -0800 From: Eduardo Valentin To: Caesar Wang Cc: Heiko Stuebner , linux-rockchip@lists.infradead.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Zhang Rui , linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v2 5/9] thermal: rockchip: Add the flag for adc value increment or decrement Message-ID: <20151106191126.GC8202@localhost.localdomain> References: <1446700685-18017-1-git-send-email-wxt@rock-chips.com> <1446700685-18017-6-git-send-email-wxt@rock-chips.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1446700685-18017-6-git-send-email-wxt@rock-chips.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Nov 05, 2015 at 01:18:01PM +0800, Caesar Wang wrote: > The conversion table has the adc value and temperature. > In fact, the adc value only has the increment or decrement mode in > conversion table. > > Moment, we can add the flag to be better support the *code_to_temp* > for differenr SoCs. > > Signed-off-by: Caesar Wang > --- > > Changes in v2: None > Changes in v1: None > > drivers/thermal/rockchip_thermal.c | 64 ++++++++++++++++++++++++++++++-------- > 1 file changed, 51 insertions(+), 13 deletions(-) > > diff --git a/drivers/thermal/rockchip_thermal.c b/drivers/thermal/rockchip_thermal.c > index e828f18..9df027f 100644 > --- a/drivers/thermal/rockchip_thermal.c > +++ b/drivers/thermal/rockchip_thermal.c > @@ -53,6 +53,16 @@ enum sensor_id { > }; > > /** > +* The conversion table has the adc value and temperature. > +* ADC_DECREMENT is the adc value decremnet.(e.g. v2_code_table) > +* ADC_INCREMNET is the adc value incremnet.(e.g. v3_code_table) > +*/ > +enum adc_flag { > + ADC_DECREMENT = 0, > + ADC_INCREMENT, > +}; > + > +/** > * The max sensors is two in rockchip SoCs. > * Two sensors: CPU and GPU sensor. > */ > @@ -66,6 +76,9 @@ struct chip_tsadc_table { > > /* that analogic mask data */ > unsigned long data_mask; > + > + /* adc value is increment or decrement */ > + unsigned int flag; Maybe bool? And rename to something more meaningful? Or do you plan to have more conditions to test in your flag? > }; > > struct rockchip_tsadc_chip { > @@ -223,19 +236,43 @@ static int rk_tsadcv2_code_to_temp(struct chip_tsadc_table table, u32 code, > > WARN_ON(table.length < 2); > > - code &= table.data_mask; > - if (code < table.id[high].code) > + switch (table.flag) { > + case ADC_DECREMENT: > + code &= table.data_mask; > + if (code < table.id[high].code) > return -EAGAIN; /* Incorrect reading */ Add an indentation. > > - while (low <= high) { > - if (code >= table.id[mid].code && > - code < table.id[mid - 1].code) > - break; > - else if (code < table.id[mid].code) > - low = mid + 1; > - else > - high = mid - 1; > - mid = (low + high) / 2; > + while (low <= high) { > + if (code >= table.id[mid].code && > + code < table.id[mid - 1].code) > + break; > + else if (code < table.id[mid].code) > + low = mid + 1; > + else > + high = mid - 1; > + > + mid = (low + high) / 2; > + } > + break; > + case ADC_INCREMENT: > + code &= table.data_mask; > + if (code < table.id[low].code) > + return -EAGAIN; /* Incorrect reading */ > + add an indentation. > + while (low <= high) { > + if (code >= table.id[mid - 1].code && > + code < table.id[mid].code) > + break; > + else if (code > table.id[mid].code) > + low = mid + 1; > + else > + high = mid - 1; > + > + mid = (low + high) / 2; > + } > + break; > + default: > + pr_err("Invalid the table conversion\n"); > } > > /* > @@ -245,8 +282,8 @@ static int rk_tsadcv2_code_to_temp(struct chip_tsadc_table table, u32 code, > * to produce less granular result. > */ > num = table.id[mid].temp - v2_code_table[mid - 1].temp; > - num *= table.id[mid - 1].code - code; > - denom = table.id[mid - 1].code - table.id[mid].code; > + num *= abs(table.id[mid - 1].code - code); > + denom = abs(table.id[mid - 1].code - table.id[mid].code); > *temp = table.id[mid - 1].temp + (num / denom); > > return 0; > @@ -367,6 +404,7 @@ static const struct rockchip_tsadc_chip rk3288_tsadc_data = { > .id = v2_code_table, > .length = ARRAY_SIZE(v2_code_table), > .data_mask = TSADCV2_DATA_MASK, > + .flag = ADC_DECREMENT, > }, > }; > > -- > 1.9.1 >