adm1031.c (4fa435018d740cb83d74c92306aa1f796da91ddd) | adm1031.c (38a1f0e9aed014be66c474ecd9fe8513646de833) |
---|---|
1/* 2 adm1031.c - Part of lm_sensors, Linux kernel modules for hardware 3 monitoring 4 Based on lm75.c and lm85.c 5 Supports adm1030 / adm1031 6 Copyright (C) 2004 Alexandre d'Alton <alex@alexdalton.org> 7 Reworked by Jean Delvare <khali@linux-fr.org> 8 --- 528 unchanged lines hidden (view full) --- 537 val == 4 ? 0x80 : 538 val == 2 ? 0x40 : 539 val == 1 ? 0x00 : 540 0xff; 541 if (tmp == 0xff) 542 return -EINVAL; 543 544 mutex_lock(&data->update_lock); | 1/* 2 adm1031.c - Part of lm_sensors, Linux kernel modules for hardware 3 monitoring 4 Based on lm75.c and lm85.c 5 Supports adm1030 / adm1031 6 Copyright (C) 2004 Alexandre d'Alton <alex@alexdalton.org> 7 Reworked by Jean Delvare <khali@linux-fr.org> 8 --- 528 unchanged lines hidden (view full) --- 537 val == 4 ? 0x80 : 538 val == 2 ? 0x40 : 539 val == 1 ? 0x00 : 540 0xff; 541 if (tmp == 0xff) 542 return -EINVAL; 543 544 mutex_lock(&data->update_lock); |
545 /* Get fresh readings */ 546 data->fan_div[nr] = adm1031_read_value(client, 547 ADM1031_REG_FAN_DIV(nr)); 548 data->fan_min[nr] = adm1031_read_value(client, 549 ADM1031_REG_FAN_MIN(nr)); 550 551 /* Write the new clock divider and fan min */ |
|
545 old_div = FAN_DIV_FROM_REG(data->fan_div[nr]); 546 data->fan_div[nr] = (tmp & 0xC0) | (0x3f & data->fan_div[nr]); 547 new_min = data->fan_min[nr] * old_div / 548 FAN_DIV_FROM_REG(data->fan_div[nr]); 549 data->fan_min[nr] = new_min > 0xff ? 0xff : new_min; | 552 old_div = FAN_DIV_FROM_REG(data->fan_div[nr]); 553 data->fan_div[nr] = (tmp & 0xC0) | (0x3f & data->fan_div[nr]); 554 new_min = data->fan_min[nr] * old_div / 555 FAN_DIV_FROM_REG(data->fan_div[nr]); 556 data->fan_min[nr] = new_min > 0xff ? 0xff : new_min; |
550 data->fan[nr] = data->fan[nr] * old_div / 551 FAN_DIV_FROM_REG(data->fan_div[nr]); | |
552 553 adm1031_write_value(client, ADM1031_REG_FAN_DIV(nr), 554 data->fan_div[nr]); 555 adm1031_write_value(client, ADM1031_REG_FAN_MIN(nr), 556 data->fan_min[nr]); | 557 558 adm1031_write_value(client, ADM1031_REG_FAN_DIV(nr), 559 data->fan_div[nr]); 560 adm1031_write_value(client, ADM1031_REG_FAN_MIN(nr), 561 data->fan_min[nr]); |
562 563 /* Invalidate the cache: fan speed is no longer valid */ 564 data->valid = 0; |
|
557 mutex_unlock(&data->update_lock); 558 return count; 559} 560 561#define fan_offset(offset) \ 562static ssize_t show_fan_##offset (struct device *dev, struct device_attribute *attr, char *buf) \ 563{ \ 564 return show_fan(dev, buf, offset - 1); \ --- 451 unchanged lines hidden --- | 565 mutex_unlock(&data->update_lock); 566 return count; 567} 568 569#define fan_offset(offset) \ 570static ssize_t show_fan_##offset (struct device *dev, struct device_attribute *attr, char *buf) \ 571{ \ 572 return show_fan(dev, buf, offset - 1); \ --- 451 unchanged lines hidden --- |