1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Driver for Texas Instruments INA219, INA226 power monitor chips 4 * 5 * INA219: 6 * Zero Drift Bi-Directional Current/Power Monitor with I2C Interface 7 * Datasheet: https://www.ti.com/product/ina219 8 * 9 * INA220: 10 * Bi-Directional Current/Power Monitor with I2C Interface 11 * Datasheet: https://www.ti.com/product/ina220 12 * 13 * INA226: 14 * Bi-Directional Current/Power Monitor with I2C Interface 15 * Datasheet: https://www.ti.com/product/ina226 16 * 17 * INA230: 18 * Bi-directional Current/Power Monitor with I2C Interface 19 * Datasheet: https://www.ti.com/product/ina230 20 * 21 * Copyright (C) 2012 Lothar Felten <lothar.felten@gmail.com> 22 * Thanks to Jan Volkering 23 */ 24 25 #include <linux/kernel.h> 26 #include <linux/module.h> 27 #include <linux/init.h> 28 #include <linux/err.h> 29 #include <linux/slab.h> 30 #include <linux/i2c.h> 31 #include <linux/hwmon.h> 32 #include <linux/hwmon-sysfs.h> 33 #include <linux/jiffies.h> 34 #include <linux/of_device.h> 35 #include <linux/of.h> 36 #include <linux/delay.h> 37 #include <linux/util_macros.h> 38 #include <linux/regmap.h> 39 40 #include <linux/platform_data/ina2xx.h> 41 42 /* common register definitions */ 43 #define INA2XX_CONFIG 0x00 44 #define INA2XX_SHUNT_VOLTAGE 0x01 /* readonly */ 45 #define INA2XX_BUS_VOLTAGE 0x02 /* readonly */ 46 #define INA2XX_POWER 0x03 /* readonly */ 47 #define INA2XX_CURRENT 0x04 /* readonly */ 48 #define INA2XX_CALIBRATION 0x05 49 50 /* INA226 register definitions */ 51 #define INA226_MASK_ENABLE 0x06 52 #define INA226_ALERT_LIMIT 0x07 53 #define INA226_DIE_ID 0xFF 54 55 /* register count */ 56 #define INA219_REGISTERS 6 57 #define INA226_REGISTERS 8 58 59 #define INA2XX_MAX_REGISTERS 8 60 61 /* settings - depend on use case */ 62 #define INA219_CONFIG_DEFAULT 0x399F /* PGA=8 */ 63 #define INA226_CONFIG_DEFAULT 0x4527 /* averages=16 */ 64 65 /* worst case is 68.10 ms (~14.6Hz, ina219) */ 66 #define INA2XX_CONVERSION_RATE 15 67 #define INA2XX_MAX_DELAY 69 /* worst case delay in ms */ 68 69 #define INA2XX_RSHUNT_DEFAULT 10000 70 71 /* bit mask for reading the averaging setting in the configuration register */ 72 #define INA226_AVG_RD_MASK 0x0E00 73 74 #define INA226_READ_AVG(reg) (((reg) & INA226_AVG_RD_MASK) >> 9) 75 #define INA226_SHIFT_AVG(val) ((val) << 9) 76 77 /* bit number of alert functions in Mask/Enable Register */ 78 #define INA226_SHUNT_OVER_VOLTAGE_BIT 15 79 #define INA226_SHUNT_UNDER_VOLTAGE_BIT 14 80 #define INA226_BUS_OVER_VOLTAGE_BIT 13 81 #define INA226_BUS_UNDER_VOLTAGE_BIT 12 82 #define INA226_POWER_OVER_LIMIT_BIT 11 83 84 /* bit mask for alert config bits of Mask/Enable Register */ 85 #define INA226_ALERT_CONFIG_MASK 0xFC00 86 #define INA226_ALERT_FUNCTION_FLAG BIT(4) 87 88 /* common attrs, ina226 attrs and NULL */ 89 #define INA2XX_MAX_ATTRIBUTE_GROUPS 3 90 91 /* 92 * Both bus voltage and shunt voltage conversion times for ina226 are set 93 * to 0b0100 on POR, which translates to 2200 microseconds in total. 94 */ 95 #define INA226_TOTAL_CONV_TIME_DEFAULT 2200 96 97 static struct regmap_config ina2xx_regmap_config = { 98 .reg_bits = 8, 99 .val_bits = 16, 100 }; 101 102 enum ina2xx_ids { ina219, ina226 }; 103 104 struct ina2xx_config { 105 u16 config_default; 106 int calibration_value; 107 int registers; 108 int shunt_div; 109 int bus_voltage_shift; 110 int bus_voltage_lsb; /* uV */ 111 int power_lsb_factor; 112 }; 113 114 struct ina2xx_data { 115 const struct ina2xx_config *config; 116 117 long rshunt; 118 long current_lsb_uA; 119 long power_lsb_uW; 120 struct mutex config_lock; 121 struct regmap *regmap; 122 123 const struct attribute_group *groups[INA2XX_MAX_ATTRIBUTE_GROUPS]; 124 }; 125 126 static const struct ina2xx_config ina2xx_config[] = { 127 [ina219] = { 128 .config_default = INA219_CONFIG_DEFAULT, 129 .calibration_value = 4096, 130 .registers = INA219_REGISTERS, 131 .shunt_div = 100, 132 .bus_voltage_shift = 3, 133 .bus_voltage_lsb = 4000, 134 .power_lsb_factor = 20, 135 }, 136 [ina226] = { 137 .config_default = INA226_CONFIG_DEFAULT, 138 .calibration_value = 2048, 139 .registers = INA226_REGISTERS, 140 .shunt_div = 400, 141 .bus_voltage_shift = 0, 142 .bus_voltage_lsb = 1250, 143 .power_lsb_factor = 25, 144 }, 145 }; 146 147 /* 148 * Available averaging rates for ina226. The indices correspond with 149 * the bit values expected by the chip (according to the ina226 datasheet, 150 * table 3 AVG bit settings, found at 151 * https://www.ti.com/lit/ds/symlink/ina226.pdf. 152 */ 153 static const int ina226_avg_tab[] = { 1, 4, 16, 64, 128, 256, 512, 1024 }; 154 155 static int ina226_reg_to_interval(u16 config) 156 { 157 int avg = ina226_avg_tab[INA226_READ_AVG(config)]; 158 159 /* 160 * Multiply the total conversion time by the number of averages. 161 * Return the result in milliseconds. 162 */ 163 return DIV_ROUND_CLOSEST(avg * INA226_TOTAL_CONV_TIME_DEFAULT, 1000); 164 } 165 166 /* 167 * Return the new, shifted AVG field value of CONFIG register, 168 * to use with regmap_update_bits 169 */ 170 static u16 ina226_interval_to_reg(int interval) 171 { 172 int avg, avg_bits; 173 174 avg = DIV_ROUND_CLOSEST(interval * 1000, 175 INA226_TOTAL_CONV_TIME_DEFAULT); 176 avg_bits = find_closest(avg, ina226_avg_tab, 177 ARRAY_SIZE(ina226_avg_tab)); 178 179 return INA226_SHIFT_AVG(avg_bits); 180 } 181 182 /* 183 * Calibration register is set to the best value, which eliminates 184 * truncation errors on calculating current register in hardware. 185 * According to datasheet (eq. 3) the best values are 2048 for 186 * ina226 and 4096 for ina219. They are hardcoded as calibration_value. 187 */ 188 static int ina2xx_calibrate(struct ina2xx_data *data) 189 { 190 return regmap_write(data->regmap, INA2XX_CALIBRATION, 191 data->config->calibration_value); 192 } 193 194 /* 195 * Initialize the configuration and calibration registers. 196 */ 197 static int ina2xx_init(struct ina2xx_data *data) 198 { 199 int ret = regmap_write(data->regmap, INA2XX_CONFIG, 200 data->config->config_default); 201 if (ret < 0) 202 return ret; 203 204 return ina2xx_calibrate(data); 205 } 206 207 static int ina2xx_read_reg(struct device *dev, int reg, unsigned int *regval) 208 { 209 struct ina2xx_data *data = dev_get_drvdata(dev); 210 int ret, retry; 211 212 dev_dbg(dev, "Starting register %d read\n", reg); 213 214 for (retry = 5; retry; retry--) { 215 216 ret = regmap_read(data->regmap, reg, regval); 217 if (ret < 0) 218 return ret; 219 220 dev_dbg(dev, "read %d, val = 0x%04x\n", reg, *regval); 221 222 /* 223 * If the current value in the calibration register is 0, the 224 * power and current registers will also remain at 0. In case 225 * the chip has been reset let's check the calibration 226 * register and reinitialize if needed. 227 * We do that extra read of the calibration register if there 228 * is some hint of a chip reset. 229 */ 230 if (*regval == 0) { 231 unsigned int cal; 232 233 ret = regmap_read(data->regmap, INA2XX_CALIBRATION, 234 &cal); 235 if (ret < 0) 236 return ret; 237 238 if (cal == 0) { 239 dev_warn(dev, "chip not calibrated, reinitializing\n"); 240 241 ret = ina2xx_init(data); 242 if (ret < 0) 243 return ret; 244 /* 245 * Let's make sure the power and current 246 * registers have been updated before trying 247 * again. 248 */ 249 msleep(INA2XX_MAX_DELAY); 250 continue; 251 } 252 } 253 return 0; 254 } 255 256 /* 257 * If we're here then although all write operations succeeded, the 258 * chip still returns 0 in the calibration register. Nothing more we 259 * can do here. 260 */ 261 dev_err(dev, "unable to reinitialize the chip\n"); 262 return -ENODEV; 263 } 264 265 static int ina2xx_get_value(struct ina2xx_data *data, u8 reg, 266 unsigned int regval) 267 { 268 int val; 269 270 switch (reg) { 271 case INA2XX_SHUNT_VOLTAGE: 272 /* signed register */ 273 val = DIV_ROUND_CLOSEST((s16)regval, data->config->shunt_div); 274 break; 275 case INA2XX_BUS_VOLTAGE: 276 val = (regval >> data->config->bus_voltage_shift) 277 * data->config->bus_voltage_lsb; 278 val = DIV_ROUND_CLOSEST(val, 1000); 279 break; 280 case INA2XX_POWER: 281 val = regval * data->power_lsb_uW; 282 break; 283 case INA2XX_CURRENT: 284 /* signed register, result in mA */ 285 val = (s16)regval * data->current_lsb_uA; 286 val = DIV_ROUND_CLOSEST(val, 1000); 287 break; 288 case INA2XX_CALIBRATION: 289 val = regval; 290 break; 291 default: 292 /* programmer goofed */ 293 WARN_ON_ONCE(1); 294 val = 0; 295 break; 296 } 297 298 return val; 299 } 300 301 static ssize_t ina2xx_value_show(struct device *dev, 302 struct device_attribute *da, char *buf) 303 { 304 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); 305 struct ina2xx_data *data = dev_get_drvdata(dev); 306 unsigned int regval; 307 308 int err = ina2xx_read_reg(dev, attr->index, ®val); 309 310 if (err < 0) 311 return err; 312 313 return sysfs_emit(buf, "%d\n", ina2xx_get_value(data, attr->index, regval)); 314 } 315 316 static int ina226_reg_to_alert(struct ina2xx_data *data, u8 bit, u16 regval) 317 { 318 int reg; 319 320 switch (bit) { 321 case INA226_SHUNT_OVER_VOLTAGE_BIT: 322 case INA226_SHUNT_UNDER_VOLTAGE_BIT: 323 reg = INA2XX_SHUNT_VOLTAGE; 324 break; 325 case INA226_BUS_OVER_VOLTAGE_BIT: 326 case INA226_BUS_UNDER_VOLTAGE_BIT: 327 reg = INA2XX_BUS_VOLTAGE; 328 break; 329 case INA226_POWER_OVER_LIMIT_BIT: 330 reg = INA2XX_POWER; 331 break; 332 default: 333 /* programmer goofed */ 334 WARN_ON_ONCE(1); 335 return 0; 336 } 337 338 return ina2xx_get_value(data, reg, regval); 339 } 340 341 /* 342 * Turns alert limit values into register values. 343 * Opposite of the formula in ina2xx_get_value(). 344 */ 345 static s16 ina226_alert_to_reg(struct ina2xx_data *data, u8 bit, int val) 346 { 347 switch (bit) { 348 case INA226_SHUNT_OVER_VOLTAGE_BIT: 349 case INA226_SHUNT_UNDER_VOLTAGE_BIT: 350 val *= data->config->shunt_div; 351 return clamp_val(val, SHRT_MIN, SHRT_MAX); 352 case INA226_BUS_OVER_VOLTAGE_BIT: 353 case INA226_BUS_UNDER_VOLTAGE_BIT: 354 val = (val * 1000) << data->config->bus_voltage_shift; 355 val = DIV_ROUND_CLOSEST(val, data->config->bus_voltage_lsb); 356 return clamp_val(val, 0, SHRT_MAX); 357 case INA226_POWER_OVER_LIMIT_BIT: 358 val = DIV_ROUND_CLOSEST(val, data->power_lsb_uW); 359 return clamp_val(val, 0, USHRT_MAX); 360 default: 361 /* programmer goofed */ 362 WARN_ON_ONCE(1); 363 return 0; 364 } 365 } 366 367 static ssize_t ina226_alert_show(struct device *dev, 368 struct device_attribute *da, char *buf) 369 { 370 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); 371 struct ina2xx_data *data = dev_get_drvdata(dev); 372 int regval; 373 int val = 0; 374 int ret; 375 376 mutex_lock(&data->config_lock); 377 ret = regmap_read(data->regmap, INA226_MASK_ENABLE, ®val); 378 if (ret) 379 goto abort; 380 381 if (regval & BIT(attr->index)) { 382 ret = regmap_read(data->regmap, INA226_ALERT_LIMIT, ®val); 383 if (ret) 384 goto abort; 385 val = ina226_reg_to_alert(data, attr->index, regval); 386 } 387 388 ret = sysfs_emit(buf, "%d\n", val); 389 abort: 390 mutex_unlock(&data->config_lock); 391 return ret; 392 } 393 394 static ssize_t ina226_alert_store(struct device *dev, 395 struct device_attribute *da, 396 const char *buf, size_t count) 397 { 398 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); 399 struct ina2xx_data *data = dev_get_drvdata(dev); 400 unsigned long val; 401 int ret; 402 403 ret = kstrtoul(buf, 10, &val); 404 if (ret < 0) 405 return ret; 406 407 /* 408 * Clear all alerts first to avoid accidentally triggering ALERT pin 409 * due to register write sequence. Then, only enable the alert 410 * if the value is non-zero. 411 */ 412 mutex_lock(&data->config_lock); 413 ret = regmap_update_bits(data->regmap, INA226_MASK_ENABLE, 414 INA226_ALERT_CONFIG_MASK, 0); 415 if (ret < 0) 416 goto abort; 417 418 ret = regmap_write(data->regmap, INA226_ALERT_LIMIT, 419 ina226_alert_to_reg(data, attr->index, val)); 420 if (ret < 0) 421 goto abort; 422 423 if (val != 0) { 424 ret = regmap_update_bits(data->regmap, INA226_MASK_ENABLE, 425 INA226_ALERT_CONFIG_MASK, 426 BIT(attr->index)); 427 if (ret < 0) 428 goto abort; 429 } 430 431 ret = count; 432 abort: 433 mutex_unlock(&data->config_lock); 434 return ret; 435 } 436 437 static ssize_t ina226_alarm_show(struct device *dev, 438 struct device_attribute *da, char *buf) 439 { 440 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); 441 struct ina2xx_data *data = dev_get_drvdata(dev); 442 int regval; 443 int alarm = 0; 444 int ret; 445 446 ret = regmap_read(data->regmap, INA226_MASK_ENABLE, ®val); 447 if (ret) 448 return ret; 449 450 alarm = (regval & BIT(attr->index)) && 451 (regval & INA226_ALERT_FUNCTION_FLAG); 452 return sysfs_emit(buf, "%d\n", alarm); 453 } 454 455 /* 456 * In order to keep calibration register value fixed, the product 457 * of current_lsb and shunt_resistor should also be fixed and equal 458 * to shunt_voltage_lsb = 1 / shunt_div multiplied by 10^9 in order 459 * to keep the scale. 460 */ 461 static int ina2xx_set_shunt(struct ina2xx_data *data, long val) 462 { 463 unsigned int dividend = DIV_ROUND_CLOSEST(1000000000, 464 data->config->shunt_div); 465 if (val <= 0 || val > dividend) 466 return -EINVAL; 467 468 mutex_lock(&data->config_lock); 469 data->rshunt = val; 470 data->current_lsb_uA = DIV_ROUND_CLOSEST(dividend, val); 471 data->power_lsb_uW = data->config->power_lsb_factor * 472 data->current_lsb_uA; 473 mutex_unlock(&data->config_lock); 474 475 return 0; 476 } 477 478 static ssize_t ina2xx_shunt_show(struct device *dev, 479 struct device_attribute *da, char *buf) 480 { 481 struct ina2xx_data *data = dev_get_drvdata(dev); 482 483 return sysfs_emit(buf, "%li\n", data->rshunt); 484 } 485 486 static ssize_t ina2xx_shunt_store(struct device *dev, 487 struct device_attribute *da, 488 const char *buf, size_t count) 489 { 490 unsigned long val; 491 int status; 492 struct ina2xx_data *data = dev_get_drvdata(dev); 493 494 status = kstrtoul(buf, 10, &val); 495 if (status < 0) 496 return status; 497 498 status = ina2xx_set_shunt(data, val); 499 if (status < 0) 500 return status; 501 return count; 502 } 503 504 static ssize_t ina226_interval_store(struct device *dev, 505 struct device_attribute *da, 506 const char *buf, size_t count) 507 { 508 struct ina2xx_data *data = dev_get_drvdata(dev); 509 unsigned long val; 510 int status; 511 512 status = kstrtoul(buf, 10, &val); 513 if (status < 0) 514 return status; 515 516 if (val > INT_MAX || val == 0) 517 return -EINVAL; 518 519 status = regmap_update_bits(data->regmap, INA2XX_CONFIG, 520 INA226_AVG_RD_MASK, 521 ina226_interval_to_reg(val)); 522 if (status < 0) 523 return status; 524 525 return count; 526 } 527 528 static ssize_t ina226_interval_show(struct device *dev, 529 struct device_attribute *da, char *buf) 530 { 531 struct ina2xx_data *data = dev_get_drvdata(dev); 532 int status; 533 unsigned int regval; 534 535 status = regmap_read(data->regmap, INA2XX_CONFIG, ®val); 536 if (status) 537 return status; 538 539 return sysfs_emit(buf, "%d\n", ina226_reg_to_interval(regval)); 540 } 541 542 /* shunt voltage */ 543 static SENSOR_DEVICE_ATTR_RO(in0_input, ina2xx_value, INA2XX_SHUNT_VOLTAGE); 544 /* shunt voltage over/under voltage alert setting and alarm */ 545 static SENSOR_DEVICE_ATTR_RW(in0_crit, ina226_alert, 546 INA226_SHUNT_OVER_VOLTAGE_BIT); 547 static SENSOR_DEVICE_ATTR_RW(in0_lcrit, ina226_alert, 548 INA226_SHUNT_UNDER_VOLTAGE_BIT); 549 static SENSOR_DEVICE_ATTR_RO(in0_crit_alarm, ina226_alarm, 550 INA226_SHUNT_OVER_VOLTAGE_BIT); 551 static SENSOR_DEVICE_ATTR_RO(in0_lcrit_alarm, ina226_alarm, 552 INA226_SHUNT_UNDER_VOLTAGE_BIT); 553 554 /* bus voltage */ 555 static SENSOR_DEVICE_ATTR_RO(in1_input, ina2xx_value, INA2XX_BUS_VOLTAGE); 556 /* bus voltage over/under voltage alert setting and alarm */ 557 static SENSOR_DEVICE_ATTR_RW(in1_crit, ina226_alert, 558 INA226_BUS_OVER_VOLTAGE_BIT); 559 static SENSOR_DEVICE_ATTR_RW(in1_lcrit, ina226_alert, 560 INA226_BUS_UNDER_VOLTAGE_BIT); 561 static SENSOR_DEVICE_ATTR_RO(in1_crit_alarm, ina226_alarm, 562 INA226_BUS_OVER_VOLTAGE_BIT); 563 static SENSOR_DEVICE_ATTR_RO(in1_lcrit_alarm, ina226_alarm, 564 INA226_BUS_UNDER_VOLTAGE_BIT); 565 566 /* calculated current */ 567 static SENSOR_DEVICE_ATTR_RO(curr1_input, ina2xx_value, INA2XX_CURRENT); 568 569 /* calculated power */ 570 static SENSOR_DEVICE_ATTR_RO(power1_input, ina2xx_value, INA2XX_POWER); 571 /* over-limit power alert setting and alarm */ 572 static SENSOR_DEVICE_ATTR_RW(power1_crit, ina226_alert, 573 INA226_POWER_OVER_LIMIT_BIT); 574 static SENSOR_DEVICE_ATTR_RO(power1_crit_alarm, ina226_alarm, 575 INA226_POWER_OVER_LIMIT_BIT); 576 577 /* shunt resistance */ 578 static SENSOR_DEVICE_ATTR_RW(shunt_resistor, ina2xx_shunt, INA2XX_CALIBRATION); 579 580 /* update interval (ina226 only) */ 581 static SENSOR_DEVICE_ATTR_RW(update_interval, ina226_interval, 0); 582 583 /* pointers to created device attributes */ 584 static struct attribute *ina2xx_attrs[] = { 585 &sensor_dev_attr_in0_input.dev_attr.attr, 586 &sensor_dev_attr_in1_input.dev_attr.attr, 587 &sensor_dev_attr_curr1_input.dev_attr.attr, 588 &sensor_dev_attr_power1_input.dev_attr.attr, 589 &sensor_dev_attr_shunt_resistor.dev_attr.attr, 590 NULL, 591 }; 592 593 static const struct attribute_group ina2xx_group = { 594 .attrs = ina2xx_attrs, 595 }; 596 597 static struct attribute *ina226_attrs[] = { 598 &sensor_dev_attr_in0_crit.dev_attr.attr, 599 &sensor_dev_attr_in0_lcrit.dev_attr.attr, 600 &sensor_dev_attr_in0_crit_alarm.dev_attr.attr, 601 &sensor_dev_attr_in0_lcrit_alarm.dev_attr.attr, 602 &sensor_dev_attr_in1_crit.dev_attr.attr, 603 &sensor_dev_attr_in1_lcrit.dev_attr.attr, 604 &sensor_dev_attr_in1_crit_alarm.dev_attr.attr, 605 &sensor_dev_attr_in1_lcrit_alarm.dev_attr.attr, 606 &sensor_dev_attr_power1_crit.dev_attr.attr, 607 &sensor_dev_attr_power1_crit_alarm.dev_attr.attr, 608 &sensor_dev_attr_update_interval.dev_attr.attr, 609 NULL, 610 }; 611 612 static const struct attribute_group ina226_group = { 613 .attrs = ina226_attrs, 614 }; 615 616 static const struct i2c_device_id ina2xx_id[]; 617 618 static int ina2xx_probe(struct i2c_client *client) 619 { 620 struct device *dev = &client->dev; 621 struct ina2xx_data *data; 622 struct device *hwmon_dev; 623 u32 val; 624 int ret, group = 0; 625 enum ina2xx_ids chip; 626 627 if (client->dev.of_node) 628 chip = (enum ina2xx_ids)of_device_get_match_data(&client->dev); 629 else 630 chip = i2c_match_id(ina2xx_id, client)->driver_data; 631 632 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); 633 if (!data) 634 return -ENOMEM; 635 636 /* set the device type */ 637 data->config = &ina2xx_config[chip]; 638 mutex_init(&data->config_lock); 639 640 if (of_property_read_u32(dev->of_node, "shunt-resistor", &val) < 0) { 641 struct ina2xx_platform_data *pdata = dev_get_platdata(dev); 642 643 if (pdata) 644 val = pdata->shunt_uohms; 645 else 646 val = INA2XX_RSHUNT_DEFAULT; 647 } 648 649 ina2xx_set_shunt(data, val); 650 651 ina2xx_regmap_config.max_register = data->config->registers; 652 653 data->regmap = devm_regmap_init_i2c(client, &ina2xx_regmap_config); 654 if (IS_ERR(data->regmap)) { 655 dev_err(dev, "failed to allocate register map\n"); 656 return PTR_ERR(data->regmap); 657 } 658 659 ret = ina2xx_init(data); 660 if (ret < 0) { 661 dev_err(dev, "error configuring the device: %d\n", ret); 662 return -ENODEV; 663 } 664 665 data->groups[group++] = &ina2xx_group; 666 if (chip == ina226) 667 data->groups[group++] = &ina226_group; 668 669 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, 670 data, data->groups); 671 if (IS_ERR(hwmon_dev)) 672 return PTR_ERR(hwmon_dev); 673 674 dev_info(dev, "power monitor %s (Rshunt = %li uOhm)\n", 675 client->name, data->rshunt); 676 677 return 0; 678 } 679 680 static const struct i2c_device_id ina2xx_id[] = { 681 { "ina219", ina219 }, 682 { "ina220", ina219 }, 683 { "ina226", ina226 }, 684 { "ina230", ina226 }, 685 { "ina231", ina226 }, 686 { } 687 }; 688 MODULE_DEVICE_TABLE(i2c, ina2xx_id); 689 690 static const struct of_device_id __maybe_unused ina2xx_of_match[] = { 691 { 692 .compatible = "ti,ina219", 693 .data = (void *)ina219 694 }, 695 { 696 .compatible = "ti,ina220", 697 .data = (void *)ina219 698 }, 699 { 700 .compatible = "ti,ina226", 701 .data = (void *)ina226 702 }, 703 { 704 .compatible = "ti,ina230", 705 .data = (void *)ina226 706 }, 707 { 708 .compatible = "ti,ina231", 709 .data = (void *)ina226 710 }, 711 { }, 712 }; 713 MODULE_DEVICE_TABLE(of, ina2xx_of_match); 714 715 static struct i2c_driver ina2xx_driver = { 716 .driver = { 717 .name = "ina2xx", 718 .of_match_table = of_match_ptr(ina2xx_of_match), 719 }, 720 .probe_new = ina2xx_probe, 721 .id_table = ina2xx_id, 722 }; 723 724 module_i2c_driver(ina2xx_driver); 725 726 MODULE_AUTHOR("Lothar Felten <l-felten@ti.com>"); 727 MODULE_DESCRIPTION("ina2xx driver"); 728 MODULE_LICENSE("GPL"); 729