0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <linux/module.h>
0010 #include <linux/jiffies.h>
0011 #include <linux/i2c.h>
0012 #include <linux/hwmon.h>
0013 #include <linux/hwmon-sysfs.h>
0014 #include <linux/err.h>
0015 #include <linux/mutex.h>
0016 #include <linux/log2.h>
0017 #include <linux/slab.h>
0018
0019
0020 static const unsigned short normal_i2c[] = { 0x58, 0x5C, I2C_CLIENT_END };
0021
0022
0023 #define ADT7462_REG_DEVICE 0x3D
0024 #define ADT7462_REG_VENDOR 0x3E
0025 #define ADT7462_REG_REVISION 0x3F
0026
0027 #define ADT7462_REG_MIN_TEMP_BASE_ADDR 0x44
0028 #define ADT7462_REG_MIN_TEMP_MAX_ADDR 0x47
0029 #define ADT7462_REG_MAX_TEMP_BASE_ADDR 0x48
0030 #define ADT7462_REG_MAX_TEMP_MAX_ADDR 0x4B
0031 #define ADT7462_REG_TEMP_BASE_ADDR 0x88
0032 #define ADT7462_REG_TEMP_MAX_ADDR 0x8F
0033
0034 #define ADT7462_REG_FAN_BASE_ADDR 0x98
0035 #define ADT7462_REG_FAN_MAX_ADDR 0x9F
0036 #define ADT7462_REG_FAN2_BASE_ADDR 0xA2
0037 #define ADT7462_REG_FAN2_MAX_ADDR 0xA9
0038 #define ADT7462_REG_FAN_ENABLE 0x07
0039 #define ADT7462_REG_FAN_MIN_BASE_ADDR 0x78
0040 #define ADT7462_REG_FAN_MIN_MAX_ADDR 0x7F
0041
0042 #define ADT7462_REG_CFG2 0x02
0043 #define ADT7462_FSPD_MASK 0x20
0044
0045 #define ADT7462_REG_PWM_BASE_ADDR 0xAA
0046 #define ADT7462_REG_PWM_MAX_ADDR 0xAD
0047 #define ADT7462_REG_PWM_MIN_BASE_ADDR 0x28
0048 #define ADT7462_REG_PWM_MIN_MAX_ADDR 0x2B
0049 #define ADT7462_REG_PWM_MAX 0x2C
0050 #define ADT7462_REG_PWM_TEMP_MIN_BASE_ADDR 0x5C
0051 #define ADT7462_REG_PWM_TEMP_MIN_MAX_ADDR 0x5F
0052 #define ADT7462_REG_PWM_TEMP_RANGE_BASE_ADDR 0x60
0053 #define ADT7462_REG_PWM_TEMP_RANGE_MAX_ADDR 0x63
0054 #define ADT7462_PWM_HYST_MASK 0x0F
0055 #define ADT7462_PWM_RANGE_MASK 0xF0
0056 #define ADT7462_PWM_RANGE_SHIFT 4
0057 #define ADT7462_REG_PWM_CFG_BASE_ADDR 0x21
0058 #define ADT7462_REG_PWM_CFG_MAX_ADDR 0x24
0059 #define ADT7462_PWM_CHANNEL_MASK 0xE0
0060 #define ADT7462_PWM_CHANNEL_SHIFT 5
0061
0062 #define ADT7462_REG_PIN_CFG_BASE_ADDR 0x10
0063 #define ADT7462_REG_PIN_CFG_MAX_ADDR 0x13
0064 #define ADT7462_PIN7_INPUT 0x01
0065 #define ADT7462_DIODE3_INPUT 0x20
0066 #define ADT7462_DIODE1_INPUT 0x40
0067 #define ADT7462_VID_INPUT 0x80
0068 #define ADT7462_PIN22_INPUT 0x04
0069 #define ADT7462_PIN21_INPUT 0x08
0070 #define ADT7462_PIN19_INPUT 0x10
0071 #define ADT7462_PIN15_INPUT 0x20
0072 #define ADT7462_PIN13_INPUT 0x40
0073 #define ADT7462_PIN8_INPUT 0x80
0074 #define ADT7462_PIN23_MASK 0x03
0075 #define ADT7462_PIN23_SHIFT 0
0076 #define ADT7462_PIN26_MASK 0x0C
0077 #define ADT7462_PIN26_SHIFT 2
0078 #define ADT7462_PIN25_MASK 0x30
0079 #define ADT7462_PIN25_SHIFT 4
0080 #define ADT7462_PIN24_MASK 0xC0
0081 #define ADT7462_PIN24_SHIFT 6
0082 #define ADT7462_PIN26_VOLT_INPUT 0x08
0083 #define ADT7462_PIN25_VOLT_INPUT 0x20
0084 #define ADT7462_PIN28_SHIFT 4
0085 #define ADT7462_PIN28_VOLT 0x5
0086
0087 #define ADT7462_REG_ALARM1 0xB8
0088 #define ADT7462_LT_ALARM 0x02
0089 #define ADT7462_R1T_ALARM 0x04
0090 #define ADT7462_R2T_ALARM 0x08
0091 #define ADT7462_R3T_ALARM 0x10
0092 #define ADT7462_REG_ALARM2 0xBB
0093 #define ADT7462_V0_ALARM 0x01
0094 #define ADT7462_V1_ALARM 0x02
0095 #define ADT7462_V2_ALARM 0x04
0096 #define ADT7462_V3_ALARM 0x08
0097 #define ADT7462_V4_ALARM 0x10
0098 #define ADT7462_V5_ALARM 0x20
0099 #define ADT7462_V6_ALARM 0x40
0100 #define ADT7462_V7_ALARM 0x80
0101 #define ADT7462_REG_ALARM3 0xBC
0102 #define ADT7462_V8_ALARM 0x08
0103 #define ADT7462_V9_ALARM 0x10
0104 #define ADT7462_V10_ALARM 0x20
0105 #define ADT7462_V11_ALARM 0x40
0106 #define ADT7462_V12_ALARM 0x80
0107 #define ADT7462_REG_ALARM4 0xBD
0108 #define ADT7462_F0_ALARM 0x01
0109 #define ADT7462_F1_ALARM 0x02
0110 #define ADT7462_F2_ALARM 0x04
0111 #define ADT7462_F3_ALARM 0x08
0112 #define ADT7462_F4_ALARM 0x10
0113 #define ADT7462_F5_ALARM 0x20
0114 #define ADT7462_F6_ALARM 0x40
0115 #define ADT7462_F7_ALARM 0x80
0116 #define ADT7462_ALARM1 0x0000
0117 #define ADT7462_ALARM2 0x0100
0118 #define ADT7462_ALARM3 0x0200
0119 #define ADT7462_ALARM4 0x0300
0120 #define ADT7462_ALARM_REG_SHIFT 8
0121 #define ADT7462_ALARM_FLAG_MASK 0x0F
0122
0123 #define ADT7462_TEMP_COUNT 4
0124 #define ADT7462_TEMP_REG(x) (ADT7462_REG_TEMP_BASE_ADDR + ((x) * 2))
0125 #define ADT7462_TEMP_MIN_REG(x) (ADT7462_REG_MIN_TEMP_BASE_ADDR + (x))
0126 #define ADT7462_TEMP_MAX_REG(x) (ADT7462_REG_MAX_TEMP_BASE_ADDR + (x))
0127 #define TEMP_FRAC_OFFSET 6
0128
0129 #define ADT7462_FAN_COUNT 8
0130 #define ADT7462_REG_FAN_MIN(x) (ADT7462_REG_FAN_MIN_BASE_ADDR + (x))
0131
0132 #define ADT7462_PWM_COUNT 4
0133 #define ADT7462_REG_PWM(x) (ADT7462_REG_PWM_BASE_ADDR + (x))
0134 #define ADT7462_REG_PWM_MIN(x) (ADT7462_REG_PWM_MIN_BASE_ADDR + (x))
0135 #define ADT7462_REG_PWM_TMIN(x) \
0136 (ADT7462_REG_PWM_TEMP_MIN_BASE_ADDR + (x))
0137 #define ADT7462_REG_PWM_TRANGE(x) \
0138 (ADT7462_REG_PWM_TEMP_RANGE_BASE_ADDR + (x))
0139
0140 #define ADT7462_PIN_CFG_REG_COUNT 4
0141 #define ADT7462_REG_PIN_CFG(x) (ADT7462_REG_PIN_CFG_BASE_ADDR + (x))
0142 #define ADT7462_REG_PWM_CFG(x) (ADT7462_REG_PWM_CFG_BASE_ADDR + (x))
0143
0144 #define ADT7462_ALARM_REG_COUNT 4
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169 #define ADT7462_VOLT_COUNT 13
0170
0171 #define ADT7462_VENDOR 0x41
0172 #define ADT7462_DEVICE 0x62
0173
0174 #define ADT7462_REVISION 0x04
0175
0176
0177 #define SENSOR_REFRESH_INTERVAL (2 * HZ)
0178
0179
0180 #define LIMIT_REFRESH_INTERVAL (60 * HZ)
0181
0182
0183 #define FAN_PERIOD_TO_RPM(x) ((90000 * 60) / (x))
0184 #define FAN_RPM_TO_PERIOD FAN_PERIOD_TO_RPM
0185 #define FAN_PERIOD_INVALID 65535
0186 #define FAN_DATA_VALID(x) ((x) && (x) != FAN_PERIOD_INVALID)
0187
0188 #define MASK_AND_SHIFT(value, prefix) \
0189 (((value) & prefix##_MASK) >> prefix##_SHIFT)
0190
0191 struct adt7462_data {
0192 struct i2c_client *client;
0193 struct mutex lock;
0194 char sensors_valid;
0195 char limits_valid;
0196 unsigned long sensors_last_updated;
0197 unsigned long limits_last_updated;
0198
0199 u8 temp[ADT7462_TEMP_COUNT];
0200
0201 u8 temp_frac[ADT7462_TEMP_COUNT];
0202 u8 temp_min[ADT7462_TEMP_COUNT];
0203 u8 temp_max[ADT7462_TEMP_COUNT];
0204 u16 fan[ADT7462_FAN_COUNT];
0205 u8 fan_enabled;
0206 u8 fan_min[ADT7462_FAN_COUNT];
0207 u8 cfg2;
0208 u8 pwm[ADT7462_PWM_COUNT];
0209 u8 pin_cfg[ADT7462_PIN_CFG_REG_COUNT];
0210 u8 voltages[ADT7462_VOLT_COUNT];
0211 u8 volt_max[ADT7462_VOLT_COUNT];
0212 u8 volt_min[ADT7462_VOLT_COUNT];
0213 u8 pwm_min[ADT7462_PWM_COUNT];
0214 u8 pwm_tmin[ADT7462_PWM_COUNT];
0215 u8 pwm_trange[ADT7462_PWM_COUNT];
0216 u8 pwm_max;
0217 u8 pwm_cfg[ADT7462_PWM_COUNT];
0218 u8 alarms[ADT7462_ALARM_REG_COUNT];
0219 };
0220
0221
0222
0223
0224
0225 static inline int adt7462_read_word_data(struct i2c_client *client, u8 reg)
0226 {
0227 u16 foo;
0228 foo = i2c_smbus_read_byte_data(client, reg);
0229 foo |= ((u16)i2c_smbus_read_byte_data(client, reg + 1) << 8);
0230 return foo;
0231 }
0232
0233
0234 static int ADT7462_REG_FAN(int fan)
0235 {
0236 if (fan < 4)
0237 return ADT7462_REG_FAN_BASE_ADDR + (2 * fan);
0238 return ADT7462_REG_FAN2_BASE_ADDR + (2 * (fan - 4));
0239 }
0240
0241
0242 static int ADT7462_REG_VOLT_MAX(struct adt7462_data *data, int which)
0243 {
0244 switch (which) {
0245 case 0:
0246 if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
0247 return 0x7C;
0248 break;
0249 case 1:
0250 return 0x69;
0251 case 2:
0252 if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
0253 return 0x7F;
0254 break;
0255 case 3:
0256 if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
0257 return 0x7E;
0258 break;
0259 case 4:
0260 if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
0261 return 0x4B;
0262 break;
0263 case 5:
0264 if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
0265 return 0x49;
0266 break;
0267 case 6:
0268 if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
0269 return 0x68;
0270 break;
0271 case 7:
0272 if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
0273 return 0x7D;
0274 break;
0275 case 8:
0276 if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
0277 return 0x6C;
0278 break;
0279 case 9:
0280 if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
0281 return 0x6B;
0282 break;
0283 case 10:
0284 return 0x6A;
0285 case 11:
0286 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
0287 ADT7462_PIN28_VOLT &&
0288 !(data->pin_cfg[0] & ADT7462_VID_INPUT))
0289 return 0x50;
0290 break;
0291 case 12:
0292 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
0293 ADT7462_PIN28_VOLT &&
0294 !(data->pin_cfg[0] & ADT7462_VID_INPUT))
0295 return 0x4C;
0296 break;
0297 }
0298 return 0;
0299 }
0300
0301 static int ADT7462_REG_VOLT_MIN(struct adt7462_data *data, int which)
0302 {
0303 switch (which) {
0304 case 0:
0305 if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
0306 return 0x6D;
0307 break;
0308 case 1:
0309 return 0x72;
0310 case 2:
0311 if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
0312 return 0x6F;
0313 break;
0314 case 3:
0315 if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
0316 return 0x71;
0317 break;
0318 case 4:
0319 if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
0320 return 0x47;
0321 break;
0322 case 5:
0323 if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
0324 return 0x45;
0325 break;
0326 case 6:
0327 if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
0328 return 0x70;
0329 break;
0330 case 7:
0331 if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
0332 return 0x6E;
0333 break;
0334 case 8:
0335 if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
0336 return 0x75;
0337 break;
0338 case 9:
0339 if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
0340 return 0x74;
0341 break;
0342 case 10:
0343 return 0x73;
0344 case 11:
0345 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
0346 ADT7462_PIN28_VOLT &&
0347 !(data->pin_cfg[0] & ADT7462_VID_INPUT))
0348 return 0x76;
0349 break;
0350 case 12:
0351 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
0352 ADT7462_PIN28_VOLT &&
0353 !(data->pin_cfg[0] & ADT7462_VID_INPUT))
0354 return 0x77;
0355 break;
0356 }
0357 return 0;
0358 }
0359
0360 static int ADT7462_REG_VOLT(struct adt7462_data *data, int which)
0361 {
0362 switch (which) {
0363 case 0:
0364 if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
0365 return 0xA3;
0366 break;
0367 case 1:
0368 return 0x90;
0369 case 2:
0370 if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
0371 return 0xA9;
0372 break;
0373 case 3:
0374 if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
0375 return 0xA7;
0376 break;
0377 case 4:
0378 if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
0379 return 0x8F;
0380 break;
0381 case 5:
0382 if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
0383 return 0x8B;
0384 break;
0385 case 6:
0386 if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
0387 return 0x96;
0388 break;
0389 case 7:
0390 if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
0391 return 0xA5;
0392 break;
0393 case 8:
0394 if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
0395 return 0x93;
0396 break;
0397 case 9:
0398 if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
0399 return 0x92;
0400 break;
0401 case 10:
0402 return 0x91;
0403 case 11:
0404 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
0405 ADT7462_PIN28_VOLT &&
0406 !(data->pin_cfg[0] & ADT7462_VID_INPUT))
0407 return 0x94;
0408 break;
0409 case 12:
0410 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
0411 ADT7462_PIN28_VOLT &&
0412 !(data->pin_cfg[0] & ADT7462_VID_INPUT))
0413 return 0x95;
0414 break;
0415 }
0416 return 0;
0417 }
0418
0419
0420 static const char *voltage_label(struct adt7462_data *data, int which)
0421 {
0422 switch (which) {
0423 case 0:
0424 if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
0425 return "+12V1";
0426 break;
0427 case 1:
0428 switch (MASK_AND_SHIFT(data->pin_cfg[1], ADT7462_PIN23)) {
0429 case 0:
0430 return "Vccp1";
0431 case 1:
0432 return "+2.5V";
0433 case 2:
0434 return "+1.8V";
0435 case 3:
0436 return "+1.5V";
0437 }
0438 fallthrough;
0439 case 2:
0440 if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
0441 return "+12V3";
0442 break;
0443 case 3:
0444 if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
0445 return "+5V";
0446 break;
0447 case 4:
0448 if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) {
0449 if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
0450 return "+0.9V";
0451 return "+1.25V";
0452 }
0453 break;
0454 case 5:
0455 if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) {
0456 if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
0457 return "+1.8V";
0458 return "+2.5V";
0459 }
0460 break;
0461 case 6:
0462 if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
0463 return "+3.3V";
0464 break;
0465 case 7:
0466 if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
0467 return "+12V2";
0468 break;
0469 case 8:
0470 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN26)) {
0471 case 0:
0472 return "Vbatt";
0473 case 1:
0474 return "FSB_Vtt";
0475 }
0476 break;
0477 case 9:
0478 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN25)) {
0479 case 0:
0480 return "+3.3V";
0481 case 1:
0482 return "+1.2V1";
0483 }
0484 break;
0485 case 10:
0486 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN24)) {
0487 case 0:
0488 return "Vccp2";
0489 case 1:
0490 return "+2.5V";
0491 case 2:
0492 return "+1.8V";
0493 case 3:
0494 return "+1.5";
0495 }
0496 fallthrough;
0497 case 11:
0498 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
0499 ADT7462_PIN28_VOLT &&
0500 !(data->pin_cfg[0] & ADT7462_VID_INPUT))
0501 return "+1.5V ICH";
0502 break;
0503 case 12:
0504 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
0505 ADT7462_PIN28_VOLT &&
0506 !(data->pin_cfg[0] & ADT7462_VID_INPUT))
0507 return "+1.5V 3GPIO";
0508 break;
0509 }
0510 return "N/A";
0511 }
0512
0513
0514 static int voltage_multiplier(struct adt7462_data *data, int which)
0515 {
0516 switch (which) {
0517 case 0:
0518 if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
0519 return 62500;
0520 break;
0521 case 1:
0522 switch (MASK_AND_SHIFT(data->pin_cfg[1], ADT7462_PIN23)) {
0523 case 0:
0524 if (data->pin_cfg[0] & ADT7462_VID_INPUT)
0525 return 12500;
0526 return 6250;
0527 case 1:
0528 return 13000;
0529 case 2:
0530 return 9400;
0531 case 3:
0532 return 7800;
0533 }
0534 fallthrough;
0535 case 2:
0536 if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
0537 return 62500;
0538 break;
0539 case 3:
0540 if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
0541 return 26000;
0542 break;
0543 case 4:
0544 if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) {
0545 if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
0546 return 4690;
0547 return 6500;
0548 }
0549 break;
0550 case 5:
0551 if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) {
0552 if (data->pin_cfg[1] & ADT7462_PIN15_INPUT)
0553 return 9400;
0554 return 13000;
0555 }
0556 break;
0557 case 6:
0558 if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
0559 return 17200;
0560 break;
0561 case 7:
0562 if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
0563 return 62500;
0564 break;
0565 case 8:
0566 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN26)) {
0567 case 0:
0568 return 15600;
0569 case 1:
0570 return 6250;
0571 }
0572 break;
0573 case 9:
0574 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN25)) {
0575 case 0:
0576 return 17200;
0577 case 1:
0578 return 6250;
0579 }
0580 break;
0581 case 10:
0582 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN24)) {
0583 case 0:
0584 return 6250;
0585 case 1:
0586 return 13000;
0587 case 2:
0588 return 9400;
0589 case 3:
0590 return 7800;
0591 }
0592 fallthrough;
0593 case 11:
0594 case 12:
0595 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
0596 ADT7462_PIN28_VOLT &&
0597 !(data->pin_cfg[0] & ADT7462_VID_INPUT))
0598 return 7800;
0599 }
0600 return 0;
0601 }
0602
0603 static int temp_enabled(struct adt7462_data *data, int which)
0604 {
0605 switch (which) {
0606 case 0:
0607 case 2:
0608 return 1;
0609 case 1:
0610 if (data->pin_cfg[0] & ADT7462_DIODE1_INPUT)
0611 return 1;
0612 break;
0613 case 3:
0614 if (data->pin_cfg[0] & ADT7462_DIODE3_INPUT)
0615 return 1;
0616 break;
0617 }
0618 return 0;
0619 }
0620
0621 static const char *temp_label(struct adt7462_data *data, int which)
0622 {
0623 switch (which) {
0624 case 0:
0625 return "local";
0626 case 1:
0627 if (data->pin_cfg[0] & ADT7462_DIODE1_INPUT)
0628 return "remote1";
0629 break;
0630 case 2:
0631 return "remote2";
0632 case 3:
0633 if (data->pin_cfg[0] & ADT7462_DIODE3_INPUT)
0634 return "remote3";
0635 break;
0636 }
0637 return "N/A";
0638 }
0639
0640
0641 #define NUM_TRANGE_VALUES 16
0642 static const int trange_values[NUM_TRANGE_VALUES] = {
0643 2000,
0644 2500,
0645 3300,
0646 4000,
0647 5000,
0648 6700,
0649 8000,
0650 10000,
0651 13300,
0652 16000,
0653 20000,
0654 26700,
0655 32000,
0656 40000,
0657 53300,
0658 80000
0659 };
0660
0661 static int find_trange_value(int trange)
0662 {
0663 int i;
0664
0665 for (i = 0; i < NUM_TRANGE_VALUES; i++)
0666 if (trange_values[i] == trange)
0667 return i;
0668
0669 return -EINVAL;
0670 }
0671
0672 static struct adt7462_data *adt7462_update_device(struct device *dev)
0673 {
0674 struct adt7462_data *data = dev_get_drvdata(dev);
0675 struct i2c_client *client = data->client;
0676 unsigned long local_jiffies = jiffies;
0677 int i;
0678
0679 mutex_lock(&data->lock);
0680 if (time_before(local_jiffies, data->sensors_last_updated +
0681 SENSOR_REFRESH_INTERVAL)
0682 && data->sensors_valid)
0683 goto no_sensor_update;
0684
0685 for (i = 0; i < ADT7462_TEMP_COUNT; i++) {
0686
0687
0688
0689
0690 data->temp_frac[i] = i2c_smbus_read_byte_data(client,
0691 ADT7462_TEMP_REG(i));
0692 data->temp[i] = i2c_smbus_read_byte_data(client,
0693 ADT7462_TEMP_REG(i) + 1);
0694 }
0695
0696 for (i = 0; i < ADT7462_FAN_COUNT; i++)
0697 data->fan[i] = adt7462_read_word_data(client,
0698 ADT7462_REG_FAN(i));
0699
0700 data->fan_enabled = i2c_smbus_read_byte_data(client,
0701 ADT7462_REG_FAN_ENABLE);
0702
0703 for (i = 0; i < ADT7462_PWM_COUNT; i++)
0704 data->pwm[i] = i2c_smbus_read_byte_data(client,
0705 ADT7462_REG_PWM(i));
0706
0707 for (i = 0; i < ADT7462_PIN_CFG_REG_COUNT; i++)
0708 data->pin_cfg[i] = i2c_smbus_read_byte_data(client,
0709 ADT7462_REG_PIN_CFG(i));
0710
0711 for (i = 0; i < ADT7462_VOLT_COUNT; i++) {
0712 int reg = ADT7462_REG_VOLT(data, i);
0713 if (!reg)
0714 data->voltages[i] = 0;
0715 else
0716 data->voltages[i] = i2c_smbus_read_byte_data(client,
0717 reg);
0718 }
0719
0720 data->alarms[0] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM1);
0721 data->alarms[1] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM2);
0722 data->alarms[2] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM3);
0723 data->alarms[3] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM4);
0724
0725 data->sensors_last_updated = local_jiffies;
0726 data->sensors_valid = 1;
0727
0728 no_sensor_update:
0729 if (time_before(local_jiffies, data->limits_last_updated +
0730 LIMIT_REFRESH_INTERVAL)
0731 && data->limits_valid)
0732 goto out;
0733
0734 for (i = 0; i < ADT7462_TEMP_COUNT; i++) {
0735 data->temp_min[i] = i2c_smbus_read_byte_data(client,
0736 ADT7462_TEMP_MIN_REG(i));
0737 data->temp_max[i] = i2c_smbus_read_byte_data(client,
0738 ADT7462_TEMP_MAX_REG(i));
0739 }
0740
0741 for (i = 0; i < ADT7462_FAN_COUNT; i++)
0742 data->fan_min[i] = i2c_smbus_read_byte_data(client,
0743 ADT7462_REG_FAN_MIN(i));
0744
0745 for (i = 0; i < ADT7462_VOLT_COUNT; i++) {
0746 int reg = ADT7462_REG_VOLT_MAX(data, i);
0747 data->volt_max[i] =
0748 (reg ? i2c_smbus_read_byte_data(client, reg) : 0);
0749
0750 reg = ADT7462_REG_VOLT_MIN(data, i);
0751 data->volt_min[i] =
0752 (reg ? i2c_smbus_read_byte_data(client, reg) : 0);
0753 }
0754
0755 for (i = 0; i < ADT7462_PWM_COUNT; i++) {
0756 data->pwm_min[i] = i2c_smbus_read_byte_data(client,
0757 ADT7462_REG_PWM_MIN(i));
0758 data->pwm_tmin[i] = i2c_smbus_read_byte_data(client,
0759 ADT7462_REG_PWM_TMIN(i));
0760 data->pwm_trange[i] = i2c_smbus_read_byte_data(client,
0761 ADT7462_REG_PWM_TRANGE(i));
0762 data->pwm_cfg[i] = i2c_smbus_read_byte_data(client,
0763 ADT7462_REG_PWM_CFG(i));
0764 }
0765
0766 data->pwm_max = i2c_smbus_read_byte_data(client, ADT7462_REG_PWM_MAX);
0767
0768 data->cfg2 = i2c_smbus_read_byte_data(client, ADT7462_REG_CFG2);
0769
0770 data->limits_last_updated = local_jiffies;
0771 data->limits_valid = 1;
0772
0773 out:
0774 mutex_unlock(&data->lock);
0775 return data;
0776 }
0777
0778 static ssize_t temp_min_show(struct device *dev,
0779 struct device_attribute *devattr, char *buf)
0780 {
0781 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
0782 struct adt7462_data *data = adt7462_update_device(dev);
0783
0784 if (!temp_enabled(data, attr->index))
0785 return sprintf(buf, "0\n");
0786
0787 return sprintf(buf, "%d\n", 1000 * (data->temp_min[attr->index] - 64));
0788 }
0789
0790 static ssize_t temp_min_store(struct device *dev,
0791 struct device_attribute *devattr,
0792 const char *buf, size_t count)
0793 {
0794 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
0795 struct adt7462_data *data = dev_get_drvdata(dev);
0796 struct i2c_client *client = data->client;
0797 long temp;
0798
0799 if (kstrtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
0800 return -EINVAL;
0801
0802 temp = clamp_val(temp, -64000, 191000);
0803 temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
0804
0805 mutex_lock(&data->lock);
0806 data->temp_min[attr->index] = temp;
0807 i2c_smbus_write_byte_data(client, ADT7462_TEMP_MIN_REG(attr->index),
0808 temp);
0809 mutex_unlock(&data->lock);
0810
0811 return count;
0812 }
0813
0814 static ssize_t temp_max_show(struct device *dev,
0815 struct device_attribute *devattr, char *buf)
0816 {
0817 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
0818 struct adt7462_data *data = adt7462_update_device(dev);
0819
0820 if (!temp_enabled(data, attr->index))
0821 return sprintf(buf, "0\n");
0822
0823 return sprintf(buf, "%d\n", 1000 * (data->temp_max[attr->index] - 64));
0824 }
0825
0826 static ssize_t temp_max_store(struct device *dev,
0827 struct device_attribute *devattr,
0828 const char *buf, size_t count)
0829 {
0830 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
0831 struct adt7462_data *data = dev_get_drvdata(dev);
0832 struct i2c_client *client = data->client;
0833 long temp;
0834
0835 if (kstrtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
0836 return -EINVAL;
0837
0838 temp = clamp_val(temp, -64000, 191000);
0839 temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
0840
0841 mutex_lock(&data->lock);
0842 data->temp_max[attr->index] = temp;
0843 i2c_smbus_write_byte_data(client, ADT7462_TEMP_MAX_REG(attr->index),
0844 temp);
0845 mutex_unlock(&data->lock);
0846
0847 return count;
0848 }
0849
0850 static ssize_t temp_show(struct device *dev, struct device_attribute *devattr,
0851 char *buf)
0852 {
0853 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
0854 struct adt7462_data *data = adt7462_update_device(dev);
0855 u8 frac = data->temp_frac[attr->index] >> TEMP_FRAC_OFFSET;
0856
0857 if (!temp_enabled(data, attr->index))
0858 return sprintf(buf, "0\n");
0859
0860 return sprintf(buf, "%d\n", 1000 * (data->temp[attr->index] - 64) +
0861 250 * frac);
0862 }
0863
0864 static ssize_t temp_label_show(struct device *dev,
0865 struct device_attribute *devattr, char *buf)
0866 {
0867 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
0868 struct adt7462_data *data = adt7462_update_device(dev);
0869
0870 return sprintf(buf, "%s\n", temp_label(data, attr->index));
0871 }
0872
0873 static ssize_t volt_max_show(struct device *dev,
0874 struct device_attribute *devattr, char *buf)
0875 {
0876 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
0877 struct adt7462_data *data = adt7462_update_device(dev);
0878 int x = voltage_multiplier(data, attr->index);
0879
0880 x *= data->volt_max[attr->index];
0881 x /= 1000;
0882
0883 return sprintf(buf, "%d\n", x);
0884 }
0885
0886 static ssize_t volt_max_store(struct device *dev,
0887 struct device_attribute *devattr,
0888 const char *buf, size_t count)
0889 {
0890 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
0891 struct adt7462_data *data = dev_get_drvdata(dev);
0892 struct i2c_client *client = data->client;
0893 int x = voltage_multiplier(data, attr->index);
0894 long temp;
0895
0896 if (kstrtol(buf, 10, &temp) || !x)
0897 return -EINVAL;
0898
0899 temp = clamp_val(temp, 0, 255 * x / 1000);
0900 temp *= 1000;
0901 temp = DIV_ROUND_CLOSEST(temp, x);
0902
0903 mutex_lock(&data->lock);
0904 data->volt_max[attr->index] = temp;
0905 i2c_smbus_write_byte_data(client,
0906 ADT7462_REG_VOLT_MAX(data, attr->index),
0907 temp);
0908 mutex_unlock(&data->lock);
0909
0910 return count;
0911 }
0912
0913 static ssize_t volt_min_show(struct device *dev,
0914 struct device_attribute *devattr, char *buf)
0915 {
0916 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
0917 struct adt7462_data *data = adt7462_update_device(dev);
0918 int x = voltage_multiplier(data, attr->index);
0919
0920 x *= data->volt_min[attr->index];
0921 x /= 1000;
0922
0923 return sprintf(buf, "%d\n", x);
0924 }
0925
0926 static ssize_t volt_min_store(struct device *dev,
0927 struct device_attribute *devattr,
0928 const char *buf, size_t count)
0929 {
0930 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
0931 struct adt7462_data *data = dev_get_drvdata(dev);
0932 struct i2c_client *client = data->client;
0933 int x = voltage_multiplier(data, attr->index);
0934 long temp;
0935
0936 if (kstrtol(buf, 10, &temp) || !x)
0937 return -EINVAL;
0938
0939 temp = clamp_val(temp, 0, 255 * x / 1000);
0940 temp *= 1000;
0941 temp = DIV_ROUND_CLOSEST(temp, x);
0942
0943 mutex_lock(&data->lock);
0944 data->volt_min[attr->index] = temp;
0945 i2c_smbus_write_byte_data(client,
0946 ADT7462_REG_VOLT_MIN(data, attr->index),
0947 temp);
0948 mutex_unlock(&data->lock);
0949
0950 return count;
0951 }
0952
0953 static ssize_t voltage_show(struct device *dev,
0954 struct device_attribute *devattr, char *buf)
0955 {
0956 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
0957 struct adt7462_data *data = adt7462_update_device(dev);
0958 int x = voltage_multiplier(data, attr->index);
0959
0960 x *= data->voltages[attr->index];
0961 x /= 1000;
0962
0963 return sprintf(buf, "%d\n", x);
0964 }
0965
0966 static ssize_t voltage_label_show(struct device *dev,
0967 struct device_attribute *devattr, char *buf)
0968 {
0969 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
0970 struct adt7462_data *data = adt7462_update_device(dev);
0971
0972 return sprintf(buf, "%s\n", voltage_label(data, attr->index));
0973 }
0974
0975 static ssize_t alarm_show(struct device *dev,
0976 struct device_attribute *devattr, char *buf)
0977 {
0978 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
0979 struct adt7462_data *data = adt7462_update_device(dev);
0980 int reg = attr->index >> ADT7462_ALARM_REG_SHIFT;
0981 int mask = attr->index & ADT7462_ALARM_FLAG_MASK;
0982
0983 if (data->alarms[reg] & mask)
0984 return sprintf(buf, "1\n");
0985 else
0986 return sprintf(buf, "0\n");
0987 }
0988
0989 static int fan_enabled(struct adt7462_data *data, int fan)
0990 {
0991 return data->fan_enabled & (1 << fan);
0992 }
0993
0994 static ssize_t fan_min_show(struct device *dev,
0995 struct device_attribute *devattr, char *buf)
0996 {
0997 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
0998 struct adt7462_data *data = adt7462_update_device(dev);
0999 u16 temp;
1000
1001
1002 temp = data->fan_min[attr->index];
1003 temp <<= 8;
1004
1005 if (!fan_enabled(data, attr->index) ||
1006 !FAN_DATA_VALID(temp))
1007 return sprintf(buf, "0\n");
1008
1009 return sprintf(buf, "%d\n", FAN_PERIOD_TO_RPM(temp));
1010 }
1011
1012 static ssize_t fan_min_store(struct device *dev,
1013 struct device_attribute *devattr,
1014 const char *buf, size_t count)
1015 {
1016 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1017 struct adt7462_data *data = dev_get_drvdata(dev);
1018 struct i2c_client *client = data->client;
1019 long temp;
1020
1021 if (kstrtol(buf, 10, &temp) || !temp ||
1022 !fan_enabled(data, attr->index))
1023 return -EINVAL;
1024
1025 temp = FAN_RPM_TO_PERIOD(temp);
1026 temp >>= 8;
1027 temp = clamp_val(temp, 1, 255);
1028
1029 mutex_lock(&data->lock);
1030 data->fan_min[attr->index] = temp;
1031 i2c_smbus_write_byte_data(client, ADT7462_REG_FAN_MIN(attr->index),
1032 temp);
1033 mutex_unlock(&data->lock);
1034
1035 return count;
1036 }
1037
1038 static ssize_t fan_show(struct device *dev, struct device_attribute *devattr,
1039 char *buf)
1040 {
1041 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1042 struct adt7462_data *data = adt7462_update_device(dev);
1043
1044 if (!fan_enabled(data, attr->index) ||
1045 !FAN_DATA_VALID(data->fan[attr->index]))
1046 return sprintf(buf, "0\n");
1047
1048 return sprintf(buf, "%d\n",
1049 FAN_PERIOD_TO_RPM(data->fan[attr->index]));
1050 }
1051
1052 static ssize_t force_pwm_max_show(struct device *dev,
1053 struct device_attribute *devattr, char *buf)
1054 {
1055 struct adt7462_data *data = adt7462_update_device(dev);
1056 return sprintf(buf, "%d\n", (data->cfg2 & ADT7462_FSPD_MASK ? 1 : 0));
1057 }
1058
1059 static ssize_t force_pwm_max_store(struct device *dev,
1060 struct device_attribute *devattr,
1061 const char *buf, size_t count)
1062 {
1063 struct adt7462_data *data = dev_get_drvdata(dev);
1064 struct i2c_client *client = data->client;
1065 long temp;
1066 u8 reg;
1067
1068 if (kstrtol(buf, 10, &temp))
1069 return -EINVAL;
1070
1071 mutex_lock(&data->lock);
1072 reg = i2c_smbus_read_byte_data(client, ADT7462_REG_CFG2);
1073 if (temp)
1074 reg |= ADT7462_FSPD_MASK;
1075 else
1076 reg &= ~ADT7462_FSPD_MASK;
1077 data->cfg2 = reg;
1078 i2c_smbus_write_byte_data(client, ADT7462_REG_CFG2, reg);
1079 mutex_unlock(&data->lock);
1080
1081 return count;
1082 }
1083
1084 static ssize_t pwm_show(struct device *dev, struct device_attribute *devattr,
1085 char *buf)
1086 {
1087 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1088 struct adt7462_data *data = adt7462_update_device(dev);
1089 return sprintf(buf, "%d\n", data->pwm[attr->index]);
1090 }
1091
1092 static ssize_t pwm_store(struct device *dev, struct device_attribute *devattr,
1093 const char *buf, size_t count)
1094 {
1095 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1096 struct adt7462_data *data = dev_get_drvdata(dev);
1097 struct i2c_client *client = data->client;
1098 long temp;
1099
1100 if (kstrtol(buf, 10, &temp))
1101 return -EINVAL;
1102
1103 temp = clamp_val(temp, 0, 255);
1104
1105 mutex_lock(&data->lock);
1106 data->pwm[attr->index] = temp;
1107 i2c_smbus_write_byte_data(client, ADT7462_REG_PWM(attr->index), temp);
1108 mutex_unlock(&data->lock);
1109
1110 return count;
1111 }
1112
1113 static ssize_t pwm_max_show(struct device *dev,
1114 struct device_attribute *devattr, char *buf)
1115 {
1116 struct adt7462_data *data = adt7462_update_device(dev);
1117 return sprintf(buf, "%d\n", data->pwm_max);
1118 }
1119
1120 static ssize_t pwm_max_store(struct device *dev,
1121 struct device_attribute *devattr,
1122 const char *buf, size_t count)
1123 {
1124 struct adt7462_data *data = dev_get_drvdata(dev);
1125 struct i2c_client *client = data->client;
1126 long temp;
1127
1128 if (kstrtol(buf, 10, &temp))
1129 return -EINVAL;
1130
1131 temp = clamp_val(temp, 0, 255);
1132
1133 mutex_lock(&data->lock);
1134 data->pwm_max = temp;
1135 i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_MAX, temp);
1136 mutex_unlock(&data->lock);
1137
1138 return count;
1139 }
1140
1141 static ssize_t pwm_min_show(struct device *dev,
1142 struct device_attribute *devattr, char *buf)
1143 {
1144 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1145 struct adt7462_data *data = adt7462_update_device(dev);
1146 return sprintf(buf, "%d\n", data->pwm_min[attr->index]);
1147 }
1148
1149 static ssize_t pwm_min_store(struct device *dev,
1150 struct device_attribute *devattr,
1151 const char *buf, size_t count)
1152 {
1153 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1154 struct adt7462_data *data = dev_get_drvdata(dev);
1155 struct i2c_client *client = data->client;
1156 long temp;
1157
1158 if (kstrtol(buf, 10, &temp))
1159 return -EINVAL;
1160
1161 temp = clamp_val(temp, 0, 255);
1162
1163 mutex_lock(&data->lock);
1164 data->pwm_min[attr->index] = temp;
1165 i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_MIN(attr->index),
1166 temp);
1167 mutex_unlock(&data->lock);
1168
1169 return count;
1170 }
1171
1172 static ssize_t pwm_hyst_show(struct device *dev,
1173 struct device_attribute *devattr, char *buf)
1174 {
1175 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1176 struct adt7462_data *data = adt7462_update_device(dev);
1177 return sprintf(buf, "%d\n", 1000 *
1178 (data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK));
1179 }
1180
1181 static ssize_t pwm_hyst_store(struct device *dev,
1182 struct device_attribute *devattr,
1183 const char *buf, size_t count)
1184 {
1185 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1186 struct adt7462_data *data = dev_get_drvdata(dev);
1187 struct i2c_client *client = data->client;
1188 long temp;
1189
1190 if (kstrtol(buf, 10, &temp))
1191 return -EINVAL;
1192
1193 temp = clamp_val(temp, 0, 15000);
1194 temp = DIV_ROUND_CLOSEST(temp, 1000);
1195
1196
1197 temp &= ADT7462_PWM_HYST_MASK;
1198 temp |= data->pwm_trange[attr->index] & ADT7462_PWM_RANGE_MASK;
1199
1200 mutex_lock(&data->lock);
1201 data->pwm_trange[attr->index] = temp;
1202 i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index),
1203 temp);
1204 mutex_unlock(&data->lock);
1205
1206 return count;
1207 }
1208
1209 static ssize_t pwm_tmax_show(struct device *dev,
1210 struct device_attribute *devattr, char *buf)
1211 {
1212 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1213 struct adt7462_data *data = adt7462_update_device(dev);
1214
1215
1216 int trange = trange_values[data->pwm_trange[attr->index] >>
1217 ADT7462_PWM_RANGE_SHIFT];
1218 int tmin = (data->pwm_tmin[attr->index] - 64) * 1000;
1219
1220 return sprintf(buf, "%d\n", tmin + trange);
1221 }
1222
1223 static ssize_t pwm_tmax_store(struct device *dev,
1224 struct device_attribute *devattr,
1225 const char *buf, size_t count)
1226 {
1227 int temp;
1228 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1229 struct adt7462_data *data = dev_get_drvdata(dev);
1230 struct i2c_client *client = data->client;
1231 int tmin, trange_value;
1232 long trange;
1233
1234 if (kstrtol(buf, 10, &trange))
1235 return -EINVAL;
1236
1237
1238 tmin = (data->pwm_tmin[attr->index] - 64) * 1000;
1239 trange_value = find_trange_value(trange - tmin);
1240 if (trange_value < 0)
1241 return trange_value;
1242
1243 temp = trange_value << ADT7462_PWM_RANGE_SHIFT;
1244 temp |= data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK;
1245
1246 mutex_lock(&data->lock);
1247 data->pwm_trange[attr->index] = temp;
1248 i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index),
1249 temp);
1250 mutex_unlock(&data->lock);
1251
1252 return count;
1253 }
1254
1255 static ssize_t pwm_tmin_show(struct device *dev,
1256 struct device_attribute *devattr, char *buf)
1257 {
1258 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1259 struct adt7462_data *data = adt7462_update_device(dev);
1260 return sprintf(buf, "%d\n", 1000 * (data->pwm_tmin[attr->index] - 64));
1261 }
1262
1263 static ssize_t pwm_tmin_store(struct device *dev,
1264 struct device_attribute *devattr,
1265 const char *buf, size_t count)
1266 {
1267 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1268 struct adt7462_data *data = dev_get_drvdata(dev);
1269 struct i2c_client *client = data->client;
1270 long temp;
1271
1272 if (kstrtol(buf, 10, &temp))
1273 return -EINVAL;
1274
1275 temp = clamp_val(temp, -64000, 191000);
1276 temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
1277
1278 mutex_lock(&data->lock);
1279 data->pwm_tmin[attr->index] = temp;
1280 i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TMIN(attr->index),
1281 temp);
1282 mutex_unlock(&data->lock);
1283
1284 return count;
1285 }
1286
1287 static ssize_t pwm_auto_show(struct device *dev,
1288 struct device_attribute *devattr, char *buf)
1289 {
1290 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1291 struct adt7462_data *data = adt7462_update_device(dev);
1292 int cfg = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT;
1293
1294 switch (cfg) {
1295 case 4:
1296 return sprintf(buf, "0\n");
1297 case 7:
1298 return sprintf(buf, "1\n");
1299 default:
1300 return sprintf(buf, "2\n");
1301 }
1302 }
1303
1304 static void set_pwm_channel(struct i2c_client *client,
1305 struct adt7462_data *data,
1306 int which,
1307 int value)
1308 {
1309 int temp = data->pwm_cfg[which] & ~ADT7462_PWM_CHANNEL_MASK;
1310 temp |= value << ADT7462_PWM_CHANNEL_SHIFT;
1311
1312 mutex_lock(&data->lock);
1313 data->pwm_cfg[which] = temp;
1314 i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_CFG(which), temp);
1315 mutex_unlock(&data->lock);
1316 }
1317
1318 static ssize_t pwm_auto_store(struct device *dev,
1319 struct device_attribute *devattr,
1320 const char *buf, size_t count)
1321 {
1322 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1323 struct adt7462_data *data = dev_get_drvdata(dev);
1324 struct i2c_client *client = data->client;
1325 long temp;
1326
1327 if (kstrtol(buf, 10, &temp))
1328 return -EINVAL;
1329
1330 switch (temp) {
1331 case 0:
1332 set_pwm_channel(client, data, attr->index, 4);
1333 return count;
1334 case 1:
1335 set_pwm_channel(client, data, attr->index, 7);
1336 return count;
1337 default:
1338 return -EINVAL;
1339 }
1340 }
1341
1342 static ssize_t pwm_auto_temp_show(struct device *dev,
1343 struct device_attribute *devattr, char *buf)
1344 {
1345 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1346 struct adt7462_data *data = adt7462_update_device(dev);
1347 int channel = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT;
1348
1349 switch (channel) {
1350 case 0:
1351 case 1:
1352 case 2:
1353 case 3:
1354 return sprintf(buf, "%d\n", (1 << channel));
1355 case 5:
1356 return sprintf(buf, "9\n");
1357 case 6:
1358 return sprintf(buf, "15\n");
1359 default:
1360 return sprintf(buf, "0\n");
1361 }
1362 }
1363
1364 static int cvt_auto_temp(int input)
1365 {
1366 if (input == 0xF)
1367 return 6;
1368 if (input == 0x9)
1369 return 5;
1370 if (input < 1 || !is_power_of_2(input))
1371 return -EINVAL;
1372 return ilog2(input);
1373 }
1374
1375 static ssize_t pwm_auto_temp_store(struct device *dev,
1376 struct device_attribute *devattr,
1377 const char *buf, size_t count)
1378 {
1379 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1380 struct adt7462_data *data = dev_get_drvdata(dev);
1381 struct i2c_client *client = data->client;
1382 long temp;
1383
1384 if (kstrtol(buf, 10, &temp))
1385 return -EINVAL;
1386
1387 temp = cvt_auto_temp(temp);
1388 if (temp < 0)
1389 return temp;
1390
1391 set_pwm_channel(client, data, attr->index, temp);
1392
1393 return count;
1394 }
1395
1396 static SENSOR_DEVICE_ATTR_RW(temp1_max, temp_max, 0);
1397 static SENSOR_DEVICE_ATTR_RW(temp2_max, temp_max, 1);
1398 static SENSOR_DEVICE_ATTR_RW(temp3_max, temp_max, 2);
1399 static SENSOR_DEVICE_ATTR_RW(temp4_max, temp_max, 3);
1400
1401 static SENSOR_DEVICE_ATTR_RW(temp1_min, temp_min, 0);
1402 static SENSOR_DEVICE_ATTR_RW(temp2_min, temp_min, 1);
1403 static SENSOR_DEVICE_ATTR_RW(temp3_min, temp_min, 2);
1404 static SENSOR_DEVICE_ATTR_RW(temp4_min, temp_min, 3);
1405
1406 static SENSOR_DEVICE_ATTR_RO(temp1_input, temp, 0);
1407 static SENSOR_DEVICE_ATTR_RO(temp2_input, temp, 1);
1408 static SENSOR_DEVICE_ATTR_RO(temp3_input, temp, 2);
1409 static SENSOR_DEVICE_ATTR_RO(temp4_input, temp, 3);
1410
1411 static SENSOR_DEVICE_ATTR_RO(temp1_label, temp_label, 0);
1412 static SENSOR_DEVICE_ATTR_RO(temp2_label, temp_label, 1);
1413 static SENSOR_DEVICE_ATTR_RO(temp3_label, temp_label, 2);
1414 static SENSOR_DEVICE_ATTR_RO(temp4_label, temp_label, 3);
1415
1416 static SENSOR_DEVICE_ATTR_RO(temp1_alarm, alarm,
1417 ADT7462_ALARM1 | ADT7462_LT_ALARM);
1418 static SENSOR_DEVICE_ATTR_RO(temp2_alarm, alarm,
1419 ADT7462_ALARM1 | ADT7462_R1T_ALARM);
1420 static SENSOR_DEVICE_ATTR_RO(temp3_alarm, alarm,
1421 ADT7462_ALARM1 | ADT7462_R2T_ALARM);
1422 static SENSOR_DEVICE_ATTR_RO(temp4_alarm, alarm,
1423 ADT7462_ALARM1 | ADT7462_R3T_ALARM);
1424
1425 static SENSOR_DEVICE_ATTR_RW(in1_max, volt_max, 0);
1426 static SENSOR_DEVICE_ATTR_RW(in2_max, volt_max, 1);
1427 static SENSOR_DEVICE_ATTR_RW(in3_max, volt_max, 2);
1428 static SENSOR_DEVICE_ATTR_RW(in4_max, volt_max, 3);
1429 static SENSOR_DEVICE_ATTR_RW(in5_max, volt_max, 4);
1430 static SENSOR_DEVICE_ATTR_RW(in6_max, volt_max, 5);
1431 static SENSOR_DEVICE_ATTR_RW(in7_max, volt_max, 6);
1432 static SENSOR_DEVICE_ATTR_RW(in8_max, volt_max, 7);
1433 static SENSOR_DEVICE_ATTR_RW(in9_max, volt_max, 8);
1434 static SENSOR_DEVICE_ATTR_RW(in10_max, volt_max, 9);
1435 static SENSOR_DEVICE_ATTR_RW(in11_max, volt_max, 10);
1436 static SENSOR_DEVICE_ATTR_RW(in12_max, volt_max, 11);
1437 static SENSOR_DEVICE_ATTR_RW(in13_max, volt_max, 12);
1438
1439 static SENSOR_DEVICE_ATTR_RW(in1_min, volt_min, 0);
1440 static SENSOR_DEVICE_ATTR_RW(in2_min, volt_min, 1);
1441 static SENSOR_DEVICE_ATTR_RW(in3_min, volt_min, 2);
1442 static SENSOR_DEVICE_ATTR_RW(in4_min, volt_min, 3);
1443 static SENSOR_DEVICE_ATTR_RW(in5_min, volt_min, 4);
1444 static SENSOR_DEVICE_ATTR_RW(in6_min, volt_min, 5);
1445 static SENSOR_DEVICE_ATTR_RW(in7_min, volt_min, 6);
1446 static SENSOR_DEVICE_ATTR_RW(in8_min, volt_min, 7);
1447 static SENSOR_DEVICE_ATTR_RW(in9_min, volt_min, 8);
1448 static SENSOR_DEVICE_ATTR_RW(in10_min, volt_min, 9);
1449 static SENSOR_DEVICE_ATTR_RW(in11_min, volt_min, 10);
1450 static SENSOR_DEVICE_ATTR_RW(in12_min, volt_min, 11);
1451 static SENSOR_DEVICE_ATTR_RW(in13_min, volt_min, 12);
1452
1453 static SENSOR_DEVICE_ATTR_RO(in1_input, voltage, 0);
1454 static SENSOR_DEVICE_ATTR_RO(in2_input, voltage, 1);
1455 static SENSOR_DEVICE_ATTR_RO(in3_input, voltage, 2);
1456 static SENSOR_DEVICE_ATTR_RO(in4_input, voltage, 3);
1457 static SENSOR_DEVICE_ATTR_RO(in5_input, voltage, 4);
1458 static SENSOR_DEVICE_ATTR_RO(in6_input, voltage, 5);
1459 static SENSOR_DEVICE_ATTR_RO(in7_input, voltage, 6);
1460 static SENSOR_DEVICE_ATTR_RO(in8_input, voltage, 7);
1461 static SENSOR_DEVICE_ATTR_RO(in9_input, voltage, 8);
1462 static SENSOR_DEVICE_ATTR_RO(in10_input, voltage, 9);
1463 static SENSOR_DEVICE_ATTR_RO(in11_input, voltage, 10);
1464 static SENSOR_DEVICE_ATTR_RO(in12_input, voltage, 11);
1465 static SENSOR_DEVICE_ATTR_RO(in13_input, voltage, 12);
1466
1467 static SENSOR_DEVICE_ATTR_RO(in1_label, voltage_label, 0);
1468 static SENSOR_DEVICE_ATTR_RO(in2_label, voltage_label, 1);
1469 static SENSOR_DEVICE_ATTR_RO(in3_label, voltage_label, 2);
1470 static SENSOR_DEVICE_ATTR_RO(in4_label, voltage_label, 3);
1471 static SENSOR_DEVICE_ATTR_RO(in5_label, voltage_label, 4);
1472 static SENSOR_DEVICE_ATTR_RO(in6_label, voltage_label, 5);
1473 static SENSOR_DEVICE_ATTR_RO(in7_label, voltage_label, 6);
1474 static SENSOR_DEVICE_ATTR_RO(in8_label, voltage_label, 7);
1475 static SENSOR_DEVICE_ATTR_RO(in9_label, voltage_label, 8);
1476 static SENSOR_DEVICE_ATTR_RO(in10_label, voltage_label, 9);
1477 static SENSOR_DEVICE_ATTR_RO(in11_label, voltage_label, 10);
1478 static SENSOR_DEVICE_ATTR_RO(in12_label, voltage_label, 11);
1479 static SENSOR_DEVICE_ATTR_RO(in13_label, voltage_label, 12);
1480
1481 static SENSOR_DEVICE_ATTR_RO(in1_alarm, alarm,
1482 ADT7462_ALARM2 | ADT7462_V0_ALARM);
1483 static SENSOR_DEVICE_ATTR_RO(in2_alarm, alarm,
1484 ADT7462_ALARM2 | ADT7462_V7_ALARM);
1485 static SENSOR_DEVICE_ATTR_RO(in3_alarm, alarm,
1486 ADT7462_ALARM2 | ADT7462_V2_ALARM);
1487 static SENSOR_DEVICE_ATTR_RO(in4_alarm, alarm,
1488 ADT7462_ALARM2 | ADT7462_V6_ALARM);
1489 static SENSOR_DEVICE_ATTR_RO(in5_alarm, alarm,
1490 ADT7462_ALARM2 | ADT7462_V5_ALARM);
1491 static SENSOR_DEVICE_ATTR_RO(in6_alarm, alarm,
1492 ADT7462_ALARM2 | ADT7462_V4_ALARM);
1493 static SENSOR_DEVICE_ATTR_RO(in7_alarm, alarm,
1494 ADT7462_ALARM2 | ADT7462_V3_ALARM);
1495 static SENSOR_DEVICE_ATTR_RO(in8_alarm, alarm,
1496 ADT7462_ALARM2 | ADT7462_V1_ALARM);
1497 static SENSOR_DEVICE_ATTR_RO(in9_alarm, alarm,
1498 ADT7462_ALARM3 | ADT7462_V10_ALARM);
1499 static SENSOR_DEVICE_ATTR_RO(in10_alarm, alarm,
1500 ADT7462_ALARM3 | ADT7462_V9_ALARM);
1501 static SENSOR_DEVICE_ATTR_RO(in11_alarm, alarm,
1502 ADT7462_ALARM3 | ADT7462_V8_ALARM);
1503 static SENSOR_DEVICE_ATTR_RO(in12_alarm, alarm,
1504 ADT7462_ALARM3 | ADT7462_V11_ALARM);
1505 static SENSOR_DEVICE_ATTR_RO(in13_alarm, alarm,
1506 ADT7462_ALARM3 | ADT7462_V12_ALARM);
1507
1508 static SENSOR_DEVICE_ATTR_RW(fan1_min, fan_min, 0);
1509 static SENSOR_DEVICE_ATTR_RW(fan2_min, fan_min, 1);
1510 static SENSOR_DEVICE_ATTR_RW(fan3_min, fan_min, 2);
1511 static SENSOR_DEVICE_ATTR_RW(fan4_min, fan_min, 3);
1512 static SENSOR_DEVICE_ATTR_RW(fan5_min, fan_min, 4);
1513 static SENSOR_DEVICE_ATTR_RW(fan6_min, fan_min, 5);
1514 static SENSOR_DEVICE_ATTR_RW(fan7_min, fan_min, 6);
1515 static SENSOR_DEVICE_ATTR_RW(fan8_min, fan_min, 7);
1516
1517 static SENSOR_DEVICE_ATTR_RO(fan1_input, fan, 0);
1518 static SENSOR_DEVICE_ATTR_RO(fan2_input, fan, 1);
1519 static SENSOR_DEVICE_ATTR_RO(fan3_input, fan, 2);
1520 static SENSOR_DEVICE_ATTR_RO(fan4_input, fan, 3);
1521 static SENSOR_DEVICE_ATTR_RO(fan5_input, fan, 4);
1522 static SENSOR_DEVICE_ATTR_RO(fan6_input, fan, 5);
1523 static SENSOR_DEVICE_ATTR_RO(fan7_input, fan, 6);
1524 static SENSOR_DEVICE_ATTR_RO(fan8_input, fan, 7);
1525
1526 static SENSOR_DEVICE_ATTR_RO(fan1_alarm, alarm,
1527 ADT7462_ALARM4 | ADT7462_F0_ALARM);
1528 static SENSOR_DEVICE_ATTR_RO(fan2_alarm, alarm,
1529 ADT7462_ALARM4 | ADT7462_F1_ALARM);
1530 static SENSOR_DEVICE_ATTR_RO(fan3_alarm, alarm,
1531 ADT7462_ALARM4 | ADT7462_F2_ALARM);
1532 static SENSOR_DEVICE_ATTR_RO(fan4_alarm, alarm,
1533 ADT7462_ALARM4 | ADT7462_F3_ALARM);
1534 static SENSOR_DEVICE_ATTR_RO(fan5_alarm, alarm,
1535 ADT7462_ALARM4 | ADT7462_F4_ALARM);
1536 static SENSOR_DEVICE_ATTR_RO(fan6_alarm, alarm,
1537 ADT7462_ALARM4 | ADT7462_F5_ALARM);
1538 static SENSOR_DEVICE_ATTR_RO(fan7_alarm, alarm,
1539 ADT7462_ALARM4 | ADT7462_F6_ALARM);
1540 static SENSOR_DEVICE_ATTR_RO(fan8_alarm, alarm,
1541 ADT7462_ALARM4 | ADT7462_F7_ALARM);
1542
1543 static SENSOR_DEVICE_ATTR_RW(force_pwm_max, force_pwm_max, 0);
1544
1545 static SENSOR_DEVICE_ATTR_RW(pwm1, pwm, 0);
1546 static SENSOR_DEVICE_ATTR_RW(pwm2, pwm, 1);
1547 static SENSOR_DEVICE_ATTR_RW(pwm3, pwm, 2);
1548 static SENSOR_DEVICE_ATTR_RW(pwm4, pwm, 3);
1549
1550 static SENSOR_DEVICE_ATTR_RW(pwm1_auto_point1_pwm, pwm_min, 0);
1551 static SENSOR_DEVICE_ATTR_RW(pwm2_auto_point1_pwm, pwm_min, 1);
1552 static SENSOR_DEVICE_ATTR_RW(pwm3_auto_point1_pwm, pwm_min, 2);
1553 static SENSOR_DEVICE_ATTR_RW(pwm4_auto_point1_pwm, pwm_min, 3);
1554
1555 static SENSOR_DEVICE_ATTR_RW(pwm1_auto_point2_pwm, pwm_max, 0);
1556 static SENSOR_DEVICE_ATTR_RW(pwm2_auto_point2_pwm, pwm_max, 1);
1557 static SENSOR_DEVICE_ATTR_RW(pwm3_auto_point2_pwm, pwm_max, 2);
1558 static SENSOR_DEVICE_ATTR_RW(pwm4_auto_point2_pwm, pwm_max, 3);
1559
1560 static SENSOR_DEVICE_ATTR_RW(temp1_auto_point1_hyst, pwm_hyst, 0);
1561 static SENSOR_DEVICE_ATTR_RW(temp2_auto_point1_hyst, pwm_hyst, 1);
1562 static SENSOR_DEVICE_ATTR_RW(temp3_auto_point1_hyst, pwm_hyst, 2);
1563 static SENSOR_DEVICE_ATTR_RW(temp4_auto_point1_hyst, pwm_hyst, 3);
1564
1565 static SENSOR_DEVICE_ATTR_RW(temp1_auto_point2_hyst, pwm_hyst, 0);
1566 static SENSOR_DEVICE_ATTR_RW(temp2_auto_point2_hyst, pwm_hyst, 1);
1567 static SENSOR_DEVICE_ATTR_RW(temp3_auto_point2_hyst, pwm_hyst, 2);
1568 static SENSOR_DEVICE_ATTR_RW(temp4_auto_point2_hyst, pwm_hyst, 3);
1569
1570 static SENSOR_DEVICE_ATTR_RW(temp1_auto_point1_temp, pwm_tmin, 0);
1571 static SENSOR_DEVICE_ATTR_RW(temp2_auto_point1_temp, pwm_tmin, 1);
1572 static SENSOR_DEVICE_ATTR_RW(temp3_auto_point1_temp, pwm_tmin, 2);
1573 static SENSOR_DEVICE_ATTR_RW(temp4_auto_point1_temp, pwm_tmin, 3);
1574
1575 static SENSOR_DEVICE_ATTR_RW(temp1_auto_point2_temp, pwm_tmax, 0);
1576 static SENSOR_DEVICE_ATTR_RW(temp2_auto_point2_temp, pwm_tmax, 1);
1577 static SENSOR_DEVICE_ATTR_RW(temp3_auto_point2_temp, pwm_tmax, 2);
1578 static SENSOR_DEVICE_ATTR_RW(temp4_auto_point2_temp, pwm_tmax, 3);
1579
1580 static SENSOR_DEVICE_ATTR_RW(pwm1_enable, pwm_auto, 0);
1581 static SENSOR_DEVICE_ATTR_RW(pwm2_enable, pwm_auto, 1);
1582 static SENSOR_DEVICE_ATTR_RW(pwm3_enable, pwm_auto, 2);
1583 static SENSOR_DEVICE_ATTR_RW(pwm4_enable, pwm_auto, 3);
1584
1585 static SENSOR_DEVICE_ATTR_RW(pwm1_auto_channels_temp, pwm_auto_temp, 0);
1586 static SENSOR_DEVICE_ATTR_RW(pwm2_auto_channels_temp, pwm_auto_temp, 1);
1587 static SENSOR_DEVICE_ATTR_RW(pwm3_auto_channels_temp, pwm_auto_temp, 2);
1588 static SENSOR_DEVICE_ATTR_RW(pwm4_auto_channels_temp, pwm_auto_temp, 3);
1589
1590 static struct attribute *adt7462_attrs[] = {
1591 &sensor_dev_attr_temp1_max.dev_attr.attr,
1592 &sensor_dev_attr_temp2_max.dev_attr.attr,
1593 &sensor_dev_attr_temp3_max.dev_attr.attr,
1594 &sensor_dev_attr_temp4_max.dev_attr.attr,
1595
1596 &sensor_dev_attr_temp1_min.dev_attr.attr,
1597 &sensor_dev_attr_temp2_min.dev_attr.attr,
1598 &sensor_dev_attr_temp3_min.dev_attr.attr,
1599 &sensor_dev_attr_temp4_min.dev_attr.attr,
1600
1601 &sensor_dev_attr_temp1_input.dev_attr.attr,
1602 &sensor_dev_attr_temp2_input.dev_attr.attr,
1603 &sensor_dev_attr_temp3_input.dev_attr.attr,
1604 &sensor_dev_attr_temp4_input.dev_attr.attr,
1605
1606 &sensor_dev_attr_temp1_label.dev_attr.attr,
1607 &sensor_dev_attr_temp2_label.dev_attr.attr,
1608 &sensor_dev_attr_temp3_label.dev_attr.attr,
1609 &sensor_dev_attr_temp4_label.dev_attr.attr,
1610
1611 &sensor_dev_attr_temp1_alarm.dev_attr.attr,
1612 &sensor_dev_attr_temp2_alarm.dev_attr.attr,
1613 &sensor_dev_attr_temp3_alarm.dev_attr.attr,
1614 &sensor_dev_attr_temp4_alarm.dev_attr.attr,
1615
1616 &sensor_dev_attr_in1_max.dev_attr.attr,
1617 &sensor_dev_attr_in2_max.dev_attr.attr,
1618 &sensor_dev_attr_in3_max.dev_attr.attr,
1619 &sensor_dev_attr_in4_max.dev_attr.attr,
1620 &sensor_dev_attr_in5_max.dev_attr.attr,
1621 &sensor_dev_attr_in6_max.dev_attr.attr,
1622 &sensor_dev_attr_in7_max.dev_attr.attr,
1623 &sensor_dev_attr_in8_max.dev_attr.attr,
1624 &sensor_dev_attr_in9_max.dev_attr.attr,
1625 &sensor_dev_attr_in10_max.dev_attr.attr,
1626 &sensor_dev_attr_in11_max.dev_attr.attr,
1627 &sensor_dev_attr_in12_max.dev_attr.attr,
1628 &sensor_dev_attr_in13_max.dev_attr.attr,
1629
1630 &sensor_dev_attr_in1_min.dev_attr.attr,
1631 &sensor_dev_attr_in2_min.dev_attr.attr,
1632 &sensor_dev_attr_in3_min.dev_attr.attr,
1633 &sensor_dev_attr_in4_min.dev_attr.attr,
1634 &sensor_dev_attr_in5_min.dev_attr.attr,
1635 &sensor_dev_attr_in6_min.dev_attr.attr,
1636 &sensor_dev_attr_in7_min.dev_attr.attr,
1637 &sensor_dev_attr_in8_min.dev_attr.attr,
1638 &sensor_dev_attr_in9_min.dev_attr.attr,
1639 &sensor_dev_attr_in10_min.dev_attr.attr,
1640 &sensor_dev_attr_in11_min.dev_attr.attr,
1641 &sensor_dev_attr_in12_min.dev_attr.attr,
1642 &sensor_dev_attr_in13_min.dev_attr.attr,
1643
1644 &sensor_dev_attr_in1_input.dev_attr.attr,
1645 &sensor_dev_attr_in2_input.dev_attr.attr,
1646 &sensor_dev_attr_in3_input.dev_attr.attr,
1647 &sensor_dev_attr_in4_input.dev_attr.attr,
1648 &sensor_dev_attr_in5_input.dev_attr.attr,
1649 &sensor_dev_attr_in6_input.dev_attr.attr,
1650 &sensor_dev_attr_in7_input.dev_attr.attr,
1651 &sensor_dev_attr_in8_input.dev_attr.attr,
1652 &sensor_dev_attr_in9_input.dev_attr.attr,
1653 &sensor_dev_attr_in10_input.dev_attr.attr,
1654 &sensor_dev_attr_in11_input.dev_attr.attr,
1655 &sensor_dev_attr_in12_input.dev_attr.attr,
1656 &sensor_dev_attr_in13_input.dev_attr.attr,
1657
1658 &sensor_dev_attr_in1_label.dev_attr.attr,
1659 &sensor_dev_attr_in2_label.dev_attr.attr,
1660 &sensor_dev_attr_in3_label.dev_attr.attr,
1661 &sensor_dev_attr_in4_label.dev_attr.attr,
1662 &sensor_dev_attr_in5_label.dev_attr.attr,
1663 &sensor_dev_attr_in6_label.dev_attr.attr,
1664 &sensor_dev_attr_in7_label.dev_attr.attr,
1665 &sensor_dev_attr_in8_label.dev_attr.attr,
1666 &sensor_dev_attr_in9_label.dev_attr.attr,
1667 &sensor_dev_attr_in10_label.dev_attr.attr,
1668 &sensor_dev_attr_in11_label.dev_attr.attr,
1669 &sensor_dev_attr_in12_label.dev_attr.attr,
1670 &sensor_dev_attr_in13_label.dev_attr.attr,
1671
1672 &sensor_dev_attr_in1_alarm.dev_attr.attr,
1673 &sensor_dev_attr_in2_alarm.dev_attr.attr,
1674 &sensor_dev_attr_in3_alarm.dev_attr.attr,
1675 &sensor_dev_attr_in4_alarm.dev_attr.attr,
1676 &sensor_dev_attr_in5_alarm.dev_attr.attr,
1677 &sensor_dev_attr_in6_alarm.dev_attr.attr,
1678 &sensor_dev_attr_in7_alarm.dev_attr.attr,
1679 &sensor_dev_attr_in8_alarm.dev_attr.attr,
1680 &sensor_dev_attr_in9_alarm.dev_attr.attr,
1681 &sensor_dev_attr_in10_alarm.dev_attr.attr,
1682 &sensor_dev_attr_in11_alarm.dev_attr.attr,
1683 &sensor_dev_attr_in12_alarm.dev_attr.attr,
1684 &sensor_dev_attr_in13_alarm.dev_attr.attr,
1685
1686 &sensor_dev_attr_fan1_min.dev_attr.attr,
1687 &sensor_dev_attr_fan2_min.dev_attr.attr,
1688 &sensor_dev_attr_fan3_min.dev_attr.attr,
1689 &sensor_dev_attr_fan4_min.dev_attr.attr,
1690 &sensor_dev_attr_fan5_min.dev_attr.attr,
1691 &sensor_dev_attr_fan6_min.dev_attr.attr,
1692 &sensor_dev_attr_fan7_min.dev_attr.attr,
1693 &sensor_dev_attr_fan8_min.dev_attr.attr,
1694
1695 &sensor_dev_attr_fan1_input.dev_attr.attr,
1696 &sensor_dev_attr_fan2_input.dev_attr.attr,
1697 &sensor_dev_attr_fan3_input.dev_attr.attr,
1698 &sensor_dev_attr_fan4_input.dev_attr.attr,
1699 &sensor_dev_attr_fan5_input.dev_attr.attr,
1700 &sensor_dev_attr_fan6_input.dev_attr.attr,
1701 &sensor_dev_attr_fan7_input.dev_attr.attr,
1702 &sensor_dev_attr_fan8_input.dev_attr.attr,
1703
1704 &sensor_dev_attr_fan1_alarm.dev_attr.attr,
1705 &sensor_dev_attr_fan2_alarm.dev_attr.attr,
1706 &sensor_dev_attr_fan3_alarm.dev_attr.attr,
1707 &sensor_dev_attr_fan4_alarm.dev_attr.attr,
1708 &sensor_dev_attr_fan5_alarm.dev_attr.attr,
1709 &sensor_dev_attr_fan6_alarm.dev_attr.attr,
1710 &sensor_dev_attr_fan7_alarm.dev_attr.attr,
1711 &sensor_dev_attr_fan8_alarm.dev_attr.attr,
1712
1713 &sensor_dev_attr_force_pwm_max.dev_attr.attr,
1714 &sensor_dev_attr_pwm1.dev_attr.attr,
1715 &sensor_dev_attr_pwm2.dev_attr.attr,
1716 &sensor_dev_attr_pwm3.dev_attr.attr,
1717 &sensor_dev_attr_pwm4.dev_attr.attr,
1718
1719 &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
1720 &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
1721 &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
1722 &sensor_dev_attr_pwm4_auto_point1_pwm.dev_attr.attr,
1723
1724 &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
1725 &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
1726 &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
1727 &sensor_dev_attr_pwm4_auto_point2_pwm.dev_attr.attr,
1728
1729 &sensor_dev_attr_temp1_auto_point1_hyst.dev_attr.attr,
1730 &sensor_dev_attr_temp2_auto_point1_hyst.dev_attr.attr,
1731 &sensor_dev_attr_temp3_auto_point1_hyst.dev_attr.attr,
1732 &sensor_dev_attr_temp4_auto_point1_hyst.dev_attr.attr,
1733
1734 &sensor_dev_attr_temp1_auto_point2_hyst.dev_attr.attr,
1735 &sensor_dev_attr_temp2_auto_point2_hyst.dev_attr.attr,
1736 &sensor_dev_attr_temp3_auto_point2_hyst.dev_attr.attr,
1737 &sensor_dev_attr_temp4_auto_point2_hyst.dev_attr.attr,
1738
1739 &sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr,
1740 &sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr,
1741 &sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr,
1742 &sensor_dev_attr_temp4_auto_point1_temp.dev_attr.attr,
1743
1744 &sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr,
1745 &sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr,
1746 &sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr,
1747 &sensor_dev_attr_temp4_auto_point2_temp.dev_attr.attr,
1748
1749 &sensor_dev_attr_pwm1_enable.dev_attr.attr,
1750 &sensor_dev_attr_pwm2_enable.dev_attr.attr,
1751 &sensor_dev_attr_pwm3_enable.dev_attr.attr,
1752 &sensor_dev_attr_pwm4_enable.dev_attr.attr,
1753
1754 &sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
1755 &sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
1756 &sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
1757 &sensor_dev_attr_pwm4_auto_channels_temp.dev_attr.attr,
1758 NULL
1759 };
1760
1761 ATTRIBUTE_GROUPS(adt7462);
1762
1763
1764 static int adt7462_detect(struct i2c_client *client,
1765 struct i2c_board_info *info)
1766 {
1767 struct i2c_adapter *adapter = client->adapter;
1768 int vendor, device, revision;
1769
1770 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1771 return -ENODEV;
1772
1773 vendor = i2c_smbus_read_byte_data(client, ADT7462_REG_VENDOR);
1774 if (vendor != ADT7462_VENDOR)
1775 return -ENODEV;
1776
1777 device = i2c_smbus_read_byte_data(client, ADT7462_REG_DEVICE);
1778 if (device != ADT7462_DEVICE)
1779 return -ENODEV;
1780
1781 revision = i2c_smbus_read_byte_data(client, ADT7462_REG_REVISION);
1782 if (revision != ADT7462_REVISION)
1783 return -ENODEV;
1784
1785 strlcpy(info->type, "adt7462", I2C_NAME_SIZE);
1786
1787 return 0;
1788 }
1789
1790 static int adt7462_probe(struct i2c_client *client)
1791 {
1792 struct device *dev = &client->dev;
1793 struct adt7462_data *data;
1794 struct device *hwmon_dev;
1795
1796 data = devm_kzalloc(dev, sizeof(struct adt7462_data), GFP_KERNEL);
1797 if (!data)
1798 return -ENOMEM;
1799
1800 data->client = client;
1801 mutex_init(&data->lock);
1802
1803 dev_info(&client->dev, "%s chip found\n", client->name);
1804
1805 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
1806 data,
1807 adt7462_groups);
1808 return PTR_ERR_OR_ZERO(hwmon_dev);
1809 }
1810
1811 static const struct i2c_device_id adt7462_id[] = {
1812 { "adt7462", 0 },
1813 { }
1814 };
1815 MODULE_DEVICE_TABLE(i2c, adt7462_id);
1816
1817 static struct i2c_driver adt7462_driver = {
1818 .class = I2C_CLASS_HWMON,
1819 .driver = {
1820 .name = "adt7462",
1821 },
1822 .probe_new = adt7462_probe,
1823 .id_table = adt7462_id,
1824 .detect = adt7462_detect,
1825 .address_list = normal_i2c,
1826 };
1827
1828 module_i2c_driver(adt7462_driver);
1829
1830 MODULE_AUTHOR("Darrick J. Wong <darrick.wong@oracle.com>");
1831 MODULE_DESCRIPTION("ADT7462 driver");
1832 MODULE_LICENSE("GPL");