diff options
Diffstat (limited to 'drivers/hwmon/it87.c')
-rw-r--r-- | drivers/hwmon/it87.c | 66 |
1 files changed, 33 insertions, 33 deletions
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c index d7a9401600bb..06df92b3ee49 100644 --- a/drivers/hwmon/it87.c +++ b/drivers/hwmon/it87.c | |||
@@ -41,6 +41,7 @@ | |||
41 | #include <linux/hwmon-sysfs.h> | 41 | #include <linux/hwmon-sysfs.h> |
42 | #include <linux/hwmon-vid.h> | 42 | #include <linux/hwmon-vid.h> |
43 | #include <linux/err.h> | 43 | #include <linux/err.h> |
44 | #include <linux/mutex.h> | ||
44 | #include <asm/io.h> | 45 | #include <asm/io.h> |
45 | 46 | ||
46 | 47 | ||
@@ -194,10 +195,10 @@ static int DIV_TO_REG(int val) | |||
194 | struct it87_data { | 195 | struct it87_data { |
195 | struct i2c_client client; | 196 | struct i2c_client client; |
196 | struct class_device *class_dev; | 197 | struct class_device *class_dev; |
197 | struct semaphore lock; | 198 | struct mutex lock; |
198 | enum chips type; | 199 | enum chips type; |
199 | 200 | ||
200 | struct semaphore update_lock; | 201 | struct mutex update_lock; |
201 | char valid; /* !=0 if following fields are valid */ | 202 | char valid; /* !=0 if following fields are valid */ |
202 | unsigned long last_updated; /* In jiffies */ | 203 | unsigned long last_updated; /* In jiffies */ |
203 | 204 | ||
@@ -224,9 +225,8 @@ static int it87_isa_attach_adapter(struct i2c_adapter *adapter); | |||
224 | static int it87_detect(struct i2c_adapter *adapter, int address, int kind); | 225 | static int it87_detect(struct i2c_adapter *adapter, int address, int kind); |
225 | static int it87_detach_client(struct i2c_client *client); | 226 | static int it87_detach_client(struct i2c_client *client); |
226 | 227 | ||
227 | static int it87_read_value(struct i2c_client *client, u8 register); | 228 | static int it87_read_value(struct i2c_client *client, u8 reg); |
228 | static int it87_write_value(struct i2c_client *client, u8 register, | 229 | static int it87_write_value(struct i2c_client *client, u8 reg, u8 value); |
229 | u8 value); | ||
230 | static struct it87_data *it87_update_device(struct device *dev); | 230 | static struct it87_data *it87_update_device(struct device *dev); |
231 | static int it87_check_pwm(struct i2c_client *client); | 231 | static int it87_check_pwm(struct i2c_client *client); |
232 | static void it87_init_client(struct i2c_client *client, struct it87_data *data); | 232 | static void it87_init_client(struct i2c_client *client, struct it87_data *data); |
@@ -290,11 +290,11 @@ static ssize_t set_in_min(struct device *dev, struct device_attribute *attr, | |||
290 | struct it87_data *data = i2c_get_clientdata(client); | 290 | struct it87_data *data = i2c_get_clientdata(client); |
291 | unsigned long val = simple_strtoul(buf, NULL, 10); | 291 | unsigned long val = simple_strtoul(buf, NULL, 10); |
292 | 292 | ||
293 | down(&data->update_lock); | 293 | mutex_lock(&data->update_lock); |
294 | data->in_min[nr] = IN_TO_REG(val); | 294 | data->in_min[nr] = IN_TO_REG(val); |
295 | it87_write_value(client, IT87_REG_VIN_MIN(nr), | 295 | it87_write_value(client, IT87_REG_VIN_MIN(nr), |
296 | data->in_min[nr]); | 296 | data->in_min[nr]); |
297 | up(&data->update_lock); | 297 | mutex_unlock(&data->update_lock); |
298 | return count; | 298 | return count; |
299 | } | 299 | } |
300 | static ssize_t set_in_max(struct device *dev, struct device_attribute *attr, | 300 | static ssize_t set_in_max(struct device *dev, struct device_attribute *attr, |
@@ -307,11 +307,11 @@ static ssize_t set_in_max(struct device *dev, struct device_attribute *attr, | |||
307 | struct it87_data *data = i2c_get_clientdata(client); | 307 | struct it87_data *data = i2c_get_clientdata(client); |
308 | unsigned long val = simple_strtoul(buf, NULL, 10); | 308 | unsigned long val = simple_strtoul(buf, NULL, 10); |
309 | 309 | ||
310 | down(&data->update_lock); | 310 | mutex_lock(&data->update_lock); |
311 | data->in_max[nr] = IN_TO_REG(val); | 311 | data->in_max[nr] = IN_TO_REG(val); |
312 | it87_write_value(client, IT87_REG_VIN_MAX(nr), | 312 | it87_write_value(client, IT87_REG_VIN_MAX(nr), |
313 | data->in_max[nr]); | 313 | data->in_max[nr]); |
314 | up(&data->update_lock); | 314 | mutex_unlock(&data->update_lock); |
315 | return count; | 315 | return count; |
316 | } | 316 | } |
317 | 317 | ||
@@ -381,10 +381,10 @@ static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, | |||
381 | struct it87_data *data = i2c_get_clientdata(client); | 381 | struct it87_data *data = i2c_get_clientdata(client); |
382 | int val = simple_strtol(buf, NULL, 10); | 382 | int val = simple_strtol(buf, NULL, 10); |
383 | 383 | ||
384 | down(&data->update_lock); | 384 | mutex_lock(&data->update_lock); |
385 | data->temp_high[nr] = TEMP_TO_REG(val); | 385 | data->temp_high[nr] = TEMP_TO_REG(val); |
386 | it87_write_value(client, IT87_REG_TEMP_HIGH(nr), data->temp_high[nr]); | 386 | it87_write_value(client, IT87_REG_TEMP_HIGH(nr), data->temp_high[nr]); |
387 | up(&data->update_lock); | 387 | mutex_unlock(&data->update_lock); |
388 | return count; | 388 | return count; |
389 | } | 389 | } |
390 | static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr, | 390 | static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr, |
@@ -397,10 +397,10 @@ static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr, | |||
397 | struct it87_data *data = i2c_get_clientdata(client); | 397 | struct it87_data *data = i2c_get_clientdata(client); |
398 | int val = simple_strtol(buf, NULL, 10); | 398 | int val = simple_strtol(buf, NULL, 10); |
399 | 399 | ||
400 | down(&data->update_lock); | 400 | mutex_lock(&data->update_lock); |
401 | data->temp_low[nr] = TEMP_TO_REG(val); | 401 | data->temp_low[nr] = TEMP_TO_REG(val); |
402 | it87_write_value(client, IT87_REG_TEMP_LOW(nr), data->temp_low[nr]); | 402 | it87_write_value(client, IT87_REG_TEMP_LOW(nr), data->temp_low[nr]); |
403 | up(&data->update_lock); | 403 | mutex_unlock(&data->update_lock); |
404 | return count; | 404 | return count; |
405 | } | 405 | } |
406 | #define show_temp_offset(offset) \ | 406 | #define show_temp_offset(offset) \ |
@@ -440,7 +440,7 @@ static ssize_t set_sensor(struct device *dev, struct device_attribute *attr, | |||
440 | struct it87_data *data = i2c_get_clientdata(client); | 440 | struct it87_data *data = i2c_get_clientdata(client); |
441 | int val = simple_strtol(buf, NULL, 10); | 441 | int val = simple_strtol(buf, NULL, 10); |
442 | 442 | ||
443 | down(&data->update_lock); | 443 | mutex_lock(&data->update_lock); |
444 | 444 | ||
445 | data->sensor &= ~(1 << nr); | 445 | data->sensor &= ~(1 << nr); |
446 | data->sensor &= ~(8 << nr); | 446 | data->sensor &= ~(8 << nr); |
@@ -450,11 +450,11 @@ static ssize_t set_sensor(struct device *dev, struct device_attribute *attr, | |||
450 | else if (val == 2) | 450 | else if (val == 2) |
451 | data->sensor |= 8 << nr; | 451 | data->sensor |= 8 << nr; |
452 | else if (val != 0) { | 452 | else if (val != 0) { |
453 | up(&data->update_lock); | 453 | mutex_unlock(&data->update_lock); |
454 | return -EINVAL; | 454 | return -EINVAL; |
455 | } | 455 | } |
456 | it87_write_value(client, IT87_REG_TEMP_ENABLE, data->sensor); | 456 | it87_write_value(client, IT87_REG_TEMP_ENABLE, data->sensor); |
457 | up(&data->update_lock); | 457 | mutex_unlock(&data->update_lock); |
458 | return count; | 458 | return count; |
459 | } | 459 | } |
460 | #define show_sensor_offset(offset) \ | 460 | #define show_sensor_offset(offset) \ |
@@ -524,7 +524,7 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, | |||
524 | int val = simple_strtol(buf, NULL, 10); | 524 | int val = simple_strtol(buf, NULL, 10); |
525 | u8 reg = it87_read_value(client, IT87_REG_FAN_DIV); | 525 | u8 reg = it87_read_value(client, IT87_REG_FAN_DIV); |
526 | 526 | ||
527 | down(&data->update_lock); | 527 | mutex_lock(&data->update_lock); |
528 | switch (nr) { | 528 | switch (nr) { |
529 | case 0: data->fan_div[nr] = reg & 0x07; break; | 529 | case 0: data->fan_div[nr] = reg & 0x07; break; |
530 | case 1: data->fan_div[nr] = (reg >> 3) & 0x07; break; | 530 | case 1: data->fan_div[nr] = (reg >> 3) & 0x07; break; |
@@ -533,7 +533,7 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, | |||
533 | 533 | ||
534 | data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr])); | 534 | data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr])); |
535 | it87_write_value(client, IT87_REG_FAN_MIN(nr), data->fan_min[nr]); | 535 | it87_write_value(client, IT87_REG_FAN_MIN(nr), data->fan_min[nr]); |
536 | up(&data->update_lock); | 536 | mutex_unlock(&data->update_lock); |
537 | return count; | 537 | return count; |
538 | } | 538 | } |
539 | static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, | 539 | static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, |
@@ -548,7 +548,7 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, | |||
548 | int i, min[3]; | 548 | int i, min[3]; |
549 | u8 old; | 549 | u8 old; |
550 | 550 | ||
551 | down(&data->update_lock); | 551 | mutex_lock(&data->update_lock); |
552 | old = it87_read_value(client, IT87_REG_FAN_DIV); | 552 | old = it87_read_value(client, IT87_REG_FAN_DIV); |
553 | 553 | ||
554 | for (i = 0; i < 3; i++) | 554 | for (i = 0; i < 3; i++) |
@@ -576,7 +576,7 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, | |||
576 | data->fan_min[i]=FAN_TO_REG(min[i], DIV_FROM_REG(data->fan_div[i])); | 576 | data->fan_min[i]=FAN_TO_REG(min[i], DIV_FROM_REG(data->fan_div[i])); |
577 | it87_write_value(client, IT87_REG_FAN_MIN(i), data->fan_min[i]); | 577 | it87_write_value(client, IT87_REG_FAN_MIN(i), data->fan_min[i]); |
578 | } | 578 | } |
579 | up(&data->update_lock); | 579 | mutex_unlock(&data->update_lock); |
580 | return count; | 580 | return count; |
581 | } | 581 | } |
582 | static ssize_t set_pwm_enable(struct device *dev, | 582 | static ssize_t set_pwm_enable(struct device *dev, |
@@ -589,7 +589,7 @@ static ssize_t set_pwm_enable(struct device *dev, | |||
589 | struct it87_data *data = i2c_get_clientdata(client); | 589 | struct it87_data *data = i2c_get_clientdata(client); |
590 | int val = simple_strtol(buf, NULL, 10); | 590 | int val = simple_strtol(buf, NULL, 10); |
591 | 591 | ||
592 | down(&data->update_lock); | 592 | mutex_lock(&data->update_lock); |
593 | 593 | ||
594 | if (val == 0) { | 594 | if (val == 0) { |
595 | int tmp; | 595 | int tmp; |
@@ -606,11 +606,11 @@ static ssize_t set_pwm_enable(struct device *dev, | |||
606 | /* set saved pwm value, clear FAN_CTLX PWM mode bit */ | 606 | /* set saved pwm value, clear FAN_CTLX PWM mode bit */ |
607 | it87_write_value(client, IT87_REG_PWM(nr), PWM_TO_REG(data->manual_pwm_ctl[nr])); | 607 | it87_write_value(client, IT87_REG_PWM(nr), PWM_TO_REG(data->manual_pwm_ctl[nr])); |
608 | } else { | 608 | } else { |
609 | up(&data->update_lock); | 609 | mutex_unlock(&data->update_lock); |
610 | return -EINVAL; | 610 | return -EINVAL; |
611 | } | 611 | } |
612 | 612 | ||
613 | up(&data->update_lock); | 613 | mutex_unlock(&data->update_lock); |
614 | return count; | 614 | return count; |
615 | } | 615 | } |
616 | static ssize_t set_pwm(struct device *dev, struct device_attribute *attr, | 616 | static ssize_t set_pwm(struct device *dev, struct device_attribute *attr, |
@@ -626,11 +626,11 @@ static ssize_t set_pwm(struct device *dev, struct device_attribute *attr, | |||
626 | if (val < 0 || val > 255) | 626 | if (val < 0 || val > 255) |
627 | return -EINVAL; | 627 | return -EINVAL; |
628 | 628 | ||
629 | down(&data->update_lock); | 629 | mutex_lock(&data->update_lock); |
630 | data->manual_pwm_ctl[nr] = val; | 630 | data->manual_pwm_ctl[nr] = val; |
631 | if (data->fan_main_ctrl & (1 << nr)) | 631 | if (data->fan_main_ctrl & (1 << nr)) |
632 | it87_write_value(client, IT87_REG_PWM(nr), PWM_TO_REG(data->manual_pwm_ctl[nr])); | 632 | it87_write_value(client, IT87_REG_PWM(nr), PWM_TO_REG(data->manual_pwm_ctl[nr])); |
633 | up(&data->update_lock); | 633 | mutex_unlock(&data->update_lock); |
634 | return count; | 634 | return count; |
635 | } | 635 | } |
636 | 636 | ||
@@ -776,7 +776,7 @@ static int it87_detect(struct i2c_adapter *adapter, int address, int kind) | |||
776 | 776 | ||
777 | new_client = &data->client; | 777 | new_client = &data->client; |
778 | if (is_isa) | 778 | if (is_isa) |
779 | init_MUTEX(&data->lock); | 779 | mutex_init(&data->lock); |
780 | i2c_set_clientdata(new_client, data); | 780 | i2c_set_clientdata(new_client, data); |
781 | new_client->addr = address; | 781 | new_client->addr = address; |
782 | new_client->adapter = adapter; | 782 | new_client->adapter = adapter; |
@@ -823,7 +823,7 @@ static int it87_detect(struct i2c_adapter *adapter, int address, int kind) | |||
823 | strlcpy(new_client->name, name, I2C_NAME_SIZE); | 823 | strlcpy(new_client->name, name, I2C_NAME_SIZE); |
824 | data->type = kind; | 824 | data->type = kind; |
825 | data->valid = 0; | 825 | data->valid = 0; |
826 | init_MUTEX(&data->update_lock); | 826 | mutex_init(&data->update_lock); |
827 | 827 | ||
828 | /* Tell the I2C layer a new client has arrived */ | 828 | /* Tell the I2C layer a new client has arrived */ |
829 | if ((err = i2c_attach_client(new_client))) | 829 | if ((err = i2c_attach_client(new_client))) |
@@ -950,10 +950,10 @@ static int it87_read_value(struct i2c_client *client, u8 reg) | |||
950 | 950 | ||
951 | int res; | 951 | int res; |
952 | if (i2c_is_isa_client(client)) { | 952 | if (i2c_is_isa_client(client)) { |
953 | down(&data->lock); | 953 | mutex_lock(&data->lock); |
954 | outb_p(reg, client->addr + IT87_ADDR_REG_OFFSET); | 954 | outb_p(reg, client->addr + IT87_ADDR_REG_OFFSET); |
955 | res = inb_p(client->addr + IT87_DATA_REG_OFFSET); | 955 | res = inb_p(client->addr + IT87_DATA_REG_OFFSET); |
956 | up(&data->lock); | 956 | mutex_unlock(&data->lock); |
957 | return res; | 957 | return res; |
958 | } else | 958 | } else |
959 | return i2c_smbus_read_byte_data(client, reg); | 959 | return i2c_smbus_read_byte_data(client, reg); |
@@ -969,10 +969,10 @@ static int it87_write_value(struct i2c_client *client, u8 reg, u8 value) | |||
969 | struct it87_data *data = i2c_get_clientdata(client); | 969 | struct it87_data *data = i2c_get_clientdata(client); |
970 | 970 | ||
971 | if (i2c_is_isa_client(client)) { | 971 | if (i2c_is_isa_client(client)) { |
972 | down(&data->lock); | 972 | mutex_lock(&data->lock); |
973 | outb_p(reg, client->addr + IT87_ADDR_REG_OFFSET); | 973 | outb_p(reg, client->addr + IT87_ADDR_REG_OFFSET); |
974 | outb_p(value, client->addr + IT87_DATA_REG_OFFSET); | 974 | outb_p(value, client->addr + IT87_DATA_REG_OFFSET); |
975 | up(&data->lock); | 975 | mutex_unlock(&data->lock); |
976 | return 0; | 976 | return 0; |
977 | } else | 977 | } else |
978 | return i2c_smbus_write_byte_data(client, reg, value); | 978 | return i2c_smbus_write_byte_data(client, reg, value); |
@@ -1098,7 +1098,7 @@ static struct it87_data *it87_update_device(struct device *dev) | |||
1098 | struct it87_data *data = i2c_get_clientdata(client); | 1098 | struct it87_data *data = i2c_get_clientdata(client); |
1099 | int i; | 1099 | int i; |
1100 | 1100 | ||
1101 | down(&data->update_lock); | 1101 | mutex_lock(&data->update_lock); |
1102 | 1102 | ||
1103 | if (time_after(jiffies, data->last_updated + HZ + HZ / 2) | 1103 | if (time_after(jiffies, data->last_updated + HZ + HZ / 2) |
1104 | || !data->valid) { | 1104 | || !data->valid) { |
@@ -1160,7 +1160,7 @@ static struct it87_data *it87_update_device(struct device *dev) | |||
1160 | data->valid = 1; | 1160 | data->valid = 1; |
1161 | } | 1161 | } |
1162 | 1162 | ||
1163 | up(&data->update_lock); | 1163 | mutex_unlock(&data->update_lock); |
1164 | 1164 | ||
1165 | return data; | 1165 | return data; |
1166 | } | 1166 | } |