hwmon: (w83627hf) Refactor beep enable handling

We can handle the beep enable bit as any other beep mask bit for
slightly smaller code.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Mark M. Hoffman <mhoffman@lightlink.com>

authored by Jean Delvare and committed by Mark M. Hoffman 1c138107 e3604c62

+25 -51
+25 -51
drivers/hwmon/w83627hf.c
··· 323 323 return (0x80 | (180000UL / (val << 8))); 324 324 } 325 325 326 - #define BEEP_MASK_FROM_REG(val) (val) 327 - #define BEEP_MASK_TO_REG(val) ((val) & 0xffffff) 328 - #define BEEP_ENABLE_TO_REG(val) ((val)?1:0) 329 - #define BEEP_ENABLE_FROM_REG(val) ((val)?1:0) 326 + #define BEEP_MASK_FROM_REG(val) ((val) & 0xff7fff) 327 + #define BEEP_MASK_TO_REG(val) ((val) & 0xff7fff) 330 328 331 329 #define DIV_FROM_REG(val) (1 << (val)) 332 330 ··· 365 367 u8 vid; /* Register encoding, combined */ 366 368 u32 alarms; /* Register encoding, combined */ 367 369 u32 beep_mask; /* Register encoding, combined */ 368 - u8 beep_enable; /* Boolean */ 369 370 u8 pwm[3]; /* Register value */ 370 371 u8 pwm_freq[3]; /* Register value */ 371 372 u16 sens[3]; /* 1 = pentium diode; 2 = 3904 diode; ··· 737 740 static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5); 738 741 static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13); 739 742 740 - #define show_beep_reg(REG, reg) \ 741 - static ssize_t show_beep_##reg (struct device *dev, struct device_attribute *attr, char *buf) \ 742 - { \ 743 - struct w83627hf_data *data = w83627hf_update_device(dev); \ 744 - return sprintf(buf,"%ld\n", \ 745 - (long)BEEP_##REG##_FROM_REG(data->beep_##reg)); \ 743 + static ssize_t 744 + show_beep_mask(struct device *dev, struct device_attribute *attr, char *buf) 745 + { 746 + struct w83627hf_data *data = w83627hf_update_device(dev); 747 + return sprintf(buf, "%ld\n", 748 + (long)BEEP_MASK_FROM_REG(data->beep_mask)); 746 749 } 747 - show_beep_reg(ENABLE, enable) 748 - show_beep_reg(MASK, mask) 749 - 750 - #define BEEP_ENABLE 0 /* Store beep_enable */ 751 - #define BEEP_MASK 1 /* Store beep_mask */ 752 750 753 751 static ssize_t 754 - store_beep_reg(struct device *dev, const char *buf, size_t count, 755 - int update_mask) 752 + store_beep_mask(struct device *dev, struct device_attribute *attr, 753 + const char *buf, size_t count) 756 754 { 757 755 struct w83627hf_data *data = dev_get_drvdata(dev); 758 - u32 val, val2; 756 + unsigned long val; 759 757 760 758 val = simple_strtoul(buf, NULL, 10); 761 759 762 760 mutex_lock(&data->update_lock); 763 761 764 - if (update_mask == BEEP_MASK) { /* We are storing beep_mask */ 765 - data->beep_mask = BEEP_MASK_TO_REG(val); 766 - w83627hf_write_value(data, W83781D_REG_BEEP_INTS1, 767 - data->beep_mask & 0xff); 768 - w83627hf_write_value(data, W83781D_REG_BEEP_INTS3, 769 - ((data->beep_mask) >> 16) & 0xff); 770 - val2 = (data->beep_mask >> 8) & 0x7f; 771 - } else { /* We are storing beep_enable */ 772 - val2 = 773 - w83627hf_read_value(data, W83781D_REG_BEEP_INTS2) & 0x7f; 774 - data->beep_enable = BEEP_ENABLE_TO_REG(val); 775 - } 776 - 762 + /* preserve beep enable */ 763 + data->beep_mask = (data->beep_mask & 0x8000) 764 + | BEEP_MASK_TO_REG(val); 765 + w83627hf_write_value(data, W83781D_REG_BEEP_INTS1, 766 + data->beep_mask & 0xff); 767 + w83627hf_write_value(data, W83781D_REG_BEEP_INTS3, 768 + ((data->beep_mask) >> 16) & 0xff); 777 769 w83627hf_write_value(data, W83781D_REG_BEEP_INTS2, 778 - val2 | data->beep_enable << 7); 770 + (data->beep_mask >> 8) & 0xff); 779 771 780 772 mutex_unlock(&data->update_lock); 781 773 return count; 782 774 } 783 775 784 - #define sysfs_beep(REG, reg) \ 785 - static ssize_t show_regs_beep_##reg (struct device *dev, struct device_attribute *attr, char *buf) \ 786 - { \ 787 - return show_beep_##reg(dev, attr, buf); \ 788 - } \ 789 - static ssize_t \ 790 - store_regs_beep_##reg (struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \ 791 - { \ 792 - return store_beep_reg(dev, buf, count, BEEP_##REG); \ 793 - } \ 794 - static DEVICE_ATTR(beep_##reg, S_IRUGO | S_IWUSR, \ 795 - show_regs_beep_##reg, store_regs_beep_##reg); 796 - 797 - sysfs_beep(ENABLE, enable); 798 - sysfs_beep(MASK, mask); 776 + static DEVICE_ATTR(beep_mask, S_IRUGO | S_IWUSR, 777 + show_beep_mask, store_beep_mask); 799 778 800 779 static ssize_t 801 780 show_beep(struct device *dev, struct device_attribute *attr, char *buf) ··· 857 884 show_beep, store_beep, 5); 858 885 static SENSOR_DEVICE_ATTR(temp3_beep, S_IRUGO | S_IWUSR, 859 886 show_beep, store_beep, 13); 887 + static SENSOR_DEVICE_ATTR(beep_enable, S_IRUGO | S_IWUSR, 888 + show_beep, store_beep, 15); 860 889 861 890 static ssize_t 862 891 show_fan_div(struct device *dev, struct device_attribute *devattr, char *buf) ··· 1198 1223 TEMP_UNIT_ATTRS(2), 1199 1224 1200 1225 &dev_attr_alarms.attr, 1201 - &dev_attr_beep_enable.attr, 1226 + &sensor_dev_attr_beep_enable.dev_attr.attr, 1202 1227 &dev_attr_beep_mask.attr, 1203 1228 1204 1229 &sensor_dev_attr_pwm1.dev_attr.attr, ··· 1723 1748 (w83627hf_read_value(data, W83781D_REG_ALARM2) << 8) | 1724 1749 (w83627hf_read_value(data, W83781D_REG_ALARM3) << 16); 1725 1750 i = w83627hf_read_value(data, W83781D_REG_BEEP_INTS2); 1726 - data->beep_enable = i >> 7; 1727 - data->beep_mask = ((i & 0x7f) << 8) | 1751 + data->beep_mask = (i << 8) | 1728 1752 w83627hf_read_value(data, W83781D_REG_BEEP_INTS1) | 1729 1753 w83627hf_read_value(data, W83781D_REG_BEEP_INTS3) << 16; 1730 1754 data->last_updated = jiffies;