1/* 2 * A hwmon driver for the Analog Devices ADT7470 3 * Copyright (C) 2007 IBM 4 * 5 * Author: Darrick J. Wong <darrick.wong@oracle.com> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 */ 21 22#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 23 24#include <linux/module.h> 25#include <linux/jiffies.h> 26#include <linux/i2c.h> 27#include <linux/hwmon.h> 28#include <linux/hwmon-sysfs.h> 29#include <linux/err.h> 30#include <linux/mutex.h> 31#include <linux/delay.h> 32#include <linux/log2.h> 33#include <linux/kthread.h> 34#include <linux/slab.h> 35 36/* Addresses to scan */ 37static const unsigned short normal_i2c[] = { 0x2C, 0x2E, 0x2F, I2C_CLIENT_END }; 38 39/* ADT7470 registers */ 40#define ADT7470_REG_BASE_ADDR 0x20 41#define ADT7470_REG_TEMP_BASE_ADDR 0x20 42#define ADT7470_REG_TEMP_MAX_ADDR 0x29 43#define ADT7470_REG_FAN_BASE_ADDR 0x2A 44#define ADT7470_REG_FAN_MAX_ADDR 0x31 45#define ADT7470_REG_PWM_BASE_ADDR 0x32 46#define ADT7470_REG_PWM_MAX_ADDR 0x35 47#define ADT7470_REG_PWM_MAX_BASE_ADDR 0x38 48#define ADT7470_REG_PWM_MAX_MAX_ADDR 0x3B 49#define ADT7470_REG_CFG 0x40 50#define ADT7470_FSPD_MASK 0x04 51#define ADT7470_REG_ALARM1 0x41 52#define ADT7470_R1T_ALARM 0x01 53#define ADT7470_R2T_ALARM 0x02 54#define ADT7470_R3T_ALARM 0x04 55#define ADT7470_R4T_ALARM 0x08 56#define ADT7470_R5T_ALARM 0x10 57#define ADT7470_R6T_ALARM 0x20 58#define ADT7470_R7T_ALARM 0x40 59#define ADT7470_OOL_ALARM 0x80 60#define ADT7470_REG_ALARM2 0x42 61#define ADT7470_R8T_ALARM 0x01 62#define ADT7470_R9T_ALARM 0x02 63#define ADT7470_R10T_ALARM 0x04 64#define ADT7470_FAN1_ALARM 0x10 65#define ADT7470_FAN2_ALARM 0x20 66#define ADT7470_FAN3_ALARM 0x40 67#define ADT7470_FAN4_ALARM 0x80 68#define ADT7470_REG_TEMP_LIMITS_BASE_ADDR 0x44 69#define ADT7470_REG_TEMP_LIMITS_MAX_ADDR 0x57 70#define ADT7470_REG_FAN_MIN_BASE_ADDR 0x58 71#define ADT7470_REG_FAN_MIN_MAX_ADDR 0x5F 72#define ADT7470_REG_FAN_MAX_BASE_ADDR 0x60 73#define ADT7470_REG_FAN_MAX_MAX_ADDR 0x67 74#define ADT7470_REG_PWM_CFG_BASE_ADDR 0x68 75#define ADT7470_REG_PWM12_CFG 0x68 76#define ADT7470_PWM2_AUTO_MASK 0x40 77#define ADT7470_PWM1_AUTO_MASK 0x80 78#define ADT7470_PWM_AUTO_MASK 0xC0 79#define ADT7470_REG_PWM34_CFG 0x69 80#define ADT7470_PWM3_AUTO_MASK 0x40 81#define ADT7470_PWM4_AUTO_MASK 0x80 82#define ADT7470_REG_PWM_MIN_BASE_ADDR 0x6A 83#define ADT7470_REG_PWM_MIN_MAX_ADDR 0x6D 84#define ADT7470_REG_PWM_TEMP_MIN_BASE_ADDR 0x6E 85#define ADT7470_REG_PWM_TEMP_MIN_MAX_ADDR 0x71 86#define ADT7470_REG_ACOUSTICS12 0x75 87#define ADT7470_REG_ACOUSTICS34 0x76 88#define ADT7470_REG_DEVICE 0x3D 89#define ADT7470_REG_VENDOR 0x3E 90#define ADT7470_REG_REVISION 0x3F 91#define ADT7470_REG_ALARM1_MASK 0x72 92#define ADT7470_REG_ALARM2_MASK 0x73 93#define ADT7470_REG_PWM_AUTO_TEMP_BASE_ADDR 0x7C 94#define ADT7470_REG_PWM_AUTO_TEMP_MAX_ADDR 0x7D 95#define ADT7470_REG_MAX_ADDR 0x81 96 97#define ADT7470_TEMP_COUNT 10 98#define ADT7470_TEMP_REG(x) (ADT7470_REG_TEMP_BASE_ADDR + (x)) 99#define ADT7470_TEMP_MIN_REG(x) (ADT7470_REG_TEMP_LIMITS_BASE_ADDR + ((x) * 2)) 100#define ADT7470_TEMP_MAX_REG(x) (ADT7470_REG_TEMP_LIMITS_BASE_ADDR + \ 101 ((x) * 2) + 1) 102 103#define ADT7470_FAN_COUNT 4 104#define ADT7470_REG_FAN(x) (ADT7470_REG_FAN_BASE_ADDR + ((x) * 2)) 105#define ADT7470_REG_FAN_MIN(x) (ADT7470_REG_FAN_MIN_BASE_ADDR + ((x) * 2)) 106#define ADT7470_REG_FAN_MAX(x) (ADT7470_REG_FAN_MAX_BASE_ADDR + ((x) * 2)) 107 108#define ADT7470_PWM_COUNT 4 109#define ADT7470_REG_PWM(x) (ADT7470_REG_PWM_BASE_ADDR + (x)) 110#define ADT7470_REG_PWM_MAX(x) (ADT7470_REG_PWM_MAX_BASE_ADDR + (x)) 111#define ADT7470_REG_PWM_MIN(x) (ADT7470_REG_PWM_MIN_BASE_ADDR + (x)) 112#define ADT7470_REG_PWM_TMIN(x) (ADT7470_REG_PWM_TEMP_MIN_BASE_ADDR + (x)) 113#define ADT7470_REG_PWM_CFG(x) (ADT7470_REG_PWM_CFG_BASE_ADDR + ((x) / 2)) 114#define ADT7470_REG_PWM_AUTO_TEMP(x) (ADT7470_REG_PWM_AUTO_TEMP_BASE_ADDR + \ 115 ((x) / 2)) 116 117#define ALARM2(x) ((x) << 8) 118 119#define ADT7470_VENDOR 0x41 120#define ADT7470_DEVICE 0x70 121/* datasheet only mentions a revision 2 */ 122#define ADT7470_REVISION 0x02 123 124/* "all temps" according to hwmon sysfs interface spec */ 125#define ADT7470_PWM_ALL_TEMPS 0x3FF 126 127/* How often do we reread sensors values? (In jiffies) */ 128#define SENSOR_REFRESH_INTERVAL (5 * HZ) 129 130/* How often do we reread sensor limit values? (In jiffies) */ 131#define LIMIT_REFRESH_INTERVAL (60 * HZ) 132 133/* Wait at least 200ms per sensor for 10 sensors */ 134#define TEMP_COLLECTION_TIME 2000 135 136/* auto update thing won't fire more than every 2s */ 137#define AUTO_UPDATE_INTERVAL 2000 138 139/* datasheet says to divide this number by the fan reading to get fan rpm */ 140#define FAN_PERIOD_TO_RPM(x) ((90000 * 60) / (x)) 141#define FAN_RPM_TO_PERIOD FAN_PERIOD_TO_RPM 142#define FAN_PERIOD_INVALID 65535 143#define FAN_DATA_VALID(x) ((x) && (x) != FAN_PERIOD_INVALID) 144 145struct adt7470_data { 146 struct i2c_client *client; 147 struct mutex lock; 148 char sensors_valid; 149 char limits_valid; 150 unsigned long sensors_last_updated; /* In jiffies */ 151 unsigned long limits_last_updated; /* In jiffies */ 152 153 int num_temp_sensors; /* -1 = probe */ 154 int temperatures_probed; 155 156 s8 temp[ADT7470_TEMP_COUNT]; 157 s8 temp_min[ADT7470_TEMP_COUNT]; 158 s8 temp_max[ADT7470_TEMP_COUNT]; 159 u16 fan[ADT7470_FAN_COUNT]; 160 u16 fan_min[ADT7470_FAN_COUNT]; 161 u16 fan_max[ADT7470_FAN_COUNT]; 162 u16 alarm; 163 u16 alarms_mask; 164 u8 force_pwm_max; 165 u8 pwm[ADT7470_PWM_COUNT]; 166 u8 pwm_max[ADT7470_PWM_COUNT]; 167 u8 pwm_automatic[ADT7470_PWM_COUNT]; 168 u8 pwm_min[ADT7470_PWM_COUNT]; 169 s8 pwm_tmin[ADT7470_PWM_COUNT]; 170 u8 pwm_auto_temp[ADT7470_PWM_COUNT]; 171 172 struct task_struct *auto_update; 173 struct completion auto_update_stop; 174 unsigned int auto_update_interval; 175}; 176 177/* 178 * 16-bit registers on the ADT7470 are low-byte first. The data sheet says 179 * that the low byte must be read before the high byte. 180 */ 181static inline int adt7470_read_word_data(struct i2c_client *client, u8 reg) 182{ 183 u16 foo; 184 foo = i2c_smbus_read_byte_data(client, reg); 185 foo |= ((u16)i2c_smbus_read_byte_data(client, reg + 1) << 8); 186 return foo; 187} 188 189static inline int adt7470_write_word_data(struct i2c_client *client, u8 reg, 190 u16 value) 191{ 192 return i2c_smbus_write_byte_data(client, reg, value & 0xFF) 193 || i2c_smbus_write_byte_data(client, reg + 1, value >> 8); 194} 195 196/* Probe for temperature sensors. Assumes lock is held */ 197static int adt7470_read_temperatures(struct i2c_client *client, 198 struct adt7470_data *data) 199{ 200 unsigned long res; 201 int i; 202 u8 cfg, pwm[4], pwm_cfg[2]; 203 204 /* save pwm[1-4] config register */ 205 pwm_cfg[0] = i2c_smbus_read_byte_data(client, ADT7470_REG_PWM_CFG(0)); 206 pwm_cfg[1] = i2c_smbus_read_byte_data(client, ADT7470_REG_PWM_CFG(2)); 207 208 /* set manual pwm to whatever it is set to now */ 209 for (i = 0; i < ADT7470_FAN_COUNT; i++) 210 pwm[i] = i2c_smbus_read_byte_data(client, ADT7470_REG_PWM(i)); 211 212 /* put pwm in manual mode */ 213 i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(0), 214 pwm_cfg[0] & ~(ADT7470_PWM_AUTO_MASK)); 215 i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(2), 216 pwm_cfg[1] & ~(ADT7470_PWM_AUTO_MASK)); 217 218 /* write pwm control to whatever it was */ 219 for (i = 0; i < ADT7470_FAN_COUNT; i++) 220 i2c_smbus_write_byte_data(client, ADT7470_REG_PWM(i), pwm[i]); 221 222 /* start reading temperature sensors */ 223 cfg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG); 224 cfg |= 0x80; 225 i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, cfg); 226 227 /* Delay is 200ms * number of temp sensors. */ 228 res = msleep_interruptible((data->num_temp_sensors >= 0 ? 229 data->num_temp_sensors * 200 : 230 TEMP_COLLECTION_TIME)); 231 232 /* done reading temperature sensors */ 233 cfg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG); 234 cfg &= ~0x80; 235 i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, cfg); 236 237 /* restore pwm[1-4] config registers */ 238 i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(0), pwm_cfg[0]); 239 i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(2), pwm_cfg[1]); 240 241 if (res) { 242 pr_err("ha ha, interrupted\n"); 243 return -EAGAIN; 244 } 245 246 /* Only count fans if we have to */ 247 if (data->num_temp_sensors >= 0) 248 return 0; 249 250 for (i = 0; i < ADT7470_TEMP_COUNT; i++) { 251 data->temp[i] = i2c_smbus_read_byte_data(client, 252 ADT7470_TEMP_REG(i)); 253 if (data->temp[i]) 254 data->num_temp_sensors = i + 1; 255 } 256 data->temperatures_probed = 1; 257 return 0; 258} 259 260static int adt7470_update_thread(void *p) 261{ 262 struct i2c_client *client = p; 263 struct adt7470_data *data = i2c_get_clientdata(client); 264 265 while (!kthread_should_stop()) { 266 mutex_lock(&data->lock); 267 adt7470_read_temperatures(client, data); 268 mutex_unlock(&data->lock); 269 if (kthread_should_stop()) 270 break; 271 msleep_interruptible(data->auto_update_interval); 272 } 273 274 complete_all(&data->auto_update_stop); 275 return 0; 276} 277 278static struct adt7470_data *adt7470_update_device(struct device *dev) 279{ 280 struct adt7470_data *data = dev_get_drvdata(dev); 281 struct i2c_client *client = data->client; 282 unsigned long local_jiffies = jiffies; 283 u8 cfg; 284 int i; 285 int need_sensors = 1; 286 int need_limits = 1; 287 288 /* 289 * Figure out if we need to update the shadow registers. 290 * Lockless means that we may occasionally report out of 291 * date data. 292 */ 293 if (time_before(local_jiffies, data->sensors_last_updated + 294 SENSOR_REFRESH_INTERVAL) && 295 data->sensors_valid) 296 need_sensors = 0; 297 298 if (time_before(local_jiffies, data->limits_last_updated + 299 LIMIT_REFRESH_INTERVAL) && 300 data->limits_valid) 301 need_limits = 0; 302 303 if (!need_sensors && !need_limits) 304 return data; 305 306 mutex_lock(&data->lock); 307 if (!need_sensors) 308 goto no_sensor_update; 309 310 if (!data->temperatures_probed) 311 adt7470_read_temperatures(client, data); 312 else 313 for (i = 0; i < ADT7470_TEMP_COUNT; i++) 314 data->temp[i] = i2c_smbus_read_byte_data(client, 315 ADT7470_TEMP_REG(i)); 316 317 for (i = 0; i < ADT7470_FAN_COUNT; i++) 318 data->fan[i] = adt7470_read_word_data(client, 319 ADT7470_REG_FAN(i)); 320 321 for (i = 0; i < ADT7470_PWM_COUNT; i++) { 322 int reg; 323 int reg_mask; 324 325 data->pwm[i] = i2c_smbus_read_byte_data(client, 326 ADT7470_REG_PWM(i)); 327 328 if (i % 2) 329 reg_mask = ADT7470_PWM2_AUTO_MASK; 330 else 331 reg_mask = ADT7470_PWM1_AUTO_MASK; 332 333 reg = ADT7470_REG_PWM_CFG(i); 334 if (i2c_smbus_read_byte_data(client, reg) & reg_mask) 335 data->pwm_automatic[i] = 1; 336 else 337 data->pwm_automatic[i] = 0; 338 339 reg = ADT7470_REG_PWM_AUTO_TEMP(i); 340 cfg = i2c_smbus_read_byte_data(client, reg); 341 if (!(i % 2)) 342 data->pwm_auto_temp[i] = cfg >> 4; 343 else 344 data->pwm_auto_temp[i] = cfg & 0xF; 345 } 346 347 if (i2c_smbus_read_byte_data(client, ADT7470_REG_CFG) & 348 ADT7470_FSPD_MASK) 349 data->force_pwm_max = 1; 350 else 351 data->force_pwm_max = 0; 352 353 data->alarm = i2c_smbus_read_byte_data(client, ADT7470_REG_ALARM1); 354 if (data->alarm & ADT7470_OOL_ALARM) 355 data->alarm |= ALARM2(i2c_smbus_read_byte_data(client, 356 ADT7470_REG_ALARM2)); 357 data->alarms_mask = adt7470_read_word_data(client, 358 ADT7470_REG_ALARM1_MASK); 359 360 data->sensors_last_updated = local_jiffies; 361 data->sensors_valid = 1; 362 363no_sensor_update: 364 if (!need_limits) 365 goto out; 366 367 for (i = 0; i < ADT7470_TEMP_COUNT; i++) { 368 data->temp_min[i] = i2c_smbus_read_byte_data(client, 369 ADT7470_TEMP_MIN_REG(i)); 370 data->temp_max[i] = i2c_smbus_read_byte_data(client, 371 ADT7470_TEMP_MAX_REG(i)); 372 } 373 374 for (i = 0; i < ADT7470_FAN_COUNT; i++) { 375 data->fan_min[i] = adt7470_read_word_data(client, 376 ADT7470_REG_FAN_MIN(i)); 377 data->fan_max[i] = adt7470_read_word_data(client, 378 ADT7470_REG_FAN_MAX(i)); 379 } 380 381 for (i = 0; i < ADT7470_PWM_COUNT; i++) { 382 data->pwm_max[i] = i2c_smbus_read_byte_data(client, 383 ADT7470_REG_PWM_MAX(i)); 384 data->pwm_min[i] = i2c_smbus_read_byte_data(client, 385 ADT7470_REG_PWM_MIN(i)); 386 data->pwm_tmin[i] = i2c_smbus_read_byte_data(client, 387 ADT7470_REG_PWM_TMIN(i)); 388 } 389 390 data->limits_last_updated = local_jiffies; 391 data->limits_valid = 1; 392 393out: 394 mutex_unlock(&data->lock); 395 return data; 396} 397 398static ssize_t show_auto_update_interval(struct device *dev, 399 struct device_attribute *devattr, 400 char *buf) 401{ 402 struct adt7470_data *data = adt7470_update_device(dev); 403 return sprintf(buf, "%d\n", data->auto_update_interval); 404} 405 406static ssize_t set_auto_update_interval(struct device *dev, 407 struct device_attribute *devattr, 408 const char *buf, 409 size_t count) 410{ 411 struct adt7470_data *data = dev_get_drvdata(dev); 412 long temp; 413 414 if (kstrtol(buf, 10, &temp)) 415 return -EINVAL; 416 417 temp = clamp_val(temp, 0, 60000); 418 419 mutex_lock(&data->lock); 420 data->auto_update_interval = temp; 421 mutex_unlock(&data->lock); 422 423 return count; 424} 425 426static ssize_t show_num_temp_sensors(struct device *dev, 427 struct device_attribute *devattr, 428 char *buf) 429{ 430 struct adt7470_data *data = adt7470_update_device(dev); 431 return sprintf(buf, "%d\n", data->num_temp_sensors); 432} 433 434static ssize_t set_num_temp_sensors(struct device *dev, 435 struct device_attribute *devattr, 436 const char *buf, 437 size_t count) 438{ 439 struct adt7470_data *data = dev_get_drvdata(dev); 440 long temp; 441 442 if (kstrtol(buf, 10, &temp)) 443 return -EINVAL; 444 445 temp = clamp_val(temp, -1, 10); 446 447 mutex_lock(&data->lock); 448 data->num_temp_sensors = temp; 449 if (temp < 0) 450 data->temperatures_probed = 0; 451 mutex_unlock(&data->lock); 452 453 return count; 454} 455 456static ssize_t show_temp_min(struct device *dev, 457 struct device_attribute *devattr, 458 char *buf) 459{ 460 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 461 struct adt7470_data *data = adt7470_update_device(dev); 462 return sprintf(buf, "%d\n", 1000 * data->temp_min[attr->index]); 463} 464 465static ssize_t set_temp_min(struct device *dev, 466 struct device_attribute *devattr, 467 const char *buf, 468 size_t count) 469{ 470 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 471 struct adt7470_data *data = dev_get_drvdata(dev); 472 struct i2c_client *client = data->client; 473 long temp; 474 475 if (kstrtol(buf, 10, &temp)) 476 return -EINVAL; 477 478 temp = DIV_ROUND_CLOSEST(temp, 1000); 479 temp = clamp_val(temp, -128, 127); 480 481 mutex_lock(&data->lock); 482 data->temp_min[attr->index] = temp; 483 i2c_smbus_write_byte_data(client, ADT7470_TEMP_MIN_REG(attr->index), 484 temp); 485 mutex_unlock(&data->lock); 486 487 return count; 488} 489 490static ssize_t show_temp_max(struct device *dev, 491 struct device_attribute *devattr, 492 char *buf) 493{ 494 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 495 struct adt7470_data *data = adt7470_update_device(dev); 496 return sprintf(buf, "%d\n", 1000 * data->temp_max[attr->index]); 497} 498 499static ssize_t set_temp_max(struct device *dev, 500 struct device_attribute *devattr, 501 const char *buf, 502 size_t count) 503{ 504 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 505 struct adt7470_data *data = dev_get_drvdata(dev); 506 struct i2c_client *client = data->client; 507 long temp; 508 509 if (kstrtol(buf, 10, &temp)) 510 return -EINVAL; 511 512 temp = DIV_ROUND_CLOSEST(temp, 1000); 513 temp = clamp_val(temp, -128, 127); 514 515 mutex_lock(&data->lock); 516 data->temp_max[attr->index] = temp; 517 i2c_smbus_write_byte_data(client, ADT7470_TEMP_MAX_REG(attr->index), 518 temp); 519 mutex_unlock(&data->lock); 520 521 return count; 522} 523 524static ssize_t show_temp(struct device *dev, struct device_attribute *devattr, 525 char *buf) 526{ 527 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 528 struct adt7470_data *data = adt7470_update_device(dev); 529 return sprintf(buf, "%d\n", 1000 * data->temp[attr->index]); 530} 531 532static ssize_t show_alarm_mask(struct device *dev, 533 struct device_attribute *devattr, 534 char *buf) 535{ 536 struct adt7470_data *data = adt7470_update_device(dev); 537 538 return sprintf(buf, "%x\n", data->alarms_mask); 539} 540 541static ssize_t show_fan_max(struct device *dev, 542 struct device_attribute *devattr, 543 char *buf) 544{ 545 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 546 struct adt7470_data *data = adt7470_update_device(dev); 547 548 if (FAN_DATA_VALID(data->fan_max[attr->index])) 549 return sprintf(buf, "%d\n", 550 FAN_PERIOD_TO_RPM(data->fan_max[attr->index])); 551 else 552 return sprintf(buf, "0\n"); 553} 554 555static ssize_t set_fan_max(struct device *dev, 556 struct device_attribute *devattr, 557 const char *buf, size_t count) 558{ 559 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 560 struct adt7470_data *data = dev_get_drvdata(dev); 561 struct i2c_client *client = data->client; 562 long temp; 563 564 if (kstrtol(buf, 10, &temp) || !temp) 565 return -EINVAL; 566 567 temp = FAN_RPM_TO_PERIOD(temp); 568 temp = clamp_val(temp, 1, 65534); 569 570 mutex_lock(&data->lock); 571 data->fan_max[attr->index] = temp; 572 adt7470_write_word_data(client, ADT7470_REG_FAN_MAX(attr->index), temp); 573 mutex_unlock(&data->lock); 574 575 return count; 576} 577 578static ssize_t show_fan_min(struct device *dev, 579 struct device_attribute *devattr, 580 char *buf) 581{ 582 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 583 struct adt7470_data *data = adt7470_update_device(dev); 584 585 if (FAN_DATA_VALID(data->fan_min[attr->index])) 586 return sprintf(buf, "%d\n", 587 FAN_PERIOD_TO_RPM(data->fan_min[attr->index])); 588 else 589 return sprintf(buf, "0\n"); 590} 591 592static ssize_t set_fan_min(struct device *dev, 593 struct device_attribute *devattr, 594 const char *buf, size_t count) 595{ 596 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 597 struct adt7470_data *data = dev_get_drvdata(dev); 598 struct i2c_client *client = data->client; 599 long temp; 600 601 if (kstrtol(buf, 10, &temp) || !temp) 602 return -EINVAL; 603 604 temp = FAN_RPM_TO_PERIOD(temp); 605 temp = clamp_val(temp, 1, 65534); 606 607 mutex_lock(&data->lock); 608 data->fan_min[attr->index] = temp; 609 adt7470_write_word_data(client, ADT7470_REG_FAN_MIN(attr->index), temp); 610 mutex_unlock(&data->lock); 611 612 return count; 613} 614 615static ssize_t show_fan(struct device *dev, struct device_attribute *devattr, 616 char *buf) 617{ 618 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 619 struct adt7470_data *data = adt7470_update_device(dev); 620 621 if (FAN_DATA_VALID(data->fan[attr->index])) 622 return sprintf(buf, "%d\n", 623 FAN_PERIOD_TO_RPM(data->fan[attr->index])); 624 else 625 return sprintf(buf, "0\n"); 626} 627 628static ssize_t show_force_pwm_max(struct device *dev, 629 struct device_attribute *devattr, 630 char *buf) 631{ 632 struct adt7470_data *data = adt7470_update_device(dev); 633 return sprintf(buf, "%d\n", data->force_pwm_max); 634} 635 636static ssize_t set_force_pwm_max(struct device *dev, 637 struct device_attribute *devattr, 638 const char *buf, 639 size_t count) 640{ 641 struct adt7470_data *data = dev_get_drvdata(dev); 642 struct i2c_client *client = data->client; 643 long temp; 644 u8 reg; 645 646 if (kstrtol(buf, 10, &temp)) 647 return -EINVAL; 648 649 mutex_lock(&data->lock); 650 data->force_pwm_max = temp; 651 reg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG); 652 if (temp) 653 reg |= ADT7470_FSPD_MASK; 654 else 655 reg &= ~ADT7470_FSPD_MASK; 656 i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, reg); 657 mutex_unlock(&data->lock); 658 659 return count; 660} 661 662static ssize_t show_pwm(struct device *dev, struct device_attribute *devattr, 663 char *buf) 664{ 665 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 666 struct adt7470_data *data = adt7470_update_device(dev); 667 return sprintf(buf, "%d\n", data->pwm[attr->index]); 668} 669 670static ssize_t set_pwm(struct device *dev, struct device_attribute *devattr, 671 const char *buf, size_t count) 672{ 673 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 674 struct adt7470_data *data = dev_get_drvdata(dev); 675 struct i2c_client *client = data->client; 676 long temp; 677 678 if (kstrtol(buf, 10, &temp)) 679 return -EINVAL; 680 681 temp = clamp_val(temp, 0, 255); 682 683 mutex_lock(&data->lock); 684 data->pwm[attr->index] = temp; 685 i2c_smbus_write_byte_data(client, ADT7470_REG_PWM(attr->index), temp); 686 mutex_unlock(&data->lock); 687 688 return count; 689} 690 691static ssize_t show_pwm_max(struct device *dev, 692 struct device_attribute *devattr, 693 char *buf) 694{ 695 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 696 struct adt7470_data *data = adt7470_update_device(dev); 697 return sprintf(buf, "%d\n", data->pwm_max[attr->index]); 698} 699 700static ssize_t set_pwm_max(struct device *dev, 701 struct device_attribute *devattr, 702 const char *buf, 703 size_t count) 704{ 705 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 706 struct adt7470_data *data = dev_get_drvdata(dev); 707 struct i2c_client *client = data->client; 708 long temp; 709 710 if (kstrtol(buf, 10, &temp)) 711 return -EINVAL; 712 713 temp = clamp_val(temp, 0, 255); 714 715 mutex_lock(&data->lock); 716 data->pwm_max[attr->index] = temp; 717 i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_MAX(attr->index), 718 temp); 719 mutex_unlock(&data->lock); 720 721 return count; 722} 723 724static ssize_t show_pwm_min(struct device *dev, 725 struct device_attribute *devattr, 726 char *buf) 727{ 728 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 729 struct adt7470_data *data = adt7470_update_device(dev); 730 return sprintf(buf, "%d\n", data->pwm_min[attr->index]); 731} 732 733static ssize_t set_pwm_min(struct device *dev, 734 struct device_attribute *devattr, 735 const char *buf, 736 size_t count) 737{ 738 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 739 struct adt7470_data *data = dev_get_drvdata(dev); 740 struct i2c_client *client = data->client; 741 long temp; 742 743 if (kstrtol(buf, 10, &temp)) 744 return -EINVAL; 745 746 temp = clamp_val(temp, 0, 255); 747 748 mutex_lock(&data->lock); 749 data->pwm_min[attr->index] = temp; 750 i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_MIN(attr->index), 751 temp); 752 mutex_unlock(&data->lock); 753 754 return count; 755} 756 757static ssize_t show_pwm_tmax(struct device *dev, 758 struct device_attribute *devattr, 759 char *buf) 760{ 761 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 762 struct adt7470_data *data = adt7470_update_device(dev); 763 /* the datasheet says that tmax = tmin + 20C */ 764 return sprintf(buf, "%d\n", 1000 * (20 + data->pwm_tmin[attr->index])); 765} 766 767static ssize_t show_pwm_tmin(struct device *dev, 768 struct device_attribute *devattr, 769 char *buf) 770{ 771 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 772 struct adt7470_data *data = adt7470_update_device(dev); 773 return sprintf(buf, "%d\n", 1000 * data->pwm_tmin[attr->index]); 774} 775 776static ssize_t set_pwm_tmin(struct device *dev, 777 struct device_attribute *devattr, 778 const char *buf, 779 size_t count) 780{ 781 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 782 struct adt7470_data *data = dev_get_drvdata(dev); 783 struct i2c_client *client = data->client; 784 long temp; 785 786 if (kstrtol(buf, 10, &temp)) 787 return -EINVAL; 788 789 temp = DIV_ROUND_CLOSEST(temp, 1000); 790 temp = clamp_val(temp, -128, 127); 791 792 mutex_lock(&data->lock); 793 data->pwm_tmin[attr->index] = temp; 794 i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_TMIN(attr->index), 795 temp); 796 mutex_unlock(&data->lock); 797 798 return count; 799} 800 801static ssize_t show_pwm_auto(struct device *dev, 802 struct device_attribute *devattr, 803 char *buf) 804{ 805 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 806 struct adt7470_data *data = adt7470_update_device(dev); 807 return sprintf(buf, "%d\n", 1 + data->pwm_automatic[attr->index]); 808} 809 810static ssize_t set_pwm_auto(struct device *dev, 811 struct device_attribute *devattr, 812 const char *buf, 813 size_t count) 814{ 815 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 816 struct adt7470_data *data = dev_get_drvdata(dev); 817 struct i2c_client *client = data->client; 818 int pwm_auto_reg = ADT7470_REG_PWM_CFG(attr->index); 819 int pwm_auto_reg_mask; 820 long temp; 821 u8 reg; 822 823 if (kstrtol(buf, 10, &temp)) 824 return -EINVAL; 825 826 if (attr->index % 2) 827 pwm_auto_reg_mask = ADT7470_PWM2_AUTO_MASK; 828 else 829 pwm_auto_reg_mask = ADT7470_PWM1_AUTO_MASK; 830 831 if (temp != 2 && temp != 1) 832 return -EINVAL; 833 temp--; 834 835 mutex_lock(&data->lock); 836 data->pwm_automatic[attr->index] = temp; 837 reg = i2c_smbus_read_byte_data(client, pwm_auto_reg); 838 if (temp) 839 reg |= pwm_auto_reg_mask; 840 else 841 reg &= ~pwm_auto_reg_mask; 842 i2c_smbus_write_byte_data(client, pwm_auto_reg, reg); 843 mutex_unlock(&data->lock); 844 845 return count; 846} 847 848static ssize_t show_pwm_auto_temp(struct device *dev, 849 struct device_attribute *devattr, 850 char *buf) 851{ 852 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 853 struct adt7470_data *data = adt7470_update_device(dev); 854 u8 ctrl = data->pwm_auto_temp[attr->index]; 855 856 if (ctrl) 857 return sprintf(buf, "%d\n", 1 << (ctrl - 1)); 858 else 859 return sprintf(buf, "%d\n", ADT7470_PWM_ALL_TEMPS); 860} 861 862static int cvt_auto_temp(int input) 863{ 864 if (input == ADT7470_PWM_ALL_TEMPS) 865 return 0; 866 if (input < 1 || !is_power_of_2(input)) 867 return -EINVAL; 868 return ilog2(input) + 1; 869} 870 871static ssize_t set_pwm_auto_temp(struct device *dev, 872 struct device_attribute *devattr, 873 const char *buf, 874 size_t count) 875{ 876 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 877 struct adt7470_data *data = dev_get_drvdata(dev); 878 struct i2c_client *client = data->client; 879 int pwm_auto_reg = ADT7470_REG_PWM_AUTO_TEMP(attr->index); 880 long temp; 881 u8 reg; 882 883 if (kstrtol(buf, 10, &temp)) 884 return -EINVAL; 885 886 temp = cvt_auto_temp(temp); 887 if (temp < 0) 888 return temp; 889 890 mutex_lock(&data->lock); 891 data->pwm_automatic[attr->index] = temp; 892 reg = i2c_smbus_read_byte_data(client, pwm_auto_reg); 893 894 if (!(attr->index % 2)) { 895 reg &= 0xF; 896 reg |= (temp << 4) & 0xF0; 897 } else { 898 reg &= 0xF0; 899 reg |= temp & 0xF; 900 } 901 902 i2c_smbus_write_byte_data(client, pwm_auto_reg, reg); 903 mutex_unlock(&data->lock); 904 905 return count; 906} 907 908static ssize_t show_alarm(struct device *dev, 909 struct device_attribute *devattr, 910 char *buf) 911{ 912 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 913 struct adt7470_data *data = adt7470_update_device(dev); 914 915 if (data->alarm & attr->index) 916 return sprintf(buf, "1\n"); 917 else 918 return sprintf(buf, "0\n"); 919} 920 921static DEVICE_ATTR(alarm_mask, S_IRUGO, show_alarm_mask, NULL); 922static DEVICE_ATTR(num_temp_sensors, S_IWUSR | S_IRUGO, show_num_temp_sensors, 923 set_num_temp_sensors); 924static DEVICE_ATTR(auto_update_interval, S_IWUSR | S_IRUGO, 925 show_auto_update_interval, set_auto_update_interval); 926 927static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max, 928 set_temp_max, 0); 929static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp_max, 930 set_temp_max, 1); 931static SENSOR_DEVICE_ATTR(temp3_max, S_IWUSR | S_IRUGO, show_temp_max, 932 set_temp_max, 2); 933static SENSOR_DEVICE_ATTR(temp4_max, S_IWUSR | S_IRUGO, show_temp_max, 934 set_temp_max, 3); 935static SENSOR_DEVICE_ATTR(temp5_max, S_IWUSR | S_IRUGO, show_temp_max, 936 set_temp_max, 4); 937static SENSOR_DEVICE_ATTR(temp6_max, S_IWUSR | S_IRUGO, show_temp_max, 938 set_temp_max, 5); 939static SENSOR_DEVICE_ATTR(temp7_max, S_IWUSR | S_IRUGO, show_temp_max, 940 set_temp_max, 6); 941static SENSOR_DEVICE_ATTR(temp8_max, S_IWUSR | S_IRUGO, show_temp_max, 942 set_temp_max, 7); 943static SENSOR_DEVICE_ATTR(temp9_max, S_IWUSR | S_IRUGO, show_temp_max, 944 set_temp_max, 8); 945static SENSOR_DEVICE_ATTR(temp10_max, S_IWUSR | S_IRUGO, show_temp_max, 946 set_temp_max, 9); 947 948static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp_min, 949 set_temp_min, 0); 950static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp_min, 951 set_temp_min, 1); 952static SENSOR_DEVICE_ATTR(temp3_min, S_IWUSR | S_IRUGO, show_temp_min, 953 set_temp_min, 2); 954static SENSOR_DEVICE_ATTR(temp4_min, S_IWUSR | S_IRUGO, show_temp_min, 955 set_temp_min, 3); 956static SENSOR_DEVICE_ATTR(temp5_min, S_IWUSR | S_IRUGO, show_temp_min, 957 set_temp_min, 4); 958static SENSOR_DEVICE_ATTR(temp6_min, S_IWUSR | S_IRUGO, show_temp_min, 959 set_temp_min, 5); 960static SENSOR_DEVICE_ATTR(temp7_min, S_IWUSR | S_IRUGO, show_temp_min, 961 set_temp_min, 6); 962static SENSOR_DEVICE_ATTR(temp8_min, S_IWUSR | S_IRUGO, show_temp_min, 963 set_temp_min, 7); 964static SENSOR_DEVICE_ATTR(temp9_min, S_IWUSR | S_IRUGO, show_temp_min, 965 set_temp_min, 8); 966static SENSOR_DEVICE_ATTR(temp10_min, S_IWUSR | S_IRUGO, show_temp_min, 967 set_temp_min, 9); 968 969static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0); 970static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1); 971static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2); 972static SENSOR_DEVICE_ATTR(temp4_input, S_IRUGO, show_temp, NULL, 3); 973static SENSOR_DEVICE_ATTR(temp5_input, S_IRUGO, show_temp, NULL, 4); 974static SENSOR_DEVICE_ATTR(temp6_input, S_IRUGO, show_temp, NULL, 5); 975static SENSOR_DEVICE_ATTR(temp7_input, S_IRUGO, show_temp, NULL, 6); 976static SENSOR_DEVICE_ATTR(temp8_input, S_IRUGO, show_temp, NULL, 7); 977static SENSOR_DEVICE_ATTR(temp9_input, S_IRUGO, show_temp, NULL, 8); 978static SENSOR_DEVICE_ATTR(temp10_input, S_IRUGO, show_temp, NULL, 9); 979 980static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 981 ADT7470_R1T_ALARM); 982static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 983 ADT7470_R2T_ALARM); 984static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 985 ADT7470_R3T_ALARM); 986static SENSOR_DEVICE_ATTR(temp4_alarm, S_IRUGO, show_alarm, NULL, 987 ADT7470_R4T_ALARM); 988static SENSOR_DEVICE_ATTR(temp5_alarm, S_IRUGO, show_alarm, NULL, 989 ADT7470_R5T_ALARM); 990static SENSOR_DEVICE_ATTR(temp6_alarm, S_IRUGO, show_alarm, NULL, 991 ADT7470_R6T_ALARM); 992static SENSOR_DEVICE_ATTR(temp7_alarm, S_IRUGO, show_alarm, NULL, 993 ADT7470_R7T_ALARM); 994static SENSOR_DEVICE_ATTR(temp8_alarm, S_IRUGO, show_alarm, NULL, 995 ALARM2(ADT7470_R8T_ALARM)); 996static SENSOR_DEVICE_ATTR(temp9_alarm, S_IRUGO, show_alarm, NULL, 997 ALARM2(ADT7470_R9T_ALARM)); 998static SENSOR_DEVICE_ATTR(temp10_alarm, S_IRUGO, show_alarm, NULL, 999 ALARM2(ADT7470_R10T_ALARM)); 1000 1001static SENSOR_DEVICE_ATTR(fan1_max, S_IWUSR | S_IRUGO, show_fan_max, 1002 set_fan_max, 0); 1003static SENSOR_DEVICE_ATTR(fan2_max, S_IWUSR | S_IRUGO, show_fan_max, 1004 set_fan_max, 1); 1005static SENSOR_DEVICE_ATTR(fan3_max, S_IWUSR | S_IRUGO, show_fan_max, 1006 set_fan_max, 2); 1007static SENSOR_DEVICE_ATTR(fan4_max, S_IWUSR | S_IRUGO, show_fan_max, 1008 set_fan_max, 3); 1009 1010static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min, 1011 set_fan_min, 0); 1012static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min, 1013 set_fan_min, 1); 1014static SENSOR_DEVICE_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min, 1015 set_fan_min, 2); 1016static SENSOR_DEVICE_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min, 1017 set_fan_min, 3); 1018 1019static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0); 1020static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1); 1021static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2); 1022static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3); 1023 1024static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 1025 ALARM2(ADT7470_FAN1_ALARM)); 1026static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 1027 ALARM2(ADT7470_FAN2_ALARM)); 1028static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 1029 ALARM2(ADT7470_FAN3_ALARM)); 1030static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 1031 ALARM2(ADT7470_FAN4_ALARM)); 1032 1033static SENSOR_DEVICE_ATTR(force_pwm_max, S_IWUSR | S_IRUGO, 1034 show_force_pwm_max, set_force_pwm_max, 0); 1035 1036static SENSOR_DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 0); 1037static SENSOR_DEVICE_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 1); 1038static SENSOR_DEVICE_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 2); 1039static SENSOR_DEVICE_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 3); 1040 1041static SENSOR_DEVICE_ATTR(pwm1_auto_point1_pwm, S_IWUSR | S_IRUGO, 1042 show_pwm_min, set_pwm_min, 0); 1043static SENSOR_DEVICE_ATTR(pwm2_auto_point1_pwm, S_IWUSR | S_IRUGO, 1044 show_pwm_min, set_pwm_min, 1); 1045static SENSOR_DEVICE_ATTR(pwm3_auto_point1_pwm, S_IWUSR | S_IRUGO, 1046 show_pwm_min, set_pwm_min, 2); 1047static SENSOR_DEVICE_ATTR(pwm4_auto_point1_pwm, S_IWUSR | S_IRUGO, 1048 show_pwm_min, set_pwm_min, 3); 1049 1050static SENSOR_DEVICE_ATTR(pwm1_auto_point2_pwm, S_IWUSR | S_IRUGO, 1051 show_pwm_max, set_pwm_max, 0); 1052static SENSOR_DEVICE_ATTR(pwm2_auto_point2_pwm, S_IWUSR | S_IRUGO, 1053 show_pwm_max, set_pwm_max, 1); 1054static SENSOR_DEVICE_ATTR(pwm3_auto_point2_pwm, S_IWUSR | S_IRUGO, 1055 show_pwm_max, set_pwm_max, 2); 1056static SENSOR_DEVICE_ATTR(pwm4_auto_point2_pwm, S_IWUSR | S_IRUGO, 1057 show_pwm_max, set_pwm_max, 3); 1058 1059static SENSOR_DEVICE_ATTR(pwm1_auto_point1_temp, S_IWUSR | S_IRUGO, 1060 show_pwm_tmin, set_pwm_tmin, 0); 1061static SENSOR_DEVICE_ATTR(pwm2_auto_point1_temp, S_IWUSR | S_IRUGO, 1062 show_pwm_tmin, set_pwm_tmin, 1); 1063static SENSOR_DEVICE_ATTR(pwm3_auto_point1_temp, S_IWUSR | S_IRUGO, 1064 show_pwm_tmin, set_pwm_tmin, 2); 1065static SENSOR_DEVICE_ATTR(pwm4_auto_point1_temp, S_IWUSR | S_IRUGO, 1066 show_pwm_tmin, set_pwm_tmin, 3); 1067 1068static SENSOR_DEVICE_ATTR(pwm1_auto_point2_temp, S_IRUGO, show_pwm_tmax, 1069 NULL, 0); 1070static SENSOR_DEVICE_ATTR(pwm2_auto_point2_temp, S_IRUGO, show_pwm_tmax, 1071 NULL, 1); 1072static SENSOR_DEVICE_ATTR(pwm3_auto_point2_temp, S_IRUGO, show_pwm_tmax, 1073 NULL, 2); 1074static SENSOR_DEVICE_ATTR(pwm4_auto_point2_temp, S_IRUGO, show_pwm_tmax, 1075 NULL, 3); 1076 1077static SENSOR_DEVICE_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_auto, 1078 set_pwm_auto, 0); 1079static SENSOR_DEVICE_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_auto, 1080 set_pwm_auto, 1); 1081static SENSOR_DEVICE_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_auto, 1082 set_pwm_auto, 2); 1083static SENSOR_DEVICE_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_auto, 1084 set_pwm_auto, 3); 1085 1086static SENSOR_DEVICE_ATTR(pwm1_auto_channels_temp, S_IWUSR | S_IRUGO, 1087 show_pwm_auto_temp, set_pwm_auto_temp, 0); 1088static SENSOR_DEVICE_ATTR(pwm2_auto_channels_temp, S_IWUSR | S_IRUGO, 1089 show_pwm_auto_temp, set_pwm_auto_temp, 1); 1090static SENSOR_DEVICE_ATTR(pwm3_auto_channels_temp, S_IWUSR | S_IRUGO, 1091 show_pwm_auto_temp, set_pwm_auto_temp, 2); 1092static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO, 1093 show_pwm_auto_temp, set_pwm_auto_temp, 3); 1094 1095static struct attribute *adt7470_attrs[] = { 1096 &dev_attr_alarm_mask.attr, 1097 &dev_attr_num_temp_sensors.attr, 1098 &dev_attr_auto_update_interval.attr, 1099 &sensor_dev_attr_temp1_max.dev_attr.attr, 1100 &sensor_dev_attr_temp2_max.dev_attr.attr, 1101 &sensor_dev_attr_temp3_max.dev_attr.attr, 1102 &sensor_dev_attr_temp4_max.dev_attr.attr, 1103 &sensor_dev_attr_temp5_max.dev_attr.attr, 1104 &sensor_dev_attr_temp6_max.dev_attr.attr, 1105 &sensor_dev_attr_temp7_max.dev_attr.attr, 1106 &sensor_dev_attr_temp8_max.dev_attr.attr, 1107 &sensor_dev_attr_temp9_max.dev_attr.attr, 1108 &sensor_dev_attr_temp10_max.dev_attr.attr, 1109 &sensor_dev_attr_temp1_min.dev_attr.attr, 1110 &sensor_dev_attr_temp2_min.dev_attr.attr, 1111 &sensor_dev_attr_temp3_min.dev_attr.attr, 1112 &sensor_dev_attr_temp4_min.dev_attr.attr, 1113 &sensor_dev_attr_temp5_min.dev_attr.attr, 1114 &sensor_dev_attr_temp6_min.dev_attr.attr, 1115 &sensor_dev_attr_temp7_min.dev_attr.attr, 1116 &sensor_dev_attr_temp8_min.dev_attr.attr, 1117 &sensor_dev_attr_temp9_min.dev_attr.attr, 1118 &sensor_dev_attr_temp10_min.dev_attr.attr, 1119 &sensor_dev_attr_temp1_input.dev_attr.attr, 1120 &sensor_dev_attr_temp2_input.dev_attr.attr, 1121 &sensor_dev_attr_temp3_input.dev_attr.attr, 1122 &sensor_dev_attr_temp4_input.dev_attr.attr, 1123 &sensor_dev_attr_temp5_input.dev_attr.attr, 1124 &sensor_dev_attr_temp6_input.dev_attr.attr, 1125 &sensor_dev_attr_temp7_input.dev_attr.attr, 1126 &sensor_dev_attr_temp8_input.dev_attr.attr, 1127 &sensor_dev_attr_temp9_input.dev_attr.attr, 1128 &sensor_dev_attr_temp10_input.dev_attr.attr, 1129 &sensor_dev_attr_temp1_alarm.dev_attr.attr, 1130 &sensor_dev_attr_temp2_alarm.dev_attr.attr, 1131 &sensor_dev_attr_temp3_alarm.dev_attr.attr, 1132 &sensor_dev_attr_temp4_alarm.dev_attr.attr, 1133 &sensor_dev_attr_temp5_alarm.dev_attr.attr, 1134 &sensor_dev_attr_temp6_alarm.dev_attr.attr, 1135 &sensor_dev_attr_temp7_alarm.dev_attr.attr, 1136 &sensor_dev_attr_temp8_alarm.dev_attr.attr, 1137 &sensor_dev_attr_temp9_alarm.dev_attr.attr, 1138 &sensor_dev_attr_temp10_alarm.dev_attr.attr, 1139 &sensor_dev_attr_fan1_max.dev_attr.attr, 1140 &sensor_dev_attr_fan2_max.dev_attr.attr, 1141 &sensor_dev_attr_fan3_max.dev_attr.attr, 1142 &sensor_dev_attr_fan4_max.dev_attr.attr, 1143 &sensor_dev_attr_fan1_min.dev_attr.attr, 1144 &sensor_dev_attr_fan2_min.dev_attr.attr, 1145 &sensor_dev_attr_fan3_min.dev_attr.attr, 1146 &sensor_dev_attr_fan4_min.dev_attr.attr, 1147 &sensor_dev_attr_fan1_input.dev_attr.attr, 1148 &sensor_dev_attr_fan2_input.dev_attr.attr, 1149 &sensor_dev_attr_fan3_input.dev_attr.attr, 1150 &sensor_dev_attr_fan4_input.dev_attr.attr, 1151 &sensor_dev_attr_fan1_alarm.dev_attr.attr, 1152 &sensor_dev_attr_fan2_alarm.dev_attr.attr, 1153 &sensor_dev_attr_fan3_alarm.dev_attr.attr, 1154 &sensor_dev_attr_fan4_alarm.dev_attr.attr, 1155 &sensor_dev_attr_force_pwm_max.dev_attr.attr, 1156 &sensor_dev_attr_pwm1.dev_attr.attr, 1157 &sensor_dev_attr_pwm2.dev_attr.attr, 1158 &sensor_dev_attr_pwm3.dev_attr.attr, 1159 &sensor_dev_attr_pwm4.dev_attr.attr, 1160 &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr, 1161 &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr, 1162 &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr, 1163 &sensor_dev_attr_pwm4_auto_point1_pwm.dev_attr.attr, 1164 &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr, 1165 &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr, 1166 &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr, 1167 &sensor_dev_attr_pwm4_auto_point2_pwm.dev_attr.attr, 1168 &sensor_dev_attr_pwm1_auto_point1_temp.dev_attr.attr, 1169 &sensor_dev_attr_pwm2_auto_point1_temp.dev_attr.attr, 1170 &sensor_dev_attr_pwm3_auto_point1_temp.dev_attr.attr, 1171 &sensor_dev_attr_pwm4_auto_point1_temp.dev_attr.attr, 1172 &sensor_dev_attr_pwm1_auto_point2_temp.dev_attr.attr, 1173 &sensor_dev_attr_pwm2_auto_point2_temp.dev_attr.attr, 1174 &sensor_dev_attr_pwm3_auto_point2_temp.dev_attr.attr, 1175 &sensor_dev_attr_pwm4_auto_point2_temp.dev_attr.attr, 1176 &sensor_dev_attr_pwm1_enable.dev_attr.attr, 1177 &sensor_dev_attr_pwm2_enable.dev_attr.attr, 1178 &sensor_dev_attr_pwm3_enable.dev_attr.attr, 1179 &sensor_dev_attr_pwm4_enable.dev_attr.attr, 1180 &sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr, 1181 &sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr, 1182 &sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr, 1183 &sensor_dev_attr_pwm4_auto_channels_temp.dev_attr.attr, 1184 NULL 1185}; 1186 1187ATTRIBUTE_GROUPS(adt7470); 1188 1189/* Return 0 if detection is successful, -ENODEV otherwise */ 1190static int adt7470_detect(struct i2c_client *client, 1191 struct i2c_board_info *info) 1192{ 1193 struct i2c_adapter *adapter = client->adapter; 1194 int vendor, device, revision; 1195 1196 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 1197 return -ENODEV; 1198 1199 vendor = i2c_smbus_read_byte_data(client, ADT7470_REG_VENDOR); 1200 if (vendor != ADT7470_VENDOR) 1201 return -ENODEV; 1202 1203 device = i2c_smbus_read_byte_data(client, ADT7470_REG_DEVICE); 1204 if (device != ADT7470_DEVICE) 1205 return -ENODEV; 1206 1207 revision = i2c_smbus_read_byte_data(client, ADT7470_REG_REVISION); 1208 if (revision != ADT7470_REVISION) 1209 return -ENODEV; 1210 1211 strlcpy(info->type, "adt7470", I2C_NAME_SIZE); 1212 1213 return 0; 1214} 1215 1216static void adt7470_init_client(struct i2c_client *client) 1217{ 1218 int reg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG); 1219 1220 if (reg < 0) { 1221 dev_err(&client->dev, "cannot read configuration register\n"); 1222 } else { 1223 /* start monitoring (and do a self-test) */ 1224 i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, reg | 3); 1225 } 1226} 1227 1228static int adt7470_probe(struct i2c_client *client, 1229 const struct i2c_device_id *id) 1230{ 1231 struct device *dev = &client->dev; 1232 struct adt7470_data *data; 1233 struct device *hwmon_dev; 1234 1235 data = devm_kzalloc(dev, sizeof(struct adt7470_data), GFP_KERNEL); 1236 if (!data) 1237 return -ENOMEM; 1238 1239 data->num_temp_sensors = -1; 1240 data->auto_update_interval = AUTO_UPDATE_INTERVAL; 1241 1242 i2c_set_clientdata(client, data); 1243 data->client = client; 1244 mutex_init(&data->lock); 1245 1246 dev_info(&client->dev, "%s chip found\n", client->name); 1247 1248 /* Initialize the ADT7470 chip */ 1249 adt7470_init_client(client); 1250 1251 /* Register sysfs hooks */ 1252 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, 1253 data, 1254 adt7470_groups); 1255 1256 if (IS_ERR(hwmon_dev)) 1257 return PTR_ERR(hwmon_dev); 1258 1259 init_completion(&data->auto_update_stop); 1260 data->auto_update = kthread_run(adt7470_update_thread, client, "%s", 1261 dev_name(hwmon_dev)); 1262 if (IS_ERR(data->auto_update)) { 1263 return PTR_ERR(data->auto_update); 1264 } 1265 1266 return 0; 1267} 1268 1269static int adt7470_remove(struct i2c_client *client) 1270{ 1271 struct adt7470_data *data = i2c_get_clientdata(client); 1272 1273 kthread_stop(data->auto_update); 1274 wait_for_completion(&data->auto_update_stop); 1275 return 0; 1276} 1277 1278static const struct i2c_device_id adt7470_id[] = { 1279 { "adt7470", 0 }, 1280 { } 1281}; 1282MODULE_DEVICE_TABLE(i2c, adt7470_id); 1283 1284static struct i2c_driver adt7470_driver = { 1285 .class = I2C_CLASS_HWMON, 1286 .driver = { 1287 .name = "adt7470", 1288 }, 1289 .probe = adt7470_probe, 1290 .remove = adt7470_remove, 1291 .id_table = adt7470_id, 1292 .detect = adt7470_detect, 1293 .address_list = normal_i2c, 1294}; 1295 1296module_i2c_driver(adt7470_driver); 1297 1298MODULE_AUTHOR("Darrick J. Wong <darrick.wong@oracle.com>"); 1299MODULE_DESCRIPTION("ADT7470 driver"); 1300MODULE_LICENSE("GPL"); 1301