]> rtime.felk.cvut.cz Git - hercules2020/nv-tegra/linux-4.4.git/commitdiff
thermal: nct72: report correct initial temperature & fix shutdown during bootup
authorRajkumar Kasirajan <rkasirajan@nvidia.com>
Mon, 21 Dec 2015 07:03:20 +0000 (15:03 +0800)
committerSrikar Srimath Tirumala <srikars@nvidia.com>
Fri, 6 May 2016 22:03:28 +0000 (15:03 -0700)
If NCT is in standby mode, need to initiate one-shot conversion
before reading temperature, otherwise while bootup NCT will report
wrong initial temperature and driver will set wrong temperature
alert limits based on that.

While nct driver probe, enable oneshot conversion after
setting shutdown limits for local and external sensors.

Bug 1723265
Bug 200161159

Change-Id: I9080579be749fb26f51d4d1c28911db4b6538a70
Signed-off-by: Rajkumar Kasirajan <rkasirajan@nvidia.com>
Reviewed-on: http://git-master/r/1018100
Reviewed-on: http://git-master/r/929897
(cherry picked from commit 4164770df219bcd37ffa68950882564181a78e8f)
(cherry picked from commit baaa7aad03a9a49fb86f5f58c783920b906b0ee2)
Reviewed-on: http://git-master/r/1019841
(cherry picked from commit 67f749548ff94f6b76c203fe42c280d69b959008)
Reviewed-on: http://git-master/r/1022471
GVS: Gerrit_Virtual_Submit
Reviewed-by: Bibek Basu <bbasu@nvidia.com>
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
drivers/misc/nct1008.c

index b4d076222e2b23bfbaacf42ce7746fa91f29b41e..4f8afb918e5b3e8419543bcf0db408e7a95b9553 100644 (file)
@@ -1350,16 +1350,6 @@ static int nct1008_configure_sensor(struct nct1008_data *data)
        if (ret)
                goto error;
 
-       /* read initial temperature */
-       ret = nct1008_read_reg(client, LOC_TEMP_RD);
-       if (ret < 0)
-               goto error;
-       else
-               value = ret;
-
-       temp = value_to_temperature(pdata->extended_range, value);
-       dev_dbg(&client->dev, "\n initial local temp = %d ", temp);
-
        if (ext_err)
                return ext_err; /* skip configuration of EXT sensor */
 
@@ -1379,6 +1369,25 @@ static int nct1008_configure_sensor(struct nct1008_data *data)
        if (ret)
                goto error;
 
+        /* Initiate one-shot conversion  */
+       ret = nct1008_write_reg(data->client, ONE_SHOT, 0x1);
+       if (ret)
+               goto error;
+
+       /* Give hardware necessary time to finish conversion */
+       usleep_range(CONV_TIME_ONESHOT_US, CONV_TIME_ONESHOT_US + 1000);
+
+       /* read initial local temperature */
+       ret = nct1008_read_reg(client, LOC_TEMP_RD);
+       if (ret < 0)
+               goto error;
+       else
+               value = ret;
+
+       temp = value_to_temperature(pdata->extended_range, value);
+       dev_dbg(&client->dev, "\n initial local temp = %d ", temp);
+
+    /* read initial ext temperature */
        ret = nct1008_read_reg(client, EXT_TEMP_LO_RD);
        if (ret < 0)
                goto error;