root/drivers/hwmon/w83627ehf.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. superio_outb
  2. superio_inb
  3. superio_select
  4. superio_enter
  5. superio_exit
  6. is_word_sized
  7. step_time_from_reg
  8. step_time_to_reg
  9. fan_from_reg8
  10. fan_from_reg13
  11. fan_from_reg16
  12. div_from_reg
  13. in_from_reg
  14. in_to_reg
  15. w83627ehf_set_bank
  16. w83627ehf_read_value
  17. w83627ehf_write_value
  18. w83627ehf_read_temp
  19. w83627ehf_write_temp
  20. nct6775_write_fan_div
  21. w83627ehf_write_fan_div
  22. w83627ehf_write_fan_div_common
  23. nct6775_update_fan_div
  24. w83627ehf_update_fan_div
  25. w83627ehf_update_fan_div_common
  26. nct6775_update_pwm
  27. w83627ehf_update_pwm
  28. w83627ehf_update_pwm_common
  29. w83627ehf_update_device
  30. store_in_reg
  31. show_fan
  32. show_fan_min
  33. show_fan_div
  34. store_fan_min
  35. show_temp_label
  36. show_temp_offset
  37. store_temp_offset
  38. show_temp_type
  39. show_pwm_reg
  40. store_pwm
  41. store_pwm_enable
  42. show_tol_temp
  43. store_tolerance
  44. fan_time_functions
  45. cpu0_vid_show
  46. show_caseopen
  47. clear_caseopen
  48. w83627ehf_device_remove_files
  49. w83627ehf_init_device
  50. w82627ehf_swap_tempreg
  51. w83627ehf_set_temp_reg_ehf
  52. w83627ehf_check_fan_inputs
  53. w83627ehf_probe
  54. w83627ehf_remove
  55. w83627ehf_suspend
  56. w83627ehf_resume
  57. w83627ehf_find
  58. sensors_w83627ehf_init
  59. sensors_w83627ehf_exit

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /*
   3  *  w83627ehf - Driver for the hardware monitoring functionality of
   4  *              the Winbond W83627EHF Super-I/O chip
   5  *  Copyright (C) 2005-2012  Jean Delvare <jdelvare@suse.de>
   6  *  Copyright (C) 2006  Yuan Mu (Winbond),
   7  *                      Rudolf Marek <r.marek@assembler.cz>
   8  *                      David Hubbard <david.c.hubbard@gmail.com>
   9  *                      Daniel J Blueman <daniel.blueman@gmail.com>
  10  *  Copyright (C) 2010  Sheng-Yuan Huang (Nuvoton) (PS00)
  11  *
  12  *  Shamelessly ripped from the w83627hf driver
  13  *  Copyright (C) 2003  Mark Studebaker
  14  *
  15  *  Thanks to Leon Moonen, Steve Cliffe and Grant Coady for their help
  16  *  in testing and debugging this driver.
  17  *
  18  *  This driver also supports the W83627EHG, which is the lead-free
  19  *  version of the W83627EHF.
  20  *
  21  *  Supports the following chips:
  22  *
  23  *  Chip        #vin    #fan    #pwm    #temp  chip IDs       man ID
  24  *  w83627ehf   10      5       4       3      0x8850 0x88    0x5ca3
  25  *                                             0x8860 0xa1
  26  *  w83627dhg    9      5       4       3      0xa020 0xc1    0x5ca3
  27  *  w83627dhg-p  9      5       4       3      0xb070 0xc1    0x5ca3
  28  *  w83627uhg    8      2       2       3      0xa230 0xc1    0x5ca3
  29  *  w83667hg     9      5       3       3      0xa510 0xc1    0x5ca3
  30  *  w83667hg-b   9      5       3       4      0xb350 0xc1    0x5ca3
  31  *  nct6775f     9      4       3       9      0xb470 0xc1    0x5ca3
  32  *  nct6776f     9      5       3       9      0xC330 0xc1    0x5ca3
  33  */
  34 
  35 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  36 
  37 #include <linux/module.h>
  38 #include <linux/init.h>
  39 #include <linux/slab.h>
  40 #include <linux/jiffies.h>
  41 #include <linux/platform_device.h>
  42 #include <linux/hwmon.h>
  43 #include <linux/hwmon-sysfs.h>
  44 #include <linux/hwmon-vid.h>
  45 #include <linux/err.h>
  46 #include <linux/mutex.h>
  47 #include <linux/acpi.h>
  48 #include <linux/io.h>
  49 #include "lm75.h"
  50 
  51 enum kinds {
  52         w83627ehf, w83627dhg, w83627dhg_p, w83627uhg,
  53         w83667hg, w83667hg_b, nct6775, nct6776,
  54 };
  55 
  56 /* used to set data->name = w83627ehf_device_names[data->sio_kind] */
  57 static const char * const w83627ehf_device_names[] = {
  58         "w83627ehf",
  59         "w83627dhg",
  60         "w83627dhg",
  61         "w83627uhg",
  62         "w83667hg",
  63         "w83667hg",
  64         "nct6775",
  65         "nct6776",
  66 };
  67 
  68 static unsigned short force_id;
  69 module_param(force_id, ushort, 0);
  70 MODULE_PARM_DESC(force_id, "Override the detected device ID");
  71 
  72 static unsigned short fan_debounce;
  73 module_param(fan_debounce, ushort, 0);
  74 MODULE_PARM_DESC(fan_debounce, "Enable debouncing for fan RPM signal");
  75 
  76 #define DRVNAME "w83627ehf"
  77 
  78 /*
  79  * Super-I/O constants and functions
  80  */
  81 
  82 #define W83627EHF_LD_HWM        0x0b
  83 #define W83667HG_LD_VID         0x0d
  84 
  85 #define SIO_REG_LDSEL           0x07    /* Logical device select */
  86 #define SIO_REG_DEVID           0x20    /* Device ID (2 bytes) */
  87 #define SIO_REG_EN_VRM10        0x2C    /* GPIO3, GPIO4 selection */
  88 #define SIO_REG_ENABLE          0x30    /* Logical device enable */
  89 #define SIO_REG_ADDR            0x60    /* Logical device address (2 bytes) */
  90 #define SIO_REG_VID_CTRL        0xF0    /* VID control */
  91 #define SIO_REG_VID_DATA        0xF1    /* VID data */
  92 
  93 #define SIO_W83627EHF_ID        0x8850
  94 #define SIO_W83627EHG_ID        0x8860
  95 #define SIO_W83627DHG_ID        0xa020
  96 #define SIO_W83627DHG_P_ID      0xb070
  97 #define SIO_W83627UHG_ID        0xa230
  98 #define SIO_W83667HG_ID         0xa510
  99 #define SIO_W83667HG_B_ID       0xb350
 100 #define SIO_NCT6775_ID          0xb470
 101 #define SIO_NCT6776_ID          0xc330
 102 #define SIO_ID_MASK             0xFFF0
 103 
 104 static inline void
 105 superio_outb(int ioreg, int reg, int val)
 106 {
 107         outb(reg, ioreg);
 108         outb(val, ioreg + 1);
 109 }
 110 
 111 static inline int
 112 superio_inb(int ioreg, int reg)
 113 {
 114         outb(reg, ioreg);
 115         return inb(ioreg + 1);
 116 }
 117 
 118 static inline void
 119 superio_select(int ioreg, int ld)
 120 {
 121         outb(SIO_REG_LDSEL, ioreg);
 122         outb(ld, ioreg + 1);
 123 }
 124 
 125 static inline int
 126 superio_enter(int ioreg)
 127 {
 128         if (!request_muxed_region(ioreg, 2, DRVNAME))
 129                 return -EBUSY;
 130 
 131         outb(0x87, ioreg);
 132         outb(0x87, ioreg);
 133 
 134         return 0;
 135 }
 136 
 137 static inline void
 138 superio_exit(int ioreg)
 139 {
 140         outb(0xaa, ioreg);
 141         outb(0x02, ioreg);
 142         outb(0x02, ioreg + 1);
 143         release_region(ioreg, 2);
 144 }
 145 
 146 /*
 147  * ISA constants
 148  */
 149 
 150 #define IOREGION_ALIGNMENT      (~7)
 151 #define IOREGION_OFFSET         5
 152 #define IOREGION_LENGTH         2
 153 #define ADDR_REG_OFFSET         0
 154 #define DATA_REG_OFFSET         1
 155 
 156 #define W83627EHF_REG_BANK              0x4E
 157 #define W83627EHF_REG_CONFIG            0x40
 158 
 159 /*
 160  * Not currently used:
 161  * REG_MAN_ID has the value 0x5ca3 for all supported chips.
 162  * REG_CHIP_ID == 0x88/0xa1/0xc1 depending on chip model.
 163  * REG_MAN_ID is at port 0x4f
 164  * REG_CHIP_ID is at port 0x58
 165  */
 166 
 167 static const u16 W83627EHF_REG_FAN[] = { 0x28, 0x29, 0x2a, 0x3f, 0x553 };
 168 static const u16 W83627EHF_REG_FAN_MIN[] = { 0x3b, 0x3c, 0x3d, 0x3e, 0x55c };
 169 
 170 /* The W83627EHF registers for nr=7,8,9 are in bank 5 */
 171 #define W83627EHF_REG_IN_MAX(nr)        ((nr < 7) ? (0x2b + (nr) * 2) : \
 172                                          (0x554 + (((nr) - 7) * 2)))
 173 #define W83627EHF_REG_IN_MIN(nr)        ((nr < 7) ? (0x2c + (nr) * 2) : \
 174                                          (0x555 + (((nr) - 7) * 2)))
 175 #define W83627EHF_REG_IN(nr)            ((nr < 7) ? (0x20 + (nr)) : \
 176                                          (0x550 + (nr) - 7))
 177 
 178 static const u16 W83627EHF_REG_TEMP[] = { 0x27, 0x150, 0x250, 0x7e };
 179 static const u16 W83627EHF_REG_TEMP_HYST[] = { 0x3a, 0x153, 0x253, 0 };
 180 static const u16 W83627EHF_REG_TEMP_OVER[] = { 0x39, 0x155, 0x255, 0 };
 181 static const u16 W83627EHF_REG_TEMP_CONFIG[] = { 0, 0x152, 0x252, 0 };
 182 
 183 /* Fan clock dividers are spread over the following five registers */
 184 #define W83627EHF_REG_FANDIV1           0x47
 185 #define W83627EHF_REG_FANDIV2           0x4B
 186 #define W83627EHF_REG_VBAT              0x5D
 187 #define W83627EHF_REG_DIODE             0x59
 188 #define W83627EHF_REG_SMI_OVT           0x4C
 189 
 190 /* NCT6775F has its own fan divider registers */
 191 #define NCT6775_REG_FANDIV1             0x506
 192 #define NCT6775_REG_FANDIV2             0x507
 193 #define NCT6775_REG_FAN_DEBOUNCE        0xf0
 194 
 195 #define W83627EHF_REG_ALARM1            0x459
 196 #define W83627EHF_REG_ALARM2            0x45A
 197 #define W83627EHF_REG_ALARM3            0x45B
 198 
 199 #define W83627EHF_REG_CASEOPEN_DET      0x42 /* SMI STATUS #2 */
 200 #define W83627EHF_REG_CASEOPEN_CLR      0x46 /* SMI MASK #3 */
 201 
 202 /* SmartFan registers */
 203 #define W83627EHF_REG_FAN_STEPUP_TIME 0x0f
 204 #define W83627EHF_REG_FAN_STEPDOWN_TIME 0x0e
 205 
 206 /* DC or PWM output fan configuration */
 207 static const u8 W83627EHF_REG_PWM_ENABLE[] = {
 208         0x04,                   /* SYS FAN0 output mode and PWM mode */
 209         0x04,                   /* CPU FAN0 output mode and PWM mode */
 210         0x12,                   /* AUX FAN mode */
 211         0x62,                   /* CPU FAN1 mode */
 212 };
 213 
 214 static const u8 W83627EHF_PWM_MODE_SHIFT[] = { 0, 1, 0, 6 };
 215 static const u8 W83627EHF_PWM_ENABLE_SHIFT[] = { 2, 4, 1, 4 };
 216 
 217 /* FAN Duty Cycle, be used to control */
 218 static const u16 W83627EHF_REG_PWM[] = { 0x01, 0x03, 0x11, 0x61 };
 219 static const u16 W83627EHF_REG_TARGET[] = { 0x05, 0x06, 0x13, 0x63 };
 220 static const u8 W83627EHF_REG_TOLERANCE[] = { 0x07, 0x07, 0x14, 0x62 };
 221 
 222 /* Advanced Fan control, some values are common for all fans */
 223 static const u16 W83627EHF_REG_FAN_START_OUTPUT[] = { 0x0a, 0x0b, 0x16, 0x65 };
 224 static const u16 W83627EHF_REG_FAN_STOP_OUTPUT[] = { 0x08, 0x09, 0x15, 0x64 };
 225 static const u16 W83627EHF_REG_FAN_STOP_TIME[] = { 0x0c, 0x0d, 0x17, 0x66 };
 226 
 227 static const u16 W83627EHF_REG_FAN_MAX_OUTPUT_COMMON[]
 228                                                 = { 0xff, 0x67, 0xff, 0x69 };
 229 static const u16 W83627EHF_REG_FAN_STEP_OUTPUT_COMMON[]
 230                                                 = { 0xff, 0x68, 0xff, 0x6a };
 231 
 232 static const u16 W83627EHF_REG_FAN_MAX_OUTPUT_W83667_B[] = { 0x67, 0x69, 0x6b };
 233 static const u16 W83627EHF_REG_FAN_STEP_OUTPUT_W83667_B[]
 234                                                 = { 0x68, 0x6a, 0x6c };
 235 
 236 static const u16 W83627EHF_REG_TEMP_OFFSET[] = { 0x454, 0x455, 0x456 };
 237 
 238 static const u16 NCT6775_REG_TARGET[] = { 0x101, 0x201, 0x301 };
 239 static const u16 NCT6775_REG_FAN_MODE[] = { 0x102, 0x202, 0x302 };
 240 static const u16 NCT6775_REG_FAN_STOP_OUTPUT[] = { 0x105, 0x205, 0x305 };
 241 static const u16 NCT6775_REG_FAN_START_OUTPUT[] = { 0x106, 0x206, 0x306 };
 242 static const u16 NCT6775_REG_FAN_STOP_TIME[] = { 0x107, 0x207, 0x307 };
 243 static const u16 NCT6775_REG_PWM[] = { 0x109, 0x209, 0x309 };
 244 static const u16 NCT6775_REG_FAN_MAX_OUTPUT[] = { 0x10a, 0x20a, 0x30a };
 245 static const u16 NCT6775_REG_FAN_STEP_OUTPUT[] = { 0x10b, 0x20b, 0x30b };
 246 static const u16 NCT6775_REG_FAN[] = { 0x630, 0x632, 0x634, 0x636, 0x638 };
 247 static const u16 NCT6776_REG_FAN_MIN[] = { 0x63a, 0x63c, 0x63e, 0x640, 0x642};
 248 
 249 static const u16 NCT6775_REG_TEMP[]
 250         = { 0x27, 0x150, 0x250, 0x73, 0x75, 0x77, 0x62b, 0x62c, 0x62d };
 251 static const u16 NCT6775_REG_TEMP_CONFIG[]
 252         = { 0, 0x152, 0x252, 0, 0, 0, 0x628, 0x629, 0x62A };
 253 static const u16 NCT6775_REG_TEMP_HYST[]
 254         = { 0x3a, 0x153, 0x253, 0, 0, 0, 0x673, 0x678, 0x67D };
 255 static const u16 NCT6775_REG_TEMP_OVER[]
 256         = { 0x39, 0x155, 0x255, 0, 0, 0, 0x672, 0x677, 0x67C };
 257 static const u16 NCT6775_REG_TEMP_SOURCE[]
 258         = { 0x621, 0x622, 0x623, 0x100, 0x200, 0x300, 0x624, 0x625, 0x626 };
 259 
 260 static const char *const w83667hg_b_temp_label[] = {
 261         "SYSTIN",
 262         "CPUTIN",
 263         "AUXTIN",
 264         "AMDTSI",
 265         "PECI Agent 1",
 266         "PECI Agent 2",
 267         "PECI Agent 3",
 268         "PECI Agent 4"
 269 };
 270 
 271 static const char *const nct6775_temp_label[] = {
 272         "",
 273         "SYSTIN",
 274         "CPUTIN",
 275         "AUXTIN",
 276         "AMD SB-TSI",
 277         "PECI Agent 0",
 278         "PECI Agent 1",
 279         "PECI Agent 2",
 280         "PECI Agent 3",
 281         "PECI Agent 4",
 282         "PECI Agent 5",
 283         "PECI Agent 6",
 284         "PECI Agent 7",
 285         "PCH_CHIP_CPU_MAX_TEMP",
 286         "PCH_CHIP_TEMP",
 287         "PCH_CPU_TEMP",
 288         "PCH_MCH_TEMP",
 289         "PCH_DIM0_TEMP",
 290         "PCH_DIM1_TEMP",
 291         "PCH_DIM2_TEMP",
 292         "PCH_DIM3_TEMP"
 293 };
 294 
 295 static const char *const nct6776_temp_label[] = {
 296         "",
 297         "SYSTIN",
 298         "CPUTIN",
 299         "AUXTIN",
 300         "SMBUSMASTER 0",
 301         "SMBUSMASTER 1",
 302         "SMBUSMASTER 2",
 303         "SMBUSMASTER 3",
 304         "SMBUSMASTER 4",
 305         "SMBUSMASTER 5",
 306         "SMBUSMASTER 6",
 307         "SMBUSMASTER 7",
 308         "PECI Agent 0",
 309         "PECI Agent 1",
 310         "PCH_CHIP_CPU_MAX_TEMP",
 311         "PCH_CHIP_TEMP",
 312         "PCH_CPU_TEMP",
 313         "PCH_MCH_TEMP",
 314         "PCH_DIM0_TEMP",
 315         "PCH_DIM1_TEMP",
 316         "PCH_DIM2_TEMP",
 317         "PCH_DIM3_TEMP",
 318         "BYTE_TEMP"
 319 };
 320 
 321 #define NUM_REG_TEMP    ARRAY_SIZE(NCT6775_REG_TEMP)
 322 
 323 static int is_word_sized(u16 reg)
 324 {
 325         return ((((reg & 0xff00) == 0x100
 326               || (reg & 0xff00) == 0x200)
 327              && ((reg & 0x00ff) == 0x50
 328               || (reg & 0x00ff) == 0x53
 329               || (reg & 0x00ff) == 0x55))
 330              || (reg & 0xfff0) == 0x630
 331              || reg == 0x640 || reg == 0x642
 332              || ((reg & 0xfff0) == 0x650
 333                  && (reg & 0x000f) >= 0x06)
 334              || reg == 0x73 || reg == 0x75 || reg == 0x77
 335                 );
 336 }
 337 
 338 /*
 339  * Conversions
 340  */
 341 
 342 /* 1 is PWM mode, output in ms */
 343 static inline unsigned int step_time_from_reg(u8 reg, u8 mode)
 344 {
 345         return mode ? 100 * reg : 400 * reg;
 346 }
 347 
 348 static inline u8 step_time_to_reg(unsigned int msec, u8 mode)
 349 {
 350         return clamp_val((mode ? (msec + 50) / 100 : (msec + 200) / 400),
 351                          1, 255);
 352 }
 353 
 354 static unsigned int fan_from_reg8(u16 reg, unsigned int divreg)
 355 {
 356         if (reg == 0 || reg == 255)
 357                 return 0;
 358         return 1350000U / (reg << divreg);
 359 }
 360 
 361 static unsigned int fan_from_reg13(u16 reg, unsigned int divreg)
 362 {
 363         if ((reg & 0xff1f) == 0xff1f)
 364                 return 0;
 365 
 366         reg = (reg & 0x1f) | ((reg & 0xff00) >> 3);
 367 
 368         if (reg == 0)
 369                 return 0;
 370 
 371         return 1350000U / reg;
 372 }
 373 
 374 static unsigned int fan_from_reg16(u16 reg, unsigned int divreg)
 375 {
 376         if (reg == 0 || reg == 0xffff)
 377                 return 0;
 378 
 379         /*
 380          * Even though the registers are 16 bit wide, the fan divisor
 381          * still applies.
 382          */
 383         return 1350000U / (reg << divreg);
 384 }
 385 
 386 static inline unsigned int
 387 div_from_reg(u8 reg)
 388 {
 389         return 1 << reg;
 390 }
 391 
 392 /*
 393  * Some of the voltage inputs have internal scaling, the tables below
 394  * contain 8 (the ADC LSB in mV) * scaling factor * 100
 395  */
 396 static const u16 scale_in_common[10] = {
 397         800, 800, 1600, 1600, 800, 800, 800, 1600, 1600, 800
 398 };
 399 static const u16 scale_in_w83627uhg[9] = {
 400         800, 800, 3328, 3424, 800, 800, 0, 3328, 3400
 401 };
 402 
 403 static inline long in_from_reg(u8 reg, u8 nr, const u16 *scale_in)
 404 {
 405         return DIV_ROUND_CLOSEST(reg * scale_in[nr], 100);
 406 }
 407 
 408 static inline u8 in_to_reg(u32 val, u8 nr, const u16 *scale_in)
 409 {
 410         return clamp_val(DIV_ROUND_CLOSEST(val * 100, scale_in[nr]), 0, 255);
 411 }
 412 
 413 /*
 414  * Data structures and manipulation thereof
 415  */
 416 
 417 struct w83627ehf_data {
 418         int addr;       /* IO base of hw monitor block */
 419         const char *name;
 420 
 421         struct device *hwmon_dev;
 422         struct mutex lock;
 423 
 424         u16 reg_temp[NUM_REG_TEMP];
 425         u16 reg_temp_over[NUM_REG_TEMP];
 426         u16 reg_temp_hyst[NUM_REG_TEMP];
 427         u16 reg_temp_config[NUM_REG_TEMP];
 428         u8 temp_src[NUM_REG_TEMP];
 429         const char * const *temp_label;
 430 
 431         const u16 *REG_PWM;
 432         const u16 *REG_TARGET;
 433         const u16 *REG_FAN;
 434         const u16 *REG_FAN_MIN;
 435         const u16 *REG_FAN_START_OUTPUT;
 436         const u16 *REG_FAN_STOP_OUTPUT;
 437         const u16 *REG_FAN_STOP_TIME;
 438         const u16 *REG_FAN_MAX_OUTPUT;
 439         const u16 *REG_FAN_STEP_OUTPUT;
 440         const u16 *scale_in;
 441 
 442         unsigned int (*fan_from_reg)(u16 reg, unsigned int divreg);
 443         unsigned int (*fan_from_reg_min)(u16 reg, unsigned int divreg);
 444 
 445         struct mutex update_lock;
 446         char valid;             /* !=0 if following fields are valid */
 447         unsigned long last_updated;     /* In jiffies */
 448 
 449         /* Register values */
 450         u8 bank;                /* current register bank */
 451         u8 in_num;              /* number of in inputs we have */
 452         u8 in[10];              /* Register value */
 453         u8 in_max[10];          /* Register value */
 454         u8 in_min[10];          /* Register value */
 455         unsigned int rpm[5];
 456         u16 fan_min[5];
 457         u8 fan_div[5];
 458         u8 has_fan;             /* some fan inputs can be disabled */
 459         u8 has_fan_min;         /* some fans don't have min register */
 460         bool has_fan_div;
 461         u8 temp_type[3];
 462         s8 temp_offset[3];
 463         s16 temp[9];
 464         s16 temp_max[9];
 465         s16 temp_max_hyst[9];
 466         u32 alarms;
 467         u8 caseopen;
 468 
 469         u8 pwm_mode[4]; /* 0->DC variable voltage, 1->PWM variable duty cycle */
 470         u8 pwm_enable[4]; /* 1->manual
 471                            * 2->thermal cruise mode (also called SmartFan I)
 472                            * 3->fan speed cruise mode
 473                            * 4->variable thermal cruise (also called
 474                            * SmartFan III)
 475                            * 5->enhanced variable thermal cruise (also called
 476                            * SmartFan IV)
 477                            */
 478         u8 pwm_enable_orig[4];  /* original value of pwm_enable */
 479         u8 pwm_num;             /* number of pwm */
 480         u8 pwm[4];
 481         u8 target_temp[4];
 482         u8 tolerance[4];
 483 
 484         u8 fan_start_output[4]; /* minimum fan speed when spinning up */
 485         u8 fan_stop_output[4]; /* minimum fan speed when spinning down */
 486         u8 fan_stop_time[4]; /* time at minimum before disabling fan */
 487         u8 fan_max_output[4]; /* maximum fan speed */
 488         u8 fan_step_output[4]; /* rate of change output value */
 489 
 490         u8 vid;
 491         u8 vrm;
 492 
 493         u16 have_temp;
 494         u16 have_temp_offset;
 495         u8 in6_skip:1;
 496         u8 temp3_val_only:1;
 497 
 498 #ifdef CONFIG_PM
 499         /* Remember extra register values over suspend/resume */
 500         u8 vbat;
 501         u8 fandiv1;
 502         u8 fandiv2;
 503 #endif
 504 };
 505 
 506 struct w83627ehf_sio_data {
 507         int sioreg;
 508         enum kinds kind;
 509 };
 510 
 511 /*
 512  * On older chips, only registers 0x50-0x5f are banked.
 513  * On more recent chips, all registers are banked.
 514  * Assume that is the case and set the bank number for each access.
 515  * Cache the bank number so it only needs to be set if it changes.
 516  */
 517 static inline void w83627ehf_set_bank(struct w83627ehf_data *data, u16 reg)
 518 {
 519         u8 bank = reg >> 8;
 520         if (data->bank != bank) {
 521                 outb_p(W83627EHF_REG_BANK, data->addr + ADDR_REG_OFFSET);
 522                 outb_p(bank, data->addr + DATA_REG_OFFSET);
 523                 data->bank = bank;
 524         }
 525 }
 526 
 527 static u16 w83627ehf_read_value(struct w83627ehf_data *data, u16 reg)
 528 {
 529         int res, word_sized = is_word_sized(reg);
 530 
 531         mutex_lock(&data->lock);
 532 
 533         w83627ehf_set_bank(data, reg);
 534         outb_p(reg & 0xff, data->addr + ADDR_REG_OFFSET);
 535         res = inb_p(data->addr + DATA_REG_OFFSET);
 536         if (word_sized) {
 537                 outb_p((reg & 0xff) + 1,
 538                        data->addr + ADDR_REG_OFFSET);
 539                 res = (res << 8) + inb_p(data->addr + DATA_REG_OFFSET);
 540         }
 541 
 542         mutex_unlock(&data->lock);
 543         return res;
 544 }
 545 
 546 static int w83627ehf_write_value(struct w83627ehf_data *data, u16 reg,
 547                                  u16 value)
 548 {
 549         int word_sized = is_word_sized(reg);
 550 
 551         mutex_lock(&data->lock);
 552 
 553         w83627ehf_set_bank(data, reg);
 554         outb_p(reg & 0xff, data->addr + ADDR_REG_OFFSET);
 555         if (word_sized) {
 556                 outb_p(value >> 8, data->addr + DATA_REG_OFFSET);
 557                 outb_p((reg & 0xff) + 1,
 558                        data->addr + ADDR_REG_OFFSET);
 559         }
 560         outb_p(value & 0xff, data->addr + DATA_REG_OFFSET);
 561 
 562         mutex_unlock(&data->lock);
 563         return 0;
 564 }
 565 
 566 /* We left-align 8-bit temperature values to make the code simpler */
 567 static u16 w83627ehf_read_temp(struct w83627ehf_data *data, u16 reg)
 568 {
 569         u16 res;
 570 
 571         res = w83627ehf_read_value(data, reg);
 572         if (!is_word_sized(reg))
 573                 res <<= 8;
 574 
 575         return res;
 576 }
 577 
 578 static int w83627ehf_write_temp(struct w83627ehf_data *data, u16 reg,
 579                                        u16 value)
 580 {
 581         if (!is_word_sized(reg))
 582                 value >>= 8;
 583         return w83627ehf_write_value(data, reg, value);
 584 }
 585 
 586 /* This function assumes that the caller holds data->update_lock */
 587 static void nct6775_write_fan_div(struct w83627ehf_data *data, int nr)
 588 {
 589         u8 reg;
 590 
 591         switch (nr) {
 592         case 0:
 593                 reg = (w83627ehf_read_value(data, NCT6775_REG_FANDIV1) & 0x70)
 594                     | (data->fan_div[0] & 0x7);
 595                 w83627ehf_write_value(data, NCT6775_REG_FANDIV1, reg);
 596                 break;
 597         case 1:
 598                 reg = (w83627ehf_read_value(data, NCT6775_REG_FANDIV1) & 0x7)
 599                     | ((data->fan_div[1] << 4) & 0x70);
 600                 w83627ehf_write_value(data, NCT6775_REG_FANDIV1, reg);
 601                 break;
 602         case 2:
 603                 reg = (w83627ehf_read_value(data, NCT6775_REG_FANDIV2) & 0x70)
 604                     | (data->fan_div[2] & 0x7);
 605                 w83627ehf_write_value(data, NCT6775_REG_FANDIV2, reg);
 606                 break;
 607         case 3:
 608                 reg = (w83627ehf_read_value(data, NCT6775_REG_FANDIV2) & 0x7)
 609                     | ((data->fan_div[3] << 4) & 0x70);
 610                 w83627ehf_write_value(data, NCT6775_REG_FANDIV2, reg);
 611                 break;
 612         }
 613 }
 614 
 615 /* This function assumes that the caller holds data->update_lock */
 616 static void w83627ehf_write_fan_div(struct w83627ehf_data *data, int nr)
 617 {
 618         u8 reg;
 619 
 620         switch (nr) {
 621         case 0:
 622                 reg = (w83627ehf_read_value(data, W83627EHF_REG_FANDIV1) & 0xcf)
 623                     | ((data->fan_div[0] & 0x03) << 4);
 624                 /* fan5 input control bit is write only, compute the value */
 625                 reg |= (data->has_fan & (1 << 4)) ? 1 : 0;
 626                 w83627ehf_write_value(data, W83627EHF_REG_FANDIV1, reg);
 627                 reg = (w83627ehf_read_value(data, W83627EHF_REG_VBAT) & 0xdf)
 628                     | ((data->fan_div[0] & 0x04) << 3);
 629                 w83627ehf_write_value(data, W83627EHF_REG_VBAT, reg);
 630                 break;
 631         case 1:
 632                 reg = (w83627ehf_read_value(data, W83627EHF_REG_FANDIV1) & 0x3f)
 633                     | ((data->fan_div[1] & 0x03) << 6);
 634                 /* fan5 input control bit is write only, compute the value */
 635                 reg |= (data->has_fan & (1 << 4)) ? 1 : 0;
 636                 w83627ehf_write_value(data, W83627EHF_REG_FANDIV1, reg);
 637                 reg = (w83627ehf_read_value(data, W83627EHF_REG_VBAT) & 0xbf)
 638                     | ((data->fan_div[1] & 0x04) << 4);
 639                 w83627ehf_write_value(data, W83627EHF_REG_VBAT, reg);
 640                 break;
 641         case 2:
 642                 reg = (w83627ehf_read_value(data, W83627EHF_REG_FANDIV2) & 0x3f)
 643                     | ((data->fan_div[2] & 0x03) << 6);
 644                 w83627ehf_write_value(data, W83627EHF_REG_FANDIV2, reg);
 645                 reg = (w83627ehf_read_value(data, W83627EHF_REG_VBAT) & 0x7f)
 646                     | ((data->fan_div[2] & 0x04) << 5);
 647                 w83627ehf_write_value(data, W83627EHF_REG_VBAT, reg);
 648                 break;
 649         case 3:
 650                 reg = (w83627ehf_read_value(data, W83627EHF_REG_DIODE) & 0xfc)
 651                     | (data->fan_div[3] & 0x03);
 652                 w83627ehf_write_value(data, W83627EHF_REG_DIODE, reg);
 653                 reg = (w83627ehf_read_value(data, W83627EHF_REG_SMI_OVT) & 0x7f)
 654                     | ((data->fan_div[3] & 0x04) << 5);
 655                 w83627ehf_write_value(data, W83627EHF_REG_SMI_OVT, reg);
 656                 break;
 657         case 4:
 658                 reg = (w83627ehf_read_value(data, W83627EHF_REG_DIODE) & 0x73)
 659                     | ((data->fan_div[4] & 0x03) << 2)
 660                     | ((data->fan_div[4] & 0x04) << 5);
 661                 w83627ehf_write_value(data, W83627EHF_REG_DIODE, reg);
 662                 break;
 663         }
 664 }
 665 
 666 static void w83627ehf_write_fan_div_common(struct device *dev,
 667                                            struct w83627ehf_data *data, int nr)
 668 {
 669         struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
 670 
 671         if (sio_data->kind == nct6776)
 672                 ; /* no dividers, do nothing */
 673         else if (sio_data->kind == nct6775)
 674                 nct6775_write_fan_div(data, nr);
 675         else
 676                 w83627ehf_write_fan_div(data, nr);
 677 }
 678 
 679 static void nct6775_update_fan_div(struct w83627ehf_data *data)
 680 {
 681         u8 i;
 682 
 683         i = w83627ehf_read_value(data, NCT6775_REG_FANDIV1);
 684         data->fan_div[0] = i & 0x7;
 685         data->fan_div[1] = (i & 0x70) >> 4;
 686         i = w83627ehf_read_value(data, NCT6775_REG_FANDIV2);
 687         data->fan_div[2] = i & 0x7;
 688         if (data->has_fan & (1<<3))
 689                 data->fan_div[3] = (i & 0x70) >> 4;
 690 }
 691 
 692 static void w83627ehf_update_fan_div(struct w83627ehf_data *data)
 693 {
 694         int i;
 695 
 696         i = w83627ehf_read_value(data, W83627EHF_REG_FANDIV1);
 697         data->fan_div[0] = (i >> 4) & 0x03;
 698         data->fan_div[1] = (i >> 6) & 0x03;
 699         i = w83627ehf_read_value(data, W83627EHF_REG_FANDIV2);
 700         data->fan_div[2] = (i >> 6) & 0x03;
 701         i = w83627ehf_read_value(data, W83627EHF_REG_VBAT);
 702         data->fan_div[0] |= (i >> 3) & 0x04;
 703         data->fan_div[1] |= (i >> 4) & 0x04;
 704         data->fan_div[2] |= (i >> 5) & 0x04;
 705         if (data->has_fan & ((1 << 3) | (1 << 4))) {
 706                 i = w83627ehf_read_value(data, W83627EHF_REG_DIODE);
 707                 data->fan_div[3] = i & 0x03;
 708                 data->fan_div[4] = ((i >> 2) & 0x03)
 709                                  | ((i >> 5) & 0x04);
 710         }
 711         if (data->has_fan & (1 << 3)) {
 712                 i = w83627ehf_read_value(data, W83627EHF_REG_SMI_OVT);
 713                 data->fan_div[3] |= (i >> 5) & 0x04;
 714         }
 715 }
 716 
 717 static void w83627ehf_update_fan_div_common(struct device *dev,
 718                                             struct w83627ehf_data *data)
 719 {
 720         struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
 721 
 722         if (sio_data->kind == nct6776)
 723                 ; /* no dividers, do nothing */
 724         else if (sio_data->kind == nct6775)
 725                 nct6775_update_fan_div(data);
 726         else
 727                 w83627ehf_update_fan_div(data);
 728 }
 729 
 730 static void nct6775_update_pwm(struct w83627ehf_data *data)
 731 {
 732         int i;
 733         int pwmcfg, fanmodecfg;
 734 
 735         for (i = 0; i < data->pwm_num; i++) {
 736                 pwmcfg = w83627ehf_read_value(data,
 737                                               W83627EHF_REG_PWM_ENABLE[i]);
 738                 fanmodecfg = w83627ehf_read_value(data,
 739                                                   NCT6775_REG_FAN_MODE[i]);
 740                 data->pwm_mode[i] =
 741                   ((pwmcfg >> W83627EHF_PWM_MODE_SHIFT[i]) & 1) ? 0 : 1;
 742                 data->pwm_enable[i] = ((fanmodecfg >> 4) & 7) + 1;
 743                 data->tolerance[i] = fanmodecfg & 0x0f;
 744                 data->pwm[i] = w83627ehf_read_value(data, data->REG_PWM[i]);
 745         }
 746 }
 747 
 748 static void w83627ehf_update_pwm(struct w83627ehf_data *data)
 749 {
 750         int i;
 751         int pwmcfg = 0, tolerance = 0; /* shut up the compiler */
 752 
 753         for (i = 0; i < data->pwm_num; i++) {
 754                 if (!(data->has_fan & (1 << i)))
 755                         continue;
 756 
 757                 /* pwmcfg, tolerance mapped for i=0, i=1 to same reg */
 758                 if (i != 1) {
 759                         pwmcfg = w83627ehf_read_value(data,
 760                                         W83627EHF_REG_PWM_ENABLE[i]);
 761                         tolerance = w83627ehf_read_value(data,
 762                                         W83627EHF_REG_TOLERANCE[i]);
 763                 }
 764                 data->pwm_mode[i] =
 765                         ((pwmcfg >> W83627EHF_PWM_MODE_SHIFT[i]) & 1) ? 0 : 1;
 766                 data->pwm_enable[i] = ((pwmcfg >> W83627EHF_PWM_ENABLE_SHIFT[i])
 767                                        & 3) + 1;
 768                 data->pwm[i] = w83627ehf_read_value(data, data->REG_PWM[i]);
 769 
 770                 data->tolerance[i] = (tolerance >> (i == 1 ? 4 : 0)) & 0x0f;
 771         }
 772 }
 773 
 774 static void w83627ehf_update_pwm_common(struct device *dev,
 775                                         struct w83627ehf_data *data)
 776 {
 777         struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
 778 
 779         if (sio_data->kind == nct6775 || sio_data->kind == nct6776)
 780                 nct6775_update_pwm(data);
 781         else
 782                 w83627ehf_update_pwm(data);
 783 }
 784 
 785 static struct w83627ehf_data *w83627ehf_update_device(struct device *dev)
 786 {
 787         struct w83627ehf_data *data = dev_get_drvdata(dev);
 788         struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
 789 
 790         int i;
 791 
 792         mutex_lock(&data->update_lock);
 793 
 794         if (time_after(jiffies, data->last_updated + HZ + HZ/2)
 795          || !data->valid) {
 796                 /* Fan clock dividers */
 797                 w83627ehf_update_fan_div_common(dev, data);
 798 
 799                 /* Measured voltages and limits */
 800                 for (i = 0; i < data->in_num; i++) {
 801                         if ((i == 6) && data->in6_skip)
 802                                 continue;
 803 
 804                         data->in[i] = w83627ehf_read_value(data,
 805                                       W83627EHF_REG_IN(i));
 806                         data->in_min[i] = w83627ehf_read_value(data,
 807                                           W83627EHF_REG_IN_MIN(i));
 808                         data->in_max[i] = w83627ehf_read_value(data,
 809                                           W83627EHF_REG_IN_MAX(i));
 810                 }
 811 
 812                 /* Measured fan speeds and limits */
 813                 for (i = 0; i < 5; i++) {
 814                         u16 reg;
 815 
 816                         if (!(data->has_fan & (1 << i)))
 817                                 continue;
 818 
 819                         reg = w83627ehf_read_value(data, data->REG_FAN[i]);
 820                         data->rpm[i] = data->fan_from_reg(reg,
 821                                                           data->fan_div[i]);
 822 
 823                         if (data->has_fan_min & (1 << i))
 824                                 data->fan_min[i] = w83627ehf_read_value(data,
 825                                            data->REG_FAN_MIN[i]);
 826 
 827                         /*
 828                          * If we failed to measure the fan speed and clock
 829                          * divider can be increased, let's try that for next
 830                          * time
 831                          */
 832                         if (data->has_fan_div
 833                             && (reg >= 0xff || (sio_data->kind == nct6775
 834                                                 && reg == 0x00))
 835                             && data->fan_div[i] < 0x07) {
 836                                 dev_dbg(dev,
 837                                         "Increasing fan%d clock divider from %u to %u\n",
 838                                         i + 1, div_from_reg(data->fan_div[i]),
 839                                         div_from_reg(data->fan_div[i] + 1));
 840                                 data->fan_div[i]++;
 841                                 w83627ehf_write_fan_div_common(dev, data, i);
 842                                 /* Preserve min limit if possible */
 843                                 if ((data->has_fan_min & (1 << i))
 844                                  && data->fan_min[i] >= 2
 845                                  && data->fan_min[i] != 255)
 846                                         w83627ehf_write_value(data,
 847                                                 data->REG_FAN_MIN[i],
 848                                                 (data->fan_min[i] /= 2));
 849                         }
 850                 }
 851 
 852                 w83627ehf_update_pwm_common(dev, data);
 853 
 854                 for (i = 0; i < data->pwm_num; i++) {
 855                         if (!(data->has_fan & (1 << i)))
 856                                 continue;
 857 
 858                         data->fan_start_output[i] =
 859                           w83627ehf_read_value(data,
 860                                                data->REG_FAN_START_OUTPUT[i]);
 861                         data->fan_stop_output[i] =
 862                           w83627ehf_read_value(data,
 863                                                data->REG_FAN_STOP_OUTPUT[i]);
 864                         data->fan_stop_time[i] =
 865                           w83627ehf_read_value(data,
 866                                                data->REG_FAN_STOP_TIME[i]);
 867 
 868                         if (data->REG_FAN_MAX_OUTPUT &&
 869                             data->REG_FAN_MAX_OUTPUT[i] != 0xff)
 870                                 data->fan_max_output[i] =
 871                                   w83627ehf_read_value(data,
 872                                                 data->REG_FAN_MAX_OUTPUT[i]);
 873 
 874                         if (data->REG_FAN_STEP_OUTPUT &&
 875                             data->REG_FAN_STEP_OUTPUT[i] != 0xff)
 876                                 data->fan_step_output[i] =
 877                                   w83627ehf_read_value(data,
 878                                                 data->REG_FAN_STEP_OUTPUT[i]);
 879 
 880                         data->target_temp[i] =
 881                                 w83627ehf_read_value(data,
 882                                         data->REG_TARGET[i]) &
 883                                         (data->pwm_mode[i] == 1 ? 0x7f : 0xff);
 884                 }
 885 
 886                 /* Measured temperatures and limits */
 887                 for (i = 0; i < NUM_REG_TEMP; i++) {
 888                         if (!(data->have_temp & (1 << i)))
 889                                 continue;
 890                         data->temp[i] = w83627ehf_read_temp(data,
 891                                                 data->reg_temp[i]);
 892                         if (data->reg_temp_over[i])
 893                                 data->temp_max[i]
 894                                   = w83627ehf_read_temp(data,
 895                                                 data->reg_temp_over[i]);
 896                         if (data->reg_temp_hyst[i])
 897                                 data->temp_max_hyst[i]
 898                                   = w83627ehf_read_temp(data,
 899                                                 data->reg_temp_hyst[i]);
 900                         if (i > 2)
 901                                 continue;
 902                         if (data->have_temp_offset & (1 << i))
 903                                 data->temp_offset[i]
 904                                   = w83627ehf_read_value(data,
 905                                                 W83627EHF_REG_TEMP_OFFSET[i]);
 906                 }
 907 
 908                 data->alarms = w83627ehf_read_value(data,
 909                                         W83627EHF_REG_ALARM1) |
 910                                (w83627ehf_read_value(data,
 911                                         W83627EHF_REG_ALARM2) << 8) |
 912                                (w83627ehf_read_value(data,
 913                                         W83627EHF_REG_ALARM3) << 16);
 914 
 915                 data->caseopen = w83627ehf_read_value(data,
 916                                                 W83627EHF_REG_CASEOPEN_DET);
 917 
 918                 data->last_updated = jiffies;
 919                 data->valid = 1;
 920         }
 921 
 922         mutex_unlock(&data->update_lock);
 923         return data;
 924 }
 925 
 926 /*
 927  * Sysfs callback functions
 928  */
 929 #define show_in_reg(reg) \
 930 static ssize_t \
 931 show_##reg(struct device *dev, struct device_attribute *attr, \
 932            char *buf) \
 933 { \
 934         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
 935         struct sensor_device_attribute *sensor_attr = \
 936                 to_sensor_dev_attr(attr); \
 937         int nr = sensor_attr->index; \
 938         return sprintf(buf, "%ld\n", in_from_reg(data->reg[nr], nr, \
 939                        data->scale_in)); \
 940 }
 941 show_in_reg(in)
 942 show_in_reg(in_min)
 943 show_in_reg(in_max)
 944 
 945 #define store_in_reg(REG, reg) \
 946 static ssize_t \
 947 store_in_##reg(struct device *dev, struct device_attribute *attr, \
 948                const char *buf, size_t count) \
 949 { \
 950         struct w83627ehf_data *data = dev_get_drvdata(dev); \
 951         struct sensor_device_attribute *sensor_attr = \
 952                 to_sensor_dev_attr(attr); \
 953         int nr = sensor_attr->index; \
 954         unsigned long val; \
 955         int err; \
 956         err = kstrtoul(buf, 10, &val); \
 957         if (err < 0) \
 958                 return err; \
 959         mutex_lock(&data->update_lock); \
 960         data->in_##reg[nr] = in_to_reg(val, nr, data->scale_in); \
 961         w83627ehf_write_value(data, W83627EHF_REG_IN_##REG(nr), \
 962                               data->in_##reg[nr]); \
 963         mutex_unlock(&data->update_lock); \
 964         return count; \
 965 }
 966 
 967 store_in_reg(MIN, min)
 968 store_in_reg(MAX, max)
 969 
 970 static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
 971                           char *buf)
 972 {
 973         struct w83627ehf_data *data = w83627ehf_update_device(dev);
 974         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
 975         int nr = sensor_attr->index;
 976         return sprintf(buf, "%u\n", (data->alarms >> nr) & 0x01);
 977 }
 978 
 979 static struct sensor_device_attribute sda_in_input[] = {
 980         SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
 981         SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
 982         SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
 983         SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
 984         SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
 985         SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
 986         SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
 987         SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
 988         SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
 989         SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
 990 };
 991 
 992 static struct sensor_device_attribute sda_in_alarm[] = {
 993         SENSOR_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0),
 994         SENSOR_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1),
 995         SENSOR_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2),
 996         SENSOR_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3),
 997         SENSOR_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8),
 998         SENSOR_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 21),
 999         SENSOR_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 20),
1000         SENSOR_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 16),
1001         SENSOR_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 17),
1002         SENSOR_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL, 19),
1003 };
1004 
1005 static struct sensor_device_attribute sda_in_min[] = {
1006         SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
1007         SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
1008         SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
1009         SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
1010         SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
1011         SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
1012         SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
1013         SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
1014         SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
1015         SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
1016 };
1017 
1018 static struct sensor_device_attribute sda_in_max[] = {
1019         SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
1020         SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
1021         SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
1022         SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
1023         SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
1024         SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
1025         SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
1026         SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
1027         SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
1028         SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
1029 };
1030 
1031 static ssize_t
1032 show_fan(struct device *dev, struct device_attribute *attr, char *buf)
1033 {
1034         struct w83627ehf_data *data = w83627ehf_update_device(dev);
1035         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1036         int nr = sensor_attr->index;
1037         return sprintf(buf, "%d\n", data->rpm[nr]);
1038 }
1039 
1040 static ssize_t
1041 show_fan_min(struct device *dev, struct device_attribute *attr, char *buf)
1042 {
1043         struct w83627ehf_data *data = w83627ehf_update_device(dev);
1044         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1045         int nr = sensor_attr->index;
1046         return sprintf(buf, "%d\n",
1047                        data->fan_from_reg_min(data->fan_min[nr],
1048                                               data->fan_div[nr]));
1049 }
1050 
1051 static ssize_t
1052 show_fan_div(struct device *dev, struct device_attribute *attr,
1053              char *buf)
1054 {
1055         struct w83627ehf_data *data = w83627ehf_update_device(dev);
1056         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1057         int nr = sensor_attr->index;
1058         return sprintf(buf, "%u\n", div_from_reg(data->fan_div[nr]));
1059 }
1060 
1061 static ssize_t
1062 store_fan_min(struct device *dev, struct device_attribute *attr,
1063               const char *buf, size_t count)
1064 {
1065         struct w83627ehf_data *data = dev_get_drvdata(dev);
1066         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1067         int nr = sensor_attr->index;
1068         unsigned long val;
1069         int err;
1070         unsigned int reg;
1071         u8 new_div;
1072 
1073         err = kstrtoul(buf, 10, &val);
1074         if (err < 0)
1075                 return err;
1076 
1077         mutex_lock(&data->update_lock);
1078         if (!data->has_fan_div) {
1079                 /*
1080                  * Only NCT6776F for now, so we know that this is a 13 bit
1081                  * register
1082                  */
1083                 if (!val) {
1084                         val = 0xff1f;
1085                 } else {
1086                         if (val > 1350000U)
1087                                 val = 135000U;
1088                         val = 1350000U / val;
1089                         val = (val & 0x1f) | ((val << 3) & 0xff00);
1090                 }
1091                 data->fan_min[nr] = val;
1092                 goto done;      /* Leave fan divider alone */
1093         }
1094         if (!val) {
1095                 /* No min limit, alarm disabled */
1096                 data->fan_min[nr] = 255;
1097                 new_div = data->fan_div[nr]; /* No change */
1098                 dev_info(dev, "fan%u low limit and alarm disabled\n", nr + 1);
1099         } else if ((reg = 1350000U / val) >= 128 * 255) {
1100                 /*
1101                  * Speed below this value cannot possibly be represented,
1102                  * even with the highest divider (128)
1103                  */
1104                 data->fan_min[nr] = 254;
1105                 new_div = 7; /* 128 == (1 << 7) */
1106                 dev_warn(dev,
1107                          "fan%u low limit %lu below minimum %u, set to minimum\n",
1108                          nr + 1, val, data->fan_from_reg_min(254, 7));
1109         } else if (!reg) {
1110                 /*
1111                  * Speed above this value cannot possibly be represented,
1112                  * even with the lowest divider (1)
1113                  */
1114                 data->fan_min[nr] = 1;
1115                 new_div = 0; /* 1 == (1 << 0) */
1116                 dev_warn(dev,
1117                          "fan%u low limit %lu above maximum %u, set to maximum\n",
1118                          nr + 1, val, data->fan_from_reg_min(1, 0));
1119         } else {
1120                 /*
1121                  * Automatically pick the best divider, i.e. the one such
1122                  * that the min limit will correspond to a register value
1123                  * in the 96..192 range
1124                  */
1125                 new_div = 0;
1126                 while (reg > 192 && new_div < 7) {
1127                         reg >>= 1;
1128                         new_div++;
1129                 }
1130                 data->fan_min[nr] = reg;
1131         }
1132 
1133         /*
1134          * Write both the fan clock divider (if it changed) and the new
1135          * fan min (unconditionally)
1136          */
1137         if (new_div != data->fan_div[nr]) {
1138                 dev_dbg(dev, "fan%u clock divider changed from %u to %u\n",
1139                         nr + 1, div_from_reg(data->fan_div[nr]),
1140                         div_from_reg(new_div));
1141                 data->fan_div[nr] = new_div;
1142                 w83627ehf_write_fan_div_common(dev, data, nr);
1143                 /* Give the chip time to sample a new speed value */
1144                 data->last_updated = jiffies;
1145         }
1146 done:
1147         w83627ehf_write_value(data, data->REG_FAN_MIN[nr],
1148                               data->fan_min[nr]);
1149         mutex_unlock(&data->update_lock);
1150 
1151         return count;
1152 }
1153 
1154 static struct sensor_device_attribute sda_fan_input[] = {
1155         SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
1156         SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
1157         SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
1158         SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3),
1159         SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
1160 };
1161 
1162 static struct sensor_device_attribute sda_fan_alarm[] = {
1163         SENSOR_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6),
1164         SENSOR_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7),
1165         SENSOR_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11),
1166         SENSOR_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 10),
1167         SENSOR_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 23),
1168 };
1169 
1170 static struct sensor_device_attribute sda_fan_min[] = {
1171         SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
1172                     store_fan_min, 0),
1173         SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
1174                     store_fan_min, 1),
1175         SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
1176                     store_fan_min, 2),
1177         SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
1178                     store_fan_min, 3),
1179         SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO, show_fan_min,
1180                     store_fan_min, 4),
1181 };
1182 
1183 static struct sensor_device_attribute sda_fan_div[] = {
1184         SENSOR_ATTR(fan1_div, S_IRUGO, show_fan_div, NULL, 0),
1185         SENSOR_ATTR(fan2_div, S_IRUGO, show_fan_div, NULL, 1),
1186         SENSOR_ATTR(fan3_div, S_IRUGO, show_fan_div, NULL, 2),
1187         SENSOR_ATTR(fan4_div, S_IRUGO, show_fan_div, NULL, 3),
1188         SENSOR_ATTR(fan5_div, S_IRUGO, show_fan_div, NULL, 4),
1189 };
1190 
1191 static ssize_t
1192 show_temp_label(struct device *dev, struct device_attribute *attr, char *buf)
1193 {
1194         struct w83627ehf_data *data = w83627ehf_update_device(dev);
1195         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1196         int nr = sensor_attr->index;
1197         return sprintf(buf, "%s\n", data->temp_label[data->temp_src[nr]]);
1198 }
1199 
1200 #define show_temp_reg(addr, reg) \
1201 static ssize_t \
1202 show_##reg(struct device *dev, struct device_attribute *attr, \
1203            char *buf) \
1204 { \
1205         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1206         struct sensor_device_attribute *sensor_attr = \
1207                 to_sensor_dev_attr(attr); \
1208         int nr = sensor_attr->index; \
1209         return sprintf(buf, "%d\n", LM75_TEMP_FROM_REG(data->reg[nr])); \
1210 }
1211 show_temp_reg(reg_temp, temp);
1212 show_temp_reg(reg_temp_over, temp_max);
1213 show_temp_reg(reg_temp_hyst, temp_max_hyst);
1214 
1215 #define store_temp_reg(addr, reg) \
1216 static ssize_t \
1217 store_##reg(struct device *dev, struct device_attribute *attr, \
1218             const char *buf, size_t count) \
1219 { \
1220         struct w83627ehf_data *data = dev_get_drvdata(dev); \
1221         struct sensor_device_attribute *sensor_attr = \
1222                 to_sensor_dev_attr(attr); \
1223         int nr = sensor_attr->index; \
1224         int err; \
1225         long val; \
1226         err = kstrtol(buf, 10, &val); \
1227         if (err < 0) \
1228                 return err; \
1229         mutex_lock(&data->update_lock); \
1230         data->reg[nr] = LM75_TEMP_TO_REG(val); \
1231         w83627ehf_write_temp(data, data->addr[nr], data->reg[nr]); \
1232         mutex_unlock(&data->update_lock); \
1233         return count; \
1234 }
1235 store_temp_reg(reg_temp_over, temp_max);
1236 store_temp_reg(reg_temp_hyst, temp_max_hyst);
1237 
1238 static ssize_t
1239 show_temp_offset(struct device *dev, struct device_attribute *attr, char *buf)
1240 {
1241         struct w83627ehf_data *data = w83627ehf_update_device(dev);
1242         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1243 
1244         return sprintf(buf, "%d\n",
1245                        data->temp_offset[sensor_attr->index] * 1000);
1246 }
1247 
1248 static ssize_t
1249 store_temp_offset(struct device *dev, struct device_attribute *attr,
1250                   const char *buf, size_t count)
1251 {
1252         struct w83627ehf_data *data = dev_get_drvdata(dev);
1253         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1254         int nr = sensor_attr->index;
1255         long val;
1256         int err;
1257 
1258         err = kstrtol(buf, 10, &val);
1259         if (err < 0)
1260                 return err;
1261 
1262         val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), -128, 127);
1263 
1264         mutex_lock(&data->update_lock);
1265         data->temp_offset[nr] = val;
1266         w83627ehf_write_value(data, W83627EHF_REG_TEMP_OFFSET[nr], val);
1267         mutex_unlock(&data->update_lock);
1268         return count;
1269 }
1270 
1271 static ssize_t
1272 show_temp_type(struct device *dev, struct device_attribute *attr, char *buf)
1273 {
1274         struct w83627ehf_data *data = w83627ehf_update_device(dev);
1275         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1276         int nr = sensor_attr->index;
1277         return sprintf(buf, "%d\n", (int)data->temp_type[nr]);
1278 }
1279 
1280 static struct sensor_device_attribute sda_temp_input[] = {
1281         SENSOR_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0),
1282         SENSOR_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1),
1283         SENSOR_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2),
1284         SENSOR_ATTR(temp4_input, S_IRUGO, show_temp, NULL, 3),
1285         SENSOR_ATTR(temp5_input, S_IRUGO, show_temp, NULL, 4),
1286         SENSOR_ATTR(temp6_input, S_IRUGO, show_temp, NULL, 5),
1287         SENSOR_ATTR(temp7_input, S_IRUGO, show_temp, NULL, 6),
1288         SENSOR_ATTR(temp8_input, S_IRUGO, show_temp, NULL, 7),
1289         SENSOR_ATTR(temp9_input, S_IRUGO, show_temp, NULL, 8),
1290 };
1291 
1292 static struct sensor_device_attribute sda_temp_label[] = {
1293         SENSOR_ATTR(temp1_label, S_IRUGO, show_temp_label, NULL, 0),
1294         SENSOR_ATTR(temp2_label, S_IRUGO, show_temp_label, NULL, 1),
1295         SENSOR_ATTR(temp3_label, S_IRUGO, show_temp_label, NULL, 2),
1296         SENSOR_ATTR(temp4_label, S_IRUGO, show_temp_label, NULL, 3),
1297         SENSOR_ATTR(temp5_label, S_IRUGO, show_temp_label, NULL, 4),
1298         SENSOR_ATTR(temp6_label, S_IRUGO, show_temp_label, NULL, 5),
1299         SENSOR_ATTR(temp7_label, S_IRUGO, show_temp_label, NULL, 6),
1300         SENSOR_ATTR(temp8_label, S_IRUGO, show_temp_label, NULL, 7),
1301         SENSOR_ATTR(temp9_label, S_IRUGO, show_temp_label, NULL, 8),
1302 };
1303 
1304 static struct sensor_device_attribute sda_temp_max[] = {
1305         SENSOR_ATTR(temp1_max, S_IRUGO | S_IWUSR, show_temp_max,
1306                     store_temp_max, 0),
1307         SENSOR_ATTR(temp2_max, S_IRUGO | S_IWUSR, show_temp_max,
1308                     store_temp_max, 1),
1309         SENSOR_ATTR(temp3_max, S_IRUGO | S_IWUSR, show_temp_max,
1310                     store_temp_max, 2),
1311         SENSOR_ATTR(temp4_max, S_IRUGO | S_IWUSR, show_temp_max,
1312                     store_temp_max, 3),
1313         SENSOR_ATTR(temp5_max, S_IRUGO | S_IWUSR, show_temp_max,
1314                     store_temp_max, 4),
1315         SENSOR_ATTR(temp6_max, S_IRUGO | S_IWUSR, show_temp_max,
1316                     store_temp_max, 5),
1317         SENSOR_ATTR(temp7_max, S_IRUGO | S_IWUSR, show_temp_max,
1318                     store_temp_max, 6),
1319         SENSOR_ATTR(temp8_max, S_IRUGO | S_IWUSR, show_temp_max,
1320                     store_temp_max, 7),
1321         SENSOR_ATTR(temp9_max, S_IRUGO | S_IWUSR, show_temp_max,
1322                     store_temp_max, 8),
1323 };
1324 
1325 static struct sensor_device_attribute sda_temp_max_hyst[] = {
1326         SENSOR_ATTR(temp1_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1327                     store_temp_max_hyst, 0),
1328         SENSOR_ATTR(temp2_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1329                     store_temp_max_hyst, 1),
1330         SENSOR_ATTR(temp3_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1331                     store_temp_max_hyst, 2),
1332         SENSOR_ATTR(temp4_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1333                     store_temp_max_hyst, 3),
1334         SENSOR_ATTR(temp5_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1335                     store_temp_max_hyst, 4),
1336         SENSOR_ATTR(temp6_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1337                     store_temp_max_hyst, 5),
1338         SENSOR_ATTR(temp7_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1339                     store_temp_max_hyst, 6),
1340         SENSOR_ATTR(temp8_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1341                     store_temp_max_hyst, 7),
1342         SENSOR_ATTR(temp9_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1343                     store_temp_max_hyst, 8),
1344 };
1345 
1346 static struct sensor_device_attribute sda_temp_alarm[] = {
1347         SENSOR_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4),
1348         SENSOR_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5),
1349         SENSOR_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13),
1350 };
1351 
1352 static struct sensor_device_attribute sda_temp_type[] = {
1353         SENSOR_ATTR(temp1_type, S_IRUGO, show_temp_type, NULL, 0),
1354         SENSOR_ATTR(temp2_type, S_IRUGO, show_temp_type, NULL, 1),
1355         SENSOR_ATTR(temp3_type, S_IRUGO, show_temp_type, NULL, 2),
1356 };
1357 
1358 static struct sensor_device_attribute sda_temp_offset[] = {
1359         SENSOR_ATTR(temp1_offset, S_IRUGO | S_IWUSR, show_temp_offset,
1360                     store_temp_offset, 0),
1361         SENSOR_ATTR(temp2_offset, S_IRUGO | S_IWUSR, show_temp_offset,
1362                     store_temp_offset, 1),
1363         SENSOR_ATTR(temp3_offset, S_IRUGO | S_IWUSR, show_temp_offset,
1364                     store_temp_offset, 2),
1365 };
1366 
1367 #define show_pwm_reg(reg) \
1368 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1369                           char *buf) \
1370 { \
1371         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1372         struct sensor_device_attribute *sensor_attr = \
1373                 to_sensor_dev_attr(attr); \
1374         int nr = sensor_attr->index; \
1375         return sprintf(buf, "%d\n", data->reg[nr]); \
1376 }
1377 
1378 show_pwm_reg(pwm_mode)
1379 show_pwm_reg(pwm_enable)
1380 show_pwm_reg(pwm)
1381 
1382 static ssize_t
1383 store_pwm_mode(struct device *dev, struct device_attribute *attr,
1384                         const char *buf, size_t count)
1385 {
1386         struct w83627ehf_data *data = dev_get_drvdata(dev);
1387         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1388         struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
1389         int nr = sensor_attr->index;
1390         unsigned long val;
1391         int err;
1392         u16 reg;
1393 
1394         err = kstrtoul(buf, 10, &val);
1395         if (err < 0)
1396                 return err;
1397 
1398         if (val > 1)
1399                 return -EINVAL;
1400 
1401         /* On NCT67766F, DC mode is only supported for pwm1 */
1402         if (sio_data->kind == nct6776 && nr && val != 1)
1403                 return -EINVAL;
1404 
1405         mutex_lock(&data->update_lock);
1406         reg = w83627ehf_read_value(data, W83627EHF_REG_PWM_ENABLE[nr]);
1407         data->pwm_mode[nr] = val;
1408         reg &= ~(1 << W83627EHF_PWM_MODE_SHIFT[nr]);
1409         if (!val)
1410                 reg |= 1 << W83627EHF_PWM_MODE_SHIFT[nr];
1411         w83627ehf_write_value(data, W83627EHF_REG_PWM_ENABLE[nr], reg);
1412         mutex_unlock(&data->update_lock);
1413         return count;
1414 }
1415 
1416 static ssize_t
1417 store_pwm(struct device *dev, struct device_attribute *attr,
1418                         const char *buf, size_t count)
1419 {
1420         struct w83627ehf_data *data = dev_get_drvdata(dev);
1421         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1422         int nr = sensor_attr->index;
1423         unsigned long val;
1424         int err;
1425 
1426         err = kstrtoul(buf, 10, &val);
1427         if (err < 0)
1428                 return err;
1429 
1430         val = clamp_val(val, 0, 255);
1431 
1432         mutex_lock(&data->update_lock);
1433         data->pwm[nr] = val;
1434         w83627ehf_write_value(data, data->REG_PWM[nr], val);
1435         mutex_unlock(&data->update_lock);
1436         return count;
1437 }
1438 
1439 static ssize_t
1440 store_pwm_enable(struct device *dev, struct device_attribute *attr,
1441                         const char *buf, size_t count)
1442 {
1443         struct w83627ehf_data *data = dev_get_drvdata(dev);
1444         struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
1445         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1446         int nr = sensor_attr->index;
1447         unsigned long val;
1448         int err;
1449         u16 reg;
1450 
1451         err = kstrtoul(buf, 10, &val);
1452         if (err < 0)
1453                 return err;
1454 
1455         if (!val || (val > 4 && val != data->pwm_enable_orig[nr]))
1456                 return -EINVAL;
1457         /* SmartFan III mode is not supported on NCT6776F */
1458         if (sio_data->kind == nct6776 && val == 4)
1459                 return -EINVAL;
1460 
1461         mutex_lock(&data->update_lock);
1462         data->pwm_enable[nr] = val;
1463         if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
1464                 reg = w83627ehf_read_value(data,
1465                                            NCT6775_REG_FAN_MODE[nr]);
1466                 reg &= 0x0f;
1467                 reg |= (val - 1) << 4;
1468                 w83627ehf_write_value(data,
1469                                       NCT6775_REG_FAN_MODE[nr], reg);
1470         } else {
1471                 reg = w83627ehf_read_value(data, W83627EHF_REG_PWM_ENABLE[nr]);
1472                 reg &= ~(0x03 << W83627EHF_PWM_ENABLE_SHIFT[nr]);
1473                 reg |= (val - 1) << W83627EHF_PWM_ENABLE_SHIFT[nr];
1474                 w83627ehf_write_value(data, W83627EHF_REG_PWM_ENABLE[nr], reg);
1475         }
1476         mutex_unlock(&data->update_lock);
1477         return count;
1478 }
1479 
1480 
1481 #define show_tol_temp(reg) \
1482 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1483                                 char *buf) \
1484 { \
1485         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1486         struct sensor_device_attribute *sensor_attr = \
1487                 to_sensor_dev_attr(attr); \
1488         int nr = sensor_attr->index; \
1489         return sprintf(buf, "%d\n", data->reg[nr] * 1000); \
1490 }
1491 
1492 show_tol_temp(tolerance)
1493 show_tol_temp(target_temp)
1494 
1495 static ssize_t
1496 store_target_temp(struct device *dev, struct device_attribute *attr,
1497                         const char *buf, size_t count)
1498 {
1499         struct w83627ehf_data *data = dev_get_drvdata(dev);
1500         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1501         int nr = sensor_attr->index;
1502         long val;
1503         int err;
1504 
1505         err = kstrtol(buf, 10, &val);
1506         if (err < 0)
1507                 return err;
1508 
1509         val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), 0, 127);
1510 
1511         mutex_lock(&data->update_lock);
1512         data->target_temp[nr] = val;
1513         w83627ehf_write_value(data, data->REG_TARGET[nr], val);
1514         mutex_unlock(&data->update_lock);
1515         return count;
1516 }
1517 
1518 static ssize_t
1519 store_tolerance(struct device *dev, struct device_attribute *attr,
1520                         const char *buf, size_t count)
1521 {
1522         struct w83627ehf_data *data = dev_get_drvdata(dev);
1523         struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
1524         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1525         int nr = sensor_attr->index;
1526         u16 reg;
1527         long val;
1528         int err;
1529 
1530         err = kstrtol(buf, 10, &val);
1531         if (err < 0)
1532                 return err;
1533 
1534         /* Limit the temp to 0C - 15C */
1535         val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), 0, 15);
1536 
1537         mutex_lock(&data->update_lock);
1538         if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
1539                 /* Limit tolerance further for NCT6776F */
1540                 if (sio_data->kind == nct6776 && val > 7)
1541                         val = 7;
1542                 reg = w83627ehf_read_value(data, NCT6775_REG_FAN_MODE[nr]);
1543                 reg = (reg & 0xf0) | val;
1544                 w83627ehf_write_value(data, NCT6775_REG_FAN_MODE[nr], reg);
1545         } else {
1546                 reg = w83627ehf_read_value(data, W83627EHF_REG_TOLERANCE[nr]);
1547                 if (nr == 1)
1548                         reg = (reg & 0x0f) | (val << 4);
1549                 else
1550                         reg = (reg & 0xf0) | val;
1551                 w83627ehf_write_value(data, W83627EHF_REG_TOLERANCE[nr], reg);
1552         }
1553         data->tolerance[nr] = val;
1554         mutex_unlock(&data->update_lock);
1555         return count;
1556 }
1557 
1558 static struct sensor_device_attribute sda_pwm[] = {
1559         SENSOR_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 0),
1560         SENSOR_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 1),
1561         SENSOR_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 2),
1562         SENSOR_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 3),
1563 };
1564 
1565 static struct sensor_device_attribute sda_pwm_mode[] = {
1566         SENSOR_ATTR(pwm1_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
1567                     store_pwm_mode, 0),
1568         SENSOR_ATTR(pwm2_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
1569                     store_pwm_mode, 1),
1570         SENSOR_ATTR(pwm3_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
1571                     store_pwm_mode, 2),
1572         SENSOR_ATTR(pwm4_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
1573                     store_pwm_mode, 3),
1574 };
1575 
1576 static struct sensor_device_attribute sda_pwm_enable[] = {
1577         SENSOR_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1578                     store_pwm_enable, 0),
1579         SENSOR_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1580                     store_pwm_enable, 1),
1581         SENSOR_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1582                     store_pwm_enable, 2),
1583         SENSOR_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1584                     store_pwm_enable, 3),
1585 };
1586 
1587 static struct sensor_device_attribute sda_target_temp[] = {
1588         SENSOR_ATTR(pwm1_target, S_IWUSR | S_IRUGO, show_target_temp,
1589                     store_target_temp, 0),
1590         SENSOR_ATTR(pwm2_target, S_IWUSR | S_IRUGO, show_target_temp,
1591                     store_target_temp, 1),
1592         SENSOR_ATTR(pwm3_target, S_IWUSR | S_IRUGO, show_target_temp,
1593                     store_target_temp, 2),
1594         SENSOR_ATTR(pwm4_target, S_IWUSR | S_IRUGO, show_target_temp,
1595                     store_target_temp, 3),
1596 };
1597 
1598 static struct sensor_device_attribute sda_tolerance[] = {
1599         SENSOR_ATTR(pwm1_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1600                     store_tolerance, 0),
1601         SENSOR_ATTR(pwm2_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1602                     store_tolerance, 1),
1603         SENSOR_ATTR(pwm3_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1604                     store_tolerance, 2),
1605         SENSOR_ATTR(pwm4_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1606                     store_tolerance, 3),
1607 };
1608 
1609 /* Smart Fan registers */
1610 
1611 #define fan_functions(reg, REG) \
1612 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1613                        char *buf) \
1614 { \
1615         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1616         struct sensor_device_attribute *sensor_attr = \
1617                 to_sensor_dev_attr(attr); \
1618         int nr = sensor_attr->index; \
1619         return sprintf(buf, "%d\n", data->reg[nr]); \
1620 } \
1621 static ssize_t \
1622 store_##reg(struct device *dev, struct device_attribute *attr, \
1623                             const char *buf, size_t count) \
1624 { \
1625         struct w83627ehf_data *data = dev_get_drvdata(dev); \
1626         struct sensor_device_attribute *sensor_attr = \
1627                 to_sensor_dev_attr(attr); \
1628         int nr = sensor_attr->index; \
1629         unsigned long val; \
1630         int err; \
1631         err = kstrtoul(buf, 10, &val); \
1632         if (err < 0) \
1633                 return err; \
1634         val = clamp_val(val, 1, 255); \
1635         mutex_lock(&data->update_lock); \
1636         data->reg[nr] = val; \
1637         w83627ehf_write_value(data, data->REG_##REG[nr], val); \
1638         mutex_unlock(&data->update_lock); \
1639         return count; \
1640 }
1641 
1642 fan_functions(fan_start_output, FAN_START_OUTPUT)
1643 fan_functions(fan_stop_output, FAN_STOP_OUTPUT)
1644 fan_functions(fan_max_output, FAN_MAX_OUTPUT)
1645 fan_functions(fan_step_output, FAN_STEP_OUTPUT)
1646 
1647 #define fan_time_functions(reg, REG) \
1648 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1649                                 char *buf) \
1650 { \
1651         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1652         struct sensor_device_attribute *sensor_attr = \
1653                 to_sensor_dev_attr(attr); \
1654         int nr = sensor_attr->index; \
1655         return sprintf(buf, "%d\n", \
1656                         step_time_from_reg(data->reg[nr], \
1657                                            data->pwm_mode[nr])); \
1658 } \
1659 \
1660 static ssize_t \
1661 store_##reg(struct device *dev, struct device_attribute *attr, \
1662                         const char *buf, size_t count) \
1663 { \
1664         struct w83627ehf_data *data = dev_get_drvdata(dev); \
1665         struct sensor_device_attribute *sensor_attr = \
1666                 to_sensor_dev_attr(attr); \
1667         int nr = sensor_attr->index; \
1668         unsigned long val; \
1669         int err; \
1670         err = kstrtoul(buf, 10, &val); \
1671         if (err < 0) \
1672                 return err; \
1673         val = step_time_to_reg(val, data->pwm_mode[nr]); \
1674         mutex_lock(&data->update_lock); \
1675         data->reg[nr] = val; \
1676         w83627ehf_write_value(data, data->REG_##REG[nr], val); \
1677         mutex_unlock(&data->update_lock); \
1678         return count; \
1679 } \
1680 
1681 fan_time_functions(fan_stop_time, FAN_STOP_TIME)
1682 
1683 static ssize_t name_show(struct device *dev, struct device_attribute *attr,
1684                          char *buf)
1685 {
1686         struct w83627ehf_data *data = dev_get_drvdata(dev);
1687 
1688         return sprintf(buf, "%s\n", data->name);
1689 }
1690 static DEVICE_ATTR_RO(name);
1691 
1692 static struct sensor_device_attribute sda_sf3_arrays_fan4[] = {
1693         SENSOR_ATTR(pwm4_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1694                     store_fan_stop_time, 3),
1695         SENSOR_ATTR(pwm4_start_output, S_IWUSR | S_IRUGO, show_fan_start_output,
1696                     store_fan_start_output, 3),
1697         SENSOR_ATTR(pwm4_stop_output, S_IWUSR | S_IRUGO, show_fan_stop_output,
1698                     store_fan_stop_output, 3),
1699         SENSOR_ATTR(pwm4_max_output, S_IWUSR | S_IRUGO, show_fan_max_output,
1700                     store_fan_max_output, 3),
1701         SENSOR_ATTR(pwm4_step_output, S_IWUSR | S_IRUGO, show_fan_step_output,
1702                     store_fan_step_output, 3),
1703 };
1704 
1705 static struct sensor_device_attribute sda_sf3_arrays_fan3[] = {
1706         SENSOR_ATTR(pwm3_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1707                     store_fan_stop_time, 2),
1708         SENSOR_ATTR(pwm3_start_output, S_IWUSR | S_IRUGO, show_fan_start_output,
1709                     store_fan_start_output, 2),
1710         SENSOR_ATTR(pwm3_stop_output, S_IWUSR | S_IRUGO, show_fan_stop_output,
1711                     store_fan_stop_output, 2),
1712 };
1713 
1714 static struct sensor_device_attribute sda_sf3_arrays[] = {
1715         SENSOR_ATTR(pwm1_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1716                     store_fan_stop_time, 0),
1717         SENSOR_ATTR(pwm2_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1718                     store_fan_stop_time, 1),
1719         SENSOR_ATTR(pwm1_start_output, S_IWUSR | S_IRUGO, show_fan_start_output,
1720                     store_fan_start_output, 0),
1721         SENSOR_ATTR(pwm2_start_output, S_IWUSR | S_IRUGO, show_fan_start_output,
1722                     store_fan_start_output, 1),
1723         SENSOR_ATTR(pwm1_stop_output, S_IWUSR | S_IRUGO, show_fan_stop_output,
1724                     store_fan_stop_output, 0),
1725         SENSOR_ATTR(pwm2_stop_output, S_IWUSR | S_IRUGO, show_fan_stop_output,
1726                     store_fan_stop_output, 1),
1727 };
1728 
1729 
1730 /*
1731  * pwm1 and pwm3 don't support max and step settings on all chips.
1732  * Need to check support while generating/removing attribute files.
1733  */
1734 static struct sensor_device_attribute sda_sf3_max_step_arrays[] = {
1735         SENSOR_ATTR(pwm1_max_output, S_IWUSR | S_IRUGO, show_fan_max_output,
1736                     store_fan_max_output, 0),
1737         SENSOR_ATTR(pwm1_step_output, S_IWUSR | S_IRUGO, show_fan_step_output,
1738                     store_fan_step_output, 0),
1739         SENSOR_ATTR(pwm2_max_output, S_IWUSR | S_IRUGO, show_fan_max_output,
1740                     store_fan_max_output, 1),
1741         SENSOR_ATTR(pwm2_step_output, S_IWUSR | S_IRUGO, show_fan_step_output,
1742                     store_fan_step_output, 1),
1743         SENSOR_ATTR(pwm3_max_output, S_IWUSR | S_IRUGO, show_fan_max_output,
1744                     store_fan_max_output, 2),
1745         SENSOR_ATTR(pwm3_step_output, S_IWUSR | S_IRUGO, show_fan_step_output,
1746                     store_fan_step_output, 2),
1747 };
1748 
1749 static ssize_t
1750 cpu0_vid_show(struct device *dev, struct device_attribute *attr, char *buf)
1751 {
1752         struct w83627ehf_data *data = dev_get_drvdata(dev);
1753         return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
1754 }
1755 static DEVICE_ATTR_RO(cpu0_vid);
1756 
1757 
1758 /* Case open detection */
1759 
1760 static ssize_t
1761 show_caseopen(struct device *dev, struct device_attribute *attr, char *buf)
1762 {
1763         struct w83627ehf_data *data = w83627ehf_update_device(dev);
1764 
1765         return sprintf(buf, "%d\n",
1766                 !!(data->caseopen & to_sensor_dev_attr_2(attr)->index));
1767 }
1768 
1769 static ssize_t
1770 clear_caseopen(struct device *dev, struct device_attribute *attr,
1771                         const char *buf, size_t count)
1772 {
1773         struct w83627ehf_data *data = dev_get_drvdata(dev);
1774         unsigned long val;
1775         u16 reg, mask;
1776 
1777         if (kstrtoul(buf, 10, &val) || val != 0)
1778                 return -EINVAL;
1779 
1780         mask = to_sensor_dev_attr_2(attr)->nr;
1781 
1782         mutex_lock(&data->update_lock);
1783         reg = w83627ehf_read_value(data, W83627EHF_REG_CASEOPEN_CLR);
1784         w83627ehf_write_value(data, W83627EHF_REG_CASEOPEN_CLR, reg | mask);
1785         w83627ehf_write_value(data, W83627EHF_REG_CASEOPEN_CLR, reg & ~mask);
1786         data->valid = 0;        /* Force cache refresh */
1787         mutex_unlock(&data->update_lock);
1788 
1789         return count;
1790 }
1791 
1792 static struct sensor_device_attribute_2 sda_caseopen[] = {
1793         SENSOR_ATTR_2(intrusion0_alarm, S_IWUSR | S_IRUGO, show_caseopen,
1794                         clear_caseopen, 0x80, 0x10),
1795         SENSOR_ATTR_2(intrusion1_alarm, S_IWUSR | S_IRUGO, show_caseopen,
1796                         clear_caseopen, 0x40, 0x40),
1797 };
1798 
1799 /*
1800  * Driver and device management
1801  */
1802 
1803 static void w83627ehf_device_remove_files(struct device *dev)
1804 {
1805         /*
1806          * some entries in the following arrays may not have been used in
1807          * device_create_file(), but device_remove_file() will ignore them
1808          */
1809         int i;
1810         struct w83627ehf_data *data = dev_get_drvdata(dev);
1811 
1812         for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays); i++)
1813                 device_remove_file(dev, &sda_sf3_arrays[i].dev_attr);
1814         for (i = 0; i < ARRAY_SIZE(sda_sf3_max_step_arrays); i++) {
1815                 struct sensor_device_attribute *attr =
1816                   &sda_sf3_max_step_arrays[i];
1817                 if (data->REG_FAN_STEP_OUTPUT &&
1818                     data->REG_FAN_STEP_OUTPUT[attr->index] != 0xff)
1819                         device_remove_file(dev, &attr->dev_attr);
1820         }
1821         for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays_fan3); i++)
1822                 device_remove_file(dev, &sda_sf3_arrays_fan3[i].dev_attr);
1823         for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays_fan4); i++)
1824                 device_remove_file(dev, &sda_sf3_arrays_fan4[i].dev_attr);
1825         for (i = 0; i < data->in_num; i++) {
1826                 if ((i == 6) && data->in6_skip)
1827                         continue;
1828                 device_remove_file(dev, &sda_in_input[i].dev_attr);
1829                 device_remove_file(dev, &sda_in_alarm[i].dev_attr);
1830                 device_remove_file(dev, &sda_in_min[i].dev_attr);
1831                 device_remove_file(dev, &sda_in_max[i].dev_attr);
1832         }
1833         for (i = 0; i < 5; i++) {
1834                 device_remove_file(dev, &sda_fan_input[i].dev_attr);
1835                 device_remove_file(dev, &sda_fan_alarm[i].dev_attr);
1836                 device_remove_file(dev, &sda_fan_div[i].dev_attr);
1837                 device_remove_file(dev, &sda_fan_min[i].dev_attr);
1838         }
1839         for (i = 0; i < data->pwm_num; i++) {
1840                 device_remove_file(dev, &sda_pwm[i].dev_attr);
1841                 device_remove_file(dev, &sda_pwm_mode[i].dev_attr);
1842                 device_remove_file(dev, &sda_pwm_enable[i].dev_attr);
1843                 device_remove_file(dev, &sda_target_temp[i].dev_attr);
1844                 device_remove_file(dev, &sda_tolerance[i].dev_attr);
1845         }
1846         for (i = 0; i < NUM_REG_TEMP; i++) {
1847                 if (!(data->have_temp & (1 << i)))
1848                         continue;
1849                 device_remove_file(dev, &sda_temp_input[i].dev_attr);
1850                 device_remove_file(dev, &sda_temp_label[i].dev_attr);
1851                 if (i == 2 && data->temp3_val_only)
1852                         continue;
1853                 device_remove_file(dev, &sda_temp_max[i].dev_attr);
1854                 device_remove_file(dev, &sda_temp_max_hyst[i].dev_attr);
1855                 if (i > 2)
1856                         continue;
1857                 device_remove_file(dev, &sda_temp_alarm[i].dev_attr);
1858                 device_remove_file(dev, &sda_temp_type[i].dev_attr);
1859                 device_remove_file(dev, &sda_temp_offset[i].dev_attr);
1860         }
1861 
1862         device_remove_file(dev, &sda_caseopen[0].dev_attr);
1863         device_remove_file(dev, &sda_caseopen[1].dev_attr);
1864 
1865         device_remove_file(dev, &dev_attr_name);
1866         device_remove_file(dev, &dev_attr_cpu0_vid);
1867 }
1868 
1869 /* Get the monitoring functions started */
1870 static inline void w83627ehf_init_device(struct w83627ehf_data *data,
1871                                                    enum kinds kind)
1872 {
1873         int i;
1874         u8 tmp, diode;
1875 
1876         /* Start monitoring is needed */
1877         tmp = w83627ehf_read_value(data, W83627EHF_REG_CONFIG);
1878         if (!(tmp & 0x01))
1879                 w83627ehf_write_value(data, W83627EHF_REG_CONFIG,
1880                                       tmp | 0x01);
1881 
1882         /* Enable temperature sensors if needed */
1883         for (i = 0; i < NUM_REG_TEMP; i++) {
1884                 if (!(data->have_temp & (1 << i)))
1885                         continue;
1886                 if (!data->reg_temp_config[i])
1887                         continue;
1888                 tmp = w83627ehf_read_value(data,
1889                                            data->reg_temp_config[i]);
1890                 if (tmp & 0x01)
1891                         w83627ehf_write_value(data,
1892                                               data->reg_temp_config[i],
1893                                               tmp & 0xfe);
1894         }
1895 
1896         /* Enable VBAT monitoring if needed */
1897         tmp = w83627ehf_read_value(data, W83627EHF_REG_VBAT);
1898         if (!(tmp & 0x01))
1899                 w83627ehf_write_value(data, W83627EHF_REG_VBAT, tmp | 0x01);
1900 
1901         /* Get thermal sensor types */
1902         switch (kind) {
1903         case w83627ehf:
1904                 diode = w83627ehf_read_value(data, W83627EHF_REG_DIODE);
1905                 break;
1906         case w83627uhg:
1907                 diode = 0x00;
1908                 break;
1909         default:
1910                 diode = 0x70;
1911         }
1912         for (i = 0; i < 3; i++) {
1913                 const char *label = NULL;
1914 
1915                 if (data->temp_label)
1916                         label = data->temp_label[data->temp_src[i]];
1917 
1918                 /* Digital source overrides analog type */
1919                 if (label && strncmp(label, "PECI", 4) == 0)
1920                         data->temp_type[i] = 6;
1921                 else if (label && strncmp(label, "AMD", 3) == 0)
1922                         data->temp_type[i] = 5;
1923                 else if ((tmp & (0x02 << i)))
1924                         data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 3;
1925                 else
1926                         data->temp_type[i] = 4; /* thermistor */
1927         }
1928 }
1929 
1930 static void w82627ehf_swap_tempreg(struct w83627ehf_data *data,
1931                                    int r1, int r2)
1932 {
1933         swap(data->temp_src[r1], data->temp_src[r2]);
1934         swap(data->reg_temp[r1], data->reg_temp[r2]);
1935         swap(data->reg_temp_over[r1], data->reg_temp_over[r2]);
1936         swap(data->reg_temp_hyst[r1], data->reg_temp_hyst[r2]);
1937         swap(data->reg_temp_config[r1], data->reg_temp_config[r2]);
1938 }
1939 
1940 static void
1941 w83627ehf_set_temp_reg_ehf(struct w83627ehf_data *data, int n_temp)
1942 {
1943         int i;
1944 
1945         for (i = 0; i < n_temp; i++) {
1946                 data->reg_temp[i] = W83627EHF_REG_TEMP[i];
1947                 data->reg_temp_over[i] = W83627EHF_REG_TEMP_OVER[i];
1948                 data->reg_temp_hyst[i] = W83627EHF_REG_TEMP_HYST[i];
1949                 data->reg_temp_config[i] = W83627EHF_REG_TEMP_CONFIG[i];
1950         }
1951 }
1952 
1953 static void
1954 w83627ehf_check_fan_inputs(const struct w83627ehf_sio_data *sio_data,
1955                            struct w83627ehf_data *data)
1956 {
1957         int fan3pin, fan4pin, fan4min, fan5pin, regval;
1958 
1959         /* The W83627UHG is simple, only two fan inputs, no config */
1960         if (sio_data->kind == w83627uhg) {
1961                 data->has_fan = 0x03; /* fan1 and fan2 */
1962                 data->has_fan_min = 0x03;
1963                 return;
1964         }
1965 
1966         /* fan4 and fan5 share some pins with the GPIO and serial flash */
1967         if (sio_data->kind == nct6775) {
1968                 /* On NCT6775, fan4 shares pins with the fdc interface */
1969                 fan3pin = 1;
1970                 fan4pin = !(superio_inb(sio_data->sioreg, 0x2A) & 0x80);
1971                 fan4min = 0;
1972                 fan5pin = 0;
1973         } else if (sio_data->kind == nct6776) {
1974                 bool gpok = superio_inb(sio_data->sioreg, 0x27) & 0x80;
1975 
1976                 superio_select(sio_data->sioreg, W83627EHF_LD_HWM);
1977                 regval = superio_inb(sio_data->sioreg, SIO_REG_ENABLE);
1978 
1979                 if (regval & 0x80)
1980                         fan3pin = gpok;
1981                 else
1982                         fan3pin = !(superio_inb(sio_data->sioreg, 0x24) & 0x40);
1983 
1984                 if (regval & 0x40)
1985                         fan4pin = gpok;
1986                 else
1987                         fan4pin = !!(superio_inb(sio_data->sioreg, 0x1C) & 0x01);
1988 
1989                 if (regval & 0x20)
1990                         fan5pin = gpok;
1991                 else
1992                         fan5pin = !!(superio_inb(sio_data->sioreg, 0x1C) & 0x02);
1993 
1994                 fan4min = fan4pin;
1995         } else if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b) {
1996                 fan3pin = 1;
1997                 fan4pin = superio_inb(sio_data->sioreg, 0x27) & 0x40;
1998                 fan5pin = superio_inb(sio_data->sioreg, 0x27) & 0x20;
1999                 fan4min = fan4pin;
2000         } else {
2001                 fan3pin = 1;
2002                 fan4pin = !(superio_inb(sio_data->sioreg, 0x29) & 0x06);
2003                 fan5pin = !(superio_inb(sio_data->sioreg, 0x24) & 0x02);
2004                 fan4min = fan4pin;
2005         }
2006 
2007         data->has_fan = data->has_fan_min = 0x03; /* fan1 and fan2 */
2008         data->has_fan |= (fan3pin << 2);
2009         data->has_fan_min |= (fan3pin << 2);
2010 
2011         if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
2012                 /*
2013                  * NCT6775F and NCT6776F don't have the W83627EHF_REG_FANDIV1
2014                  * register
2015                  */
2016                 data->has_fan |= (fan4pin << 3) | (fan5pin << 4);
2017                 data->has_fan_min |= (fan4min << 3) | (fan5pin << 4);
2018         } else {
2019                 /*
2020                  * It looks like fan4 and fan5 pins can be alternatively used
2021                  * as fan on/off switches, but fan5 control is write only :/
2022                  * We assume that if the serial interface is disabled, designers
2023                  * connected fan5 as input unless they are emitting log 1, which
2024                  * is not the default.
2025                  */
2026                 regval = w83627ehf_read_value(data, W83627EHF_REG_FANDIV1);
2027                 if ((regval & (1 << 2)) && fan4pin) {
2028                         data->has_fan |= (1 << 3);
2029                         data->has_fan_min |= (1 << 3);
2030                 }
2031                 if (!(regval & (1 << 1)) && fan5pin) {
2032                         data->has_fan |= (1 << 4);
2033                         data->has_fan_min |= (1 << 4);
2034                 }
2035         }
2036 }
2037 
2038 static int w83627ehf_probe(struct platform_device *pdev)
2039 {
2040         struct device *dev = &pdev->dev;
2041         struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
2042         struct w83627ehf_data *data;
2043         struct resource *res;
2044         u8 en_vrm10;
2045         int i, err = 0;
2046 
2047         res = platform_get_resource(pdev, IORESOURCE_IO, 0);
2048         if (!request_region(res->start, IOREGION_LENGTH, DRVNAME)) {
2049                 err = -EBUSY;
2050                 dev_err(dev, "Failed to request region 0x%lx-0x%lx\n",
2051                         (unsigned long)res->start,
2052                         (unsigned long)res->start + IOREGION_LENGTH - 1);
2053                 goto exit;
2054         }
2055 
2056         data = devm_kzalloc(&pdev->dev, sizeof(struct w83627ehf_data),
2057                             GFP_KERNEL);
2058         if (!data) {
2059                 err = -ENOMEM;
2060                 goto exit_release;
2061         }
2062 
2063         data->addr = res->start;
2064         mutex_init(&data->lock);
2065         mutex_init(&data->update_lock);
2066         data->name = w83627ehf_device_names[sio_data->kind];
2067         data->bank = 0xff;              /* Force initial bank selection */
2068         platform_set_drvdata(pdev, data);
2069 
2070         /* 627EHG and 627EHF have 10 voltage inputs; 627DHG and 667HG have 9 */
2071         data->in_num = (sio_data->kind == w83627ehf) ? 10 : 9;
2072         /* 667HG, NCT6775F, and NCT6776F have 3 pwms, and 627UHG has only 2 */
2073         switch (sio_data->kind) {
2074         default:
2075                 data->pwm_num = 4;
2076                 break;
2077         case w83667hg:
2078         case w83667hg_b:
2079         case nct6775:
2080         case nct6776:
2081                 data->pwm_num = 3;
2082                 break;
2083         case w83627uhg:
2084                 data->pwm_num = 2;
2085                 break;
2086         }
2087 
2088         /* Default to 3 temperature inputs, code below will adjust as needed */
2089         data->have_temp = 0x07;
2090 
2091         /* Deal with temperature register setup first. */
2092         if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
2093                 int mask = 0;
2094 
2095                 /*
2096                  * Display temperature sensor output only if it monitors
2097                  * a source other than one already reported. Always display
2098                  * first three temperature registers, though.
2099                  */
2100                 for (i = 0; i < NUM_REG_TEMP; i++) {
2101                         u8 src;
2102 
2103                         data->reg_temp[i] = NCT6775_REG_TEMP[i];
2104                         data->reg_temp_over[i] = NCT6775_REG_TEMP_OVER[i];
2105                         data->reg_temp_hyst[i] = NCT6775_REG_TEMP_HYST[i];
2106                         data->reg_temp_config[i] = NCT6775_REG_TEMP_CONFIG[i];
2107 
2108                         src = w83627ehf_read_value(data,
2109                                                    NCT6775_REG_TEMP_SOURCE[i]);
2110                         src &= 0x1f;
2111                         if (src && !(mask & (1 << src))) {
2112                                 data->have_temp |= 1 << i;
2113                                 mask |= 1 << src;
2114                         }
2115 
2116                         data->temp_src[i] = src;
2117 
2118                         /*
2119                          * Now do some register swapping if index 0..2 don't
2120                          * point to SYSTIN(1), CPUIN(2), and AUXIN(3).
2121                          * Idea is to have the first three attributes
2122                          * report SYSTIN, CPUIN, and AUXIN if possible
2123                          * without overriding the basic system configuration.
2124                          */
2125                         if (i > 0 && data->temp_src[0] != 1
2126                             && data->temp_src[i] == 1)
2127                                 w82627ehf_swap_tempreg(data, 0, i);
2128                         if (i > 1 && data->temp_src[1] != 2
2129                             && data->temp_src[i] == 2)
2130                                 w82627ehf_swap_tempreg(data, 1, i);
2131                         if (i > 2 && data->temp_src[2] != 3
2132                             && data->temp_src[i] == 3)
2133                                 w82627ehf_swap_tempreg(data, 2, i);
2134                 }
2135                 if (sio_data->kind == nct6776) {
2136                         /*
2137                          * On NCT6776, AUXTIN and VIN3 pins are shared.
2138                          * Only way to detect it is to check if AUXTIN is used
2139                          * as a temperature source, and if that source is
2140                          * enabled.
2141                          *
2142                          * If that is the case, disable in6, which reports VIN3.
2143                          * Otherwise disable temp3.
2144                          */
2145                         if (data->temp_src[2] == 3) {
2146                                 u8 reg;
2147 
2148                                 if (data->reg_temp_config[2])
2149                                         reg = w83627ehf_read_value(data,
2150                                                 data->reg_temp_config[2]);
2151                                 else
2152                                         reg = 0; /* Assume AUXTIN is used */
2153 
2154                                 if (reg & 0x01)
2155                                         data->have_temp &= ~(1 << 2);
2156                                 else
2157                                         data->in6_skip = 1;
2158                         }
2159                         data->temp_label = nct6776_temp_label;
2160                 } else {
2161                         data->temp_label = nct6775_temp_label;
2162                 }
2163                 data->have_temp_offset = data->have_temp & 0x07;
2164                 for (i = 0; i < 3; i++) {
2165                         if (data->temp_src[i] > 3)
2166                                 data->have_temp_offset &= ~(1 << i);
2167                 }
2168         } else if (sio_data->kind == w83667hg_b) {
2169                 u8 reg;
2170 
2171                 w83627ehf_set_temp_reg_ehf(data, 4);
2172 
2173                 /*
2174                  * Temperature sources are selected with bank 0, registers 0x49
2175                  * and 0x4a.
2176                  */
2177                 reg = w83627ehf_read_value(data, 0x4a);
2178                 data->temp_src[0] = reg >> 5;
2179                 reg = w83627ehf_read_value(data, 0x49);
2180                 data->temp_src[1] = reg & 0x07;
2181                 data->temp_src[2] = (reg >> 4) & 0x07;
2182 
2183                 /*
2184                  * W83667HG-B has another temperature register at 0x7e.
2185                  * The temperature source is selected with register 0x7d.
2186                  * Support it if the source differs from already reported
2187                  * sources.
2188                  */
2189                 reg = w83627ehf_read_value(data, 0x7d);
2190                 reg &= 0x07;
2191                 if (reg != data->temp_src[0] && reg != data->temp_src[1]
2192                     && reg != data->temp_src[2]) {
2193                         data->temp_src[3] = reg;
2194                         data->have_temp |= 1 << 3;
2195                 }
2196 
2197                 /*
2198                  * Chip supports either AUXTIN or VIN3. Try to find out which
2199                  * one.
2200                  */
2201                 reg = w83627ehf_read_value(data, W83627EHF_REG_TEMP_CONFIG[2]);
2202                 if (data->temp_src[2] == 2 && (reg & 0x01))
2203                         data->have_temp &= ~(1 << 2);
2204 
2205                 if ((data->temp_src[2] == 2 && (data->have_temp & (1 << 2)))
2206                     || (data->temp_src[3] == 2 && (data->have_temp & (1 << 3))))
2207                         data->in6_skip = 1;
2208 
2209                 data->temp_label = w83667hg_b_temp_label;
2210                 data->have_temp_offset = data->have_temp & 0x07;
2211                 for (i = 0; i < 3; i++) {
2212                         if (data->temp_src[i] > 2)
2213                                 data->have_temp_offset &= ~(1 << i);
2214                 }
2215         } else if (sio_data->kind == w83627uhg) {
2216                 u8 reg;
2217 
2218                 w83627ehf_set_temp_reg_ehf(data, 3);
2219 
2220                 /*
2221                  * Temperature sources for temp2 and temp3 are selected with
2222                  * bank 0, registers 0x49 and 0x4a.
2223                  */
2224                 data->temp_src[0] = 0;  /* SYSTIN */
2225                 reg = w83627ehf_read_value(data, 0x49) & 0x07;
2226                 /* Adjust to have the same mapping as other source registers */
2227                 if (reg == 0)
2228                         data->temp_src[1] = 1;
2229                 else if (reg >= 2 && reg <= 5)
2230                         data->temp_src[1] = reg + 2;
2231                 else    /* should never happen */
2232                         data->have_temp &= ~(1 << 1);
2233                 reg = w83627ehf_read_value(data, 0x4a);
2234                 data->temp_src[2] = reg >> 5;
2235 
2236                 /*
2237                  * Skip temp3 if source is invalid or the same as temp1
2238                  * or temp2.
2239                  */
2240                 if (data->temp_src[2] == 2 || data->temp_src[2] == 3 ||
2241                     data->temp_src[2] == data->temp_src[0] ||
2242                     ((data->have_temp & (1 << 1)) &&
2243                      data->temp_src[2] == data->temp_src[1]))
2244                         data->have_temp &= ~(1 << 2);
2245                 else
2246                         data->temp3_val_only = 1;       /* No limit regs */
2247 
2248                 data->in6_skip = 1;                     /* No VIN3 */
2249 
2250                 data->temp_label = w83667hg_b_temp_label;
2251                 data->have_temp_offset = data->have_temp & 0x03;
2252                 for (i = 0; i < 3; i++) {
2253                         if (data->temp_src[i] > 1)
2254                                 data->have_temp_offset &= ~(1 << i);
2255                 }
2256         } else {
2257                 w83627ehf_set_temp_reg_ehf(data, 3);
2258 
2259                 /* Temperature sources are fixed */
2260 
2261                 if (sio_data->kind == w83667hg) {
2262                         u8 reg;
2263 
2264                         /*
2265                          * Chip supports either AUXTIN or VIN3. Try to find
2266                          * out which one.
2267                          */
2268                         reg = w83627ehf_read_value(data,
2269                                                 W83627EHF_REG_TEMP_CONFIG[2]);
2270                         if (reg & 0x01)
2271                                 data->have_temp &= ~(1 << 2);
2272                         else
2273                                 data->in6_skip = 1;
2274                 }
2275                 data->have_temp_offset = data->have_temp & 0x07;
2276         }
2277 
2278         if (sio_data->kind == nct6775) {
2279                 data->has_fan_div = true;
2280                 data->fan_from_reg = fan_from_reg16;
2281                 data->fan_from_reg_min = fan_from_reg8;
2282                 data->REG_PWM = NCT6775_REG_PWM;
2283                 data->REG_TARGET = NCT6775_REG_TARGET;
2284                 data->REG_FAN = NCT6775_REG_FAN;
2285                 data->REG_FAN_MIN = W83627EHF_REG_FAN_MIN;
2286                 data->REG_FAN_START_OUTPUT = NCT6775_REG_FAN_START_OUTPUT;
2287                 data->REG_FAN_STOP_OUTPUT = NCT6775_REG_FAN_STOP_OUTPUT;
2288                 data->REG_FAN_STOP_TIME = NCT6775_REG_FAN_STOP_TIME;
2289                 data->REG_FAN_MAX_OUTPUT = NCT6775_REG_FAN_MAX_OUTPUT;
2290                 data->REG_FAN_STEP_OUTPUT = NCT6775_REG_FAN_STEP_OUTPUT;
2291         } else if (sio_data->kind == nct6776) {
2292                 data->has_fan_div = false;
2293                 data->fan_from_reg = fan_from_reg13;
2294                 data->fan_from_reg_min = fan_from_reg13;
2295                 data->REG_PWM = NCT6775_REG_PWM;
2296                 data->REG_TARGET = NCT6775_REG_TARGET;
2297                 data->REG_FAN = NCT6775_REG_FAN;
2298                 data->REG_FAN_MIN = NCT6776_REG_FAN_MIN;
2299                 data->REG_FAN_START_OUTPUT = NCT6775_REG_FAN_START_OUTPUT;
2300                 data->REG_FAN_STOP_OUTPUT = NCT6775_REG_FAN_STOP_OUTPUT;
2301                 data->REG_FAN_STOP_TIME = NCT6775_REG_FAN_STOP_TIME;
2302         } else if (sio_data->kind == w83667hg_b) {
2303                 data->has_fan_div = true;
2304                 data->fan_from_reg = fan_from_reg8;
2305                 data->fan_from_reg_min = fan_from_reg8;
2306                 data->REG_PWM = W83627EHF_REG_PWM;
2307                 data->REG_TARGET = W83627EHF_REG_TARGET;
2308                 data->REG_FAN = W83627EHF_REG_FAN;
2309                 data->REG_FAN_MIN = W83627EHF_REG_FAN_MIN;
2310                 data->REG_FAN_START_OUTPUT = W83627EHF_REG_FAN_START_OUTPUT;
2311                 data->REG_FAN_STOP_OUTPUT = W83627EHF_REG_FAN_STOP_OUTPUT;
2312                 data->REG_FAN_STOP_TIME = W83627EHF_REG_FAN_STOP_TIME;
2313                 data->REG_FAN_MAX_OUTPUT =
2314                   W83627EHF_REG_FAN_MAX_OUTPUT_W83667_B;
2315                 data->REG_FAN_STEP_OUTPUT =
2316                   W83627EHF_REG_FAN_STEP_OUTPUT_W83667_B;
2317         } else {
2318                 data->has_fan_div = true;
2319                 data->fan_from_reg = fan_from_reg8;
2320                 data->fan_from_reg_min = fan_from_reg8;
2321                 data->REG_PWM = W83627EHF_REG_PWM;
2322                 data->REG_TARGET = W83627EHF_REG_TARGET;
2323                 data->REG_FAN = W83627EHF_REG_FAN;
2324                 data->REG_FAN_MIN = W83627EHF_REG_FAN_MIN;
2325                 data->REG_FAN_START_OUTPUT = W83627EHF_REG_FAN_START_OUTPUT;
2326                 data->REG_FAN_STOP_OUTPUT = W83627EHF_REG_FAN_STOP_OUTPUT;
2327                 data->REG_FAN_STOP_TIME = W83627EHF_REG_FAN_STOP_TIME;
2328                 data->REG_FAN_MAX_OUTPUT =
2329                   W83627EHF_REG_FAN_MAX_OUTPUT_COMMON;
2330                 data->REG_FAN_STEP_OUTPUT =
2331                   W83627EHF_REG_FAN_STEP_OUTPUT_COMMON;
2332         }
2333 
2334         /* Setup input voltage scaling factors */
2335         if (sio_data->kind == w83627uhg)
2336                 data->scale_in = scale_in_w83627uhg;
2337         else
2338                 data->scale_in = scale_in_common;
2339 
2340         /* Initialize the chip */
2341         w83627ehf_init_device(data, sio_data->kind);
2342 
2343         data->vrm = vid_which_vrm();
2344 
2345         err = superio_enter(sio_data->sioreg);
2346         if (err)
2347                 goto exit_release;
2348 
2349         /* Read VID value */
2350         if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b ||
2351             sio_data->kind == nct6775 || sio_data->kind == nct6776) {
2352                 /*
2353                  * W83667HG has different pins for VID input and output, so
2354                  * we can get the VID input values directly at logical device D
2355                  * 0xe3.
2356                  */
2357                 superio_select(sio_data->sioreg, W83667HG_LD_VID);
2358                 data->vid = superio_inb(sio_data->sioreg, 0xe3);
2359                 err = device_create_file(dev, &dev_attr_cpu0_vid);
2360                 if (err) {
2361                         superio_exit(sio_data->sioreg);
2362                         goto exit_release;
2363                 }
2364         } else if (sio_data->kind != w83627uhg) {
2365                 superio_select(sio_data->sioreg, W83627EHF_LD_HWM);
2366                 if (superio_inb(sio_data->sioreg, SIO_REG_VID_CTRL) & 0x80) {
2367                         /*
2368                          * Set VID input sensibility if needed. In theory the
2369                          * BIOS should have set it, but in practice it's not
2370                          * always the case. We only do it for the W83627EHF/EHG
2371                          * because the W83627DHG is more complex in this
2372                          * respect.
2373                          */
2374                         if (sio_data->kind == w83627ehf) {
2375                                 en_vrm10 = superio_inb(sio_data->sioreg,
2376                                                        SIO_REG_EN_VRM10);
2377                                 if ((en_vrm10 & 0x08) && data->vrm == 90) {
2378                                         dev_warn(dev,
2379                                                  "Setting VID input voltage to TTL\n");
2380                                         superio_outb(sio_data->sioreg,
2381                                                      SIO_REG_EN_VRM10,
2382                                                      en_vrm10 & ~0x08);
2383                                 } else if (!(en_vrm10 & 0x08)
2384                                            && data->vrm == 100) {
2385                                         dev_warn(dev,
2386                                                  "Setting VID input voltage to VRM10\n");
2387                                         superio_outb(sio_data->sioreg,
2388                                                      SIO_REG_EN_VRM10,
2389                                                      en_vrm10 | 0x08);
2390                                 }
2391                         }
2392 
2393                         data->vid = superio_inb(sio_data->sioreg,
2394                                                 SIO_REG_VID_DATA);
2395                         if (sio_data->kind == w83627ehf) /* 6 VID pins only */
2396                                 data->vid &= 0x3f;
2397 
2398                         err = device_create_file(dev, &dev_attr_cpu0_vid);
2399                         if (err) {
2400                                 superio_exit(sio_data->sioreg);
2401                                 goto exit_release;
2402                         }
2403                 } else {
2404                         dev_info(dev,
2405                                  "VID pins in output mode, CPU VID not available\n");
2406                 }
2407         }
2408 
2409         if (fan_debounce &&
2410             (sio_data->kind == nct6775 || sio_data->kind == nct6776)) {
2411                 u8 tmp;
2412 
2413                 superio_select(sio_data->sioreg, W83627EHF_LD_HWM);
2414                 tmp = superio_inb(sio_data->sioreg, NCT6775_REG_FAN_DEBOUNCE);
2415                 if (sio_data->kind == nct6776)
2416                         superio_outb(sio_data->sioreg, NCT6775_REG_FAN_DEBOUNCE,
2417                                      0x3e | tmp);
2418                 else
2419                         superio_outb(sio_data->sioreg, NCT6775_REG_FAN_DEBOUNCE,
2420                                      0x1e | tmp);
2421                 pr_info("Enabled fan debounce for chip %s\n", data->name);
2422         }
2423 
2424         w83627ehf_check_fan_inputs(sio_data, data);
2425 
2426         superio_exit(sio_data->sioreg);
2427 
2428         /* Read fan clock dividers immediately */
2429         w83627ehf_update_fan_div_common(dev, data);
2430 
2431         /* Read pwm data to save original values */
2432         w83627ehf_update_pwm_common(dev, data);
2433         for (i = 0; i < data->pwm_num; i++)
2434                 data->pwm_enable_orig[i] = data->pwm_enable[i];
2435 
2436         /* Register sysfs hooks */
2437         for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays); i++) {
2438                 err = device_create_file(dev, &sda_sf3_arrays[i].dev_attr);
2439                 if (err)
2440                         goto exit_remove;
2441         }
2442 
2443         for (i = 0; i < ARRAY_SIZE(sda_sf3_max_step_arrays); i++) {
2444                 struct sensor_device_attribute *attr =
2445                   &sda_sf3_max_step_arrays[i];
2446                 if (data->REG_FAN_STEP_OUTPUT &&
2447                     data->REG_FAN_STEP_OUTPUT[attr->index] != 0xff) {
2448                         err = device_create_file(dev, &attr->dev_attr);
2449                         if (err)
2450                                 goto exit_remove;
2451                 }
2452         }
2453         /* if fan3 and fan4 are enabled create the sf3 files for them */
2454         if ((data->has_fan & (1 << 2)) && data->pwm_num >= 3)
2455                 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays_fan3); i++) {
2456                         err = device_create_file(dev,
2457                                         &sda_sf3_arrays_fan3[i].dev_attr);
2458                         if (err)
2459                                 goto exit_remove;
2460                 }
2461         if ((data->has_fan & (1 << 3)) && data->pwm_num >= 4)
2462                 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays_fan4); i++) {
2463                         err = device_create_file(dev,
2464                                         &sda_sf3_arrays_fan4[i].dev_attr);
2465                         if (err)
2466                                 goto exit_remove;
2467                 }
2468 
2469         for (i = 0; i < data->in_num; i++) {
2470                 if ((i == 6) && data->in6_skip)
2471                         continue;
2472                 if ((err = device_create_file(dev, &sda_in_input[i].dev_attr))
2473                         || (err = device_create_file(dev,
2474                                 &sda_in_alarm[i].dev_attr))
2475                         || (err = device_create_file(dev,
2476                                 &sda_in_min[i].dev_attr))
2477                         || (err = device_create_file(dev,
2478                                 &sda_in_max[i].dev_attr)))
2479                         goto exit_remove;
2480         }
2481 
2482         for (i = 0; i < 5; i++) {
2483                 if (data->has_fan & (1 << i)) {
2484                         if ((err = device_create_file(dev,
2485                                         &sda_fan_input[i].dev_attr))
2486                                 || (err = device_create_file(dev,
2487                                         &sda_fan_alarm[i].dev_attr)))
2488                                 goto exit_remove;
2489                         if (sio_data->kind != nct6776) {
2490                                 err = device_create_file(dev,
2491                                                 &sda_fan_div[i].dev_attr);
2492                                 if (err)
2493                                         goto exit_remove;
2494                         }
2495                         if (data->has_fan_min & (1 << i)) {
2496                                 err = device_create_file(dev,
2497                                                 &sda_fan_min[i].dev_attr);
2498                                 if (err)
2499                                         goto exit_remove;
2500                         }
2501                         if (i < data->pwm_num &&
2502                                 ((err = device_create_file(dev,
2503                                         &sda_pwm[i].dev_attr))
2504                                 || (err = device_create_file(dev,
2505                                         &sda_pwm_mode[i].dev_attr))
2506                                 || (err = device_create_file(dev,
2507                                         &sda_pwm_enable[i].dev_attr))
2508                                 || (err = device_create_file(dev,
2509                                         &sda_target_temp[i].dev_attr))
2510                                 || (err = device_create_file(dev,
2511                                         &sda_tolerance[i].dev_attr))))
2512                                 goto exit_remove;
2513                 }
2514         }
2515 
2516         for (i = 0; i < NUM_REG_TEMP; i++) {
2517                 if (!(data->have_temp & (1 << i)))
2518                         continue;
2519                 err = device_create_file(dev, &sda_temp_input[i].dev_attr);
2520                 if (err)
2521                         goto exit_remove;
2522                 if (data->temp_label) {
2523                         err = device_create_file(dev,
2524                                                  &sda_temp_label[i].dev_attr);
2525                         if (err)
2526                                 goto exit_remove;
2527                 }
2528                 if (i == 2 && data->temp3_val_only)
2529                         continue;
2530                 if (data->reg_temp_over[i]) {
2531                         err = device_create_file(dev,
2532                                 &sda_temp_max[i].dev_attr);
2533                         if (err)
2534                                 goto exit_remove;
2535                 }
2536                 if (data->reg_temp_hyst[i]) {
2537                         err = device_create_file(dev,
2538                                 &sda_temp_max_hyst[i].dev_attr);
2539                         if (err)
2540                                 goto exit_remove;
2541                 }
2542                 if (i > 2)
2543                         continue;
2544                 if ((err = device_create_file(dev,
2545                                 &sda_temp_alarm[i].dev_attr))
2546                         || (err = device_create_file(dev,
2547                                 &sda_temp_type[i].dev_attr)))
2548                         goto exit_remove;
2549                 if (data->have_temp_offset & (1 << i)) {
2550                         err = device_create_file(dev,
2551                                                  &sda_temp_offset[i].dev_attr);
2552                         if (err)
2553                                 goto exit_remove;
2554                 }
2555         }
2556 
2557         err = device_create_file(dev, &sda_caseopen[0].dev_attr);
2558         if (err)
2559                 goto exit_remove;
2560 
2561         if (sio_data->kind == nct6776) {
2562                 err = device_create_file(dev, &sda_caseopen[1].dev_attr);
2563                 if (err)
2564                         goto exit_remove;
2565         }
2566 
2567         err = device_create_file(dev, &dev_attr_name);
2568         if (err)
2569                 goto exit_remove;
2570 
2571         data->hwmon_dev = hwmon_device_register(dev);
2572         if (IS_ERR(data->hwmon_dev)) {
2573                 err = PTR_ERR(data->hwmon_dev);
2574                 goto exit_remove;
2575         }
2576 
2577         return 0;
2578 
2579 exit_remove:
2580         w83627ehf_device_remove_files(dev);
2581 exit_release:
2582         release_region(res->start, IOREGION_LENGTH);
2583 exit:
2584         return err;
2585 }
2586 
2587 static int w83627ehf_remove(struct platform_device *pdev)
2588 {
2589         struct w83627ehf_data *data = platform_get_drvdata(pdev);
2590 
2591         hwmon_device_unregister(data->hwmon_dev);
2592         w83627ehf_device_remove_files(&pdev->dev);
2593         release_region(data->addr, IOREGION_LENGTH);
2594 
2595         return 0;
2596 }
2597 
2598 #ifdef CONFIG_PM
2599 static int w83627ehf_suspend(struct device *dev)
2600 {
2601         struct w83627ehf_data *data = w83627ehf_update_device(dev);
2602         struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
2603 
2604         mutex_lock(&data->update_lock);
2605         data->vbat = w83627ehf_read_value(data, W83627EHF_REG_VBAT);
2606         if (sio_data->kind == nct6775) {
2607                 data->fandiv1 = w83627ehf_read_value(data, NCT6775_REG_FANDIV1);
2608                 data->fandiv2 = w83627ehf_read_value(data, NCT6775_REG_FANDIV2);
2609         }
2610         mutex_unlock(&data->update_lock);
2611 
2612         return 0;
2613 }
2614 
2615 static int w83627ehf_resume(struct device *dev)
2616 {
2617         struct w83627ehf_data *data = dev_get_drvdata(dev);
2618         struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
2619         int i;
2620 
2621         mutex_lock(&data->update_lock);
2622         data->bank = 0xff;              /* Force initial bank selection */
2623 
2624         /* Restore limits */
2625         for (i = 0; i < data->in_num; i++) {
2626                 if ((i == 6) && data->in6_skip)
2627                         continue;
2628 
2629                 w83627ehf_write_value(data, W83627EHF_REG_IN_MIN(i),
2630                                       data->in_min[i]);
2631                 w83627ehf_write_value(data, W83627EHF_REG_IN_MAX(i),
2632                                       data->in_max[i]);
2633         }
2634 
2635         for (i = 0; i < 5; i++) {
2636                 if (!(data->has_fan_min & (1 << i)))
2637                         continue;
2638 
2639                 w83627ehf_write_value(data, data->REG_FAN_MIN[i],
2640                                       data->fan_min[i]);
2641         }
2642 
2643         for (i = 0; i < NUM_REG_TEMP; i++) {
2644                 if (!(data->have_temp & (1 << i)))
2645                         continue;
2646 
2647                 if (data->reg_temp_over[i])
2648                         w83627ehf_write_temp(data, data->reg_temp_over[i],
2649                                              data->temp_max[i]);
2650                 if (data->reg_temp_hyst[i])
2651                         w83627ehf_write_temp(data, data->reg_temp_hyst[i],
2652                                              data->temp_max_hyst[i]);
2653                 if (i > 2)
2654                         continue;
2655                 if (data->have_temp_offset & (1 << i))
2656                         w83627ehf_write_value(data,
2657                                               W83627EHF_REG_TEMP_OFFSET[i],
2658                                               data->temp_offset[i]);
2659         }
2660 
2661         /* Restore other settings */
2662         w83627ehf_write_value(data, W83627EHF_REG_VBAT, data->vbat);
2663         if (sio_data->kind == nct6775) {
2664                 w83627ehf_write_value(data, NCT6775_REG_FANDIV1, data->fandiv1);
2665                 w83627ehf_write_value(data, NCT6775_REG_FANDIV2, data->fandiv2);
2666         }
2667 
2668         /* Force re-reading all values */
2669         data->valid = 0;
2670         mutex_unlock(&data->update_lock);
2671 
2672         return 0;
2673 }
2674 
2675 static const struct dev_pm_ops w83627ehf_dev_pm_ops = {
2676         .suspend = w83627ehf_suspend,
2677         .resume = w83627ehf_resume,
2678         .freeze = w83627ehf_suspend,
2679         .restore = w83627ehf_resume,
2680 };
2681 
2682 #define W83627EHF_DEV_PM_OPS    (&w83627ehf_dev_pm_ops)
2683 #else
2684 #define W83627EHF_DEV_PM_OPS    NULL
2685 #endif /* CONFIG_PM */
2686 
2687 static struct platform_driver w83627ehf_driver = {
2688         .driver = {
2689                 .name   = DRVNAME,
2690                 .pm     = W83627EHF_DEV_PM_OPS,
2691         },
2692         .probe          = w83627ehf_probe,
2693         .remove         = w83627ehf_remove,
2694 };
2695 
2696 /* w83627ehf_find() looks for a '627 in the Super-I/O config space */
2697 static int __init w83627ehf_find(int sioaddr, unsigned short *addr,
2698                                  struct w83627ehf_sio_data *sio_data)
2699 {
2700         static const char sio_name_W83627EHF[] __initconst = "W83627EHF";
2701         static const char sio_name_W83627EHG[] __initconst = "W83627EHG";
2702         static const char sio_name_W83627DHG[] __initconst = "W83627DHG";
2703         static const char sio_name_W83627DHG_P[] __initconst = "W83627DHG-P";
2704         static const char sio_name_W83627UHG[] __initconst = "W83627UHG";
2705         static const char sio_name_W83667HG[] __initconst = "W83667HG";
2706         static const char sio_name_W83667HG_B[] __initconst = "W83667HG-B";
2707         static const char sio_name_NCT6775[] __initconst = "NCT6775F";
2708         static const char sio_name_NCT6776[] __initconst = "NCT6776F";
2709 
2710         u16 val;
2711         const char *sio_name;
2712         int err;
2713 
2714         err = superio_enter(sioaddr);
2715         if (err)
2716                 return err;
2717 
2718         if (force_id)
2719                 val = force_id;
2720         else
2721                 val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8)
2722                     | superio_inb(sioaddr, SIO_REG_DEVID + 1);
2723         switch (val & SIO_ID_MASK) {
2724         case SIO_W83627EHF_ID:
2725                 sio_data->kind = w83627ehf;
2726                 sio_name = sio_name_W83627EHF;
2727                 break;
2728         case SIO_W83627EHG_ID:
2729                 sio_data->kind = w83627ehf;
2730                 sio_name = sio_name_W83627EHG;
2731                 break;
2732         case SIO_W83627DHG_ID:
2733                 sio_data->kind = w83627dhg;
2734                 sio_name = sio_name_W83627DHG;
2735                 break;
2736         case SIO_W83627DHG_P_ID:
2737                 sio_data->kind = w83627dhg_p;
2738                 sio_name = sio_name_W83627DHG_P;
2739                 break;
2740         case SIO_W83627UHG_ID:
2741                 sio_data->kind = w83627uhg;
2742                 sio_name = sio_name_W83627UHG;
2743                 break;
2744         case SIO_W83667HG_ID:
2745                 sio_data->kind = w83667hg;
2746                 sio_name = sio_name_W83667HG;
2747                 break;
2748         case SIO_W83667HG_B_ID:
2749                 sio_data->kind = w83667hg_b;
2750                 sio_name = sio_name_W83667HG_B;
2751                 break;
2752         case SIO_NCT6775_ID:
2753                 sio_data->kind = nct6775;
2754                 sio_name = sio_name_NCT6775;
2755                 break;
2756         case SIO_NCT6776_ID:
2757                 sio_data->kind = nct6776;
2758                 sio_name = sio_name_NCT6776;
2759                 break;
2760         default:
2761                 if (val != 0xffff)
2762                         pr_debug("unsupported chip ID: 0x%04x\n", val);
2763                 superio_exit(sioaddr);
2764                 return -ENODEV;
2765         }
2766 
2767         /* We have a known chip, find the HWM I/O address */
2768         superio_select(sioaddr, W83627EHF_LD_HWM);
2769         val = (superio_inb(sioaddr, SIO_REG_ADDR) << 8)
2770             | superio_inb(sioaddr, SIO_REG_ADDR + 1);
2771         *addr = val & IOREGION_ALIGNMENT;
2772         if (*addr == 0) {
2773                 pr_err("Refusing to enable a Super-I/O device with a base I/O port 0\n");
2774                 superio_exit(sioaddr);
2775                 return -ENODEV;
2776         }
2777 
2778         /* Activate logical device if needed */
2779         val = superio_inb(sioaddr, SIO_REG_ENABLE);
2780         if (!(val & 0x01)) {
2781                 pr_warn("Forcibly enabling Super-I/O. Sensor is probably unusable.\n");
2782                 superio_outb(sioaddr, SIO_REG_ENABLE, val | 0x01);
2783         }
2784 
2785         superio_exit(sioaddr);
2786         pr_info("Found %s chip at %#x\n", sio_name, *addr);
2787         sio_data->sioreg = sioaddr;
2788 
2789         return 0;
2790 }
2791 
2792 /*
2793  * when Super-I/O functions move to a separate file, the Super-I/O
2794  * bus will manage the lifetime of the device and this module will only keep
2795  * track of the w83627ehf driver. But since we platform_device_alloc(), we
2796  * must keep track of the device
2797  */
2798 static struct platform_device *pdev;
2799 
2800 static int __init sensors_w83627ehf_init(void)
2801 {
2802         int err;
2803         unsigned short address;
2804         struct resource res;
2805         struct w83627ehf_sio_data sio_data;
2806 
2807         /*
2808          * initialize sio_data->kind and sio_data->sioreg.
2809          *
2810          * when Super-I/O functions move to a separate file, the Super-I/O
2811          * driver will probe 0x2e and 0x4e and auto-detect the presence of a
2812          * w83627ehf hardware monitor, and call probe()
2813          */
2814         if (w83627ehf_find(0x2e, &address, &sio_data) &&
2815             w83627ehf_find(0x4e, &address, &sio_data))
2816                 return -ENODEV;
2817 
2818         err = platform_driver_register(&w83627ehf_driver);
2819         if (err)
2820                 goto exit;
2821 
2822         pdev = platform_device_alloc(DRVNAME, address);
2823         if (!pdev) {
2824                 err = -ENOMEM;
2825                 pr_err("Device allocation failed\n");
2826                 goto exit_unregister;
2827         }
2828 
2829         err = platform_device_add_data(pdev, &sio_data,
2830                                        sizeof(struct w83627ehf_sio_data));
2831         if (err) {
2832                 pr_err("Platform data allocation failed\n");
2833                 goto exit_device_put;
2834         }
2835 
2836         memset(&res, 0, sizeof(res));
2837         res.name = DRVNAME;
2838         res.start = address + IOREGION_OFFSET;
2839         res.end = address + IOREGION_OFFSET + IOREGION_LENGTH - 1;
2840         res.flags = IORESOURCE_IO;
2841 
2842         err = acpi_check_resource_conflict(&res);
2843         if (err)
2844                 goto exit_device_put;
2845 
2846         err = platform_device_add_resources(pdev, &res, 1);
2847         if (err) {
2848                 pr_err("Device resource addition failed (%d)\n", err);
2849                 goto exit_device_put;
2850         }
2851 
2852         /* platform_device_add calls probe() */
2853         err = platform_device_add(pdev);
2854         if (err) {
2855                 pr_err("Device addition failed (%d)\n", err);
2856                 goto exit_device_put;
2857         }
2858 
2859         return 0;
2860 
2861 exit_device_put:
2862         platform_device_put(pdev);
2863 exit_unregister:
2864         platform_driver_unregister(&w83627ehf_driver);
2865 exit:
2866         return err;
2867 }
2868 
2869 static void __exit sensors_w83627ehf_exit(void)
2870 {
2871         platform_device_unregister(pdev);
2872         platform_driver_unregister(&w83627ehf_driver);
2873 }
2874 
2875 MODULE_AUTHOR("Jean Delvare <jdelvare@suse.de>");
2876 MODULE_DESCRIPTION("W83627EHF driver");
2877 MODULE_LICENSE("GPL");
2878 
2879 module_init(sensors_w83627ehf_init);
2880 module_exit(sensors_w83627ehf_exit);

/* [<][>][^][v][top][bottom][index][help] */