Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 118915
b: refs/heads/master
c: 862343c
h: refs/heads/master
i:
  118913: caa65c2
  118911: ab1561f
v: v3
  • Loading branch information
Darrick J. Wong authored and Linus Torvalds committed Nov 13, 2008
1 parent 3bc6980 commit 2a1c3a7
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 16 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 05a9bd46e49a9cbb09a0c61c901642a9911bf56e
refs/heads/master: 862343c4ea2ece307f25db1812637cff142d3263
89 changes: 74 additions & 15 deletions trunk/drivers/hwmon/adt7473.c
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,8 @@ I2C_CLIENT_INSMOD_1(adt7473);
#define FAN_PERIOD_INVALID 65535
#define FAN_DATA_VALID(x) ((x) && (x) != FAN_PERIOD_INVALID)

#define ROUND_DIV(x, divisor) (((x) + ((divisor) / 2)) / (divisor))

struct adt7473_data {
struct device *hwmon_dev;
struct attribute_group attrs;
Expand Down Expand Up @@ -357,7 +359,12 @@ static ssize_t set_volt_min(struct device *dev,
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct i2c_client *client = to_i2c_client(dev);
struct adt7473_data *data = i2c_get_clientdata(client);
int volt = encode_volt(attr->index, simple_strtol(buf, NULL, 10));
long volt;

if (strict_strtol(buf, 10, &volt))
return -EINVAL;

volt = encode_volt(attr->index, volt);

mutex_lock(&data->lock);
data->volt_min[attr->index] = volt;
Expand Down Expand Up @@ -386,7 +393,12 @@ static ssize_t set_volt_max(struct device *dev,
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct i2c_client *client = to_i2c_client(dev);
struct adt7473_data *data = i2c_get_clientdata(client);
int volt = encode_volt(attr->index, simple_strtol(buf, NULL, 10));
long volt;

if (strict_strtol(buf, 10, &volt))
return -EINVAL;

volt = encode_volt(attr->index, volt);

mutex_lock(&data->lock);
data->volt_max[attr->index] = volt;
Expand Down Expand Up @@ -419,7 +431,8 @@ static int decode_temp(u8 twos_complement, u8 raw)

static u8 encode_temp(u8 twos_complement, int cooked)
{
return twos_complement ? cooked & 0xFF : cooked + 64;
u8 ret = twos_complement ? cooked & 0xFF : cooked + 64;
return SENSORS_LIMIT(ret, 0, 255);
}

static ssize_t show_temp_min(struct device *dev,
Expand All @@ -441,7 +454,12 @@ static ssize_t set_temp_min(struct device *dev,
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct i2c_client *client = to_i2c_client(dev);
struct adt7473_data *data = i2c_get_clientdata(client);
int temp = simple_strtol(buf, NULL, 10) / 1000;
long temp;

if (strict_strtol(buf, 10, &temp))
return -EINVAL;

temp = ROUND_DIV(temp, 1000);
temp = encode_temp(data->temp_twos_complement, temp);

mutex_lock(&data->lock);
Expand Down Expand Up @@ -472,7 +490,12 @@ static ssize_t set_temp_max(struct device *dev,
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct i2c_client *client = to_i2c_client(dev);
struct adt7473_data *data = i2c_get_clientdata(client);
int temp = simple_strtol(buf, NULL, 10) / 1000;
long temp;

if (strict_strtol(buf, 10, &temp))
return -EINVAL;

temp = ROUND_DIV(temp, 1000);
temp = encode_temp(data->temp_twos_complement, temp);

mutex_lock(&data->lock);
Expand Down Expand Up @@ -515,11 +538,13 @@ static ssize_t set_fan_min(struct device *dev,
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct i2c_client *client = to_i2c_client(dev);
struct adt7473_data *data = i2c_get_clientdata(client);
int temp = simple_strtol(buf, NULL, 10);
long temp;

if (!temp)
if (strict_strtol(buf, 10, &temp) || !temp)
return -EINVAL;

temp = FAN_RPM_TO_PERIOD(temp);
temp = SENSORS_LIMIT(temp, 1, 65534);

mutex_lock(&data->lock);
data->fan_min[attr->index] = temp;
Expand Down Expand Up @@ -558,7 +583,10 @@ static ssize_t set_max_duty_at_crit(struct device *dev,
u8 reg;
struct i2c_client *client = to_i2c_client(dev);
struct adt7473_data *data = i2c_get_clientdata(client);
int temp = simple_strtol(buf, NULL, 10);
long temp;

if (strict_strtol(buf, 10, &temp))
return -EINVAL;

mutex_lock(&data->lock);
data->max_duty_at_overheat = !!temp;
Expand Down Expand Up @@ -587,7 +615,12 @@ static ssize_t set_pwm(struct device *dev, struct device_attribute *devattr,
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct i2c_client *client = to_i2c_client(dev);
struct adt7473_data *data = i2c_get_clientdata(client);
int temp = simple_strtol(buf, NULL, 10);
long temp;

if (strict_strtol(buf, 10, &temp))
return -EINVAL;

temp = SENSORS_LIMIT(temp, 0, 255);

mutex_lock(&data->lock);
data->pwm[attr->index] = temp;
Expand All @@ -614,7 +647,12 @@ static ssize_t set_pwm_max(struct device *dev,
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct i2c_client *client = to_i2c_client(dev);
struct adt7473_data *data = i2c_get_clientdata(client);
int temp = simple_strtol(buf, NULL, 10);
long temp;

if (strict_strtol(buf, 10, &temp))
return -EINVAL;

temp = SENSORS_LIMIT(temp, 0, 255);

mutex_lock(&data->lock);
data->pwm_max[attr->index] = temp;
Expand Down Expand Up @@ -642,7 +680,12 @@ static ssize_t set_pwm_min(struct device *dev,
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct i2c_client *client = to_i2c_client(dev);
struct adt7473_data *data = i2c_get_clientdata(client);
int temp = simple_strtol(buf, NULL, 10);
long temp;

if (strict_strtol(buf, 10, &temp))
return -EINVAL;

temp = SENSORS_LIMIT(temp, 0, 255);

mutex_lock(&data->lock);
data->pwm_min[attr->index] = temp;
Expand Down Expand Up @@ -672,7 +715,12 @@ static ssize_t set_temp_tmax(struct device *dev,
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct i2c_client *client = to_i2c_client(dev);
struct adt7473_data *data = i2c_get_clientdata(client);
int temp = simple_strtol(buf, NULL, 10) / 1000;
long temp;

if (strict_strtol(buf, 10, &temp))
return -EINVAL;

temp = ROUND_DIV(temp, 1000);
temp = encode_temp(data->temp_twos_complement, temp);

mutex_lock(&data->lock);
Expand Down Expand Up @@ -703,7 +751,12 @@ static ssize_t set_temp_tmin(struct device *dev,
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct i2c_client *client = to_i2c_client(dev);
struct adt7473_data *data = i2c_get_clientdata(client);
int temp = simple_strtol(buf, NULL, 10) / 1000;
long temp;

if (strict_strtol(buf, 10, &temp))
return -EINVAL;

temp = ROUND_DIV(temp, 1000);
temp = encode_temp(data->temp_twos_complement, temp);

mutex_lock(&data->lock);
Expand Down Expand Up @@ -741,7 +794,10 @@ static ssize_t set_pwm_enable(struct device *dev,
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct i2c_client *client = to_i2c_client(dev);
struct adt7473_data *data = i2c_get_clientdata(client);
int temp = simple_strtol(buf, NULL, 10);
long temp;

if (strict_strtol(buf, 10, &temp))
return -EINVAL;

switch (temp) {
case 0:
Expand Down Expand Up @@ -805,7 +861,10 @@ static ssize_t set_pwm_auto_temp(struct device *dev,
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct i2c_client *client = to_i2c_client(dev);
struct adt7473_data *data = i2c_get_clientdata(client);
int temp = simple_strtol(buf, NULL, 10);
long temp;

if (strict_strtol(buf, 10, &temp))
return -EINVAL;

switch (temp) {
case 1:
Expand Down

0 comments on commit 2a1c3a7

Please sign in to comment.