From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932074AbbIWPSI (ORCPT ); Wed, 23 Sep 2015 11:18:08 -0400 Received: from mail-db3on0101.outbound.protection.outlook.com ([157.55.234.101]:55223 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751754AbbIWPSE (ORCPT ); Wed, 23 Sep 2015 11:18:04 -0400 X-Greylist: delayed 5616 seconds by postgrey-1.27 at vger.kernel.org; Wed, 23 Sep 2015 11:18:04 EDT Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=bhuvanchandra.dv@toradex.com; From: Bhuvanchandra DV To: , CC: , , , , , , , , Bhuvanchandra DV Subject: [PATCH] vf610_adc: Fix internal temperature calculation Date: Wed, 23 Sep 2015 19:13:27 +0530 Message-ID: <1443015807-17764-1-git-send-email-bhuvanchandra.dv@toradex.com> X-Mailer: git-send-email 2.5.0 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [115.115.225.206] X-ClientProxiedBy: SG2PR03CA0034.apcprd03.prod.outlook.com (25.160.233.44) To AMSPR05MB264.eurprd05.prod.outlook.com (10.242.95.27) X-Microsoft-Exchange-Diagnostics: 1;AMSPR05MB264;2:iQLNwPDBY3KByyaUMc4r8mUPIFIy4FLus5hCdmhHx2wdAgw4j9Prm+VDIS+XKq3iEQM9l++j+xuVoZit9dBOYL3xHjeojz+qIQW2ffiuy+nzBF5WN7VXGeBz2znL2Zs4zVwFGpL+Pqeo2aa1pRMIlRWmM5X0NsWy27aScKaDP/I=;3:cRJU/Lh6fTmdt6fQJ7aLk3zbnBZNai6nbzsJfSVTp7BIqeQryVqwZozLkI5cY/j2bxJmxItZ2vvQ4ohfzqgd3pRwyh6vqh22oeOFb5lKptYQ6EzSWNda2cS0M6rmcb/HCqS+rZw9/Qoz5ztoIm6bHw==;25:+xb45utdRjcFZeZauxKJXOmSvm4pr2qcFvxQnv7+otAjXK3VWAtsWjVFEbmNZK6mcCbjqHYUOY4AGxA8cX9Wl0eODhBxA/RDZUIyFKJGYZg0ye8zhyc+2OlpMbDn9B6/ZvhmA/GGqbFxDHNREyU5Nn2Fyd2e21+kr2PrnTcvQx7MpoxptknCsTCqAfGst14Rx6rgaMagEn3wjCC78oEUMfQoffOU37N1aAY7dyD5r3kajgI6bVVvCK/6vb+s8qLk3qp1vv5jAJkZc3GAYqgQ6w== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AMSPR05MB264; X-Microsoft-Exchange-Diagnostics: 1;AMSPR05MB264;20:CIYF0XU5rO+/Luu7DKbkYIBHhed+L19jafFTyO/13N9j6QAqnGohy7Sb7IR1uVpGrGr4D4HG6WCe7SCLM8m8ySSLwm9m5YGGdMU95LkTFCcTC+kvD7IDDV8iA7MHjln4M23nzfnNvibvbn+wyxWYXTLDJJOTN28rffw7aEHDzxPiXahRJiU4SUlllex3ZQVa4pQNt5YXfFjmT/ak8NvnLO2lZhRY1dE7u1fBU6MgX5GZReScCS4Yke3M0UYV8ilzgISRtG/wGS0OlpjOgh4FlVEfki8tTj6QaEyAzD9pJRsUi7l6jsXQqMK+PWU1/yxWqxID4WDjcHhn0ZbrrvWlV/n9hlQhWdiltATpmuuKUL65h2Ts9Dzc8BhPDBsTF38TBji831xsq9Zo/fFK9TCB0ST7fU1FttvYdyx5KF5OLgtb+z3mmUPlIK/+/iX9bFWLt1tL1HK0oQUG0Om7g+ptEmloofgzTfLgo1lIcKQuO5tZBXsVCMUKBVa9b29Wwj9p;4:qyPOPGY2uWHGlqZJQCTtGlzB0uKxYV1NIWMgHwmM055a00Ed0wH4E/1uUCyvy/ZFnzQkgxtYp+O8K/USHTbCM2O3eMnZUP6qbpSltpuoVuLbwq5xsxrEie2NruZkI1U+igTMO8IkfLj5ibeFp/4f1f87FPK1vMihLyji75hAD0c9X/qt5Ti9lBSoGfycJSpkC6NWcPZl82xNXxwB3/N6aGhReJtRRFE3mFsEkotHo9e/LibodIXcBzzlUT1b2TYc8zCuWTeWFOpjdKYWKvHrF2m31CYcYcWN6hy85AbT09cMk18Nz3fC8Ig1oMgZy8x3P6YL8Dgi0jRWbFjHd7csg/shhmrMJcqMX3zOQo05I64= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(520078)(3002001);SRVR:AMSPR05MB264;BCL:0;PCL:0;RULEID:;SRVR:AMSPR05MB264; X-Forefront-PRVS: 07083FF734 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(189002)(199003)(106356001)(97736004)(5001770100001)(66066001)(107886002)(81156007)(5001830100001)(50986999)(86362001)(5820100001)(46102003)(101416001)(33646002)(23676002)(229853001)(4001540100001)(105586002)(5001960100002)(5007970100001)(36756003)(5004730100002)(5001860100001)(50466002)(69596002)(62966003)(47776003)(68736005)(122386002)(40100003)(77156002)(92566002)(77096005)(5001920100001)(42186005)(87976001)(50226001)(53416004)(189998001)(19580405001)(19580395003)(64706001)(7059030)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:AMSPR05MB264;H:dharanikota.toradex.int;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTVNQUjA1TUIyNjQ7MjM6RmZDQ3pnV2NDTkhSYVM5SHVJMWNyRHdCOTRj?= =?utf-8?B?YzZWM09tRVU1YVdXb1ViUXM2SC9Uby9Td0p2SGFIY2VTOEpFSVdKWWxPNElP?= =?utf-8?B?TTJDcDVaV0Ztc2JYQ2J5Ny8xWFVpbVRndkRzRVdZQUxvc0paV3JHVEFIWFlX?= =?utf-8?B?cmp1eElTZ0ZBNy9ZRmp1RVFRRC9ZbGRYeWp5ZzJJQmZoYStRWmJHR1lla3Nu?= =?utf-8?B?UGI1RFcrS3Y2WE9zQWFpYUk5YkQxaE1GZ1NBYVRtTzQzaWR5MTJwVzBCdVJE?= =?utf-8?B?SGdNVjR6Y2tUbkFEbWVGQkVNc0s2YkxBOGFvUHo2MHRGaWpCZlBySk0ydmh0?= =?utf-8?B?a0ZUUXFaRjBKZmZmVExZUVFGQVgvYVFjLy9teWRLbTJhUjg1L1NJaDlYWUxR?= =?utf-8?B?WmUrV3l6dVc0VHlDdjREUjAzNTk5UGp0V3hhWDRXUlZSaXlIKzB0U0liY2Vr?= =?utf-8?B?VTA1SC9WbjhwWWNGMUQvU2V3bFpYSTlsaS84L2xtdExIYUI2UUJLeVpoelFF?= =?utf-8?B?R2FaR0RRYU9jMFlFWGhGS0tZcm40dmdjNlZLMEVpL3lLcG53QzFyV0c0WXVU?= =?utf-8?B?bCtCQ21ZdU5aRUVJZXY4M2RnQTg0c2o5bzZKbGVnSkJTSDhBYWw3Q05uNDgw?= =?utf-8?B?QnJ0MFRtaldBTU5LcTdrUVh3OFFpT0IwSjExcXlFRjhRY1pFbHY2T3hqMEJn?= =?utf-8?B?US92cmJpL3pTZkpPRWRyLzEvejB2VWE4blB3VjhVaWJOOE5HcmVRVlNlMWtL?= =?utf-8?B?WXp4THFFSzIvSjgyQkFzbUdoOVFnSTRRSVlma1RBakE3SGZHNmM4c2REYmxC?= =?utf-8?B?OGZWcGp5dk9qNjJZQlA0M0ZuNWlQbXhRcWFHL242Q29pWGFZakNMZzB5V29W?= =?utf-8?B?TGJqOWQzMktEelQrSFhsV3hKV0VoZ2hNREZuNVhUaHlHWmtSdzY4eFU0REsz?= =?utf-8?B?K0ovRjh1YlR2TFNEa29FQ2NObXJKam5HcDdBYjdDVlVpNm5FRTNGbUdRdnhq?= =?utf-8?B?SG1CdTRvSW1qSG13d09RZXJiMkxmQUhKeTJJSnVGcHZlWDRRdXJXZW16SDB3?= =?utf-8?B?UVJPMnZXS1ZmL2Q1YTgwWjZtMW04bWdVUmVjWFFLeTFXcmVLbGcxazZlVkZZ?= =?utf-8?B?QlNNK0E4ajIyZlBXM0xER0NML055THJ0MHBKY0pJSmhZMnJ2QUxCTkZMcGg5?= =?utf-8?B?YlFzdzZVRzBzdnFFTUowUy94M0c2dnhDNkR3SW5NcWZsSlhnalFOYUFKRGUr?= =?utf-8?B?ZVhzWWx6S1ZWMHBOL3h5WDVsR2Y4OEdZZEgxdURoUldTblZ1TnF3QXBreDA3?= =?utf-8?B?djlsZENIdCtTM1RJcmlUUXlFbnlTQmZ6UGJKZ2NRV1BnUHJodHlqWDV1aDdC?= =?utf-8?B?cVFjd3R0YVNBZm9RVDdrMEUrQzd5dGl4K3VHM2cxTmJFQlRwUWlsbG44VHMr?= =?utf-8?B?NUhBMCtwZTR2TEZtNklaWGluYVU3WFdIc1RUNHhDdGV4bmxiUXBneEhVL1Vt?= =?utf-8?B?ZE43eFBjM2F0citYWk0rTUpheis2SytENHprUEZIam1KRHJ4dVFYQ21yYVNO?= =?utf-8?B?emwyNVVLWnpOcHpjejhoNjdDaXpZREZBS1dpZS8wL0dFbnRJbk96UGtyWVNv?= =?utf-8?B?Q3hlc1RjcGM5Rzc3OTF4dkNhanJwdXJlOVIyNkw0ejBkcmNRZWthQzY0YWRs?= =?utf-8?Q?+YkxFb9Q4xMbpv7h2gsRTKagHs15Aca+LeXMmh?= X-Microsoft-Exchange-Diagnostics: 1;AMSPR05MB264;5:7eIU4OrzQzeQXQO75MeKoiSkqyELi0vhKwOVvFjoIcTw8JT0hcxpIH2dgkfhVeBQ7uuF1hHcpzeA4QLVONXACYYBrnZja8pG2B9ZqKZf7PN+ZpEeZk1wBv+brW6MoRQ6apIphjVdC/6Dto9+Yr2+9A==;24:qrDsIRkyfTnA+W+TCFGGuCUO/LTlBOHji8NVgfFWmdw6kG/6e4AZMViFLi2sgremAtI9tjDVQsM0d+7QyQla4r8UMGp6OMsNV0SO2BHD5dM=;20:MNH6hhpbHibcZTazqybSiZAUaKnfc4g+CIoqZmVhYTbxuBVI+l/VYLxiuaE0w50bh0TcHpFVycDCY8mQE1169g== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: toradex.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2015 13:44:17.7529 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMSPR05MB264 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There is an observed temperature difference of ~20°C with the internal temperature reading and the temperature measured on SoC package. Existing calculations consider the typical values provided in datasheet. Those typical values are valid for VREFH_ADC at 3.0V. Voltage at 25°C is different for different VREFH_ADC voltages. With VREFH_ADC at 3.3V, voltage at 25°C is 0.699V. Hence update the VTEMP25 to 0.699V which gives ADCR@Temp25 as 867 and the final temperature readings differs with ~5°C from the external readings. Formula for finding ADCR@Temp25: ADCR@Temp25 = (ADCR@Vdd * V@TEMP25 * 10) / VDDconv ADCR@Vdd for 12-Bit ADC = 4095 VDDconv = VREFH_ADC * 10 VREFH_ADC@3.3V ADCR@Temp25 = (4095 * .699 * 10) / 33 ADCR@Temp25 ~= 867 | VREFH_ADC | V@TEMP25 | VDDconv | ADCR@Temp25 | | 3.0V | 0.696mV | 30 | 950 | | 3.3V | 0.699mV | 33 | 867 | Signed-off-by: Bhuvanchandra DV --- drivers/iio/adc/vf610_adc.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/iio/adc/vf610_adc.c b/drivers/iio/adc/vf610_adc.c index f4df2a7..e7abc13 100644 --- a/drivers/iio/adc/vf610_adc.c +++ b/drivers/iio/adc/vf610_adc.c @@ -103,6 +103,13 @@ #define DEFAULT_SAMPLE_TIME 1000 +/* V at 25°C of 696 mV */ +#define VF610_VTEMP25_3V0 950 +/* V at 25°C of 699 mV */ +#define VF610_VTEMP25_3V3 867 +/* Typical sensor slope coefficient at all temperatures */ +#define VF610_TEMP_SLOPE_COEFF 1840 + enum clk_sel { VF610_ADCIOC_BUSCLK_SET, VF610_ADCIOC_ALTCLK_SET, @@ -636,11 +643,13 @@ static int vf610_read_raw(struct iio_dev *indio_dev, break; case IIO_TEMP: /* - * Calculate in degree Celsius times 1000 - * Using sensor slope of 1.84 mV/°C and - * V at 25°C of 696 mV - */ - *val = 25000 - ((int)info->value - 864) * 1000000 / 1840; + * Calculate in degree Celsius times 1000 + * Using the typical sensor slope of 1.84 mV/°C + * and VREFH_ADC at 3.3V, V at 25°C of 699 mV + */ + *val = 25000 - ((int)info->value - VF610_VTEMP25_3V3) * + 1000000 / VF610_TEMP_SLOPE_COEFF; + break; default: mutex_unlock(&indio_dev->mlock); -- 2.5.0