summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorJinyoung Park <jinyoungp@nvidia.com>2013-06-07 18:00:43 +0900
committerGabby Lee <galee@nvidia.com>2013-07-15 16:17:06 -0700
commit80bc59284290edfff7d3a1e94fea125125a6b5b4 (patch)
tree3e5750d778cdb122d16c0ec9650fb9fd5b245303 /drivers
parentb9968eb8dc1bcf6fc1cf4bd0e2d821d1ffef7f3e (diff)
misc: nct1008: Refactor sensor configuration
Refactor sensor configuration. - Fixed wrong min/max temperature settings. - Removed unnecessary register readings. Bug 1325770 Change-Id: I33f195df7673ad35d037fa4bf2cf987b6eba5bb1 Signed-off-by: Jinyoung Park <jinyoungp@nvidia.com> Reviewed-on: http://git-master/r/249128 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Bitan Biswas <bbiswas@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Gabby Lee <galee@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/misc/nct1008.c88
1 files changed, 27 insertions, 61 deletions
diff --git a/drivers/misc/nct1008.c b/drivers/misc/nct1008.c
index 2a50bde0debb..0eaaac493a8c 100644
--- a/drivers/misc/nct1008.c
+++ b/drivers/misc/nct1008.c
@@ -67,11 +67,8 @@
/* Max Temperature Measurements */
#define EXTENDED_RANGE_OFFSET 64U
-#define STANDARD_RANGE_MAX 127U
-#define EXTENDED_RANGE_MAX (150U + EXTENDED_RANGE_OFFSET)
-
-#define NCT1008_MIN_TEMP -64
-#define NCT1008_MAX_TEMP 191
+#define NCT1008_MIN_TEMP(extended) (extended ? -64 : 0)
+#define NCT1008_MAX_TEMP(extended) (extended ? 191 : 127)
#define MAX_STR_PRINT 50
@@ -289,7 +286,8 @@ static ssize_t nct1008_set_temp_overheat(struct device *dev,
__LINE__, __func__);
return -EINVAL;
}
- if (((int)num < NCT1008_MIN_TEMP) || ((int)num >= NCT1008_MAX_TEMP)) {
+ if (((int)num < NCT1008_MIN_TEMP(pdata->ext_range)) ||
+ ((int)num >= NCT1008_MAX_TEMP(pdata->ext_range))) {
dev_err(dev, "\n file: %s, line=%d return %s() ", __FILE__,
__LINE__, __func__);
return -EINVAL;
@@ -368,7 +366,8 @@ static ssize_t nct1008_set_temp_alert(struct device *dev,
__LINE__, __func__);
return -EINVAL;
}
- if (((int)num < NCT1008_MIN_TEMP) || ((int)num >= NCT1008_MAX_TEMP)) {
+ if (((int)num < NCT1008_MIN_TEMP(pdata->ext_range)) ||
+ ((int)num >= NCT1008_MAX_TEMP(pdata->ext_range))) {
dev_err(dev, "\n file: %s, line=%d return %s() ", __FILE__,
__LINE__, __func__);
return -EINVAL;
@@ -490,7 +489,8 @@ static int nct1008_thermal_set_limits(struct nct1008_data *data,
static void nct1008_update(struct nct1008_data *data)
{
struct thermal_zone_device *thz = data->nct_ext;
- long low_temp = 0, high_temp = NCT1008_MAX_TEMP * 1000;
+ long low_temp = NCT1008_MIN_TEMP(data->plat_data.ext_range) * 1000;
+ long high_temp = NCT1008_MAX_TEMP(data->plat_data.ext_range) * 1000;
struct thermal_trip_info *trip_state;
long temp, trip_temp, hysteresis_temp;
int count;
@@ -917,8 +917,6 @@ static int nct1008_configure_sensor(struct nct1008_data *data)
struct i2c_client *client = data->client;
struct nct1008_platform_data *pdata = client->dev.platform_data;
u8 value;
- s16 temp;
- u8 temp2;
int err;
if (!pdata || !pdata->supported_hwrev)
@@ -960,51 +958,33 @@ static int nct1008_configure_sensor(struct nct1008_data *data)
data->conv_period_ms = conv_period_ms_table[pdata->conv_rate];
/* Setup local hi and lo limits */
- err = nct1008_write_reg(client,
- LOCAL_TEMP_HI_LIMIT_WR, NCT1008_MAX_TEMP);
+ value = temperature_to_value(pdata->ext_range,
+ NCT1008_MAX_TEMP(pdata->ext_range));
+ err = nct1008_write_reg(client, LOCAL_TEMP_HI_LIMIT_WR, value);
if (err)
goto error;
- err = nct1008_write_reg(client, LOCAL_TEMP_LO_LIMIT_WR, 0);
+ value = temperature_to_value(pdata->ext_range,
+ NCT1008_MIN_TEMP(pdata->ext_range));
+ err = nct1008_write_reg(client, LOCAL_TEMP_LO_LIMIT_WR, value);
if (err)
goto error;
/* Setup external hi and lo limits */
- err = nct1008_write_reg(client, EXT_TEMP_LO_LIMIT_HI_BYTE_WR, 0);
- if (err)
- goto error;
- err = nct1008_write_reg(client, EXT_TEMP_HI_LIMIT_HI_BYTE_WR,
- NCT1008_MAX_TEMP);
+ value = temperature_to_value(pdata->ext_range,
+ NCT1008_MAX_TEMP(pdata->ext_range));
+ err = nct1008_write_reg(client, EXT_TEMP_HI_LIMIT_HI_BYTE_WR, value);
if (err)
goto error;
- /* read initial temperature */
- value = nct1008_read_reg(client, LOCAL_TEMP_RD);
- if (value < 0) {
- err = value;
- goto error;
- }
- temp = value_to_temperature(pdata->ext_range, value);
- dev_dbg(&client->dev, "\n initial local temp = %d ", temp);
-
- value = nct1008_read_reg(client, EXT_TEMP_RD_LO);
- if (value < 0) {
- err = value;
- goto error;
- }
- temp2 = (value >> 6);
- value = nct1008_read_reg(client, EXT_TEMP_RD_HI);
- if (value < 0) {
- err = value;
+ value = temperature_to_value(pdata->ext_range,
+ NCT1008_MIN_TEMP(pdata->ext_range));
+ err = nct1008_write_reg(client, EXT_TEMP_LO_LIMIT_HI_BYTE_WR, value);
+ if (err)
goto error;
- }
- temp = value_to_temperature(pdata->ext_range, value);
- if (temp2 > 0)
- dev_dbg(&client->dev, "\n initial ext temp = %d.%d deg",
- temp, temp2 * 25);
- else
- dev_dbg(&client->dev, "\n initial ext temp = %d.0 deg", temp);
+ data->current_hi_limit = NCT1008_MAX_TEMP(pdata->ext_range);
+ data->current_lo_limit = NCT1008_MIN_TEMP(pdata->ext_range);
/* Remote channel offset */
err = nct1008_write_reg(client, OFFSET_WR, pdata->offset / 4);
@@ -1017,21 +997,6 @@ static int nct1008_configure_sensor(struct nct1008_data *data)
if (err < 0)
goto error;
- /* Reset current hi/lo limit values with register values */
- value = nct1008_read_reg(data->client, EXT_TEMP_LO_LIMIT_HI_BYTE_RD);
- if (value < 0) {
- err = value;
- goto error;
- }
- data->current_lo_limit = value_to_temperature(pdata->ext_range, value);
-
- value = nct1008_read_reg(data->client, EXT_TEMP_HI_LIMIT_HI_BYTE_RD);
- if (value < 0) {
- err = value;
- goto error;
- }
- data->current_hi_limit = value_to_temperature(pdata->ext_range, value);
-
return 0;
error:
dev_err(&client->dev, "\n exit %s, err=%d ", __func__, err);
@@ -1247,9 +1212,10 @@ static int nct1008_suspend_powerdown(struct device *dev)
static int nct1008_suspend_wakeup(struct device *dev)
{
struct i2c_client *client = to_i2c_client(dev);
- int err;
struct nct1008_data *data = i2c_get_clientdata(client);
+ struct nct1008_platform_data *pdata = client->dev.platform_data;
long ext_temp;
+ int err;
err = nct1008_get_temp(dev, &ext_temp, 0);
if (err)
@@ -1258,10 +1224,10 @@ static int nct1008_suspend_wakeup(struct device *dev)
if (ext_temp > data->plat_data.suspend_ext_limit_lo)
err = nct1008_thermal_set_limits(data,
data->plat_data.suspend_ext_limit_lo,
- NCT1008_MAX_TEMP * 1000);
+ NCT1008_MAX_TEMP(pdata->ext_range) * 1000);
else
err = nct1008_thermal_set_limits(data,
- NCT1008_MIN_TEMP * 1000,
+ NCT1008_MIN_TEMP(pdata->ext_range) * 1000,
data->plat_data.suspend_ext_limit_hi);
if (err)