1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * w83792d.c - Part of lm_sensors, Linux kernel modules for hardware 4 * monitoring 5 * Copyright (C) 2004, 2005 Winbond Electronics Corp. 6 * Shane Huang, 7 * Rudolf Marek <r.marek@assembler.cz> 8 * 9 * Note: 10 * 1. This driver is only for 2.6 kernel, 2.4 kernel need a different driver. 11 * 2. This driver is only for Winbond W83792D C version device, there 12 * are also some motherboards with B version W83792D device. The 13 * calculation method to in6-in7(measured value, limits) is a little 14 * different between C and B version. C or B version can be identified 15 * by CR[0x49h]. 16 */ 17 18 /* 19 * Supports following chips: 20 * 21 * Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA 22 * w83792d 9 7 7 3 0x7a 0x5ca3 yes no 23 */ 24 25 #include <linux/module.h> 26 #include <linux/init.h> 27 #include <linux/slab.h> 28 #include <linux/i2c.h> 29 #include <linux/hwmon.h> 30 #include <linux/hwmon-sysfs.h> 31 #include <linux/err.h> 32 #include <linux/mutex.h> 33 #include <linux/sysfs.h> 34 #include <linux/jiffies.h> 35 36 /* Addresses to scan */ 37 static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f, 38 I2C_CLIENT_END }; 39 40 /* Insmod parameters */ 41 42 static unsigned short force_subclients[4]; 43 module_param_array(force_subclients, short, NULL, 0); 44 MODULE_PARM_DESC(force_subclients, 45 "List of subclient addresses: {bus, clientaddr, subclientaddr1, subclientaddr2}"); 46 47 static bool init; 48 module_param(init, bool, 0); 49 MODULE_PARM_DESC(init, "Set to one to force chip initialization"); 50 51 /* The W83792D registers */ 52 static const u8 W83792D_REG_IN[9] = { 53 0x20, /* Vcore A in DataSheet */ 54 0x21, /* Vcore B in DataSheet */ 55 0x22, /* VIN0 in DataSheet */ 56 0x23, /* VIN1 in DataSheet */ 57 0x24, /* VIN2 in DataSheet */ 58 0x25, /* VIN3 in DataSheet */ 59 0x26, /* 5VCC in DataSheet */ 60 0xB0, /* 5VSB in DataSheet */ 61 0xB1 /* VBAT in DataSheet */ 62 }; 63 #define W83792D_REG_LOW_BITS1 0x3E /* Low Bits I in DataSheet */ 64 #define W83792D_REG_LOW_BITS2 0x3F /* Low Bits II in DataSheet */ 65 static const u8 W83792D_REG_IN_MAX[9] = { 66 0x2B, /* Vcore A High Limit in DataSheet */ 67 0x2D, /* Vcore B High Limit in DataSheet */ 68 0x2F, /* VIN0 High Limit in DataSheet */ 69 0x31, /* VIN1 High Limit in DataSheet */ 70 0x33, /* VIN2 High Limit in DataSheet */ 71 0x35, /* VIN3 High Limit in DataSheet */ 72 0x37, /* 5VCC High Limit in DataSheet */ 73 0xB4, /* 5VSB High Limit in DataSheet */ 74 0xB6 /* VBAT High Limit in DataSheet */ 75 }; 76 static const u8 W83792D_REG_IN_MIN[9] = { 77 0x2C, /* Vcore A Low Limit in DataSheet */ 78 0x2E, /* Vcore B Low Limit in DataSheet */ 79 0x30, /* VIN0 Low Limit in DataSheet */ 80 0x32, /* VIN1 Low Limit in DataSheet */ 81 0x34, /* VIN2 Low Limit in DataSheet */ 82 0x36, /* VIN3 Low Limit in DataSheet */ 83 0x38, /* 5VCC Low Limit in DataSheet */ 84 0xB5, /* 5VSB Low Limit in DataSheet */ 85 0xB7 /* VBAT Low Limit in DataSheet */ 86 }; 87 static const u8 W83792D_REG_FAN[7] = { 88 0x28, /* FAN 1 Count in DataSheet */ 89 0x29, /* FAN 2 Count in DataSheet */ 90 0x2A, /* FAN 3 Count in DataSheet */ 91 0xB8, /* FAN 4 Count in DataSheet */ 92 0xB9, /* FAN 5 Count in DataSheet */ 93 0xBA, /* FAN 6 Count in DataSheet */ 94 0xBE /* FAN 7 Count in DataSheet */ 95 }; 96 static const u8 W83792D_REG_FAN_MIN[7] = { 97 0x3B, /* FAN 1 Count Low Limit in DataSheet */ 98 0x3C, /* FAN 2 Count Low Limit in DataSheet */ 99 0x3D, /* FAN 3 Count Low Limit in DataSheet */ 100 0xBB, /* FAN 4 Count Low Limit in DataSheet */ 101 0xBC, /* FAN 5 Count Low Limit in DataSheet */ 102 0xBD, /* FAN 6 Count Low Limit in DataSheet */ 103 0xBF /* FAN 7 Count Low Limit in DataSheet */ 104 }; 105 #define W83792D_REG_FAN_CFG 0x84 /* FAN Configuration in DataSheet */ 106 static const u8 W83792D_REG_FAN_DIV[4] = { 107 0x47, /* contains FAN2 and FAN1 Divisor */ 108 0x5B, /* contains FAN4 and FAN3 Divisor */ 109 0x5C, /* contains FAN6 and FAN5 Divisor */ 110 0x9E /* contains FAN7 Divisor. */ 111 }; 112 static const u8 W83792D_REG_PWM[7] = { 113 0x81, /* FAN 1 Duty Cycle, be used to control */ 114 0x83, /* FAN 2 Duty Cycle, be used to control */ 115 0x94, /* FAN 3 Duty Cycle, be used to control */ 116 0xA3, /* FAN 4 Duty Cycle, be used to control */ 117 0xA4, /* FAN 5 Duty Cycle, be used to control */ 118 0xA5, /* FAN 6 Duty Cycle, be used to control */ 119 0xA6 /* FAN 7 Duty Cycle, be used to control */ 120 }; 121 #define W83792D_REG_BANK 0x4E 122 #define W83792D_REG_TEMP2_CONFIG 0xC2 123 #define W83792D_REG_TEMP3_CONFIG 0xCA 124 125 static const u8 W83792D_REG_TEMP1[3] = { 126 0x27, /* TEMP 1 in DataSheet */ 127 0x39, /* TEMP 1 Over in DataSheet */ 128 0x3A, /* TEMP 1 Hyst in DataSheet */ 129 }; 130 131 static const u8 W83792D_REG_TEMP_ADD[2][6] = { 132 { 0xC0, /* TEMP 2 in DataSheet */ 133 0xC1, /* TEMP 2(0.5 deg) in DataSheet */ 134 0xC5, /* TEMP 2 Over High part in DataSheet */ 135 0xC6, /* TEMP 2 Over Low part in DataSheet */ 136 0xC3, /* TEMP 2 Thyst High part in DataSheet */ 137 0xC4 }, /* TEMP 2 Thyst Low part in DataSheet */ 138 { 0xC8, /* TEMP 3 in DataSheet */ 139 0xC9, /* TEMP 3(0.5 deg) in DataSheet */ 140 0xCD, /* TEMP 3 Over High part in DataSheet */ 141 0xCE, /* TEMP 3 Over Low part in DataSheet */ 142 0xCB, /* TEMP 3 Thyst High part in DataSheet */ 143 0xCC } /* TEMP 3 Thyst Low part in DataSheet */ 144 }; 145 146 static const u8 W83792D_REG_THERMAL[3] = { 147 0x85, /* SmartFanI: Fan1 target value */ 148 0x86, /* SmartFanI: Fan2 target value */ 149 0x96 /* SmartFanI: Fan3 target value */ 150 }; 151 152 static const u8 W83792D_REG_TOLERANCE[3] = { 153 0x87, /* (bit3-0)SmartFan Fan1 tolerance */ 154 0x87, /* (bit7-4)SmartFan Fan2 tolerance */ 155 0x97 /* (bit3-0)SmartFan Fan3 tolerance */ 156 }; 157 158 static const u8 W83792D_REG_POINTS[3][4] = { 159 { 0x85, /* SmartFanII: Fan1 temp point 1 */ 160 0xE3, /* SmartFanII: Fan1 temp point 2 */ 161 0xE4, /* SmartFanII: Fan1 temp point 3 */ 162 0xE5 }, /* SmartFanII: Fan1 temp point 4 */ 163 { 0x86, /* SmartFanII: Fan2 temp point 1 */ 164 0xE6, /* SmartFanII: Fan2 temp point 2 */ 165 0xE7, /* SmartFanII: Fan2 temp point 3 */ 166 0xE8 }, /* SmartFanII: Fan2 temp point 4 */ 167 { 0x96, /* SmartFanII: Fan3 temp point 1 */ 168 0xE9, /* SmartFanII: Fan3 temp point 2 */ 169 0xEA, /* SmartFanII: Fan3 temp point 3 */ 170 0xEB } /* SmartFanII: Fan3 temp point 4 */ 171 }; 172 173 static const u8 W83792D_REG_LEVELS[3][4] = { 174 { 0x88, /* (bit3-0) SmartFanII: Fan1 Non-Stop */ 175 0x88, /* (bit7-4) SmartFanII: Fan1 Level 1 */ 176 0xE0, /* (bit7-4) SmartFanII: Fan1 Level 2 */ 177 0xE0 }, /* (bit3-0) SmartFanII: Fan1 Level 3 */ 178 { 0x89, /* (bit3-0) SmartFanII: Fan2 Non-Stop */ 179 0x89, /* (bit7-4) SmartFanII: Fan2 Level 1 */ 180 0xE1, /* (bit7-4) SmartFanII: Fan2 Level 2 */ 181 0xE1 }, /* (bit3-0) SmartFanII: Fan2 Level 3 */ 182 { 0x98, /* (bit3-0) SmartFanII: Fan3 Non-Stop */ 183 0x98, /* (bit7-4) SmartFanII: Fan3 Level 1 */ 184 0xE2, /* (bit7-4) SmartFanII: Fan3 Level 2 */ 185 0xE2 } /* (bit3-0) SmartFanII: Fan3 Level 3 */ 186 }; 187 188 #define W83792D_REG_GPIO_EN 0x1A 189 #define W83792D_REG_CONFIG 0x40 190 #define W83792D_REG_VID_FANDIV 0x47 191 #define W83792D_REG_CHIPID 0x49 192 #define W83792D_REG_WCHIPID 0x58 193 #define W83792D_REG_CHIPMAN 0x4F 194 #define W83792D_REG_PIN 0x4B 195 #define W83792D_REG_I2C_SUBADDR 0x4A 196 197 #define W83792D_REG_ALARM1 0xA9 /* realtime status register1 */ 198 #define W83792D_REG_ALARM2 0xAA /* realtime status register2 */ 199 #define W83792D_REG_ALARM3 0xAB /* realtime status register3 */ 200 #define W83792D_REG_CHASSIS 0x42 /* Bit 5: Case Open status bit */ 201 #define W83792D_REG_CHASSIS_CLR 0x44 /* Bit 7: Case Open CLR_CHS/Reset bit */ 202 203 /* control in0/in1 's limit modifiability */ 204 #define W83792D_REG_VID_IN_B 0x17 205 206 #define W83792D_REG_VBAT 0x5D 207 #define W83792D_REG_I2C_ADDR 0x48 208 209 /* 210 * Conversions. Rounding and limit checking is only done on the TO_REG 211 * variants. Note that you should be a bit careful with which arguments 212 * these macros are called: arguments may be evaluated more than once. 213 * Fixing this is just not worth it. 214 */ 215 #define IN_FROM_REG(nr, val) (((nr) <= 1) ? ((val) * 2) : \ 216 ((((nr) == 6) || ((nr) == 7)) ? ((val) * 6) : ((val) * 4))) 217 #define IN_TO_REG(nr, val) (((nr) <= 1) ? ((val) / 2) : \ 218 ((((nr) == 6) || ((nr) == 7)) ? ((val) / 6) : ((val) / 4))) 219 220 static inline u8 221 FAN_TO_REG(long rpm, int div) 222 { 223 if (rpm == 0) 224 return 255; 225 rpm = clamp_val(rpm, 1, 1000000); 226 return clamp_val((1350000 + rpm * div / 2) / (rpm * div), 1, 254); 227 } 228 229 #define FAN_FROM_REG(val, div) ((val) == 0 ? -1 : \ 230 ((val) == 255 ? 0 : \ 231 1350000 / ((val) * (div)))) 232 233 /* for temp1 */ 234 #define TEMP1_TO_REG(val) (clamp_val(((val) < 0 ? (val) + 0x100 * 1000 \ 235 : (val)) / 1000, 0, 0xff)) 236 #define TEMP1_FROM_REG(val) (((val) & 0x80 ? (val)-0x100 : (val)) * 1000) 237 /* for temp2 and temp3, because they need additional resolution */ 238 #define TEMP_ADD_FROM_REG(val1, val2) \ 239 ((((val1) & 0x80 ? (val1)-0x100 \ 240 : (val1)) * 1000) + ((val2 & 0x80) ? 500 : 0)) 241 #define TEMP_ADD_TO_REG_HIGH(val) \ 242 (clamp_val(((val) < 0 ? (val) + 0x100 * 1000 : (val)) / 1000, 0, 0xff)) 243 #define TEMP_ADD_TO_REG_LOW(val) ((val%1000) ? 0x80 : 0x00) 244 245 #define DIV_FROM_REG(val) (1 << (val)) 246 247 static inline u8 248 DIV_TO_REG(long val) 249 { 250 int i; 251 val = clamp_val(val, 1, 128) >> 1; 252 for (i = 0; i < 7; i++) { 253 if (val == 0) 254 break; 255 val >>= 1; 256 } 257 return (u8)i; 258 } 259 260 struct w83792d_data { 261 struct device *hwmon_dev; 262 263 struct mutex update_lock; 264 char valid; /* !=0 if following fields are valid */ 265 unsigned long last_updated; /* In jiffies */ 266 267 /* array of 2 pointers to subclients */ 268 struct i2c_client *lm75[2]; 269 270 u8 in[9]; /* Register value */ 271 u8 in_max[9]; /* Register value */ 272 u8 in_min[9]; /* Register value */ 273 u16 low_bits; /* Additional resolution to voltage in6-0 */ 274 u8 fan[7]; /* Register value */ 275 u8 fan_min[7]; /* Register value */ 276 u8 temp1[3]; /* current, over, thyst */ 277 u8 temp_add[2][6]; /* Register value */ 278 u8 fan_div[7]; /* Register encoding, shifted right */ 279 u8 pwm[7]; /* The 7 PWM outputs */ 280 u8 pwmenable[3]; 281 u32 alarms; /* realtime status register encoding,combined */ 282 u8 chassis; /* Chassis status */ 283 u8 thermal_cruise[3]; /* Smart FanI: Fan1,2,3 target value */ 284 u8 tolerance[3]; /* Fan1,2,3 tolerance(Smart Fan I/II) */ 285 u8 sf2_points[3][4]; /* Smart FanII: Fan1,2,3 temperature points */ 286 u8 sf2_levels[3][4]; /* Smart FanII: Fan1,2,3 duty cycle levels */ 287 }; 288 289 static int w83792d_probe(struct i2c_client *client, 290 const struct i2c_device_id *id); 291 static int w83792d_detect(struct i2c_client *client, 292 struct i2c_board_info *info); 293 static int w83792d_remove(struct i2c_client *client); 294 static struct w83792d_data *w83792d_update_device(struct device *dev); 295 296 #ifdef DEBUG 297 static void w83792d_print_debug(struct w83792d_data *data, struct device *dev); 298 #endif 299 300 static void w83792d_init_client(struct i2c_client *client); 301 302 static const struct i2c_device_id w83792d_id[] = { 303 { "w83792d", 0 }, 304 { } 305 }; 306 MODULE_DEVICE_TABLE(i2c, w83792d_id); 307 308 static struct i2c_driver w83792d_driver = { 309 .class = I2C_CLASS_HWMON, 310 .driver = { 311 .name = "w83792d", 312 }, 313 .probe = w83792d_probe, 314 .remove = w83792d_remove, 315 .id_table = w83792d_id, 316 .detect = w83792d_detect, 317 .address_list = normal_i2c, 318 }; 319 320 static inline long in_count_from_reg(int nr, struct w83792d_data *data) 321 { 322 /* in7 and in8 do not have low bits, but the formula still works */ 323 return (data->in[nr] << 2) | ((data->low_bits >> (2 * nr)) & 0x03); 324 } 325 326 /* 327 * The SMBus locks itself. The Winbond W83792D chip has a bank register, 328 * but the driver only accesses registers in bank 0, so we don't have 329 * to switch banks and lock access between switches. 330 */ 331 static inline int w83792d_read_value(struct i2c_client *client, u8 reg) 332 { 333 return i2c_smbus_read_byte_data(client, reg); 334 } 335 336 static inline int 337 w83792d_write_value(struct i2c_client *client, u8 reg, u8 value) 338 { 339 return i2c_smbus_write_byte_data(client, reg, value); 340 } 341 342 /* following are the sysfs callback functions */ 343 static ssize_t show_in(struct device *dev, struct device_attribute *attr, 344 char *buf) 345 { 346 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 347 int nr = sensor_attr->index; 348 struct w83792d_data *data = w83792d_update_device(dev); 349 return sprintf(buf, "%ld\n", 350 IN_FROM_REG(nr, in_count_from_reg(nr, data))); 351 } 352 353 #define show_in_reg(reg) \ 354 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \ 355 char *buf) \ 356 { \ 357 struct sensor_device_attribute *sensor_attr \ 358 = to_sensor_dev_attr(attr); \ 359 int nr = sensor_attr->index; \ 360 struct w83792d_data *data = w83792d_update_device(dev); \ 361 return sprintf(buf, "%ld\n", \ 362 (long)(IN_FROM_REG(nr, data->reg[nr]) * 4)); \ 363 } 364 365 show_in_reg(in_min); 366 show_in_reg(in_max); 367 368 #define store_in_reg(REG, reg) \ 369 static ssize_t store_in_##reg(struct device *dev, \ 370 struct device_attribute *attr, \ 371 const char *buf, size_t count) \ 372 { \ 373 struct sensor_device_attribute *sensor_attr \ 374 = to_sensor_dev_attr(attr); \ 375 int nr = sensor_attr->index; \ 376 struct i2c_client *client = to_i2c_client(dev); \ 377 struct w83792d_data *data = i2c_get_clientdata(client); \ 378 unsigned long val; \ 379 int err = kstrtoul(buf, 10, &val); \ 380 if (err) \ 381 return err; \ 382 mutex_lock(&data->update_lock); \ 383 data->in_##reg[nr] = clamp_val(IN_TO_REG(nr, val) / 4, 0, 255); \ 384 w83792d_write_value(client, W83792D_REG_IN_##REG[nr], \ 385 data->in_##reg[nr]); \ 386 mutex_unlock(&data->update_lock); \ 387 \ 388 return count; \ 389 } 390 store_in_reg(MIN, min); 391 store_in_reg(MAX, max); 392 393 #define show_fan_reg(reg) \ 394 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \ 395 char *buf) \ 396 { \ 397 struct sensor_device_attribute *sensor_attr \ 398 = to_sensor_dev_attr(attr); \ 399 int nr = sensor_attr->index - 1; \ 400 struct w83792d_data *data = w83792d_update_device(dev); \ 401 return sprintf(buf, "%d\n", \ 402 FAN_FROM_REG(data->reg[nr], DIV_FROM_REG(data->fan_div[nr]))); \ 403 } 404 405 show_fan_reg(fan); 406 show_fan_reg(fan_min); 407 408 static ssize_t 409 store_fan_min(struct device *dev, struct device_attribute *attr, 410 const char *buf, size_t count) 411 { 412 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 413 int nr = sensor_attr->index - 1; 414 struct i2c_client *client = to_i2c_client(dev); 415 struct w83792d_data *data = i2c_get_clientdata(client); 416 unsigned long val; 417 int err; 418 419 err = kstrtoul(buf, 10, &val); 420 if (err) 421 return err; 422 423 mutex_lock(&data->update_lock); 424 data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr])); 425 w83792d_write_value(client, W83792D_REG_FAN_MIN[nr], 426 data->fan_min[nr]); 427 mutex_unlock(&data->update_lock); 428 429 return count; 430 } 431 432 static ssize_t 433 show_fan_div(struct device *dev, struct device_attribute *attr, 434 char *buf) 435 { 436 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 437 int nr = sensor_attr->index; 438 struct w83792d_data *data = w83792d_update_device(dev); 439 return sprintf(buf, "%u\n", DIV_FROM_REG(data->fan_div[nr - 1])); 440 } 441 442 /* 443 * Note: we save and restore the fan minimum here, because its value is 444 * determined in part by the fan divisor. This follows the principle of 445 * least surprise; the user doesn't expect the fan minimum to change just 446 * because the divisor changed. 447 */ 448 static ssize_t 449 store_fan_div(struct device *dev, struct device_attribute *attr, 450 const char *buf, size_t count) 451 { 452 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 453 int nr = sensor_attr->index - 1; 454 struct i2c_client *client = to_i2c_client(dev); 455 struct w83792d_data *data = i2c_get_clientdata(client); 456 unsigned long min; 457 /*u8 reg;*/ 458 u8 fan_div_reg = 0; 459 u8 tmp_fan_div; 460 unsigned long val; 461 int err; 462 463 err = kstrtoul(buf, 10, &val); 464 if (err) 465 return err; 466 467 /* Save fan_min */ 468 mutex_lock(&data->update_lock); 469 min = FAN_FROM_REG(data->fan_min[nr], 470 DIV_FROM_REG(data->fan_div[nr])); 471 472 data->fan_div[nr] = DIV_TO_REG(val); 473 474 fan_div_reg = w83792d_read_value(client, W83792D_REG_FAN_DIV[nr >> 1]); 475 fan_div_reg &= (nr & 0x01) ? 0x8f : 0xf8; 476 tmp_fan_div = (nr & 0x01) ? (((data->fan_div[nr]) << 4) & 0x70) 477 : ((data->fan_div[nr]) & 0x07); 478 w83792d_write_value(client, W83792D_REG_FAN_DIV[nr >> 1], 479 fan_div_reg | tmp_fan_div); 480 481 /* Restore fan_min */ 482 data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr])); 483 w83792d_write_value(client, W83792D_REG_FAN_MIN[nr], data->fan_min[nr]); 484 mutex_unlock(&data->update_lock); 485 486 return count; 487 } 488 489 /* read/write the temperature1, includes measured value and limits */ 490 491 static ssize_t show_temp1(struct device *dev, struct device_attribute *attr, 492 char *buf) 493 { 494 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 495 int nr = sensor_attr->index; 496 struct w83792d_data *data = w83792d_update_device(dev); 497 return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp1[nr])); 498 } 499 500 static ssize_t store_temp1(struct device *dev, struct device_attribute *attr, 501 const char *buf, size_t count) 502 { 503 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 504 int nr = sensor_attr->index; 505 struct i2c_client *client = to_i2c_client(dev); 506 struct w83792d_data *data = i2c_get_clientdata(client); 507 long val; 508 int err; 509 510 err = kstrtol(buf, 10, &val); 511 if (err) 512 return err; 513 514 mutex_lock(&data->update_lock); 515 data->temp1[nr] = TEMP1_TO_REG(val); 516 w83792d_write_value(client, W83792D_REG_TEMP1[nr], 517 data->temp1[nr]); 518 mutex_unlock(&data->update_lock); 519 520 return count; 521 } 522 523 /* read/write the temperature2-3, includes measured value and limits */ 524 525 static ssize_t show_temp23(struct device *dev, struct device_attribute *attr, 526 char *buf) 527 { 528 struct sensor_device_attribute_2 *sensor_attr 529 = to_sensor_dev_attr_2(attr); 530 int nr = sensor_attr->nr; 531 int index = sensor_attr->index; 532 struct w83792d_data *data = w83792d_update_device(dev); 533 return sprintf(buf, "%ld\n", 534 (long)TEMP_ADD_FROM_REG(data->temp_add[nr][index], 535 data->temp_add[nr][index+1])); 536 } 537 538 static ssize_t store_temp23(struct device *dev, struct device_attribute *attr, 539 const char *buf, size_t count) 540 { 541 struct sensor_device_attribute_2 *sensor_attr 542 = to_sensor_dev_attr_2(attr); 543 int nr = sensor_attr->nr; 544 int index = sensor_attr->index; 545 struct i2c_client *client = to_i2c_client(dev); 546 struct w83792d_data *data = i2c_get_clientdata(client); 547 long val; 548 int err; 549 550 err = kstrtol(buf, 10, &val); 551 if (err) 552 return err; 553 554 mutex_lock(&data->update_lock); 555 data->temp_add[nr][index] = TEMP_ADD_TO_REG_HIGH(val); 556 data->temp_add[nr][index+1] = TEMP_ADD_TO_REG_LOW(val); 557 w83792d_write_value(client, W83792D_REG_TEMP_ADD[nr][index], 558 data->temp_add[nr][index]); 559 w83792d_write_value(client, W83792D_REG_TEMP_ADD[nr][index+1], 560 data->temp_add[nr][index+1]); 561 mutex_unlock(&data->update_lock); 562 563 return count; 564 } 565 566 /* get realtime status of all sensors items: voltage, temp, fan */ 567 static ssize_t 568 alarms_show(struct device *dev, struct device_attribute *attr, char *buf) 569 { 570 struct w83792d_data *data = w83792d_update_device(dev); 571 return sprintf(buf, "%d\n", data->alarms); 572 } 573 574 static ssize_t show_alarm(struct device *dev, 575 struct device_attribute *attr, char *buf) 576 { 577 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 578 int nr = sensor_attr->index; 579 struct w83792d_data *data = w83792d_update_device(dev); 580 return sprintf(buf, "%d\n", (data->alarms >> nr) & 1); 581 } 582 583 static ssize_t 584 show_pwm(struct device *dev, struct device_attribute *attr, 585 char *buf) 586 { 587 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 588 int nr = sensor_attr->index; 589 struct w83792d_data *data = w83792d_update_device(dev); 590 return sprintf(buf, "%d\n", (data->pwm[nr] & 0x0f) << 4); 591 } 592 593 static ssize_t 594 show_pwmenable(struct device *dev, struct device_attribute *attr, 595 char *buf) 596 { 597 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 598 int nr = sensor_attr->index - 1; 599 struct w83792d_data *data = w83792d_update_device(dev); 600 long pwm_enable_tmp = 1; 601 602 switch (data->pwmenable[nr]) { 603 case 0: 604 pwm_enable_tmp = 1; /* manual mode */ 605 break; 606 case 1: 607 pwm_enable_tmp = 3; /*thermal cruise/Smart Fan I */ 608 break; 609 case 2: 610 pwm_enable_tmp = 2; /* Smart Fan II */ 611 break; 612 } 613 614 return sprintf(buf, "%ld\n", pwm_enable_tmp); 615 } 616 617 static ssize_t 618 store_pwm(struct device *dev, struct device_attribute *attr, 619 const char *buf, size_t count) 620 { 621 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 622 int nr = sensor_attr->index; 623 struct i2c_client *client = to_i2c_client(dev); 624 struct w83792d_data *data = i2c_get_clientdata(client); 625 unsigned long val; 626 int err; 627 628 err = kstrtoul(buf, 10, &val); 629 if (err) 630 return err; 631 val = clamp_val(val, 0, 255) >> 4; 632 633 mutex_lock(&data->update_lock); 634 val |= w83792d_read_value(client, W83792D_REG_PWM[nr]) & 0xf0; 635 data->pwm[nr] = val; 636 w83792d_write_value(client, W83792D_REG_PWM[nr], data->pwm[nr]); 637 mutex_unlock(&data->update_lock); 638 639 return count; 640 } 641 642 static ssize_t 643 store_pwmenable(struct device *dev, struct device_attribute *attr, 644 const char *buf, size_t count) 645 { 646 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 647 int nr = sensor_attr->index - 1; 648 struct i2c_client *client = to_i2c_client(dev); 649 struct w83792d_data *data = i2c_get_clientdata(client); 650 u8 fan_cfg_tmp, cfg1_tmp, cfg2_tmp, cfg3_tmp, cfg4_tmp; 651 unsigned long val; 652 int err; 653 654 err = kstrtoul(buf, 10, &val); 655 if (err) 656 return err; 657 658 if (val < 1 || val > 3) 659 return -EINVAL; 660 661 mutex_lock(&data->update_lock); 662 switch (val) { 663 case 1: 664 data->pwmenable[nr] = 0; /* manual mode */ 665 break; 666 case 2: 667 data->pwmenable[nr] = 2; /* Smart Fan II */ 668 break; 669 case 3: 670 data->pwmenable[nr] = 1; /* thermal cruise/Smart Fan I */ 671 break; 672 } 673 cfg1_tmp = data->pwmenable[0]; 674 cfg2_tmp = (data->pwmenable[1]) << 2; 675 cfg3_tmp = (data->pwmenable[2]) << 4; 676 cfg4_tmp = w83792d_read_value(client, W83792D_REG_FAN_CFG) & 0xc0; 677 fan_cfg_tmp = ((cfg4_tmp | cfg3_tmp) | cfg2_tmp) | cfg1_tmp; 678 w83792d_write_value(client, W83792D_REG_FAN_CFG, fan_cfg_tmp); 679 mutex_unlock(&data->update_lock); 680 681 return count; 682 } 683 684 static ssize_t 685 show_pwm_mode(struct device *dev, struct device_attribute *attr, 686 char *buf) 687 { 688 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 689 int nr = sensor_attr->index; 690 struct w83792d_data *data = w83792d_update_device(dev); 691 return sprintf(buf, "%d\n", data->pwm[nr] >> 7); 692 } 693 694 static ssize_t 695 store_pwm_mode(struct device *dev, struct device_attribute *attr, 696 const char *buf, size_t count) 697 { 698 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 699 int nr = sensor_attr->index; 700 struct i2c_client *client = to_i2c_client(dev); 701 struct w83792d_data *data = i2c_get_clientdata(client); 702 unsigned long val; 703 int err; 704 705 err = kstrtoul(buf, 10, &val); 706 if (err) 707 return err; 708 if (val > 1) 709 return -EINVAL; 710 711 mutex_lock(&data->update_lock); 712 data->pwm[nr] = w83792d_read_value(client, W83792D_REG_PWM[nr]); 713 if (val) { /* PWM mode */ 714 data->pwm[nr] |= 0x80; 715 } else { /* DC mode */ 716 data->pwm[nr] &= 0x7f; 717 } 718 w83792d_write_value(client, W83792D_REG_PWM[nr], data->pwm[nr]); 719 mutex_unlock(&data->update_lock); 720 721 return count; 722 } 723 724 static ssize_t 725 intrusion0_alarm_show(struct device *dev, struct device_attribute *attr, 726 char *buf) 727 { 728 struct w83792d_data *data = w83792d_update_device(dev); 729 return sprintf(buf, "%d\n", data->chassis); 730 } 731 732 static ssize_t 733 intrusion0_alarm_store(struct device *dev, struct device_attribute *attr, 734 const char *buf, size_t count) 735 { 736 struct i2c_client *client = to_i2c_client(dev); 737 struct w83792d_data *data = i2c_get_clientdata(client); 738 unsigned long val; 739 u8 reg; 740 741 if (kstrtoul(buf, 10, &val) || val != 0) 742 return -EINVAL; 743 744 mutex_lock(&data->update_lock); 745 reg = w83792d_read_value(client, W83792D_REG_CHASSIS_CLR); 746 w83792d_write_value(client, W83792D_REG_CHASSIS_CLR, reg | 0x80); 747 data->valid = 0; /* Force cache refresh */ 748 mutex_unlock(&data->update_lock); 749 750 return count; 751 } 752 753 /* For Smart Fan I / Thermal Cruise */ 754 static ssize_t 755 show_thermal_cruise(struct device *dev, struct device_attribute *attr, 756 char *buf) 757 { 758 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 759 int nr = sensor_attr->index; 760 struct w83792d_data *data = w83792d_update_device(dev); 761 return sprintf(buf, "%ld\n", (long)data->thermal_cruise[nr-1]); 762 } 763 764 static ssize_t 765 store_thermal_cruise(struct device *dev, struct device_attribute *attr, 766 const char *buf, size_t count) 767 { 768 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 769 int nr = sensor_attr->index - 1; 770 struct i2c_client *client = to_i2c_client(dev); 771 struct w83792d_data *data = i2c_get_clientdata(client); 772 u8 target_tmp = 0, target_mask = 0; 773 unsigned long val; 774 int err; 775 776 err = kstrtoul(buf, 10, &val); 777 if (err) 778 return err; 779 780 target_tmp = val; 781 target_tmp = target_tmp & 0x7f; 782 mutex_lock(&data->update_lock); 783 target_mask = w83792d_read_value(client, 784 W83792D_REG_THERMAL[nr]) & 0x80; 785 data->thermal_cruise[nr] = clamp_val(target_tmp, 0, 255); 786 w83792d_write_value(client, W83792D_REG_THERMAL[nr], 787 (data->thermal_cruise[nr]) | target_mask); 788 mutex_unlock(&data->update_lock); 789 790 return count; 791 } 792 793 /* For Smart Fan I/Thermal Cruise and Smart Fan II */ 794 static ssize_t 795 show_tolerance(struct device *dev, struct device_attribute *attr, 796 char *buf) 797 { 798 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 799 int nr = sensor_attr->index; 800 struct w83792d_data *data = w83792d_update_device(dev); 801 return sprintf(buf, "%ld\n", (long)data->tolerance[nr-1]); 802 } 803 804 static ssize_t 805 store_tolerance(struct device *dev, struct device_attribute *attr, 806 const char *buf, size_t count) 807 { 808 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 809 int nr = sensor_attr->index - 1; 810 struct i2c_client *client = to_i2c_client(dev); 811 struct w83792d_data *data = i2c_get_clientdata(client); 812 u8 tol_tmp, tol_mask; 813 unsigned long val; 814 int err; 815 816 err = kstrtoul(buf, 10, &val); 817 if (err) 818 return err; 819 820 mutex_lock(&data->update_lock); 821 tol_mask = w83792d_read_value(client, 822 W83792D_REG_TOLERANCE[nr]) & ((nr == 1) ? 0x0f : 0xf0); 823 tol_tmp = clamp_val(val, 0, 15); 824 tol_tmp &= 0x0f; 825 data->tolerance[nr] = tol_tmp; 826 if (nr == 1) 827 tol_tmp <<= 4; 828 w83792d_write_value(client, W83792D_REG_TOLERANCE[nr], 829 tol_mask | tol_tmp); 830 mutex_unlock(&data->update_lock); 831 832 return count; 833 } 834 835 /* For Smart Fan II */ 836 static ssize_t 837 show_sf2_point(struct device *dev, struct device_attribute *attr, 838 char *buf) 839 { 840 struct sensor_device_attribute_2 *sensor_attr 841 = to_sensor_dev_attr_2(attr); 842 int nr = sensor_attr->nr; 843 int index = sensor_attr->index; 844 struct w83792d_data *data = w83792d_update_device(dev); 845 return sprintf(buf, "%ld\n", (long)data->sf2_points[index-1][nr-1]); 846 } 847 848 static ssize_t 849 store_sf2_point(struct device *dev, struct device_attribute *attr, 850 const char *buf, size_t count) 851 { 852 struct sensor_device_attribute_2 *sensor_attr 853 = to_sensor_dev_attr_2(attr); 854 int nr = sensor_attr->nr - 1; 855 int index = sensor_attr->index - 1; 856 struct i2c_client *client = to_i2c_client(dev); 857 struct w83792d_data *data = i2c_get_clientdata(client); 858 u8 mask_tmp = 0; 859 unsigned long val; 860 int err; 861 862 err = kstrtoul(buf, 10, &val); 863 if (err) 864 return err; 865 866 mutex_lock(&data->update_lock); 867 data->sf2_points[index][nr] = clamp_val(val, 0, 127); 868 mask_tmp = w83792d_read_value(client, 869 W83792D_REG_POINTS[index][nr]) & 0x80; 870 w83792d_write_value(client, W83792D_REG_POINTS[index][nr], 871 mask_tmp|data->sf2_points[index][nr]); 872 mutex_unlock(&data->update_lock); 873 874 return count; 875 } 876 877 static ssize_t 878 show_sf2_level(struct device *dev, struct device_attribute *attr, 879 char *buf) 880 { 881 struct sensor_device_attribute_2 *sensor_attr 882 = to_sensor_dev_attr_2(attr); 883 int nr = sensor_attr->nr; 884 int index = sensor_attr->index; 885 struct w83792d_data *data = w83792d_update_device(dev); 886 return sprintf(buf, "%d\n", 887 (((data->sf2_levels[index-1][nr]) * 100) / 15)); 888 } 889 890 static ssize_t 891 store_sf2_level(struct device *dev, struct device_attribute *attr, 892 const char *buf, size_t count) 893 { 894 struct sensor_device_attribute_2 *sensor_attr 895 = to_sensor_dev_attr_2(attr); 896 int nr = sensor_attr->nr; 897 int index = sensor_attr->index - 1; 898 struct i2c_client *client = to_i2c_client(dev); 899 struct w83792d_data *data = i2c_get_clientdata(client); 900 u8 mask_tmp = 0, level_tmp = 0; 901 unsigned long val; 902 int err; 903 904 err = kstrtoul(buf, 10, &val); 905 if (err) 906 return err; 907 908 mutex_lock(&data->update_lock); 909 data->sf2_levels[index][nr] = clamp_val((val * 15) / 100, 0, 15); 910 mask_tmp = w83792d_read_value(client, W83792D_REG_LEVELS[index][nr]) 911 & ((nr == 3) ? 0xf0 : 0x0f); 912 if (nr == 3) 913 level_tmp = data->sf2_levels[index][nr]; 914 else 915 level_tmp = data->sf2_levels[index][nr] << 4; 916 w83792d_write_value(client, W83792D_REG_LEVELS[index][nr], 917 level_tmp | mask_tmp); 918 mutex_unlock(&data->update_lock); 919 920 return count; 921 } 922 923 924 static int 925 w83792d_detect_subclients(struct i2c_client *new_client) 926 { 927 int i, id; 928 int address = new_client->addr; 929 u8 val; 930 struct i2c_adapter *adapter = new_client->adapter; 931 struct w83792d_data *data = i2c_get_clientdata(new_client); 932 933 id = i2c_adapter_id(adapter); 934 if (force_subclients[0] == id && force_subclients[1] == address) { 935 for (i = 2; i <= 3; i++) { 936 if (force_subclients[i] < 0x48 || 937 force_subclients[i] > 0x4f) { 938 dev_err(&new_client->dev, 939 "invalid subclient address %d; must be 0x48-0x4f\n", 940 force_subclients[i]); 941 return -ENODEV; 942 } 943 } 944 w83792d_write_value(new_client, W83792D_REG_I2C_SUBADDR, 945 (force_subclients[2] & 0x07) | 946 ((force_subclients[3] & 0x07) << 4)); 947 } 948 949 val = w83792d_read_value(new_client, W83792D_REG_I2C_SUBADDR); 950 if (!(val & 0x08)) 951 data->lm75[0] = devm_i2c_new_dummy_device(&new_client->dev, adapter, 952 0x48 + (val & 0x7)); 953 if (!(val & 0x80)) { 954 if (!IS_ERR(data->lm75[0]) && 955 ((val & 0x7) == ((val >> 4) & 0x7))) { 956 dev_err(&new_client->dev, 957 "duplicate addresses 0x%x, use force_subclient\n", 958 data->lm75[0]->addr); 959 return -ENODEV; 960 } 961 data->lm75[1] = devm_i2c_new_dummy_device(&new_client->dev, adapter, 962 0x48 + ((val >> 4) & 0x7)); 963 } 964 965 return 0; 966 } 967 968 static SENSOR_DEVICE_ATTR(in0_input, S_IRUGO, show_in, NULL, 0); 969 static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, show_in, NULL, 1); 970 static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, show_in, NULL, 2); 971 static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, show_in, NULL, 3); 972 static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, show_in, NULL, 4); 973 static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, show_in, NULL, 5); 974 static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, show_in, NULL, 6); 975 static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, show_in, NULL, 7); 976 static SENSOR_DEVICE_ATTR(in8_input, S_IRUGO, show_in, NULL, 8); 977 static SENSOR_DEVICE_ATTR(in0_min, S_IWUSR | S_IRUGO, 978 show_in_min, store_in_min, 0); 979 static SENSOR_DEVICE_ATTR(in1_min, S_IWUSR | S_IRUGO, 980 show_in_min, store_in_min, 1); 981 static SENSOR_DEVICE_ATTR(in2_min, S_IWUSR | S_IRUGO, 982 show_in_min, store_in_min, 2); 983 static SENSOR_DEVICE_ATTR(in3_min, S_IWUSR | S_IRUGO, 984 show_in_min, store_in_min, 3); 985 static SENSOR_DEVICE_ATTR(in4_min, S_IWUSR | S_IRUGO, 986 show_in_min, store_in_min, 4); 987 static SENSOR_DEVICE_ATTR(in5_min, S_IWUSR | S_IRUGO, 988 show_in_min, store_in_min, 5); 989 static SENSOR_DEVICE_ATTR(in6_min, S_IWUSR | S_IRUGO, 990 show_in_min, store_in_min, 6); 991 static SENSOR_DEVICE_ATTR(in7_min, S_IWUSR | S_IRUGO, 992 show_in_min, store_in_min, 7); 993 static SENSOR_DEVICE_ATTR(in8_min, S_IWUSR | S_IRUGO, 994 show_in_min, store_in_min, 8); 995 static SENSOR_DEVICE_ATTR(in0_max, S_IWUSR | S_IRUGO, 996 show_in_max, store_in_max, 0); 997 static SENSOR_DEVICE_ATTR(in1_max, S_IWUSR | S_IRUGO, 998 show_in_max, store_in_max, 1); 999 static SENSOR_DEVICE_ATTR(in2_max, S_IWUSR | S_IRUGO, 1000 show_in_max, store_in_max, 2); 1001 static SENSOR_DEVICE_ATTR(in3_max, S_IWUSR | S_IRUGO, 1002 show_in_max, store_in_max, 3); 1003 static SENSOR_DEVICE_ATTR(in4_max, S_IWUSR | S_IRUGO, 1004 show_in_max, store_in_max, 4); 1005 static SENSOR_DEVICE_ATTR(in5_max, S_IWUSR | S_IRUGO, 1006 show_in_max, store_in_max, 5); 1007 static SENSOR_DEVICE_ATTR(in6_max, S_IWUSR | S_IRUGO, 1008 show_in_max, store_in_max, 6); 1009 static SENSOR_DEVICE_ATTR(in7_max, S_IWUSR | S_IRUGO, 1010 show_in_max, store_in_max, 7); 1011 static SENSOR_DEVICE_ATTR(in8_max, S_IWUSR | S_IRUGO, 1012 show_in_max, store_in_max, 8); 1013 static SENSOR_DEVICE_ATTR_2(temp1_input, S_IRUGO, show_temp1, NULL, 0, 0); 1014 static SENSOR_DEVICE_ATTR_2(temp2_input, S_IRUGO, show_temp23, NULL, 0, 0); 1015 static SENSOR_DEVICE_ATTR_2(temp3_input, S_IRUGO, show_temp23, NULL, 1, 0); 1016 static SENSOR_DEVICE_ATTR_2(temp1_max, S_IRUGO | S_IWUSR, 1017 show_temp1, store_temp1, 0, 1); 1018 static SENSOR_DEVICE_ATTR_2(temp2_max, S_IRUGO | S_IWUSR, show_temp23, 1019 store_temp23, 0, 2); 1020 static SENSOR_DEVICE_ATTR_2(temp3_max, S_IRUGO | S_IWUSR, show_temp23, 1021 store_temp23, 1, 2); 1022 static SENSOR_DEVICE_ATTR_2(temp1_max_hyst, S_IRUGO | S_IWUSR, 1023 show_temp1, store_temp1, 0, 2); 1024 static SENSOR_DEVICE_ATTR_2(temp2_max_hyst, S_IRUGO | S_IWUSR, 1025 show_temp23, store_temp23, 0, 4); 1026 static SENSOR_DEVICE_ATTR_2(temp3_max_hyst, S_IRUGO | S_IWUSR, 1027 show_temp23, store_temp23, 1, 4); 1028 static DEVICE_ATTR_RO(alarms); 1029 static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0); 1030 static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1); 1031 static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 2); 1032 static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 3); 1033 static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 4); 1034 static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 5); 1035 static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 6); 1036 static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 7); 1037 static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 8); 1038 static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 9); 1039 static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 10); 1040 static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 11); 1041 static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 12); 1042 static SENSOR_DEVICE_ATTR(fan7_alarm, S_IRUGO, show_alarm, NULL, 15); 1043 static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 19); 1044 static SENSOR_DEVICE_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 20); 1045 static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 21); 1046 static SENSOR_DEVICE_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 22); 1047 static SENSOR_DEVICE_ATTR(fan6_alarm, S_IRUGO, show_alarm, NULL, 23); 1048 static DEVICE_ATTR_RW(intrusion0_alarm); 1049 static SENSOR_DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 0); 1050 static SENSOR_DEVICE_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 1); 1051 static SENSOR_DEVICE_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 2); 1052 static SENSOR_DEVICE_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 3); 1053 static SENSOR_DEVICE_ATTR(pwm5, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 4); 1054 static SENSOR_DEVICE_ATTR(pwm6, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 5); 1055 static SENSOR_DEVICE_ATTR(pwm7, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 6); 1056 static SENSOR_DEVICE_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, 1057 show_pwmenable, store_pwmenable, 1); 1058 static SENSOR_DEVICE_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, 1059 show_pwmenable, store_pwmenable, 2); 1060 static SENSOR_DEVICE_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, 1061 show_pwmenable, store_pwmenable, 3); 1062 static SENSOR_DEVICE_ATTR(pwm1_mode, S_IWUSR | S_IRUGO, 1063 show_pwm_mode, store_pwm_mode, 0); 1064 static SENSOR_DEVICE_ATTR(pwm2_mode, S_IWUSR | S_IRUGO, 1065 show_pwm_mode, store_pwm_mode, 1); 1066 static SENSOR_DEVICE_ATTR(pwm3_mode, S_IWUSR | S_IRUGO, 1067 show_pwm_mode, store_pwm_mode, 2); 1068 static SENSOR_DEVICE_ATTR(pwm4_mode, S_IWUSR | S_IRUGO, 1069 show_pwm_mode, store_pwm_mode, 3); 1070 static SENSOR_DEVICE_ATTR(pwm5_mode, S_IWUSR | S_IRUGO, 1071 show_pwm_mode, store_pwm_mode, 4); 1072 static SENSOR_DEVICE_ATTR(pwm6_mode, S_IWUSR | S_IRUGO, 1073 show_pwm_mode, store_pwm_mode, 5); 1074 static SENSOR_DEVICE_ATTR(pwm7_mode, S_IWUSR | S_IRUGO, 1075 show_pwm_mode, store_pwm_mode, 6); 1076 static SENSOR_DEVICE_ATTR(tolerance1, S_IWUSR | S_IRUGO, 1077 show_tolerance, store_tolerance, 1); 1078 static SENSOR_DEVICE_ATTR(tolerance2, S_IWUSR | S_IRUGO, 1079 show_tolerance, store_tolerance, 2); 1080 static SENSOR_DEVICE_ATTR(tolerance3, S_IWUSR | S_IRUGO, 1081 show_tolerance, store_tolerance, 3); 1082 static SENSOR_DEVICE_ATTR(thermal_cruise1, S_IWUSR | S_IRUGO, 1083 show_thermal_cruise, store_thermal_cruise, 1); 1084 static SENSOR_DEVICE_ATTR(thermal_cruise2, S_IWUSR | S_IRUGO, 1085 show_thermal_cruise, store_thermal_cruise, 2); 1086 static SENSOR_DEVICE_ATTR(thermal_cruise3, S_IWUSR | S_IRUGO, 1087 show_thermal_cruise, store_thermal_cruise, 3); 1088 static SENSOR_DEVICE_ATTR_2(sf2_point1_fan1, S_IRUGO | S_IWUSR, 1089 show_sf2_point, store_sf2_point, 1, 1); 1090 static SENSOR_DEVICE_ATTR_2(sf2_point2_fan1, S_IRUGO | S_IWUSR, 1091 show_sf2_point, store_sf2_point, 2, 1); 1092 static SENSOR_DEVICE_ATTR_2(sf2_point3_fan1, S_IRUGO | S_IWUSR, 1093 show_sf2_point, store_sf2_point, 3, 1); 1094 static SENSOR_DEVICE_ATTR_2(sf2_point4_fan1, S_IRUGO | S_IWUSR, 1095 show_sf2_point, store_sf2_point, 4, 1); 1096 static SENSOR_DEVICE_ATTR_2(sf2_point1_fan2, S_IRUGO | S_IWUSR, 1097 show_sf2_point, store_sf2_point, 1, 2); 1098 static SENSOR_DEVICE_ATTR_2(sf2_point2_fan2, S_IRUGO | S_IWUSR, 1099 show_sf2_point, store_sf2_point, 2, 2); 1100 static SENSOR_DEVICE_ATTR_2(sf2_point3_fan2, S_IRUGO | S_IWUSR, 1101 show_sf2_point, store_sf2_point, 3, 2); 1102 static SENSOR_DEVICE_ATTR_2(sf2_point4_fan2, S_IRUGO | S_IWUSR, 1103 show_sf2_point, store_sf2_point, 4, 2); 1104 static SENSOR_DEVICE_ATTR_2(sf2_point1_fan3, S_IRUGO | S_IWUSR, 1105 show_sf2_point, store_sf2_point, 1, 3); 1106 static SENSOR_DEVICE_ATTR_2(sf2_point2_fan3, S_IRUGO | S_IWUSR, 1107 show_sf2_point, store_sf2_point, 2, 3); 1108 static SENSOR_DEVICE_ATTR_2(sf2_point3_fan3, S_IRUGO | S_IWUSR, 1109 show_sf2_point, store_sf2_point, 3, 3); 1110 static SENSOR_DEVICE_ATTR_2(sf2_point4_fan3, S_IRUGO | S_IWUSR, 1111 show_sf2_point, store_sf2_point, 4, 3); 1112 static SENSOR_DEVICE_ATTR_2(sf2_level1_fan1, S_IRUGO | S_IWUSR, 1113 show_sf2_level, store_sf2_level, 1, 1); 1114 static SENSOR_DEVICE_ATTR_2(sf2_level2_fan1, S_IRUGO | S_IWUSR, 1115 show_sf2_level, store_sf2_level, 2, 1); 1116 static SENSOR_DEVICE_ATTR_2(sf2_level3_fan1, S_IRUGO | S_IWUSR, 1117 show_sf2_level, store_sf2_level, 3, 1); 1118 static SENSOR_DEVICE_ATTR_2(sf2_level1_fan2, S_IRUGO | S_IWUSR, 1119 show_sf2_level, store_sf2_level, 1, 2); 1120 static SENSOR_DEVICE_ATTR_2(sf2_level2_fan2, S_IRUGO | S_IWUSR, 1121 show_sf2_level, store_sf2_level, 2, 2); 1122 static SENSOR_DEVICE_ATTR_2(sf2_level3_fan2, S_IRUGO | S_IWUSR, 1123 show_sf2_level, store_sf2_level, 3, 2); 1124 static SENSOR_DEVICE_ATTR_2(sf2_level1_fan3, S_IRUGO | S_IWUSR, 1125 show_sf2_level, store_sf2_level, 1, 3); 1126 static SENSOR_DEVICE_ATTR_2(sf2_level2_fan3, S_IRUGO | S_IWUSR, 1127 show_sf2_level, store_sf2_level, 2, 3); 1128 static SENSOR_DEVICE_ATTR_2(sf2_level3_fan3, S_IRUGO | S_IWUSR, 1129 show_sf2_level, store_sf2_level, 3, 3); 1130 static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 1); 1131 static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 2); 1132 static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 3); 1133 static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 4); 1134 static SENSOR_DEVICE_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 5); 1135 static SENSOR_DEVICE_ATTR(fan6_input, S_IRUGO, show_fan, NULL, 6); 1136 static SENSOR_DEVICE_ATTR(fan7_input, S_IRUGO, show_fan, NULL, 7); 1137 static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, 1138 show_fan_min, store_fan_min, 1); 1139 static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO, 1140 show_fan_min, store_fan_min, 2); 1141 static SENSOR_DEVICE_ATTR(fan3_min, S_IWUSR | S_IRUGO, 1142 show_fan_min, store_fan_min, 3); 1143 static SENSOR_DEVICE_ATTR(fan4_min, S_IWUSR | S_IRUGO, 1144 show_fan_min, store_fan_min, 4); 1145 static SENSOR_DEVICE_ATTR(fan5_min, S_IWUSR | S_IRUGO, 1146 show_fan_min, store_fan_min, 5); 1147 static SENSOR_DEVICE_ATTR(fan6_min, S_IWUSR | S_IRUGO, 1148 show_fan_min, store_fan_min, 6); 1149 static SENSOR_DEVICE_ATTR(fan7_min, S_IWUSR | S_IRUGO, 1150 show_fan_min, store_fan_min, 7); 1151 static SENSOR_DEVICE_ATTR(fan1_div, S_IWUSR | S_IRUGO, 1152 show_fan_div, store_fan_div, 1); 1153 static SENSOR_DEVICE_ATTR(fan2_div, S_IWUSR | S_IRUGO, 1154 show_fan_div, store_fan_div, 2); 1155 static SENSOR_DEVICE_ATTR(fan3_div, S_IWUSR | S_IRUGO, 1156 show_fan_div, store_fan_div, 3); 1157 static SENSOR_DEVICE_ATTR(fan4_div, S_IWUSR | S_IRUGO, 1158 show_fan_div, store_fan_div, 4); 1159 static SENSOR_DEVICE_ATTR(fan5_div, S_IWUSR | S_IRUGO, 1160 show_fan_div, store_fan_div, 5); 1161 static SENSOR_DEVICE_ATTR(fan6_div, S_IWUSR | S_IRUGO, 1162 show_fan_div, store_fan_div, 6); 1163 static SENSOR_DEVICE_ATTR(fan7_div, S_IWUSR | S_IRUGO, 1164 show_fan_div, store_fan_div, 7); 1165 1166 static struct attribute *w83792d_attributes_fan[4][7] = { 1167 { 1168 &sensor_dev_attr_fan4_input.dev_attr.attr, 1169 &sensor_dev_attr_fan4_min.dev_attr.attr, 1170 &sensor_dev_attr_fan4_div.dev_attr.attr, 1171 &sensor_dev_attr_fan4_alarm.dev_attr.attr, 1172 &sensor_dev_attr_pwm4.dev_attr.attr, 1173 &sensor_dev_attr_pwm4_mode.dev_attr.attr, 1174 NULL 1175 }, { 1176 &sensor_dev_attr_fan5_input.dev_attr.attr, 1177 &sensor_dev_attr_fan5_min.dev_attr.attr, 1178 &sensor_dev_attr_fan5_div.dev_attr.attr, 1179 &sensor_dev_attr_fan5_alarm.dev_attr.attr, 1180 &sensor_dev_attr_pwm5.dev_attr.attr, 1181 &sensor_dev_attr_pwm5_mode.dev_attr.attr, 1182 NULL 1183 }, { 1184 &sensor_dev_attr_fan6_input.dev_attr.attr, 1185 &sensor_dev_attr_fan6_min.dev_attr.attr, 1186 &sensor_dev_attr_fan6_div.dev_attr.attr, 1187 &sensor_dev_attr_fan6_alarm.dev_attr.attr, 1188 &sensor_dev_attr_pwm6.dev_attr.attr, 1189 &sensor_dev_attr_pwm6_mode.dev_attr.attr, 1190 NULL 1191 }, { 1192 &sensor_dev_attr_fan7_input.dev_attr.attr, 1193 &sensor_dev_attr_fan7_min.dev_attr.attr, 1194 &sensor_dev_attr_fan7_div.dev_attr.attr, 1195 &sensor_dev_attr_fan7_alarm.dev_attr.attr, 1196 &sensor_dev_attr_pwm7.dev_attr.attr, 1197 &sensor_dev_attr_pwm7_mode.dev_attr.attr, 1198 NULL 1199 } 1200 }; 1201 1202 static const struct attribute_group w83792d_group_fan[4] = { 1203 { .attrs = w83792d_attributes_fan[0] }, 1204 { .attrs = w83792d_attributes_fan[1] }, 1205 { .attrs = w83792d_attributes_fan[2] }, 1206 { .attrs = w83792d_attributes_fan[3] }, 1207 }; 1208 1209 static struct attribute *w83792d_attributes[] = { 1210 &sensor_dev_attr_in0_input.dev_attr.attr, 1211 &sensor_dev_attr_in0_max.dev_attr.attr, 1212 &sensor_dev_attr_in0_min.dev_attr.attr, 1213 &sensor_dev_attr_in1_input.dev_attr.attr, 1214 &sensor_dev_attr_in1_max.dev_attr.attr, 1215 &sensor_dev_attr_in1_min.dev_attr.attr, 1216 &sensor_dev_attr_in2_input.dev_attr.attr, 1217 &sensor_dev_attr_in2_max.dev_attr.attr, 1218 &sensor_dev_attr_in2_min.dev_attr.attr, 1219 &sensor_dev_attr_in3_input.dev_attr.attr, 1220 &sensor_dev_attr_in3_max.dev_attr.attr, 1221 &sensor_dev_attr_in3_min.dev_attr.attr, 1222 &sensor_dev_attr_in4_input.dev_attr.attr, 1223 &sensor_dev_attr_in4_max.dev_attr.attr, 1224 &sensor_dev_attr_in4_min.dev_attr.attr, 1225 &sensor_dev_attr_in5_input.dev_attr.attr, 1226 &sensor_dev_attr_in5_max.dev_attr.attr, 1227 &sensor_dev_attr_in5_min.dev_attr.attr, 1228 &sensor_dev_attr_in6_input.dev_attr.attr, 1229 &sensor_dev_attr_in6_max.dev_attr.attr, 1230 &sensor_dev_attr_in6_min.dev_attr.attr, 1231 &sensor_dev_attr_in7_input.dev_attr.attr, 1232 &sensor_dev_attr_in7_max.dev_attr.attr, 1233 &sensor_dev_attr_in7_min.dev_attr.attr, 1234 &sensor_dev_attr_in8_input.dev_attr.attr, 1235 &sensor_dev_attr_in8_max.dev_attr.attr, 1236 &sensor_dev_attr_in8_min.dev_attr.attr, 1237 &sensor_dev_attr_in0_alarm.dev_attr.attr, 1238 &sensor_dev_attr_in1_alarm.dev_attr.attr, 1239 &sensor_dev_attr_in2_alarm.dev_attr.attr, 1240 &sensor_dev_attr_in3_alarm.dev_attr.attr, 1241 &sensor_dev_attr_in4_alarm.dev_attr.attr, 1242 &sensor_dev_attr_in5_alarm.dev_attr.attr, 1243 &sensor_dev_attr_in6_alarm.dev_attr.attr, 1244 &sensor_dev_attr_in7_alarm.dev_attr.attr, 1245 &sensor_dev_attr_in8_alarm.dev_attr.attr, 1246 &sensor_dev_attr_temp1_input.dev_attr.attr, 1247 &sensor_dev_attr_temp1_max.dev_attr.attr, 1248 &sensor_dev_attr_temp1_max_hyst.dev_attr.attr, 1249 &sensor_dev_attr_temp2_input.dev_attr.attr, 1250 &sensor_dev_attr_temp2_max.dev_attr.attr, 1251 &sensor_dev_attr_temp2_max_hyst.dev_attr.attr, 1252 &sensor_dev_attr_temp3_input.dev_attr.attr, 1253 &sensor_dev_attr_temp3_max.dev_attr.attr, 1254 &sensor_dev_attr_temp3_max_hyst.dev_attr.attr, 1255 &sensor_dev_attr_temp1_alarm.dev_attr.attr, 1256 &sensor_dev_attr_temp2_alarm.dev_attr.attr, 1257 &sensor_dev_attr_temp3_alarm.dev_attr.attr, 1258 &sensor_dev_attr_pwm1.dev_attr.attr, 1259 &sensor_dev_attr_pwm1_mode.dev_attr.attr, 1260 &sensor_dev_attr_pwm1_enable.dev_attr.attr, 1261 &sensor_dev_attr_pwm2.dev_attr.attr, 1262 &sensor_dev_attr_pwm2_mode.dev_attr.attr, 1263 &sensor_dev_attr_pwm2_enable.dev_attr.attr, 1264 &sensor_dev_attr_pwm3.dev_attr.attr, 1265 &sensor_dev_attr_pwm3_mode.dev_attr.attr, 1266 &sensor_dev_attr_pwm3_enable.dev_attr.attr, 1267 &dev_attr_alarms.attr, 1268 &dev_attr_intrusion0_alarm.attr, 1269 &sensor_dev_attr_tolerance1.dev_attr.attr, 1270 &sensor_dev_attr_thermal_cruise1.dev_attr.attr, 1271 &sensor_dev_attr_tolerance2.dev_attr.attr, 1272 &sensor_dev_attr_thermal_cruise2.dev_attr.attr, 1273 &sensor_dev_attr_tolerance3.dev_attr.attr, 1274 &sensor_dev_attr_thermal_cruise3.dev_attr.attr, 1275 &sensor_dev_attr_sf2_point1_fan1.dev_attr.attr, 1276 &sensor_dev_attr_sf2_point2_fan1.dev_attr.attr, 1277 &sensor_dev_attr_sf2_point3_fan1.dev_attr.attr, 1278 &sensor_dev_attr_sf2_point4_fan1.dev_attr.attr, 1279 &sensor_dev_attr_sf2_point1_fan2.dev_attr.attr, 1280 &sensor_dev_attr_sf2_point2_fan2.dev_attr.attr, 1281 &sensor_dev_attr_sf2_point3_fan2.dev_attr.attr, 1282 &sensor_dev_attr_sf2_point4_fan2.dev_attr.attr, 1283 &sensor_dev_attr_sf2_point1_fan3.dev_attr.attr, 1284 &sensor_dev_attr_sf2_point2_fan3.dev_attr.attr, 1285 &sensor_dev_attr_sf2_point3_fan3.dev_attr.attr, 1286 &sensor_dev_attr_sf2_point4_fan3.dev_attr.attr, 1287 &sensor_dev_attr_sf2_level1_fan1.dev_attr.attr, 1288 &sensor_dev_attr_sf2_level2_fan1.dev_attr.attr, 1289 &sensor_dev_attr_sf2_level3_fan1.dev_attr.attr, 1290 &sensor_dev_attr_sf2_level1_fan2.dev_attr.attr, 1291 &sensor_dev_attr_sf2_level2_fan2.dev_attr.attr, 1292 &sensor_dev_attr_sf2_level3_fan2.dev_attr.attr, 1293 &sensor_dev_attr_sf2_level1_fan3.dev_attr.attr, 1294 &sensor_dev_attr_sf2_level2_fan3.dev_attr.attr, 1295 &sensor_dev_attr_sf2_level3_fan3.dev_attr.attr, 1296 &sensor_dev_attr_fan1_input.dev_attr.attr, 1297 &sensor_dev_attr_fan1_min.dev_attr.attr, 1298 &sensor_dev_attr_fan1_div.dev_attr.attr, 1299 &sensor_dev_attr_fan1_alarm.dev_attr.attr, 1300 &sensor_dev_attr_fan2_input.dev_attr.attr, 1301 &sensor_dev_attr_fan2_min.dev_attr.attr, 1302 &sensor_dev_attr_fan2_div.dev_attr.attr, 1303 &sensor_dev_attr_fan2_alarm.dev_attr.attr, 1304 &sensor_dev_attr_fan3_input.dev_attr.attr, 1305 &sensor_dev_attr_fan3_min.dev_attr.attr, 1306 &sensor_dev_attr_fan3_div.dev_attr.attr, 1307 &sensor_dev_attr_fan3_alarm.dev_attr.attr, 1308 NULL 1309 }; 1310 1311 static const struct attribute_group w83792d_group = { 1312 .attrs = w83792d_attributes, 1313 }; 1314 1315 /* Return 0 if detection is successful, -ENODEV otherwise */ 1316 static int 1317 w83792d_detect(struct i2c_client *client, struct i2c_board_info *info) 1318 { 1319 struct i2c_adapter *adapter = client->adapter; 1320 int val1, val2; 1321 unsigned short address = client->addr; 1322 1323 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 1324 return -ENODEV; 1325 1326 if (w83792d_read_value(client, W83792D_REG_CONFIG) & 0x80) 1327 return -ENODEV; 1328 1329 val1 = w83792d_read_value(client, W83792D_REG_BANK); 1330 val2 = w83792d_read_value(client, W83792D_REG_CHIPMAN); 1331 /* Check for Winbond ID if in bank 0 */ 1332 if (!(val1 & 0x07)) { /* is Bank0 */ 1333 if ((!(val1 & 0x80) && val2 != 0xa3) || 1334 ((val1 & 0x80) && val2 != 0x5c)) 1335 return -ENODEV; 1336 } 1337 /* 1338 * If Winbond chip, address of chip and W83792D_REG_I2C_ADDR 1339 * should match 1340 */ 1341 if (w83792d_read_value(client, W83792D_REG_I2C_ADDR) != address) 1342 return -ENODEV; 1343 1344 /* Put it now into bank 0 and Vendor ID High Byte */ 1345 w83792d_write_value(client, 1346 W83792D_REG_BANK, 1347 (w83792d_read_value(client, 1348 W83792D_REG_BANK) & 0x78) | 0x80); 1349 1350 /* Determine the chip type. */ 1351 val1 = w83792d_read_value(client, W83792D_REG_WCHIPID); 1352 val2 = w83792d_read_value(client, W83792D_REG_CHIPMAN); 1353 if (val1 != 0x7a || val2 != 0x5c) 1354 return -ENODEV; 1355 1356 strlcpy(info->type, "w83792d", I2C_NAME_SIZE); 1357 1358 return 0; 1359 } 1360 1361 static int 1362 w83792d_probe(struct i2c_client *client, const struct i2c_device_id *id) 1363 { 1364 struct w83792d_data *data; 1365 struct device *dev = &client->dev; 1366 int i, val1, err; 1367 1368 data = devm_kzalloc(dev, sizeof(struct w83792d_data), GFP_KERNEL); 1369 if (!data) 1370 return -ENOMEM; 1371 1372 i2c_set_clientdata(client, data); 1373 mutex_init(&data->update_lock); 1374 1375 err = w83792d_detect_subclients(client); 1376 if (err) 1377 return err; 1378 1379 /* Initialize the chip */ 1380 w83792d_init_client(client); 1381 1382 /* A few vars need to be filled upon startup */ 1383 for (i = 0; i < 7; i++) { 1384 data->fan_min[i] = w83792d_read_value(client, 1385 W83792D_REG_FAN_MIN[i]); 1386 } 1387 1388 /* Register sysfs hooks */ 1389 err = sysfs_create_group(&dev->kobj, &w83792d_group); 1390 if (err) 1391 return err; 1392 1393 /* 1394 * Read GPIO enable register to check if pins for fan 4,5 are used as 1395 * GPIO 1396 */ 1397 val1 = w83792d_read_value(client, W83792D_REG_GPIO_EN); 1398 1399 if (!(val1 & 0x40)) { 1400 err = sysfs_create_group(&dev->kobj, &w83792d_group_fan[0]); 1401 if (err) 1402 goto exit_remove_files; 1403 } 1404 1405 if (!(val1 & 0x20)) { 1406 err = sysfs_create_group(&dev->kobj, &w83792d_group_fan[1]); 1407 if (err) 1408 goto exit_remove_files; 1409 } 1410 1411 val1 = w83792d_read_value(client, W83792D_REG_PIN); 1412 if (val1 & 0x40) { 1413 err = sysfs_create_group(&dev->kobj, &w83792d_group_fan[2]); 1414 if (err) 1415 goto exit_remove_files; 1416 } 1417 1418 if (val1 & 0x04) { 1419 err = sysfs_create_group(&dev->kobj, &w83792d_group_fan[3]); 1420 if (err) 1421 goto exit_remove_files; 1422 } 1423 1424 data->hwmon_dev = hwmon_device_register(dev); 1425 if (IS_ERR(data->hwmon_dev)) { 1426 err = PTR_ERR(data->hwmon_dev); 1427 goto exit_remove_files; 1428 } 1429 1430 return 0; 1431 1432 exit_remove_files: 1433 sysfs_remove_group(&dev->kobj, &w83792d_group); 1434 for (i = 0; i < ARRAY_SIZE(w83792d_group_fan); i++) 1435 sysfs_remove_group(&dev->kobj, &w83792d_group_fan[i]); 1436 return err; 1437 } 1438 1439 static int 1440 w83792d_remove(struct i2c_client *client) 1441 { 1442 struct w83792d_data *data = i2c_get_clientdata(client); 1443 int i; 1444 1445 hwmon_device_unregister(data->hwmon_dev); 1446 sysfs_remove_group(&client->dev.kobj, &w83792d_group); 1447 for (i = 0; i < ARRAY_SIZE(w83792d_group_fan); i++) 1448 sysfs_remove_group(&client->dev.kobj, 1449 &w83792d_group_fan[i]); 1450 1451 return 0; 1452 } 1453 1454 static void 1455 w83792d_init_client(struct i2c_client *client) 1456 { 1457 u8 temp2_cfg, temp3_cfg, vid_in_b; 1458 1459 if (init) 1460 w83792d_write_value(client, W83792D_REG_CONFIG, 0x80); 1461 1462 /* 1463 * Clear the bit6 of W83792D_REG_VID_IN_B(set it into 0): 1464 * W83792D_REG_VID_IN_B bit6 = 0: the high/low limit of 1465 * vin0/vin1 can be modified by user; 1466 * W83792D_REG_VID_IN_B bit6 = 1: the high/low limit of 1467 * vin0/vin1 auto-updated, can NOT be modified by user. 1468 */ 1469 vid_in_b = w83792d_read_value(client, W83792D_REG_VID_IN_B); 1470 w83792d_write_value(client, W83792D_REG_VID_IN_B, 1471 vid_in_b & 0xbf); 1472 1473 temp2_cfg = w83792d_read_value(client, W83792D_REG_TEMP2_CONFIG); 1474 temp3_cfg = w83792d_read_value(client, W83792D_REG_TEMP3_CONFIG); 1475 w83792d_write_value(client, W83792D_REG_TEMP2_CONFIG, 1476 temp2_cfg & 0xe6); 1477 w83792d_write_value(client, W83792D_REG_TEMP3_CONFIG, 1478 temp3_cfg & 0xe6); 1479 1480 /* Start monitoring */ 1481 w83792d_write_value(client, W83792D_REG_CONFIG, 1482 (w83792d_read_value(client, 1483 W83792D_REG_CONFIG) & 0xf7) 1484 | 0x01); 1485 } 1486 1487 static struct w83792d_data *w83792d_update_device(struct device *dev) 1488 { 1489 struct i2c_client *client = to_i2c_client(dev); 1490 struct w83792d_data *data = i2c_get_clientdata(client); 1491 int i, j; 1492 u8 reg_array_tmp[4], reg_tmp; 1493 1494 mutex_lock(&data->update_lock); 1495 1496 if (time_after 1497 (jiffies - data->last_updated, (unsigned long) (HZ * 3)) 1498 || time_before(jiffies, data->last_updated) || !data->valid) { 1499 dev_dbg(dev, "Starting device update\n"); 1500 1501 /* Update the voltages measured value and limits */ 1502 for (i = 0; i < 9; i++) { 1503 data->in[i] = w83792d_read_value(client, 1504 W83792D_REG_IN[i]); 1505 data->in_max[i] = w83792d_read_value(client, 1506 W83792D_REG_IN_MAX[i]); 1507 data->in_min[i] = w83792d_read_value(client, 1508 W83792D_REG_IN_MIN[i]); 1509 } 1510 data->low_bits = w83792d_read_value(client, 1511 W83792D_REG_LOW_BITS1) + 1512 (w83792d_read_value(client, 1513 W83792D_REG_LOW_BITS2) << 8); 1514 for (i = 0; i < 7; i++) { 1515 /* Update the Fan measured value and limits */ 1516 data->fan[i] = w83792d_read_value(client, 1517 W83792D_REG_FAN[i]); 1518 data->fan_min[i] = w83792d_read_value(client, 1519 W83792D_REG_FAN_MIN[i]); 1520 /* Update the PWM/DC Value and PWM/DC flag */ 1521 data->pwm[i] = w83792d_read_value(client, 1522 W83792D_REG_PWM[i]); 1523 } 1524 1525 reg_tmp = w83792d_read_value(client, W83792D_REG_FAN_CFG); 1526 data->pwmenable[0] = reg_tmp & 0x03; 1527 data->pwmenable[1] = (reg_tmp>>2) & 0x03; 1528 data->pwmenable[2] = (reg_tmp>>4) & 0x03; 1529 1530 for (i = 0; i < 3; i++) { 1531 data->temp1[i] = w83792d_read_value(client, 1532 W83792D_REG_TEMP1[i]); 1533 } 1534 for (i = 0; i < 2; i++) { 1535 for (j = 0; j < 6; j++) { 1536 data->temp_add[i][j] = w83792d_read_value( 1537 client, W83792D_REG_TEMP_ADD[i][j]); 1538 } 1539 } 1540 1541 /* Update the Fan Divisor */ 1542 for (i = 0; i < 4; i++) { 1543 reg_array_tmp[i] = w83792d_read_value(client, 1544 W83792D_REG_FAN_DIV[i]); 1545 } 1546 data->fan_div[0] = reg_array_tmp[0] & 0x07; 1547 data->fan_div[1] = (reg_array_tmp[0] >> 4) & 0x07; 1548 data->fan_div[2] = reg_array_tmp[1] & 0x07; 1549 data->fan_div[3] = (reg_array_tmp[1] >> 4) & 0x07; 1550 data->fan_div[4] = reg_array_tmp[2] & 0x07; 1551 data->fan_div[5] = (reg_array_tmp[2] >> 4) & 0x07; 1552 data->fan_div[6] = reg_array_tmp[3] & 0x07; 1553 1554 /* Update the realtime status */ 1555 data->alarms = w83792d_read_value(client, W83792D_REG_ALARM1) + 1556 (w83792d_read_value(client, W83792D_REG_ALARM2) << 8) + 1557 (w83792d_read_value(client, W83792D_REG_ALARM3) << 16); 1558 1559 /* Update CaseOpen status and it's CLR_CHS. */ 1560 data->chassis = (w83792d_read_value(client, 1561 W83792D_REG_CHASSIS) >> 5) & 0x01; 1562 1563 /* Update Thermal Cruise/Smart Fan I target value */ 1564 for (i = 0; i < 3; i++) { 1565 data->thermal_cruise[i] = 1566 w83792d_read_value(client, 1567 W83792D_REG_THERMAL[i]) & 0x7f; 1568 } 1569 1570 /* Update Smart Fan I/II tolerance */ 1571 reg_tmp = w83792d_read_value(client, W83792D_REG_TOLERANCE[0]); 1572 data->tolerance[0] = reg_tmp & 0x0f; 1573 data->tolerance[1] = (reg_tmp >> 4) & 0x0f; 1574 data->tolerance[2] = w83792d_read_value(client, 1575 W83792D_REG_TOLERANCE[2]) & 0x0f; 1576 1577 /* Update Smart Fan II temperature points */ 1578 for (i = 0; i < 3; i++) { 1579 for (j = 0; j < 4; j++) { 1580 data->sf2_points[i][j] 1581 = w83792d_read_value(client, 1582 W83792D_REG_POINTS[i][j]) & 0x7f; 1583 } 1584 } 1585 1586 /* Update Smart Fan II duty cycle levels */ 1587 for (i = 0; i < 3; i++) { 1588 reg_tmp = w83792d_read_value(client, 1589 W83792D_REG_LEVELS[i][0]); 1590 data->sf2_levels[i][0] = reg_tmp & 0x0f; 1591 data->sf2_levels[i][1] = (reg_tmp >> 4) & 0x0f; 1592 reg_tmp = w83792d_read_value(client, 1593 W83792D_REG_LEVELS[i][2]); 1594 data->sf2_levels[i][2] = (reg_tmp >> 4) & 0x0f; 1595 data->sf2_levels[i][3] = reg_tmp & 0x0f; 1596 } 1597 1598 data->last_updated = jiffies; 1599 data->valid = 1; 1600 } 1601 1602 mutex_unlock(&data->update_lock); 1603 1604 #ifdef DEBUG 1605 w83792d_print_debug(data, dev); 1606 #endif 1607 1608 return data; 1609 } 1610 1611 #ifdef DEBUG 1612 static void w83792d_print_debug(struct w83792d_data *data, struct device *dev) 1613 { 1614 int i = 0, j = 0; 1615 dev_dbg(dev, "==========The following is the debug message...========\n"); 1616 dev_dbg(dev, "9 set of Voltages: =====>\n"); 1617 for (i = 0; i < 9; i++) { 1618 dev_dbg(dev, "vin[%d] is: 0x%x\n", i, data->in[i]); 1619 dev_dbg(dev, "vin[%d] max is: 0x%x\n", i, data->in_max[i]); 1620 dev_dbg(dev, "vin[%d] min is: 0x%x\n", i, data->in_min[i]); 1621 } 1622 dev_dbg(dev, "Low Bit1 is: 0x%x\n", data->low_bits & 0xff); 1623 dev_dbg(dev, "Low Bit2 is: 0x%x\n", data->low_bits >> 8); 1624 dev_dbg(dev, "7 set of Fan Counts and Duty Cycles: =====>\n"); 1625 for (i = 0; i < 7; i++) { 1626 dev_dbg(dev, "fan[%d] is: 0x%x\n", i, data->fan[i]); 1627 dev_dbg(dev, "fan[%d] min is: 0x%x\n", i, data->fan_min[i]); 1628 dev_dbg(dev, "pwm[%d] is: 0x%x\n", i, data->pwm[i]); 1629 } 1630 dev_dbg(dev, "3 set of Temperatures: =====>\n"); 1631 for (i = 0; i < 3; i++) 1632 dev_dbg(dev, "temp1[%d] is: 0x%x\n", i, data->temp1[i]); 1633 1634 for (i = 0; i < 2; i++) { 1635 for (j = 0; j < 6; j++) { 1636 dev_dbg(dev, "temp_add[%d][%d] is: 0x%x\n", i, j, 1637 data->temp_add[i][j]); 1638 } 1639 } 1640 1641 for (i = 0; i < 7; i++) 1642 dev_dbg(dev, "fan_div[%d] is: 0x%x\n", i, data->fan_div[i]); 1643 1644 dev_dbg(dev, "==========End of the debug message...================\n"); 1645 dev_dbg(dev, "\n"); 1646 } 1647 #endif 1648 1649 module_i2c_driver(w83792d_driver); 1650 1651 MODULE_AUTHOR("Shane Huang (Winbond)"); 1652 MODULE_DESCRIPTION("W83792AD/D driver for linux-2.6"); 1653 MODULE_LICENSE("GPL"); 1654