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 ---