summaryrefslogtreecommitdiff
path: root/drivers/misc
diff options
context:
space:
mode:
authorBitan Biswas <bbiswas@nvidia.com>2011-08-25 21:12:00 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:48:34 -0800
commitb6077255f0596d7a7ef8e3f8332304a407f84a3e (patch)
treec5027d83b225ee8d507e070e60bc6754705552fb /drivers/misc
parent9f7d7dd1e09b1e8a1f723b1295c1dd0df00ea4e7 (diff)
misc: nct1008: sub-zero temperature support
Added support for sub-zero temperatures Original-Change-Id: Id35590ee4d058f35625088089623cc063f9a711a Reviewed-on: http://git-master/r/48690 Reviewed-by: Bitan Biswas <bbiswas@nvidia.com> Tested-by: Bitan Biswas <bbiswas@nvidia.com> Reviewed-by: Ramachandrudu Kandhala <rkandhala@nvidia.com> Reviewed-by: Diwakar Tundlam <dtundlam@nvidia.com> Rebase-Id: Rf705a1b4f3c246029abc55570f26e876ae3bfaa9
Diffstat (limited to 'drivers/misc')
-rw-r--r--drivers/misc/nct1008.c38
1 files changed, 21 insertions, 17 deletions
diff --git a/drivers/misc/nct1008.c b/drivers/misc/nct1008.c
index 172be5c26847..6e0f7a43b189 100644
--- a/drivers/misc/nct1008.c
+++ b/drivers/misc/nct1008.c
@@ -80,27 +80,29 @@ struct nct1008_data {
struct nct1008_platform_data plat_data;
struct mutex mutex;
u8 config;
- u8 *limits;
+ s8 *limits;
u8 limits_sz;
void (*alarm_fn)(bool raised);
struct regulator *nct_reg;
};
-static inline u8 value_to_temperature(bool extended, u8 value)
+static inline s8 value_to_temperature(bool extended, u8 value)
{
- return extended ? (u8)(value - EXTENDED_RANGE_OFFSET) : value;
+ return extended ? (s8)(value - EXTENDED_RANGE_OFFSET) : (s8)value;
}
-static inline u8 temperature_to_value(bool extended, u8 temp)
+static inline u8 temperature_to_value(bool extended, s8 temp)
{
- return extended ? (u8)(temp + EXTENDED_RANGE_OFFSET) : temp;
+ return extended ? (u8)(temp + EXTENDED_RANGE_OFFSET) : (u8)temp;
}
static int nct1008_get_temp(struct device *dev, u8 *pTemp)
{
struct i2c_client *client = to_i2c_client(dev);
struct nct1008_platform_data *pdata = client->dev.platform_data;
- u8 temp1, temp2, temp;
+ s8 temp1;
+ u8 temp2;
+ s8 temp;
u8 value;
value = i2c_smbus_read_byte_data(client, LOCAL_TEMP_RD);
if (value < 0)
@@ -133,8 +135,8 @@ static ssize_t nct1008_show_temp(struct device *dev,
{
struct i2c_client *client = to_i2c_client(dev);
struct nct1008_platform_data *pdata = client->dev.platform_data;
- u8 temp1 = 0;
- u8 temp = 0;
+ s8 temp1 = 0;
+ s8 temp = 0;
u8 temp2 = 0;
u8 value = 0;
@@ -170,7 +172,7 @@ static ssize_t nct1008_show_temp_overheat(struct device *dev,
struct i2c_client *client = to_i2c_client(dev);
struct nct1008_platform_data *pdata = client->dev.platform_data;
u8 value;
- u8 temp, temp2;
+ s8 temp, temp2;
/* Local temperature h/w shutdown limit */
value = i2c_smbus_read_byte_data(client, LOCAL_THERM_LIMIT_WR);
@@ -206,7 +208,7 @@ static ssize_t nct1008_set_temp_overheat(struct device *dev,
char bufOverheat[MAX_STR_PRINT];
unsigned int ret;
- if (strict_strtoul(buf, 0, &num)) {
+ if (strict_strtol(buf, 0, &num)) {
dev_err(dev, "\n file: %s, line=%d return %s() ", __FILE__,
__LINE__, __func__);
return -EINVAL;
@@ -231,13 +233,13 @@ static ssize_t nct1008_set_temp_overheat(struct device *dev,
}
/* External temperature h/w shutdown limit */
- temp = temperature_to_value(pdata->ext_range, (u8)num);
+ temp = temperature_to_value(pdata->ext_range, (s8)num);
err = i2c_smbus_write_byte_data(client, EXT_THERM_LIMIT_WR, temp);
if (err < 0)
goto error;
/* Local temperature h/w shutdown limit */
- temp = temperature_to_value(pdata->ext_range, (u8)num);
+ temp = temperature_to_value(pdata->ext_range, (s8)num);
err = i2c_smbus_write_byte_data(client, LOCAL_THERM_LIMIT_WR, temp);
if (err < 0)
goto error;
@@ -254,7 +256,7 @@ static ssize_t nct1008_show_temp_alert(struct device *dev,
struct i2c_client *client = to_i2c_client(dev);
struct nct1008_platform_data *pdata = client->dev.platform_data;
u8 value;
- u8 temp, temp2;
+ s8 temp, temp2;
/* External Temperature Throttling limit */
value = i2c_smbus_read_byte_data(client, EXT_TEMP_HI_LIMIT_HI_BYTE_RD);
if (value < 0)
@@ -285,7 +287,7 @@ static ssize_t nct1008_set_temp_alert(struct device *dev,
struct i2c_client *client = to_i2c_client(dev);
struct nct1008_platform_data *pdata = client->dev.platform_data;
- if (strict_strtoul(buf, 0, &num)) {
+ if (strict_strtol(buf, 0, &num)) {
dev_err(dev, "\n file: %s, line=%d return %s() ", __FILE__,
__LINE__, __func__);
return -EINVAL;
@@ -297,7 +299,7 @@ static ssize_t nct1008_set_temp_alert(struct device *dev,
}
/* External Temperature Throttling limit */
- value = temperature_to_value(pdata->ext_range, num);
+ value = temperature_to_value(pdata->ext_range, (s8)num);
err = i2c_smbus_write_byte_data(client, EXT_TEMP_HI_LIMIT_HI_BYTE_WR,
value);
if (err < 0)
@@ -321,7 +323,7 @@ static ssize_t nct1008_show_ext_temp(struct device *dev,
{
struct i2c_client *client = to_i2c_client(dev);
struct nct1008_platform_data *pdata = client->dev.platform_data;
- u8 temp_value;
+ s8 temp_value;
u8 data = 0;
u8 data_lo;
@@ -572,7 +574,9 @@ static int __devinit nct1008_configure_sensor(struct nct1008_data* data)
{
struct i2c_client *client = data->client;
struct nct1008_platform_data *pdata = client->dev.platform_data;
- u8 value, temp, temp2;
+ u8 value;
+ s8 temp;
+ u8 temp2;
int err;
int hi_limit;