Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

hwmon: (adt7470) Convert to use regmap

Convert the adt7470 to using regmap which allows better error handling.

Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
Link: https://lore.kernel.org/r/20210826024121.15665-3-chris.packham@alliedtelesis.co.nz
Signed-off-by: Guenter Roeck <linux@roeck-us.net>

authored by

Chris Packham and committed by
Guenter Roeck
ef67959c 23bd022a

+249 -181
+249 -181
drivers/hwmon/adt7470.c
··· 18 18 #include <linux/delay.h> 19 19 #include <linux/log2.h> 20 20 #include <linux/kthread.h> 21 + #include <linux/regmap.h> 21 22 #include <linux/slab.h> 22 23 #include <linux/util_macros.h> 23 24 ··· 36 35 #define ADT7470_REG_PWM_MAX_BASE_ADDR 0x38 37 36 #define ADT7470_REG_PWM_MAX_MAX_ADDR 0x3B 38 37 #define ADT7470_REG_CFG 0x40 38 + #define ADT7470_STRT_MASK 0x01 39 + #define ADT7470_TEST_MASK 0x02 39 40 #define ADT7470_FSPD_MASK 0x04 41 + #define ADT7470_T05_STB_MASK 0x80 40 42 #define ADT7470_REG_ALARM1 0x41 41 43 #define ADT7470_R1T_ALARM 0x01 42 44 #define ADT7470_R2T_ALARM 0x02 ··· 141 137 #define ADT7470_FREQ_SHIFT 4 142 138 143 139 struct adt7470_data { 144 - struct i2c_client *client; 140 + struct regmap *regmap; 145 141 struct mutex lock; 146 142 char sensors_valid; 147 143 char limits_valid; ··· 175 171 * 16-bit registers on the ADT7470 are low-byte first. The data sheet says 176 172 * that the low byte must be read before the high byte. 177 173 */ 178 - static inline int adt7470_read_word_data(struct i2c_client *client, u8 reg) 174 + static inline int adt7470_read_word_data(struct adt7470_data *data, unsigned int reg, 175 + unsigned int *val) 179 176 { 180 - u16 foo; 177 + u8 regval[2]; 178 + int err; 181 179 182 - foo = i2c_smbus_read_byte_data(client, reg); 183 - foo |= ((u16)i2c_smbus_read_byte_data(client, reg + 1) << 8); 184 - return foo; 180 + err = regmap_bulk_read(data->regmap, reg, &regval, 2); 181 + if (err < 0) 182 + return err; 183 + 184 + *val = regval[0] | (regval[1] << 8); 185 + 186 + return 0; 185 187 } 186 188 187 - static inline int adt7470_write_word_data(struct i2c_client *client, u8 reg, 188 - u16 value) 189 + static inline int adt7470_write_word_data(struct adt7470_data *data, unsigned int reg, 190 + unsigned int val) 189 191 { 190 - return i2c_smbus_write_byte_data(client, reg, value & 0xFF) 191 - || i2c_smbus_write_byte_data(client, reg + 1, value >> 8); 192 + u8 regval[2]; 193 + 194 + regval[0] = val & 0xFF; 195 + regval[1] = val >> 8; 196 + 197 + return regmap_bulk_write(data->regmap, reg, &regval, 2); 192 198 } 193 199 194 200 /* Probe for temperature sensors. Assumes lock is held */ 195 - static int adt7470_read_temperatures(struct i2c_client *client, 196 - struct adt7470_data *data) 201 + static int adt7470_read_temperatures(struct adt7470_data *data) 197 202 { 198 203 unsigned long res; 204 + unsigned int pwm_cfg[2]; 205 + int err; 199 206 int i; 200 - u8 cfg, pwm[4], pwm_cfg[2]; 207 + u8 pwm[ADT7470_FAN_COUNT]; 201 208 202 209 /* save pwm[1-4] config register */ 203 - pwm_cfg[0] = i2c_smbus_read_byte_data(client, ADT7470_REG_PWM_CFG(0)); 204 - pwm_cfg[1] = i2c_smbus_read_byte_data(client, ADT7470_REG_PWM_CFG(2)); 210 + err = regmap_read(data->regmap, ADT7470_REG_PWM_CFG(0), &pwm_cfg[0]); 211 + if (err < 0) 212 + return err; 213 + err = regmap_read(data->regmap, ADT7470_REG_PWM_CFG(2), &pwm_cfg[1]); 214 + if (err < 0) 215 + return err; 205 216 206 217 /* set manual pwm to whatever it is set to now */ 207 - for (i = 0; i < ADT7470_FAN_COUNT; i++) 208 - pwm[i] = i2c_smbus_read_byte_data(client, ADT7470_REG_PWM(i)); 218 + err = regmap_bulk_read(data->regmap, ADT7470_REG_PWM(0), &pwm[0], 219 + ADT7470_PWM_COUNT); 220 + if (err < 0) 221 + return err; 209 222 210 223 /* put pwm in manual mode */ 211 - i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(0), 212 - pwm_cfg[0] & ~(ADT7470_PWM_AUTO_MASK)); 213 - i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(2), 214 - pwm_cfg[1] & ~(ADT7470_PWM_AUTO_MASK)); 224 + err = regmap_update_bits(data->regmap, ADT7470_REG_PWM_CFG(0), 225 + ADT7470_PWM_AUTO_MASK, 0); 226 + if (err < 0) 227 + return err; 228 + err = regmap_update_bits(data->regmap, ADT7470_REG_PWM_CFG(2), 229 + ADT7470_PWM_AUTO_MASK, 0); 230 + if (err < 0) 231 + return err; 215 232 216 233 /* write pwm control to whatever it was */ 217 - for (i = 0; i < ADT7470_FAN_COUNT; i++) 218 - i2c_smbus_write_byte_data(client, ADT7470_REG_PWM(i), pwm[i]); 234 + err = regmap_bulk_write(data->regmap, ADT7470_REG_PWM(0), &pwm[0], 235 + ADT7470_PWM_COUNT); 236 + if (err < 0) 237 + return err; 219 238 220 239 /* start reading temperature sensors */ 221 - cfg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG); 222 - cfg |= 0x80; 223 - i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, cfg); 240 + err = regmap_update_bits(data->regmap, ADT7470_REG_CFG, 241 + ADT7470_T05_STB_MASK, ADT7470_T05_STB_MASK); 242 + if (err < 0) 243 + return err; 224 244 225 245 /* Delay is 200ms * number of temp sensors. */ 226 246 res = msleep_interruptible((data->num_temp_sensors >= 0 ? ··· 252 224 TEMP_COLLECTION_TIME)); 253 225 254 226 /* done reading temperature sensors */ 255 - cfg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG); 256 - cfg &= ~0x80; 257 - i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, cfg); 227 + err = regmap_update_bits(data->regmap, ADT7470_REG_CFG, 228 + ADT7470_T05_STB_MASK, 0); 229 + if (err < 0) 230 + return err; 258 231 259 232 /* restore pwm[1-4] config registers */ 260 - i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(0), pwm_cfg[0]); 261 - i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(2), pwm_cfg[1]); 233 + err = regmap_write(data->regmap, ADT7470_REG_PWM_CFG(0), pwm_cfg[0]); 234 + if (err < 0) 235 + return err; 236 + err = regmap_write(data->regmap, ADT7470_REG_PWM_CFG(2), pwm_cfg[1]); 237 + if (err < 0) 238 + return err; 262 239 263 - if (res) { 264 - pr_err("ha ha, interrupted\n"); 240 + if (res) 265 241 return -EAGAIN; 266 - } 267 242 268 243 /* Only count fans if we have to */ 269 244 if (data->num_temp_sensors >= 0) 270 245 return 0; 271 246 247 + err = regmap_bulk_read(data->regmap, ADT7470_TEMP_REG(0), &data->temp[0], 248 + ADT7470_TEMP_COUNT); 249 + if (err < 0) 250 + return err; 272 251 for (i = 0; i < ADT7470_TEMP_COUNT; i++) { 273 - data->temp[i] = i2c_smbus_read_byte_data(client, 274 - ADT7470_TEMP_REG(i)); 275 252 if (data->temp[i]) 276 253 data->num_temp_sensors = i + 1; 277 254 } ··· 291 258 292 259 while (!kthread_should_stop()) { 293 260 mutex_lock(&data->lock); 294 - adt7470_read_temperatures(client, data); 261 + adt7470_read_temperatures(data); 295 262 mutex_unlock(&data->lock); 296 263 297 264 set_current_state(TASK_INTERRUPTIBLE); ··· 306 273 307 274 static int adt7470_update_sensors(struct adt7470_data *data) 308 275 { 309 - struct i2c_client *client = data->client; 310 - u8 cfg; 276 + unsigned int val; 277 + int err; 311 278 int i; 312 279 313 280 if (!data->temperatures_probed) 314 - adt7470_read_temperatures(client, data); 281 + err = adt7470_read_temperatures(data); 315 282 else 316 - for (i = 0; i < ADT7470_TEMP_COUNT; i++) 317 - data->temp[i] = i2c_smbus_read_byte_data(client, 318 - ADT7470_TEMP_REG(i)); 283 + err = regmap_bulk_read(data->regmap, ADT7470_TEMP_REG(0), &data->temp[0], 284 + ADT7470_TEMP_COUNT); 285 + if (err < 0) 286 + return err; 319 287 320 - for (i = 0; i < ADT7470_FAN_COUNT; i++) 321 - data->fan[i] = adt7470_read_word_data(client, 322 - ADT7470_REG_FAN(i)); 323 - 324 - for (i = 0; i < ADT7470_PWM_COUNT; i++) { 325 - int reg; 326 - int reg_mask; 327 - 328 - data->pwm[i] = i2c_smbus_read_byte_data(client, 329 - ADT7470_REG_PWM(i)); 330 - 331 - if (i % 2) 332 - reg_mask = ADT7470_PWM2_AUTO_MASK; 333 - else 334 - reg_mask = ADT7470_PWM1_AUTO_MASK; 335 - 336 - reg = ADT7470_REG_PWM_CFG(i); 337 - if (i2c_smbus_read_byte_data(client, reg) & reg_mask) 338 - data->pwm_automatic[i] = 1; 339 - else 340 - data->pwm_automatic[i] = 0; 341 - 342 - reg = ADT7470_REG_PWM_AUTO_TEMP(i); 343 - cfg = i2c_smbus_read_byte_data(client, reg); 344 - if (!(i % 2)) 345 - data->pwm_auto_temp[i] = cfg >> 4; 346 - else 347 - data->pwm_auto_temp[i] = cfg & 0xF; 288 + for (i = 0; i < ADT7470_FAN_COUNT; i++) { 289 + err = adt7470_read_word_data(data, ADT7470_REG_FAN(i), &val); 290 + if (err < 0) 291 + return err; 292 + data->fan[i] = val; 348 293 } 349 294 350 - if (i2c_smbus_read_byte_data(client, ADT7470_REG_CFG) & 351 - ADT7470_FSPD_MASK) 352 - data->force_pwm_max = 1; 353 - else 354 - data->force_pwm_max = 0; 295 + err = regmap_bulk_read(data->regmap, ADT7470_REG_PWM(0), &data->pwm[0], ADT7470_PWM_COUNT); 296 + if (err < 0) 297 + return err; 355 298 356 - data->alarm = i2c_smbus_read_byte_data(client, ADT7470_REG_ALARM1); 357 - if (data->alarm & ADT7470_OOL_ALARM) 358 - data->alarm |= ALARM2(i2c_smbus_read_byte_data(client, 359 - ADT7470_REG_ALARM2)); 360 - data->alarms_mask = adt7470_read_word_data(client, 361 - ADT7470_REG_ALARM1_MASK); 299 + for (i = 0; i < ADT7470_PWM_COUNT; i++) { 300 + unsigned int mask; 301 + 302 + if (i % 2) 303 + mask = ADT7470_PWM2_AUTO_MASK; 304 + else 305 + mask = ADT7470_PWM1_AUTO_MASK; 306 + 307 + err = regmap_read(data->regmap, ADT7470_REG_PWM_CFG(i), &val); 308 + if (err < 0) 309 + return err; 310 + data->pwm_automatic[i] = !!(val & mask); 311 + 312 + err = regmap_read(data->regmap, ADT7470_REG_PWM_AUTO_TEMP(i), &val); 313 + if (err < 0) 314 + return err; 315 + if (!(i % 2)) 316 + data->pwm_auto_temp[i] = val >> 4; 317 + else 318 + data->pwm_auto_temp[i] = val & 0xF; 319 + } 320 + 321 + err = regmap_read(data->regmap, ADT7470_REG_CFG, &val); 322 + if (err < 0) 323 + return err; 324 + data->force_pwm_max = !!(val & ADT7470_FSPD_MASK); 325 + 326 + err = regmap_read(data->regmap, ADT7470_REG_ALARM1, &val); 327 + if (err < 0) 328 + return err; 329 + data->alarm = val; 330 + if (data->alarm & ADT7470_OOL_ALARM) { 331 + err = regmap_read(data->regmap, ADT7470_REG_ALARM2, &val); 332 + if (err < 0) 333 + return err; 334 + data->alarm |= ALARM2(val); 335 + } 336 + 337 + err = adt7470_read_word_data(data, ADT7470_REG_ALARM1_MASK, &val); 338 + if (err < 0) 339 + return err; 340 + data->alarms_mask = val; 362 341 363 342 return 0; 364 343 } 365 344 366 345 static int adt7470_update_limits(struct adt7470_data *data) 367 346 { 368 - struct i2c_client *client = data->client; 347 + unsigned int val; 348 + int err; 369 349 int i; 370 350 371 351 for (i = 0; i < ADT7470_TEMP_COUNT; i++) { 372 - data->temp_min[i] = i2c_smbus_read_byte_data(client, 373 - ADT7470_TEMP_MIN_REG(i)); 374 - data->temp_max[i] = i2c_smbus_read_byte_data(client, 375 - ADT7470_TEMP_MAX_REG(i)); 352 + err = regmap_read(data->regmap, ADT7470_TEMP_MIN_REG(i), &val); 353 + if (err < 0) 354 + return err; 355 + data->temp_min[i] = (s8)val; 356 + err = regmap_read(data->regmap, ADT7470_TEMP_MAX_REG(i), &val); 357 + if (err < 0) 358 + return err; 359 + data->temp_max[i] = (s8)val; 376 360 } 377 361 378 362 for (i = 0; i < ADT7470_FAN_COUNT; i++) { 379 - data->fan_min[i] = adt7470_read_word_data(client, 380 - ADT7470_REG_FAN_MIN(i)); 381 - data->fan_max[i] = adt7470_read_word_data(client, 382 - ADT7470_REG_FAN_MAX(i)); 363 + err = adt7470_read_word_data(data, ADT7470_REG_FAN_MIN(i), &val); 364 + if (err < 0) 365 + return err; 366 + data->fan_min[i] = val; 367 + err = adt7470_read_word_data(data, ADT7470_REG_FAN_MAX(i), &val); 368 + if (err < 0) 369 + return err; 370 + data->fan_max[i] = val; 383 371 } 384 372 385 373 for (i = 0; i < ADT7470_PWM_COUNT; i++) { 386 - data->pwm_max[i] = i2c_smbus_read_byte_data(client, 387 - ADT7470_REG_PWM_MAX(i)); 388 - data->pwm_min[i] = i2c_smbus_read_byte_data(client, 389 - ADT7470_REG_PWM_MIN(i)); 390 - data->pwm_tmin[i] = i2c_smbus_read_byte_data(client, 391 - ADT7470_REG_PWM_TMIN(i)); 374 + err = regmap_read(data->regmap, ADT7470_REG_PWM_MAX(i), &val); 375 + if (err < 0) 376 + return err; 377 + data->pwm_max[i] = val; 378 + err = regmap_read(data->regmap, ADT7470_REG_PWM_MIN(i), &val); 379 + if (err < 0) 380 + return err; 381 + data->pwm_min[i] = val; 382 + err = regmap_read(data->regmap, ADT7470_REG_PWM_TMIN(i), &val); 383 + if (err < 0) 384 + return err; 385 + data->pwm_tmin[i] = (s8)val; 392 386 } 393 387 394 388 return 0; ··· 551 491 { 552 492 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 553 493 struct adt7470_data *data = dev_get_drvdata(dev); 554 - struct i2c_client *client = data->client; 555 494 long temp; 495 + int err; 556 496 557 497 if (kstrtol(buf, 10, &temp)) 558 498 return -EINVAL; ··· 562 502 563 503 mutex_lock(&data->lock); 564 504 data->temp_min[attr->index] = temp; 565 - i2c_smbus_write_byte_data(client, ADT7470_TEMP_MIN_REG(attr->index), 505 + err = regmap_write(data->regmap, ADT7470_TEMP_MIN_REG(attr->index), 566 506 temp); 567 507 mutex_unlock(&data->lock); 568 508 569 - return count; 509 + return err < 0 ? err : count; 570 510 } 571 511 572 512 static ssize_t temp_max_show(struct device *dev, ··· 587 527 { 588 528 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 589 529 struct adt7470_data *data = dev_get_drvdata(dev); 590 - struct i2c_client *client = data->client; 591 530 long temp; 531 + int err; 592 532 593 533 if (kstrtol(buf, 10, &temp)) 594 534 return -EINVAL; ··· 598 538 599 539 mutex_lock(&data->lock); 600 540 data->temp_max[attr->index] = temp; 601 - i2c_smbus_write_byte_data(client, ADT7470_TEMP_MAX_REG(attr->index), 602 - temp); 541 + err = regmap_write(data->regmap, ADT7470_TEMP_MAX_REG(attr->index), temp); 603 542 mutex_unlock(&data->lock); 604 543 605 - return count; 544 + return err < 0 ? err : count; 606 545 } 607 546 608 547 static ssize_t temp_show(struct device *dev, struct device_attribute *devattr, ··· 634 575 { 635 576 struct adt7470_data *data = dev_get_drvdata(dev); 636 577 long mask; 578 + int err; 637 579 638 580 if (kstrtoul(buf, 0, &mask)) 639 581 return -EINVAL; ··· 644 584 645 585 mutex_lock(&data->lock); 646 586 data->alarms_mask = mask; 647 - adt7470_write_word_data(data->client, ADT7470_REG_ALARM1_MASK, mask); 587 + err = adt7470_write_word_data(data, ADT7470_REG_ALARM1_MASK, mask); 648 588 mutex_unlock(&data->lock); 649 589 650 - return count; 590 + return err < 0 ? err : count; 651 591 } 652 592 653 593 static ssize_t fan_max_show(struct device *dev, ··· 672 612 { 673 613 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 674 614 struct adt7470_data *data = dev_get_drvdata(dev); 675 - struct i2c_client *client = data->client; 676 615 long temp; 616 + int err; 677 617 678 618 if (kstrtol(buf, 10, &temp) || !temp) 679 619 return -EINVAL; ··· 683 623 684 624 mutex_lock(&data->lock); 685 625 data->fan_max[attr->index] = temp; 686 - adt7470_write_word_data(client, ADT7470_REG_FAN_MAX(attr->index), temp); 626 + err = adt7470_write_word_data(data, ADT7470_REG_FAN_MAX(attr->index), temp); 687 627 mutex_unlock(&data->lock); 688 628 689 - return count; 629 + return err < 0 ? err : count; 690 630 } 691 631 692 632 static ssize_t fan_min_show(struct device *dev, ··· 711 651 { 712 652 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 713 653 struct adt7470_data *data = dev_get_drvdata(dev); 714 - struct i2c_client *client = data->client; 715 654 long temp; 655 + int err; 716 656 717 657 if (kstrtol(buf, 10, &temp) || !temp) 718 658 return -EINVAL; ··· 722 662 723 663 mutex_lock(&data->lock); 724 664 data->fan_min[attr->index] = temp; 725 - adt7470_write_word_data(client, ADT7470_REG_FAN_MIN(attr->index), temp); 665 + err = adt7470_write_word_data(data, ADT7470_REG_FAN_MIN(attr->index), temp); 726 666 mutex_unlock(&data->lock); 727 667 728 - return count; 668 + return err < 0 ? err : count; 729 669 } 730 670 731 671 static ssize_t fan_show(struct device *dev, struct device_attribute *devattr, ··· 760 700 const char *buf, size_t count) 761 701 { 762 702 struct adt7470_data *data = dev_get_drvdata(dev); 763 - struct i2c_client *client = data->client; 764 703 long temp; 765 - u8 reg; 704 + int err; 766 705 767 706 if (kstrtol(buf, 10, &temp)) 768 707 return -EINVAL; 769 708 770 709 mutex_lock(&data->lock); 771 710 data->force_pwm_max = temp; 772 - reg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG); 773 - if (temp) 774 - reg |= ADT7470_FSPD_MASK; 775 - else 776 - reg &= ~ADT7470_FSPD_MASK; 777 - i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, reg); 711 + err = regmap_update_bits(data->regmap, ADT7470_REG_CFG, 712 + ADT7470_FSPD_MASK, 713 + temp ? ADT7470_FSPD_MASK : 0); 778 714 mutex_unlock(&data->lock); 779 715 780 - return count; 716 + return err < 0 ? err : count; 781 717 } 782 718 783 719 static ssize_t pwm_show(struct device *dev, struct device_attribute *devattr, ··· 793 737 { 794 738 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 795 739 struct adt7470_data *data = dev_get_drvdata(dev); 796 - struct i2c_client *client = data->client; 797 740 long temp; 741 + int err; 798 742 799 743 if (kstrtol(buf, 10, &temp)) 800 744 return -EINVAL; ··· 803 747 804 748 mutex_lock(&data->lock); 805 749 data->pwm[attr->index] = temp; 806 - i2c_smbus_write_byte_data(client, ADT7470_REG_PWM(attr->index), temp); 750 + err = regmap_write(data->regmap, ADT7470_REG_PWM(attr->index), temp); 807 751 mutex_unlock(&data->lock); 808 752 809 - return count; 753 + return err < 0 ? err : count; 810 754 } 811 755 812 756 /* These are the valid PWM frequencies to the nearest Hz */ ··· 818 762 struct device_attribute *devattr, char *buf) 819 763 { 820 764 struct adt7470_data *data = adt7470_update_device(dev); 821 - unsigned char cfg_reg_1; 822 - unsigned char cfg_reg_2; 765 + unsigned int cfg_reg_1, cfg_reg_2; 823 766 int index; 767 + int err; 768 + 769 + if (IS_ERR(data)) 770 + return PTR_ERR(data); 824 771 825 772 mutex_lock(&data->lock); 826 - cfg_reg_1 = i2c_smbus_read_byte_data(data->client, ADT7470_REG_CFG); 827 - cfg_reg_2 = i2c_smbus_read_byte_data(data->client, ADT7470_REG_CFG_2); 773 + err = regmap_read(data->regmap, ADT7470_REG_CFG, &cfg_reg_1); 774 + if (err < 0) 775 + goto out; 776 + err = regmap_read(data->regmap, ADT7470_REG_CFG_2, &cfg_reg_2); 777 + if (err < 0) 778 + goto out; 828 779 mutex_unlock(&data->lock); 829 780 830 781 index = (cfg_reg_2 & ADT7470_FREQ_MASK) >> ADT7470_FREQ_SHIFT; ··· 841 778 index = ARRAY_SIZE(adt7470_freq_map) - 1; 842 779 843 780 return scnprintf(buf, PAGE_SIZE, "%d\n", adt7470_freq_map[index]); 781 + 782 + out: 783 + mutex_unlock(&data->lock); 784 + return err; 844 785 } 845 786 846 787 static ssize_t pwm1_freq_store(struct device *dev, ··· 852 785 const char *buf, size_t count) 853 786 { 854 787 struct adt7470_data *data = dev_get_drvdata(dev); 855 - struct i2c_client *client = data->client; 856 788 long freq; 857 789 int index; 858 790 int low_freq = ADT7470_CFG_LF; 859 - unsigned char val; 791 + int err; 860 792 861 793 if (kstrtol(buf, 10, &freq)) 862 794 return -EINVAL; ··· 871 805 872 806 mutex_lock(&data->lock); 873 807 /* Configuration Register 1 */ 874 - val = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG); 875 - i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, 876 - (val & ~ADT7470_CFG_LF) | low_freq); 808 + err = regmap_update_bits(data->regmap, ADT7470_REG_CFG, 809 + ADT7470_CFG_LF, low_freq); 810 + if (err < 0) 811 + goto out; 812 + 877 813 /* Configuration Register 2 */ 878 - val = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG_2); 879 - i2c_smbus_write_byte_data(client, ADT7470_REG_CFG_2, 880 - (val & ~ADT7470_FREQ_MASK) | (index << ADT7470_FREQ_SHIFT)); 814 + err = regmap_update_bits(data->regmap, ADT7470_REG_CFG_2, 815 + ADT7470_FREQ_MASK, 816 + index << ADT7470_FREQ_SHIFT); 817 + out: 881 818 mutex_unlock(&data->lock); 882 819 883 - return count; 820 + return err < 0 ? err : count; 884 821 } 885 822 886 823 static ssize_t pwm_max_show(struct device *dev, ··· 904 835 { 905 836 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 906 837 struct adt7470_data *data = dev_get_drvdata(dev); 907 - struct i2c_client *client = data->client; 908 838 long temp; 839 + int err; 909 840 910 841 if (kstrtol(buf, 10, &temp)) 911 842 return -EINVAL; ··· 914 845 915 846 mutex_lock(&data->lock); 916 847 data->pwm_max[attr->index] = temp; 917 - i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_MAX(attr->index), 918 - temp); 848 + err = regmap_write(data->regmap, ADT7470_REG_PWM_MAX(attr->index), 849 + temp); 919 850 mutex_unlock(&data->lock); 920 851 921 - return count; 852 + return err < 0 ? err : count; 922 853 } 923 854 924 855 static ssize_t pwm_min_show(struct device *dev, ··· 939 870 { 940 871 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 941 872 struct adt7470_data *data = dev_get_drvdata(dev); 942 - struct i2c_client *client = data->client; 943 873 long temp; 874 + int err; 944 875 945 876 if (kstrtol(buf, 10, &temp)) 946 877 return -EINVAL; ··· 949 880 950 881 mutex_lock(&data->lock); 951 882 data->pwm_min[attr->index] = temp; 952 - i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_MIN(attr->index), 953 - temp); 883 + err = regmap_write(data->regmap, ADT7470_REG_PWM_MIN(attr->index), 884 + temp); 954 885 mutex_unlock(&data->lock); 955 886 956 - return count; 887 + return err < 0 ? err : count; 957 888 } 958 889 959 890 static ssize_t pwm_tmax_show(struct device *dev, ··· 987 918 { 988 919 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 989 920 struct adt7470_data *data = dev_get_drvdata(dev); 990 - struct i2c_client *client = data->client; 991 921 long temp; 922 + int err; 992 923 993 924 if (kstrtol(buf, 10, &temp)) 994 925 return -EINVAL; ··· 998 929 999 930 mutex_lock(&data->lock); 1000 931 data->pwm_tmin[attr->index] = temp; 1001 - i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_TMIN(attr->index), 1002 - temp); 932 + err = regmap_write(data->regmap, ADT7470_REG_PWM_TMIN(attr->index), 933 + temp); 1003 934 mutex_unlock(&data->lock); 1004 935 1005 - return count; 936 + return err < 0 ? err : count; 1006 937 } 1007 938 1008 939 static ssize_t pwm_auto_show(struct device *dev, ··· 1023 954 { 1024 955 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1025 956 struct adt7470_data *data = dev_get_drvdata(dev); 1026 - struct i2c_client *client = data->client; 1027 - int pwm_auto_reg = ADT7470_REG_PWM_CFG(attr->index); 1028 957 int pwm_auto_reg_mask; 1029 958 long temp; 1030 - u8 reg; 959 + int err; 1031 960 1032 961 if (kstrtol(buf, 10, &temp)) 1033 962 return -EINVAL; ··· 1041 974 1042 975 mutex_lock(&data->lock); 1043 976 data->pwm_automatic[attr->index] = temp; 1044 - reg = i2c_smbus_read_byte_data(client, pwm_auto_reg); 1045 - if (temp) 1046 - reg |= pwm_auto_reg_mask; 1047 - else 1048 - reg &= ~pwm_auto_reg_mask; 1049 - i2c_smbus_write_byte_data(client, pwm_auto_reg, reg); 977 + err = regmap_update_bits(data->regmap, ADT7470_REG_PWM_CFG(attr->index), 978 + pwm_auto_reg_mask, 979 + temp ? pwm_auto_reg_mask : 0); 1050 980 mutex_unlock(&data->lock); 1051 981 1052 - return count; 982 + return err < 0 ? err : count; 1053 983 } 1054 984 1055 985 static ssize_t pwm_auto_temp_show(struct device *dev, ··· 1081 1017 { 1082 1018 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1083 1019 struct adt7470_data *data = dev_get_drvdata(dev); 1084 - struct i2c_client *client = data->client; 1085 1020 int pwm_auto_reg = ADT7470_REG_PWM_AUTO_TEMP(attr->index); 1021 + unsigned int mask, val; 1086 1022 long temp; 1087 - u8 reg; 1023 + int err; 1088 1024 1089 1025 if (kstrtol(buf, 10, &temp)) 1090 1026 return -EINVAL; ··· 1095 1031 1096 1032 mutex_lock(&data->lock); 1097 1033 data->pwm_automatic[attr->index] = temp; 1098 - reg = i2c_smbus_read_byte_data(client, pwm_auto_reg); 1099 1034 1100 1035 if (!(attr->index % 2)) { 1101 - reg &= 0xF; 1102 - reg |= (temp << 4) & 0xF0; 1036 + mask = 0xF0; 1037 + val = (temp << 4) & 0xF0; 1103 1038 } else { 1104 - reg &= 0xF0; 1105 - reg |= temp & 0xF; 1039 + mask = 0x0F; 1040 + val = temp & 0x0F; 1106 1041 } 1107 1042 1108 - i2c_smbus_write_byte_data(client, pwm_auto_reg, reg); 1043 + err = regmap_update_bits(data->regmap, pwm_auto_reg, mask, val); 1109 1044 mutex_unlock(&data->lock); 1110 1045 1111 - return count; 1046 + return err < 0 ? err : count; 1112 1047 } 1113 1048 1114 1049 static ssize_t alarm_show(struct device *dev, ··· 1115 1052 { 1116 1053 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1117 1054 struct adt7470_data *data = adt7470_update_device(dev); 1055 + 1056 + if (IS_ERR(data)) 1057 + return PTR_ERR(data); 1118 1058 1119 1059 if (data->alarm & attr->index) 1120 1060 return sprintf(buf, "1\n"); ··· 1354 1288 return 0; 1355 1289 } 1356 1290 1357 - static void adt7470_init_client(struct i2c_client *client) 1358 - { 1359 - int reg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG); 1360 - 1361 - if (reg < 0) { 1362 - dev_err(&client->dev, "cannot read configuration register\n"); 1363 - } else { 1364 - /* start monitoring (and do a self-test) */ 1365 - i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, reg | 3); 1366 - } 1367 - } 1291 + static const struct regmap_config adt7470_regmap_config = { 1292 + .reg_bits = 8, 1293 + .val_bits = 8, 1294 + .use_single_read = true, 1295 + .use_single_write = true, 1296 + }; 1368 1297 1369 1298 static int adt7470_probe(struct i2c_client *client) 1370 1299 { 1371 1300 struct device *dev = &client->dev; 1372 1301 struct adt7470_data *data; 1373 1302 struct device *hwmon_dev; 1303 + int err; 1374 1304 1375 1305 data = devm_kzalloc(dev, sizeof(struct adt7470_data), GFP_KERNEL); 1376 1306 if (!data) ··· 1374 1312 1375 1313 data->num_temp_sensors = -1; 1376 1314 data->auto_update_interval = AUTO_UPDATE_INTERVAL; 1315 + data->regmap = devm_regmap_init_i2c(client, &adt7470_regmap_config); 1316 + if (IS_ERR(data->regmap)) 1317 + return PTR_ERR(data->regmap); 1377 1318 1378 1319 i2c_set_clientdata(client, data); 1379 - data->client = client; 1380 1320 mutex_init(&data->lock); 1381 1321 1382 1322 dev_info(&client->dev, "%s chip found\n", client->name); 1383 1323 1384 1324 /* Initialize the ADT7470 chip */ 1385 - adt7470_init_client(client); 1325 + err = regmap_update_bits(data->regmap, ADT7470_REG_CFG, 1326 + ADT7470_STRT_MASK | ADT7470_TEST_MASK, 1327 + ADT7470_STRT_MASK | ADT7470_TEST_MASK); 1328 + if (err < 0) 1329 + return err; 1386 1330 1387 1331 /* Register sysfs hooks */ 1388 1332 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,