Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752807AbbKID30 (ORCPT ); Sun, 8 Nov 2015 22:29:26 -0500 Received: from mail-pa0-f43.google.com ([209.85.220.43]:34542 "EHLO mail-pa0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752062AbbKID3T (ORCPT ); Sun, 8 Nov 2015 22:29:19 -0500 Subject: Re: [PATCH v2 5/9] thermal: rockchip: Add the flag for adc value increment or decrement To: Eduardo Valentin References: <1446700685-18017-1-git-send-email-wxt@rock-chips.com> <1446700685-18017-6-git-send-email-wxt@rock-chips.com> <20151106191126.GC8202@localhost.localdomain> <563E1B07.4060108@gmail.com> Cc: Caesar Wang , Heiko Stuebner , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, Zhang Rui , linux-arm-kernel@lists.infradead.org From: Caesar Wang Message-ID: <56401308.4060602@gmail.com> Date: Mon, 9 Nov 2015 11:29:12 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <563E1B07.4060108@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5373 Lines: 176 在 2015年11月07日 23:38, Caesar Wang 写道: > Hello Eduardo, > > 在 2015年11月07日 03:11, Eduardo Valentin 写道: >> 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; Sorry, I think to use the enum type will be better. Says: enum adc_sort_flag sort_flag; or enum adc_sort_mode mode; >> >> Maybe bool? And rename to something more meaningful? > > Sure, that should be a bool type. > I guess the rename in sort_flag......(maybe will have a better name) > > >> >> Or do you plan to have more conditions to test in your flag? > > Moment, the flag (increment or decrement) can support all the rockchip > series SoCs have thermal function. > >>> }; >>> 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. > > Thanks, will be fixed in next patch. > > >>> - 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. > > Ditto. > > Thanks, > Caesar >> >>> + 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 >>> >> _______________________________________________ >> linux-arm-kernel mailing list >> linux-arm-kernel@lists.infradead.org >> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > > -- Thanks, Caesar -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/