1 /* 2 * asc7621.c - Part of lm_sensors, Linux kernel modules for hardware monitoring 3 * Copyright (c) 2007, 2010 George Joseph <george.joseph@fairview5.com> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 18 */ 19 20 #include <linux/module.h> 21 #include <linux/init.h> 22 #include <linux/slab.h> 23 #include <linux/jiffies.h> 24 #include <linux/i2c.h> 25 #include <linux/hwmon.h> 26 #include <linux/hwmon-sysfs.h> 27 #include <linux/err.h> 28 #include <linux/mutex.h> 29 30 /* Addresses to scan */ 31 static const unsigned short normal_i2c[] = { 32 0x2c, 0x2d, 0x2e, I2C_CLIENT_END 33 }; 34 35 enum asc7621_type { 36 asc7621, 37 asc7621a 38 }; 39 40 #define INTERVAL_HIGH (HZ + HZ / 2) 41 #define INTERVAL_LOW (1 * 60 * HZ) 42 #define PRI_NONE 0 43 #define PRI_LOW 1 44 #define PRI_HIGH 2 45 #define FIRST_CHIP asc7621 46 #define LAST_CHIP asc7621a 47 48 struct asc7621_chip { 49 char *name; 50 enum asc7621_type chip_type; 51 u8 company_reg; 52 u8 company_id; 53 u8 verstep_reg; 54 u8 verstep_id; 55 const unsigned short *addresses; 56 }; 57 58 static struct asc7621_chip asc7621_chips[] = { 59 { 60 .name = "asc7621", 61 .chip_type = asc7621, 62 .company_reg = 0x3e, 63 .company_id = 0x61, 64 .verstep_reg = 0x3f, 65 .verstep_id = 0x6c, 66 .addresses = normal_i2c, 67 }, 68 { 69 .name = "asc7621a", 70 .chip_type = asc7621a, 71 .company_reg = 0x3e, 72 .company_id = 0x61, 73 .verstep_reg = 0x3f, 74 .verstep_id = 0x6d, 75 .addresses = normal_i2c, 76 }, 77 }; 78 79 /* 80 * Defines the highest register to be used, not the count. 81 * The actual count will probably be smaller because of gaps 82 * in the implementation (unused register locations). 83 * This define will safely set the array size of both the parameter 84 * and data arrays. 85 * This comes from the data sheet register description table. 86 */ 87 #define LAST_REGISTER 0xff 88 89 struct asc7621_data { 90 struct i2c_client client; 91 struct device *class_dev; 92 struct mutex update_lock; 93 int valid; /* !=0 if following fields are valid */ 94 unsigned long last_high_reading; /* In jiffies */ 95 unsigned long last_low_reading; /* In jiffies */ 96 /* 97 * Registers we care about occupy the corresponding index 98 * in the array. Registers we don't care about are left 99 * at 0. 100 */ 101 u8 reg[LAST_REGISTER + 1]; 102 }; 103 104 /* 105 * Macro to get the parent asc7621_param structure 106 * from a sensor_device_attribute passed into the 107 * show/store functions. 108 */ 109 #define to_asc7621_param(_sda) \ 110 container_of(_sda, struct asc7621_param, sda) 111 112 /* 113 * Each parameter to be retrieved needs an asc7621_param structure 114 * allocated. It contains the sensor_device_attribute structure 115 * and the control info needed to retrieve the value from the register map. 116 */ 117 struct asc7621_param { 118 struct sensor_device_attribute sda; 119 u8 priority; 120 u8 msb[3]; 121 u8 lsb[3]; 122 u8 mask[3]; 123 u8 shift[3]; 124 }; 125 126 /* 127 * This is the map that ultimately indicates whether we'll be 128 * retrieving a register value or not, and at what frequency. 129 */ 130 static u8 asc7621_register_priorities[255]; 131 132 static struct asc7621_data *asc7621_update_device(struct device *dev); 133 134 static inline u8 read_byte(struct i2c_client *client, u8 reg) 135 { 136 int res = i2c_smbus_read_byte_data(client, reg); 137 if (res < 0) { 138 dev_err(&client->dev, 139 "Unable to read from register 0x%02x.\n", reg); 140 return 0; 141 }; 142 return res & 0xff; 143 } 144 145 static inline int write_byte(struct i2c_client *client, u8 reg, u8 data) 146 { 147 int res = i2c_smbus_write_byte_data(client, reg, data); 148 if (res < 0) { 149 dev_err(&client->dev, 150 "Unable to write value 0x%02x to register 0x%02x.\n", 151 data, reg); 152 }; 153 return res; 154 } 155 156 /* 157 * Data Handlers 158 * Each function handles the formatting, storage 159 * and retrieval of like parameters. 160 */ 161 162 #define SETUP_SHOW_data_param(d, a) \ 163 struct sensor_device_attribute *sda = to_sensor_dev_attr(a); \ 164 struct asc7621_data *data = asc7621_update_device(d); \ 165 struct asc7621_param *param = to_asc7621_param(sda) 166 167 #define SETUP_STORE_data_param(d, a) \ 168 struct sensor_device_attribute *sda = to_sensor_dev_attr(a); \ 169 struct i2c_client *client = to_i2c_client(d); \ 170 struct asc7621_data *data = i2c_get_clientdata(client); \ 171 struct asc7621_param *param = to_asc7621_param(sda) 172 173 /* 174 * u8 is just what it sounds like...an unsigned byte with no 175 * special formatting. 176 */ 177 static ssize_t show_u8(struct device *dev, struct device_attribute *attr, 178 char *buf) 179 { 180 SETUP_SHOW_data_param(dev, attr); 181 182 return sprintf(buf, "%u\n", data->reg[param->msb[0]]); 183 } 184 185 static ssize_t store_u8(struct device *dev, struct device_attribute *attr, 186 const char *buf, size_t count) 187 { 188 SETUP_STORE_data_param(dev, attr); 189 long reqval; 190 191 if (strict_strtol(buf, 10, &reqval)) 192 return -EINVAL; 193 194 reqval = SENSORS_LIMIT(reqval, 0, 255); 195 196 mutex_lock(&data->update_lock); 197 data->reg[param->msb[0]] = reqval; 198 write_byte(client, param->msb[0], reqval); 199 mutex_unlock(&data->update_lock); 200 return count; 201 } 202 203 /* 204 * Many of the config values occupy only a few bits of a register. 205 */ 206 static ssize_t show_bitmask(struct device *dev, 207 struct device_attribute *attr, char *buf) 208 { 209 SETUP_SHOW_data_param(dev, attr); 210 211 return sprintf(buf, "%u\n", 212 (data->reg[param->msb[0]] >> param-> 213 shift[0]) & param->mask[0]); 214 } 215 216 static ssize_t store_bitmask(struct device *dev, 217 struct device_attribute *attr, 218 const char *buf, size_t count) 219 { 220 SETUP_STORE_data_param(dev, attr); 221 long reqval; 222 u8 currval; 223 224 if (strict_strtol(buf, 10, &reqval)) 225 return -EINVAL; 226 227 reqval = SENSORS_LIMIT(reqval, 0, param->mask[0]); 228 229 reqval = (reqval & param->mask[0]) << param->shift[0]; 230 231 mutex_lock(&data->update_lock); 232 currval = read_byte(client, param->msb[0]); 233 reqval |= (currval & ~(param->mask[0] << param->shift[0])); 234 data->reg[param->msb[0]] = reqval; 235 write_byte(client, param->msb[0], reqval); 236 mutex_unlock(&data->update_lock); 237 return count; 238 } 239 240 /* 241 * 16 bit fan rpm values 242 * reported by the device as the number of 11.111us periods (90khz) 243 * between full fan rotations. Therefore... 244 * RPM = (90000 * 60) / register value 245 */ 246 static ssize_t show_fan16(struct device *dev, 247 struct device_attribute *attr, char *buf) 248 { 249 SETUP_SHOW_data_param(dev, attr); 250 u16 regval; 251 252 mutex_lock(&data->update_lock); 253 regval = (data->reg[param->msb[0]] << 8) | data->reg[param->lsb[0]]; 254 mutex_unlock(&data->update_lock); 255 256 return sprintf(buf, "%u\n", 257 (regval == 0 ? -1 : (regval) == 258 0xffff ? 0 : 5400000 / regval)); 259 } 260 261 static ssize_t store_fan16(struct device *dev, 262 struct device_attribute *attr, const char *buf, 263 size_t count) 264 { 265 SETUP_STORE_data_param(dev, attr); 266 long reqval; 267 268 if (strict_strtol(buf, 10, &reqval)) 269 return -EINVAL; 270 271 /* If a minimum RPM of zero is requested, then we set the register to 272 0xffff. This value allows the fan to be stopped completely without 273 generating an alarm. */ 274 reqval = 275 (reqval <= 0 ? 0xffff : SENSORS_LIMIT(5400000 / reqval, 0, 0xfffe)); 276 277 mutex_lock(&data->update_lock); 278 data->reg[param->msb[0]] = (reqval >> 8) & 0xff; 279 data->reg[param->lsb[0]] = reqval & 0xff; 280 write_byte(client, param->msb[0], data->reg[param->msb[0]]); 281 write_byte(client, param->lsb[0], data->reg[param->lsb[0]]); 282 mutex_unlock(&data->update_lock); 283 284 return count; 285 } 286 287 /* 288 * Voltages are scaled in the device so that the nominal voltage 289 * is 3/4ths of the 0-255 range (i.e. 192). 290 * If all voltages are 'normal' then all voltage registers will 291 * read 0xC0. 292 * 293 * The data sheet provides us with the 3/4 scale value for each voltage 294 * which is stored in in_scaling. The sda->index parameter value provides 295 * the index into in_scaling. 296 * 297 * NOTE: The chip expects the first 2 inputs be 2.5 and 2.25 volts 298 * respectively. That doesn't mean that's what the motherboard provides. :) 299 */ 300 301 static int asc7621_in_scaling[] = { 302 2500, 2250, 3300, 5000, 12000 303 }; 304 305 static ssize_t show_in10(struct device *dev, struct device_attribute *attr, 306 char *buf) 307 { 308 SETUP_SHOW_data_param(dev, attr); 309 u16 regval; 310 u8 nr = sda->index; 311 312 mutex_lock(&data->update_lock); 313 regval = (data->reg[param->msb[0]] << 8) | (data->reg[param->lsb[0]]); 314 mutex_unlock(&data->update_lock); 315 316 /* The LSB value is a 2-bit scaling of the MSB's LSbit value. */ 317 regval = (regval >> 6) * asc7621_in_scaling[nr] / (0xc0 << 2); 318 319 return sprintf(buf, "%u\n", regval); 320 } 321 322 /* 8 bit voltage values (the mins and maxs) */ 323 static ssize_t show_in8(struct device *dev, struct device_attribute *attr, 324 char *buf) 325 { 326 SETUP_SHOW_data_param(dev, attr); 327 u8 nr = sda->index; 328 329 return sprintf(buf, "%u\n", 330 ((data->reg[param->msb[0]] * 331 asc7621_in_scaling[nr]) / 0xc0)); 332 } 333 334 static ssize_t store_in8(struct device *dev, struct device_attribute *attr, 335 const char *buf, size_t count) 336 { 337 SETUP_STORE_data_param(dev, attr); 338 long reqval; 339 u8 nr = sda->index; 340 341 if (strict_strtol(buf, 10, &reqval)) 342 return -EINVAL; 343 344 reqval = SENSORS_LIMIT(reqval, 0, 0xffff); 345 346 reqval = reqval * 0xc0 / asc7621_in_scaling[nr]; 347 348 reqval = SENSORS_LIMIT(reqval, 0, 0xff); 349 350 mutex_lock(&data->update_lock); 351 data->reg[param->msb[0]] = reqval; 352 write_byte(client, param->msb[0], reqval); 353 mutex_unlock(&data->update_lock); 354 355 return count; 356 } 357 358 static ssize_t show_temp8(struct device *dev, 359 struct device_attribute *attr, char *buf) 360 { 361 SETUP_SHOW_data_param(dev, attr); 362 363 return sprintf(buf, "%d\n", ((s8) data->reg[param->msb[0]]) * 1000); 364 } 365 366 static ssize_t store_temp8(struct device *dev, 367 struct device_attribute *attr, const char *buf, 368 size_t count) 369 { 370 SETUP_STORE_data_param(dev, attr); 371 long reqval; 372 s8 temp; 373 374 if (strict_strtol(buf, 10, &reqval)) 375 return -EINVAL; 376 377 reqval = SENSORS_LIMIT(reqval, -127000, 127000); 378 379 temp = reqval / 1000; 380 381 mutex_lock(&data->update_lock); 382 data->reg[param->msb[0]] = temp; 383 write_byte(client, param->msb[0], temp); 384 mutex_unlock(&data->update_lock); 385 return count; 386 } 387 388 /* 389 * Temperatures that occupy 2 bytes always have the whole 390 * number of degrees in the MSB with some part of the LSB 391 * indicating fractional degrees. 392 */ 393 394 /* mmmmmmmm.llxxxxxx */ 395 static ssize_t show_temp10(struct device *dev, 396 struct device_attribute *attr, char *buf) 397 { 398 SETUP_SHOW_data_param(dev, attr); 399 u8 msb, lsb; 400 int temp; 401 402 mutex_lock(&data->update_lock); 403 msb = data->reg[param->msb[0]]; 404 lsb = (data->reg[param->lsb[0]] >> 6) & 0x03; 405 temp = (((s8) msb) * 1000) + (lsb * 250); 406 mutex_unlock(&data->update_lock); 407 408 return sprintf(buf, "%d\n", temp); 409 } 410 411 /* mmmmmm.ll */ 412 static ssize_t show_temp62(struct device *dev, 413 struct device_attribute *attr, char *buf) 414 { 415 SETUP_SHOW_data_param(dev, attr); 416 u8 regval = data->reg[param->msb[0]]; 417 int temp = ((s8) (regval & 0xfc) * 1000) + ((regval & 0x03) * 250); 418 419 return sprintf(buf, "%d\n", temp); 420 } 421 422 static ssize_t store_temp62(struct device *dev, 423 struct device_attribute *attr, const char *buf, 424 size_t count) 425 { 426 SETUP_STORE_data_param(dev, attr); 427 long reqval, i, f; 428 s8 temp; 429 430 if (strict_strtol(buf, 10, &reqval)) 431 return -EINVAL; 432 433 reqval = SENSORS_LIMIT(reqval, -32000, 31750); 434 i = reqval / 1000; 435 f = reqval - (i * 1000); 436 temp = i << 2; 437 temp |= f / 250; 438 439 mutex_lock(&data->update_lock); 440 data->reg[param->msb[0]] = temp; 441 write_byte(client, param->msb[0], temp); 442 mutex_unlock(&data->update_lock); 443 return count; 444 } 445 446 /* 447 * The aSC7621 doesn't provide an "auto_point2". Instead, you 448 * specify the auto_point1 and a range. To keep with the sysfs 449 * hwmon specs, we synthesize the auto_point_2 from them. 450 */ 451 452 static u32 asc7621_range_map[] = { 453 2000, 2500, 3330, 4000, 5000, 6670, 8000, 10000, 454 13330, 16000, 20000, 26670, 32000, 40000, 53330, 80000, 455 }; 456 457 static ssize_t show_ap2_temp(struct device *dev, 458 struct device_attribute *attr, char *buf) 459 { 460 SETUP_SHOW_data_param(dev, attr); 461 long auto_point1; 462 u8 regval; 463 int temp; 464 465 mutex_lock(&data->update_lock); 466 auto_point1 = ((s8) data->reg[param->msb[1]]) * 1000; 467 regval = 468 ((data->reg[param->msb[0]] >> param->shift[0]) & param->mask[0]); 469 temp = auto_point1 + asc7621_range_map[SENSORS_LIMIT(regval, 0, 15)]; 470 mutex_unlock(&data->update_lock); 471 472 return sprintf(buf, "%d\n", temp); 473 474 } 475 476 static ssize_t store_ap2_temp(struct device *dev, 477 struct device_attribute *attr, 478 const char *buf, size_t count) 479 { 480 SETUP_STORE_data_param(dev, attr); 481 long reqval, auto_point1; 482 int i; 483 u8 currval, newval = 0; 484 485 if (strict_strtol(buf, 10, &reqval)) 486 return -EINVAL; 487 488 mutex_lock(&data->update_lock); 489 auto_point1 = data->reg[param->msb[1]] * 1000; 490 reqval = SENSORS_LIMIT(reqval, auto_point1 + 2000, auto_point1 + 80000); 491 492 for (i = ARRAY_SIZE(asc7621_range_map) - 1; i >= 0; i--) { 493 if (reqval >= auto_point1 + asc7621_range_map[i]) { 494 newval = i; 495 break; 496 } 497 } 498 499 newval = (newval & param->mask[0]) << param->shift[0]; 500 currval = read_byte(client, param->msb[0]); 501 newval |= (currval & ~(param->mask[0] << param->shift[0])); 502 data->reg[param->msb[0]] = newval; 503 write_byte(client, param->msb[0], newval); 504 mutex_unlock(&data->update_lock); 505 return count; 506 } 507 508 static ssize_t show_pwm_ac(struct device *dev, 509 struct device_attribute *attr, char *buf) 510 { 511 SETUP_SHOW_data_param(dev, attr); 512 u8 config, altbit, regval; 513 u8 map[] = { 514 0x01, 0x02, 0x04, 0x1f, 0x00, 0x06, 0x07, 0x10, 515 0x08, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f 516 }; 517 518 mutex_lock(&data->update_lock); 519 config = (data->reg[param->msb[0]] >> param->shift[0]) & param->mask[0]; 520 altbit = (data->reg[param->msb[1]] >> param->shift[1]) & param->mask[1]; 521 regval = config | (altbit << 3); 522 mutex_unlock(&data->update_lock); 523 524 return sprintf(buf, "%u\n", map[SENSORS_LIMIT(regval, 0, 15)]); 525 } 526 527 static ssize_t store_pwm_ac(struct device *dev, 528 struct device_attribute *attr, 529 const char *buf, size_t count) 530 { 531 SETUP_STORE_data_param(dev, attr); 532 unsigned long reqval; 533 u8 currval, config, altbit, newval; 534 u16 map[] = { 535 0x04, 0x00, 0x01, 0xff, 0x02, 0xff, 0x05, 0x06, 536 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 537 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 538 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 539 }; 540 541 if (strict_strtoul(buf, 10, &reqval)) 542 return -EINVAL; 543 544 if (reqval > 31) 545 return -EINVAL; 546 547 reqval = map[reqval]; 548 if (reqval == 0xff) 549 return -EINVAL; 550 551 config = reqval & 0x07; 552 altbit = (reqval >> 3) & 0x01; 553 554 config = (config & param->mask[0]) << param->shift[0]; 555 altbit = (altbit & param->mask[1]) << param->shift[1]; 556 557 mutex_lock(&data->update_lock); 558 currval = read_byte(client, param->msb[0]); 559 newval = config | (currval & ~(param->mask[0] << param->shift[0])); 560 newval = altbit | (newval & ~(param->mask[1] << param->shift[1])); 561 data->reg[param->msb[0]] = newval; 562 write_byte(client, param->msb[0], newval); 563 mutex_unlock(&data->update_lock); 564 return count; 565 } 566 567 static ssize_t show_pwm_enable(struct device *dev, 568 struct device_attribute *attr, char *buf) 569 { 570 SETUP_SHOW_data_param(dev, attr); 571 u8 config, altbit, minoff, val, newval; 572 573 mutex_lock(&data->update_lock); 574 config = (data->reg[param->msb[0]] >> param->shift[0]) & param->mask[0]; 575 altbit = (data->reg[param->msb[1]] >> param->shift[1]) & param->mask[1]; 576 minoff = (data->reg[param->msb[2]] >> param->shift[2]) & param->mask[2]; 577 mutex_unlock(&data->update_lock); 578 579 val = config | (altbit << 3); 580 newval = 0; 581 582 if (val == 3 || val >= 10) 583 newval = 255; 584 else if (val == 4) 585 newval = 0; 586 else if (val == 7) 587 newval = 1; 588 else if (minoff == 1) 589 newval = 2; 590 else 591 newval = 3; 592 593 return sprintf(buf, "%u\n", newval); 594 } 595 596 static ssize_t store_pwm_enable(struct device *dev, 597 struct device_attribute *attr, 598 const char *buf, size_t count) 599 { 600 SETUP_STORE_data_param(dev, attr); 601 long reqval; 602 u8 currval, config, altbit, newval, minoff = 255; 603 604 if (strict_strtol(buf, 10, &reqval)) 605 return -EINVAL; 606 607 switch (reqval) { 608 case 0: 609 newval = 0x04; 610 break; 611 case 1: 612 newval = 0x07; 613 break; 614 case 2: 615 newval = 0x00; 616 minoff = 1; 617 break; 618 case 3: 619 newval = 0x00; 620 minoff = 0; 621 break; 622 case 255: 623 newval = 0x03; 624 break; 625 default: 626 return -EINVAL; 627 } 628 629 config = newval & 0x07; 630 altbit = (newval >> 3) & 0x01; 631 632 mutex_lock(&data->update_lock); 633 config = (config & param->mask[0]) << param->shift[0]; 634 altbit = (altbit & param->mask[1]) << param->shift[1]; 635 currval = read_byte(client, param->msb[0]); 636 newval = config | (currval & ~(param->mask[0] << param->shift[0])); 637 newval = altbit | (newval & ~(param->mask[1] << param->shift[1])); 638 data->reg[param->msb[0]] = newval; 639 write_byte(client, param->msb[0], newval); 640 if (minoff < 255) { 641 minoff = (minoff & param->mask[2]) << param->shift[2]; 642 currval = read_byte(client, param->msb[2]); 643 newval = 644 minoff | (currval & ~(param->mask[2] << param->shift[2])); 645 data->reg[param->msb[2]] = newval; 646 write_byte(client, param->msb[2], newval); 647 } 648 mutex_unlock(&data->update_lock); 649 return count; 650 } 651 652 static u32 asc7621_pwm_freq_map[] = { 653 10, 15, 23, 30, 38, 47, 62, 94, 654 23000, 24000, 25000, 26000, 27000, 28000, 29000, 30000 655 }; 656 657 static ssize_t show_pwm_freq(struct device *dev, 658 struct device_attribute *attr, char *buf) 659 { 660 SETUP_SHOW_data_param(dev, attr); 661 u8 regval = 662 (data->reg[param->msb[0]] >> param->shift[0]) & param->mask[0]; 663 664 regval = SENSORS_LIMIT(regval, 0, 15); 665 666 return sprintf(buf, "%u\n", asc7621_pwm_freq_map[regval]); 667 } 668 669 static ssize_t store_pwm_freq(struct device *dev, 670 struct device_attribute *attr, 671 const char *buf, size_t count) 672 { 673 SETUP_STORE_data_param(dev, attr); 674 unsigned long reqval; 675 u8 currval, newval = 255; 676 int i; 677 678 if (strict_strtoul(buf, 10, &reqval)) 679 return -EINVAL; 680 681 for (i = 0; i < ARRAY_SIZE(asc7621_pwm_freq_map); i++) { 682 if (reqval == asc7621_pwm_freq_map[i]) { 683 newval = i; 684 break; 685 } 686 } 687 if (newval == 255) 688 return -EINVAL; 689 690 newval = (newval & param->mask[0]) << param->shift[0]; 691 692 mutex_lock(&data->update_lock); 693 currval = read_byte(client, param->msb[0]); 694 newval |= (currval & ~(param->mask[0] << param->shift[0])); 695 data->reg[param->msb[0]] = newval; 696 write_byte(client, param->msb[0], newval); 697 mutex_unlock(&data->update_lock); 698 return count; 699 } 700 701 static u32 asc7621_pwm_auto_spinup_map[] = { 702 0, 100, 250, 400, 700, 1000, 2000, 4000 703 }; 704 705 static ssize_t show_pwm_ast(struct device *dev, 706 struct device_attribute *attr, char *buf) 707 { 708 SETUP_SHOW_data_param(dev, attr); 709 u8 regval = 710 (data->reg[param->msb[0]] >> param->shift[0]) & param->mask[0]; 711 712 regval = SENSORS_LIMIT(regval, 0, 7); 713 714 return sprintf(buf, "%u\n", asc7621_pwm_auto_spinup_map[regval]); 715 716 } 717 718 static ssize_t store_pwm_ast(struct device *dev, 719 struct device_attribute *attr, 720 const char *buf, size_t count) 721 { 722 SETUP_STORE_data_param(dev, attr); 723 long reqval; 724 u8 currval, newval = 255; 725 u32 i; 726 727 if (strict_strtol(buf, 10, &reqval)) 728 return -EINVAL; 729 730 for (i = 0; i < ARRAY_SIZE(asc7621_pwm_auto_spinup_map); i++) { 731 if (reqval == asc7621_pwm_auto_spinup_map[i]) { 732 newval = i; 733 break; 734 } 735 } 736 if (newval == 255) 737 return -EINVAL; 738 739 newval = (newval & param->mask[0]) << param->shift[0]; 740 741 mutex_lock(&data->update_lock); 742 currval = read_byte(client, param->msb[0]); 743 newval |= (currval & ~(param->mask[0] << param->shift[0])); 744 data->reg[param->msb[0]] = newval; 745 write_byte(client, param->msb[0], newval); 746 mutex_unlock(&data->update_lock); 747 return count; 748 } 749 750 static u32 asc7621_temp_smoothing_time_map[] = { 751 35000, 17600, 11800, 7000, 4400, 3000, 1600, 800 752 }; 753 754 static ssize_t show_temp_st(struct device *dev, 755 struct device_attribute *attr, char *buf) 756 { 757 SETUP_SHOW_data_param(dev, attr); 758 u8 regval = 759 (data->reg[param->msb[0]] >> param->shift[0]) & param->mask[0]; 760 regval = SENSORS_LIMIT(regval, 0, 7); 761 762 return sprintf(buf, "%u\n", asc7621_temp_smoothing_time_map[regval]); 763 } 764 765 static ssize_t store_temp_st(struct device *dev, 766 struct device_attribute *attr, 767 const char *buf, size_t count) 768 { 769 SETUP_STORE_data_param(dev, attr); 770 long reqval; 771 u8 currval, newval = 255; 772 u32 i; 773 774 if (strict_strtol(buf, 10, &reqval)) 775 return -EINVAL; 776 777 for (i = 0; i < ARRAY_SIZE(asc7621_temp_smoothing_time_map); i++) { 778 if (reqval == asc7621_temp_smoothing_time_map[i]) { 779 newval = i; 780 break; 781 } 782 } 783 784 if (newval == 255) 785 return -EINVAL; 786 787 newval = (newval & param->mask[0]) << param->shift[0]; 788 789 mutex_lock(&data->update_lock); 790 currval = read_byte(client, param->msb[0]); 791 newval |= (currval & ~(param->mask[0] << param->shift[0])); 792 data->reg[param->msb[0]] = newval; 793 write_byte(client, param->msb[0], newval); 794 mutex_unlock(&data->update_lock); 795 return count; 796 } 797 798 /* 799 * End of data handlers 800 * 801 * These defines do nothing more than make the table easier 802 * to read when wrapped at column 80. 803 */ 804 805 /* 806 * Creates a variable length array inititalizer. 807 * VAA(1,3,5,7) would produce {1,3,5,7} 808 */ 809 #define VAA(args...) {args} 810 811 #define PREAD(name, n, pri, rm, rl, m, s, r) \ 812 {.sda = SENSOR_ATTR(name, S_IRUGO, show_##r, NULL, n), \ 813 .priority = pri, .msb[0] = rm, .lsb[0] = rl, .mask[0] = m, \ 814 .shift[0] = s,} 815 816 #define PWRITE(name, n, pri, rm, rl, m, s, r) \ 817 {.sda = SENSOR_ATTR(name, S_IRUGO | S_IWUSR, show_##r, store_##r, n), \ 818 .priority = pri, .msb[0] = rm, .lsb[0] = rl, .mask[0] = m, \ 819 .shift[0] = s,} 820 821 /* 822 * PWRITEM assumes that the initializers for the .msb, .lsb, .mask and .shift 823 * were created using the VAA macro. 824 */ 825 #define PWRITEM(name, n, pri, rm, rl, m, s, r) \ 826 {.sda = SENSOR_ATTR(name, S_IRUGO | S_IWUSR, show_##r, store_##r, n), \ 827 .priority = pri, .msb = rm, .lsb = rl, .mask = m, .shift = s,} 828 829 static struct asc7621_param asc7621_params[] = { 830 PREAD(in0_input, 0, PRI_HIGH, 0x20, 0x13, 0, 0, in10), 831 PREAD(in1_input, 1, PRI_HIGH, 0x21, 0x18, 0, 0, in10), 832 PREAD(in2_input, 2, PRI_HIGH, 0x22, 0x11, 0, 0, in10), 833 PREAD(in3_input, 3, PRI_HIGH, 0x23, 0x12, 0, 0, in10), 834 PREAD(in4_input, 4, PRI_HIGH, 0x24, 0x14, 0, 0, in10), 835 836 PWRITE(in0_min, 0, PRI_LOW, 0x44, 0, 0, 0, in8), 837 PWRITE(in1_min, 1, PRI_LOW, 0x46, 0, 0, 0, in8), 838 PWRITE(in2_min, 2, PRI_LOW, 0x48, 0, 0, 0, in8), 839 PWRITE(in3_min, 3, PRI_LOW, 0x4a, 0, 0, 0, in8), 840 PWRITE(in4_min, 4, PRI_LOW, 0x4c, 0, 0, 0, in8), 841 842 PWRITE(in0_max, 0, PRI_LOW, 0x45, 0, 0, 0, in8), 843 PWRITE(in1_max, 1, PRI_LOW, 0x47, 0, 0, 0, in8), 844 PWRITE(in2_max, 2, PRI_LOW, 0x49, 0, 0, 0, in8), 845 PWRITE(in3_max, 3, PRI_LOW, 0x4b, 0, 0, 0, in8), 846 PWRITE(in4_max, 4, PRI_LOW, 0x4d, 0, 0, 0, in8), 847 848 PREAD(in0_alarm, 0, PRI_HIGH, 0x41, 0, 0x01, 0, bitmask), 849 PREAD(in1_alarm, 1, PRI_HIGH, 0x41, 0, 0x01, 1, bitmask), 850 PREAD(in2_alarm, 2, PRI_HIGH, 0x41, 0, 0x01, 2, bitmask), 851 PREAD(in3_alarm, 3, PRI_HIGH, 0x41, 0, 0x01, 3, bitmask), 852 PREAD(in4_alarm, 4, PRI_HIGH, 0x42, 0, 0x01, 0, bitmask), 853 854 PREAD(fan1_input, 0, PRI_HIGH, 0x29, 0x28, 0, 0, fan16), 855 PREAD(fan2_input, 1, PRI_HIGH, 0x2b, 0x2a, 0, 0, fan16), 856 PREAD(fan3_input, 2, PRI_HIGH, 0x2d, 0x2c, 0, 0, fan16), 857 PREAD(fan4_input, 3, PRI_HIGH, 0x2f, 0x2e, 0, 0, fan16), 858 859 PWRITE(fan1_min, 0, PRI_LOW, 0x55, 0x54, 0, 0, fan16), 860 PWRITE(fan2_min, 1, PRI_LOW, 0x57, 0x56, 0, 0, fan16), 861 PWRITE(fan3_min, 2, PRI_LOW, 0x59, 0x58, 0, 0, fan16), 862 PWRITE(fan4_min, 3, PRI_LOW, 0x5b, 0x5a, 0, 0, fan16), 863 864 PREAD(fan1_alarm, 0, PRI_HIGH, 0x42, 0, 0x01, 2, bitmask), 865 PREAD(fan2_alarm, 1, PRI_HIGH, 0x42, 0, 0x01, 3, bitmask), 866 PREAD(fan3_alarm, 2, PRI_HIGH, 0x42, 0, 0x01, 4, bitmask), 867 PREAD(fan4_alarm, 3, PRI_HIGH, 0x42, 0, 0x01, 5, bitmask), 868 869 PREAD(temp1_input, 0, PRI_HIGH, 0x25, 0x10, 0, 0, temp10), 870 PREAD(temp2_input, 1, PRI_HIGH, 0x26, 0x15, 0, 0, temp10), 871 PREAD(temp3_input, 2, PRI_HIGH, 0x27, 0x16, 0, 0, temp10), 872 PREAD(temp4_input, 3, PRI_HIGH, 0x33, 0x17, 0, 0, temp10), 873 PREAD(temp5_input, 4, PRI_HIGH, 0xf7, 0xf6, 0, 0, temp10), 874 PREAD(temp6_input, 5, PRI_HIGH, 0xf9, 0xf8, 0, 0, temp10), 875 PREAD(temp7_input, 6, PRI_HIGH, 0xfb, 0xfa, 0, 0, temp10), 876 PREAD(temp8_input, 7, PRI_HIGH, 0xfd, 0xfc, 0, 0, temp10), 877 878 PWRITE(temp1_min, 0, PRI_LOW, 0x4e, 0, 0, 0, temp8), 879 PWRITE(temp2_min, 1, PRI_LOW, 0x50, 0, 0, 0, temp8), 880 PWRITE(temp3_min, 2, PRI_LOW, 0x52, 0, 0, 0, temp8), 881 PWRITE(temp4_min, 3, PRI_LOW, 0x34, 0, 0, 0, temp8), 882 883 PWRITE(temp1_max, 0, PRI_LOW, 0x4f, 0, 0, 0, temp8), 884 PWRITE(temp2_max, 1, PRI_LOW, 0x51, 0, 0, 0, temp8), 885 PWRITE(temp3_max, 2, PRI_LOW, 0x53, 0, 0, 0, temp8), 886 PWRITE(temp4_max, 3, PRI_LOW, 0x35, 0, 0, 0, temp8), 887 888 PREAD(temp1_alarm, 0, PRI_HIGH, 0x41, 0, 0x01, 4, bitmask), 889 PREAD(temp2_alarm, 1, PRI_HIGH, 0x41, 0, 0x01, 5, bitmask), 890 PREAD(temp3_alarm, 2, PRI_HIGH, 0x41, 0, 0x01, 6, bitmask), 891 PREAD(temp4_alarm, 3, PRI_HIGH, 0x43, 0, 0x01, 0, bitmask), 892 893 PWRITE(temp1_source, 0, PRI_LOW, 0x02, 0, 0x07, 4, bitmask), 894 PWRITE(temp2_source, 1, PRI_LOW, 0x02, 0, 0x07, 0, bitmask), 895 PWRITE(temp3_source, 2, PRI_LOW, 0x03, 0, 0x07, 4, bitmask), 896 PWRITE(temp4_source, 3, PRI_LOW, 0x03, 0, 0x07, 0, bitmask), 897 898 PWRITE(temp1_smoothing_enable, 0, PRI_LOW, 0x62, 0, 0x01, 3, bitmask), 899 PWRITE(temp2_smoothing_enable, 1, PRI_LOW, 0x63, 0, 0x01, 7, bitmask), 900 PWRITE(temp3_smoothing_enable, 2, PRI_LOW, 0x63, 0, 0x01, 3, bitmask), 901 PWRITE(temp4_smoothing_enable, 3, PRI_LOW, 0x3c, 0, 0x01, 3, bitmask), 902 903 PWRITE(temp1_smoothing_time, 0, PRI_LOW, 0x62, 0, 0x07, 0, temp_st), 904 PWRITE(temp2_smoothing_time, 1, PRI_LOW, 0x63, 0, 0x07, 4, temp_st), 905 PWRITE(temp3_smoothing_time, 2, PRI_LOW, 0x63, 0, 0x07, 0, temp_st), 906 PWRITE(temp4_smoothing_time, 3, PRI_LOW, 0x3c, 0, 0x07, 0, temp_st), 907 908 PWRITE(temp1_auto_point1_temp_hyst, 0, PRI_LOW, 0x6d, 0, 0x0f, 4, 909 bitmask), 910 PWRITE(temp2_auto_point1_temp_hyst, 1, PRI_LOW, 0x6d, 0, 0x0f, 0, 911 bitmask), 912 PWRITE(temp3_auto_point1_temp_hyst, 2, PRI_LOW, 0x6e, 0, 0x0f, 4, 913 bitmask), 914 PWRITE(temp4_auto_point1_temp_hyst, 3, PRI_LOW, 0x6e, 0, 0x0f, 0, 915 bitmask), 916 917 PREAD(temp1_auto_point2_temp_hyst, 0, PRI_LOW, 0x6d, 0, 0x0f, 4, 918 bitmask), 919 PREAD(temp2_auto_point2_temp_hyst, 1, PRI_LOW, 0x6d, 0, 0x0f, 0, 920 bitmask), 921 PREAD(temp3_auto_point2_temp_hyst, 2, PRI_LOW, 0x6e, 0, 0x0f, 4, 922 bitmask), 923 PREAD(temp4_auto_point2_temp_hyst, 3, PRI_LOW, 0x6e, 0, 0x0f, 0, 924 bitmask), 925 926 PWRITE(temp1_auto_point1_temp, 0, PRI_LOW, 0x67, 0, 0, 0, temp8), 927 PWRITE(temp2_auto_point1_temp, 1, PRI_LOW, 0x68, 0, 0, 0, temp8), 928 PWRITE(temp3_auto_point1_temp, 2, PRI_LOW, 0x69, 0, 0, 0, temp8), 929 PWRITE(temp4_auto_point1_temp, 3, PRI_LOW, 0x3b, 0, 0, 0, temp8), 930 931 PWRITEM(temp1_auto_point2_temp, 0, PRI_LOW, VAA(0x5f, 0x67), VAA(0), 932 VAA(0x0f), VAA(4), ap2_temp), 933 PWRITEM(temp2_auto_point2_temp, 1, PRI_LOW, VAA(0x60, 0x68), VAA(0), 934 VAA(0x0f), VAA(4), ap2_temp), 935 PWRITEM(temp3_auto_point2_temp, 2, PRI_LOW, VAA(0x61, 0x69), VAA(0), 936 VAA(0x0f), VAA(4), ap2_temp), 937 PWRITEM(temp4_auto_point2_temp, 3, PRI_LOW, VAA(0x3c, 0x3b), VAA(0), 938 VAA(0x0f), VAA(4), ap2_temp), 939 940 PWRITE(temp1_crit, 0, PRI_LOW, 0x6a, 0, 0, 0, temp8), 941 PWRITE(temp2_crit, 1, PRI_LOW, 0x6b, 0, 0, 0, temp8), 942 PWRITE(temp3_crit, 2, PRI_LOW, 0x6c, 0, 0, 0, temp8), 943 PWRITE(temp4_crit, 3, PRI_LOW, 0x3d, 0, 0, 0, temp8), 944 945 PWRITE(temp5_enable, 4, PRI_LOW, 0x0e, 0, 0x01, 0, bitmask), 946 PWRITE(temp6_enable, 5, PRI_LOW, 0x0e, 0, 0x01, 1, bitmask), 947 PWRITE(temp7_enable, 6, PRI_LOW, 0x0e, 0, 0x01, 2, bitmask), 948 PWRITE(temp8_enable, 7, PRI_LOW, 0x0e, 0, 0x01, 3, bitmask), 949 950 PWRITE(remote1_offset, 0, PRI_LOW, 0x1c, 0, 0, 0, temp62), 951 PWRITE(remote2_offset, 1, PRI_LOW, 0x1d, 0, 0, 0, temp62), 952 953 PWRITE(pwm1, 0, PRI_HIGH, 0x30, 0, 0, 0, u8), 954 PWRITE(pwm2, 1, PRI_HIGH, 0x31, 0, 0, 0, u8), 955 PWRITE(pwm3, 2, PRI_HIGH, 0x32, 0, 0, 0, u8), 956 957 PWRITE(pwm1_invert, 0, PRI_LOW, 0x5c, 0, 0x01, 4, bitmask), 958 PWRITE(pwm2_invert, 1, PRI_LOW, 0x5d, 0, 0x01, 4, bitmask), 959 PWRITE(pwm3_invert, 2, PRI_LOW, 0x5e, 0, 0x01, 4, bitmask), 960 961 PWRITEM(pwm1_enable, 0, PRI_LOW, VAA(0x5c, 0x5c, 0x62), VAA(0, 0, 0), 962 VAA(0x07, 0x01, 0x01), VAA(5, 3, 5), pwm_enable), 963 PWRITEM(pwm2_enable, 1, PRI_LOW, VAA(0x5d, 0x5d, 0x62), VAA(0, 0, 0), 964 VAA(0x07, 0x01, 0x01), VAA(5, 3, 6), pwm_enable), 965 PWRITEM(pwm3_enable, 2, PRI_LOW, VAA(0x5e, 0x5e, 0x62), VAA(0, 0, 0), 966 VAA(0x07, 0x01, 0x01), VAA(5, 3, 7), pwm_enable), 967 968 PWRITEM(pwm1_auto_channels, 0, PRI_LOW, VAA(0x5c, 0x5c), VAA(0, 0), 969 VAA(0x07, 0x01), VAA(5, 3), pwm_ac), 970 PWRITEM(pwm2_auto_channels, 1, PRI_LOW, VAA(0x5d, 0x5d), VAA(0, 0), 971 VAA(0x07, 0x01), VAA(5, 3), pwm_ac), 972 PWRITEM(pwm3_auto_channels, 2, PRI_LOW, VAA(0x5e, 0x5e), VAA(0, 0), 973 VAA(0x07, 0x01), VAA(5, 3), pwm_ac), 974 975 PWRITE(pwm1_auto_point1_pwm, 0, PRI_LOW, 0x64, 0, 0, 0, u8), 976 PWRITE(pwm2_auto_point1_pwm, 1, PRI_LOW, 0x65, 0, 0, 0, u8), 977 PWRITE(pwm3_auto_point1_pwm, 2, PRI_LOW, 0x66, 0, 0, 0, u8), 978 979 PWRITE(pwm1_auto_point2_pwm, 0, PRI_LOW, 0x38, 0, 0, 0, u8), 980 PWRITE(pwm2_auto_point2_pwm, 1, PRI_LOW, 0x39, 0, 0, 0, u8), 981 PWRITE(pwm3_auto_point2_pwm, 2, PRI_LOW, 0x3a, 0, 0, 0, u8), 982 983 PWRITE(pwm1_freq, 0, PRI_LOW, 0x5f, 0, 0x0f, 0, pwm_freq), 984 PWRITE(pwm2_freq, 1, PRI_LOW, 0x60, 0, 0x0f, 0, pwm_freq), 985 PWRITE(pwm3_freq, 2, PRI_LOW, 0x61, 0, 0x0f, 0, pwm_freq), 986 987 PREAD(pwm1_auto_zone_assigned, 0, PRI_LOW, 0, 0, 0x03, 2, bitmask), 988 PREAD(pwm2_auto_zone_assigned, 1, PRI_LOW, 0, 0, 0x03, 4, bitmask), 989 PREAD(pwm3_auto_zone_assigned, 2, PRI_LOW, 0, 0, 0x03, 6, bitmask), 990 991 PWRITE(pwm1_auto_spinup_time, 0, PRI_LOW, 0x5c, 0, 0x07, 0, pwm_ast), 992 PWRITE(pwm2_auto_spinup_time, 1, PRI_LOW, 0x5d, 0, 0x07, 0, pwm_ast), 993 PWRITE(pwm3_auto_spinup_time, 2, PRI_LOW, 0x5e, 0, 0x07, 0, pwm_ast), 994 995 PWRITE(peci_enable, 0, PRI_LOW, 0x40, 0, 0x01, 4, bitmask), 996 PWRITE(peci_avg, 0, PRI_LOW, 0x36, 0, 0x07, 0, bitmask), 997 PWRITE(peci_domain, 0, PRI_LOW, 0x36, 0, 0x01, 3, bitmask), 998 PWRITE(peci_legacy, 0, PRI_LOW, 0x36, 0, 0x01, 4, bitmask), 999 PWRITE(peci_diode, 0, PRI_LOW, 0x0e, 0, 0x07, 4, bitmask), 1000 PWRITE(peci_4domain, 0, PRI_LOW, 0x0e, 0, 0x01, 4, bitmask), 1001 1002 }; 1003 1004 static struct asc7621_data *asc7621_update_device(struct device *dev) 1005 { 1006 struct i2c_client *client = to_i2c_client(dev); 1007 struct asc7621_data *data = i2c_get_clientdata(client); 1008 int i; 1009 1010 /* 1011 * The asc7621 chips guarantee consistent reads of multi-byte values 1012 * regardless of the order of the reads. No special logic is needed 1013 * so we can just read the registers in whatever order they appear 1014 * in the asc7621_params array. 1015 */ 1016 1017 mutex_lock(&data->update_lock); 1018 1019 /* Read all the high priority registers */ 1020 1021 if (!data->valid || 1022 time_after(jiffies, data->last_high_reading + INTERVAL_HIGH)) { 1023 1024 for (i = 0; i < ARRAY_SIZE(asc7621_register_priorities); i++) { 1025 if (asc7621_register_priorities[i] == PRI_HIGH) { 1026 data->reg[i] = 1027 i2c_smbus_read_byte_data(client, i) & 0xff; 1028 } 1029 } 1030 data->last_high_reading = jiffies; 1031 }; /* last_reading */ 1032 1033 /* Read all the low priority registers. */ 1034 1035 if (!data->valid || 1036 time_after(jiffies, data->last_low_reading + INTERVAL_LOW)) { 1037 1038 for (i = 0; i < ARRAY_SIZE(asc7621_params); i++) { 1039 if (asc7621_register_priorities[i] == PRI_LOW) { 1040 data->reg[i] = 1041 i2c_smbus_read_byte_data(client, i) & 0xff; 1042 } 1043 } 1044 data->last_low_reading = jiffies; 1045 }; /* last_reading */ 1046 1047 data->valid = 1; 1048 1049 mutex_unlock(&data->update_lock); 1050 1051 return data; 1052 } 1053 1054 /* 1055 * Standard detection and initialization below 1056 * 1057 * Helper function that checks if an address is valid 1058 * for a particular chip. 1059 */ 1060 1061 static inline int valid_address_for_chip(int chip_type, int address) 1062 { 1063 int i; 1064 1065 for (i = 0; asc7621_chips[chip_type].addresses[i] != I2C_CLIENT_END; 1066 i++) { 1067 if (asc7621_chips[chip_type].addresses[i] == address) 1068 return 1; 1069 } 1070 return 0; 1071 } 1072 1073 static void asc7621_init_client(struct i2c_client *client) 1074 { 1075 int value; 1076 1077 /* Warn if part was not "READY" */ 1078 1079 value = read_byte(client, 0x40); 1080 1081 if (value & 0x02) { 1082 dev_err(&client->dev, 1083 "Client (%d,0x%02x) config is locked.\n", 1084 i2c_adapter_id(client->adapter), client->addr); 1085 }; 1086 if (!(value & 0x04)) { 1087 dev_err(&client->dev, "Client (%d,0x%02x) is not ready.\n", 1088 i2c_adapter_id(client->adapter), client->addr); 1089 }; 1090 1091 /* 1092 * Start monitoring 1093 * 1094 * Try to clear LOCK, Set START, save everything else 1095 */ 1096 value = (value & ~0x02) | 0x01; 1097 write_byte(client, 0x40, value & 0xff); 1098 1099 } 1100 1101 static int 1102 asc7621_probe(struct i2c_client *client, const struct i2c_device_id *id) 1103 { 1104 struct asc7621_data *data; 1105 int i, err; 1106 1107 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 1108 return -EIO; 1109 1110 data = kzalloc(sizeof(struct asc7621_data), GFP_KERNEL); 1111 if (data == NULL) 1112 return -ENOMEM; 1113 1114 i2c_set_clientdata(client, data); 1115 data->valid = 0; 1116 mutex_init(&data->update_lock); 1117 1118 /* Initialize the asc7621 chip */ 1119 asc7621_init_client(client); 1120 1121 /* Create the sysfs entries */ 1122 for (i = 0; i < ARRAY_SIZE(asc7621_params); i++) { 1123 err = 1124 device_create_file(&client->dev, 1125 &(asc7621_params[i].sda.dev_attr)); 1126 if (err) 1127 goto exit_remove; 1128 } 1129 1130 data->class_dev = hwmon_device_register(&client->dev); 1131 if (IS_ERR(data->class_dev)) { 1132 err = PTR_ERR(data->class_dev); 1133 goto exit_remove; 1134 } 1135 1136 return 0; 1137 1138 exit_remove: 1139 for (i = 0; i < ARRAY_SIZE(asc7621_params); i++) { 1140 device_remove_file(&client->dev, 1141 &(asc7621_params[i].sda.dev_attr)); 1142 } 1143 1144 kfree(data); 1145 return err; 1146 } 1147 1148 static int asc7621_detect(struct i2c_client *client, 1149 struct i2c_board_info *info) 1150 { 1151 struct i2c_adapter *adapter = client->adapter; 1152 int company, verstep, chip_index; 1153 1154 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 1155 return -ENODEV; 1156 1157 for (chip_index = FIRST_CHIP; chip_index <= LAST_CHIP; chip_index++) { 1158 1159 if (!valid_address_for_chip(chip_index, client->addr)) 1160 continue; 1161 1162 company = read_byte(client, 1163 asc7621_chips[chip_index].company_reg); 1164 verstep = read_byte(client, 1165 asc7621_chips[chip_index].verstep_reg); 1166 1167 if (company == asc7621_chips[chip_index].company_id && 1168 verstep == asc7621_chips[chip_index].verstep_id) { 1169 strlcpy(info->type, asc7621_chips[chip_index].name, 1170 I2C_NAME_SIZE); 1171 1172 dev_info(&adapter->dev, "Matched %s at 0x%02x\n", 1173 asc7621_chips[chip_index].name, client->addr); 1174 return 0; 1175 } 1176 } 1177 1178 return -ENODEV; 1179 } 1180 1181 static int asc7621_remove(struct i2c_client *client) 1182 { 1183 struct asc7621_data *data = i2c_get_clientdata(client); 1184 int i; 1185 1186 hwmon_device_unregister(data->class_dev); 1187 1188 for (i = 0; i < ARRAY_SIZE(asc7621_params); i++) { 1189 device_remove_file(&client->dev, 1190 &(asc7621_params[i].sda.dev_attr)); 1191 } 1192 1193 kfree(data); 1194 return 0; 1195 } 1196 1197 static const struct i2c_device_id asc7621_id[] = { 1198 {"asc7621", asc7621}, 1199 {"asc7621a", asc7621a}, 1200 {}, 1201 }; 1202 1203 MODULE_DEVICE_TABLE(i2c, asc7621_id); 1204 1205 static struct i2c_driver asc7621_driver = { 1206 .class = I2C_CLASS_HWMON, 1207 .driver = { 1208 .name = "asc7621", 1209 }, 1210 .probe = asc7621_probe, 1211 .remove = asc7621_remove, 1212 .id_table = asc7621_id, 1213 .detect = asc7621_detect, 1214 .address_list = normal_i2c, 1215 }; 1216 1217 static int __init sm_asc7621_init(void) 1218 { 1219 int i, j; 1220 /* 1221 * Collect all the registers needed into a single array. 1222 * This way, if a register isn't actually used for anything, 1223 * we don't retrieve it. 1224 */ 1225 1226 for (i = 0; i < ARRAY_SIZE(asc7621_params); i++) { 1227 for (j = 0; j < ARRAY_SIZE(asc7621_params[i].msb); j++) 1228 asc7621_register_priorities[asc7621_params[i].msb[j]] = 1229 asc7621_params[i].priority; 1230 for (j = 0; j < ARRAY_SIZE(asc7621_params[i].lsb); j++) 1231 asc7621_register_priorities[asc7621_params[i].lsb[j]] = 1232 asc7621_params[i].priority; 1233 } 1234 return i2c_add_driver(&asc7621_driver); 1235 } 1236 1237 static void __exit sm_asc7621_exit(void) 1238 { 1239 i2c_del_driver(&asc7621_driver); 1240 } 1241 1242 MODULE_LICENSE("GPL"); 1243 MODULE_AUTHOR("George Joseph"); 1244 MODULE_DESCRIPTION("Andigilog aSC7621 and aSC7621a driver"); 1245 1246 module_init(sm_asc7621_init); 1247 module_exit(sm_asc7621_exit); 1248