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: http://www.ti.com/product/ina219 8 * 9 * INA220: 10 * Bi-Directional Current/Power Monitor with I2C Interface 11 * Datasheet: http://www.ti.com/product/ina220 12 * 13 * INA226: 14 * Bi-Directional Current/Power Monitor with I2C Interface 15 * Datasheet: http://www.ti.com/product/ina226 16 * 17 * INA230: 18 * Bi-directional Current/Power Monitor with I2C Interface 19 * Datasheet: http://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 /* common attrs, ina226 attrs and NULL */ 78 #define INA2XX_MAX_ATTRIBUTE_GROUPS 3 79 80 /* 81 * Both bus voltage and shunt voltage conversion times for ina226 are set 82 * to 0b0100 on POR, which translates to 2200 microseconds in total. 83 */ 84 #define INA226_TOTAL_CONV_TIME_DEFAULT 2200 85 86 static struct regmap_config ina2xx_regmap_config = { 87 .reg_bits = 8, 88 .val_bits = 16, 89 }; 90 91 enum ina2xx_ids { ina219, ina226 }; 92 93 struct ina2xx_config { 94 u16 config_default; 95 int calibration_value; 96 int registers; 97 int shunt_div; 98 int bus_voltage_shift; 99 int bus_voltage_lsb; /* uV */ 100 int power_lsb_factor; 101 }; 102 103 struct ina2xx_data { 104 const struct ina2xx_config *config; 105 106 long rshunt; 107 long current_lsb_uA; 108 long power_lsb_uW; 109 struct mutex config_lock; 110 struct regmap *regmap; 111 112 const struct attribute_group *groups[INA2XX_MAX_ATTRIBUTE_GROUPS]; 113 }; 114 115 static const struct ina2xx_config ina2xx_config[] = { 116 [ina219] = { 117 .config_default = INA219_CONFIG_DEFAULT, 118 .calibration_value = 4096, 119 .registers = INA219_REGISTERS, 120 .shunt_div = 100, 121 .bus_voltage_shift = 3, 122 .bus_voltage_lsb = 4000, 123 .power_lsb_factor = 20, 124 }, 125 [ina226] = { 126 .config_default = INA226_CONFIG_DEFAULT, 127 .calibration_value = 2048, 128 .registers = INA226_REGISTERS, 129 .shunt_div = 400, 130 .bus_voltage_shift = 0, 131 .bus_voltage_lsb = 1250, 132 .power_lsb_factor = 25, 133 }, 134 }; 135 136 /* 137 * Available averaging rates for ina226. The indices correspond with 138 * the bit values expected by the chip (according to the ina226 datasheet, 139 * table 3 AVG bit settings, found at 140 * http://www.ti.com/lit/ds/symlink/ina226.pdf. 141 */ 142 static const int ina226_avg_tab[] = { 1, 4, 16, 64, 128, 256, 512, 1024 }; 143 144 static int ina226_reg_to_interval(u16 config) 145 { 146 int avg = ina226_avg_tab[INA226_READ_AVG(config)]; 147 148 /* 149 * Multiply the total conversion time by the number of averages. 150 * Return the result in milliseconds. 151 */ 152 return DIV_ROUND_CLOSEST(avg * INA226_TOTAL_CONV_TIME_DEFAULT, 1000); 153 } 154 155 /* 156 * Return the new, shifted AVG field value of CONFIG register, 157 * to use with regmap_update_bits 158 */ 159 static u16 ina226_interval_to_reg(int interval) 160 { 161 int avg, avg_bits; 162 163 avg = DIV_ROUND_CLOSEST(interval * 1000, 164 INA226_TOTAL_CONV_TIME_DEFAULT); 165 avg_bits = find_closest(avg, ina226_avg_tab, 166 ARRAY_SIZE(ina226_avg_tab)); 167 168 return INA226_SHIFT_AVG(avg_bits); 169 } 170 171 /* 172 * Calibration register is set to the best value, which eliminates 173 * truncation errors on calculating current register in hardware. 174 * According to datasheet (eq. 3) the best values are 2048 for 175 * ina226 and 4096 for ina219. They are hardcoded as calibration_value. 176 */ 177 static int ina2xx_calibrate(struct ina2xx_data *data) 178 { 179 return regmap_write(data->regmap, INA2XX_CALIBRATION, 180 data->config->calibration_value); 181 } 182 183 /* 184 * Initialize the configuration and calibration registers. 185 */ 186 static int ina2xx_init(struct ina2xx_data *data) 187 { 188 int ret = regmap_write(data->regmap, INA2XX_CONFIG, 189 data->config->config_default); 190 if (ret < 0) 191 return ret; 192 193 return ina2xx_calibrate(data); 194 } 195 196 static int ina2xx_read_reg(struct device *dev, int reg, unsigned int *regval) 197 { 198 struct ina2xx_data *data = dev_get_drvdata(dev); 199 int ret, retry; 200 201 dev_dbg(dev, "Starting register %d read\n", reg); 202 203 for (retry = 5; retry; retry--) { 204 205 ret = regmap_read(data->regmap, reg, regval); 206 if (ret < 0) 207 return ret; 208 209 dev_dbg(dev, "read %d, val = 0x%04x\n", reg, *regval); 210 211 /* 212 * If the current value in the calibration register is 0, the 213 * power and current registers will also remain at 0. In case 214 * the chip has been reset let's check the calibration 215 * register and reinitialize if needed. 216 * We do that extra read of the calibration register if there 217 * is some hint of a chip reset. 218 */ 219 if (*regval == 0) { 220 unsigned int cal; 221 222 ret = regmap_read(data->regmap, INA2XX_CALIBRATION, 223 &cal); 224 if (ret < 0) 225 return ret; 226 227 if (cal == 0) { 228 dev_warn(dev, "chip not calibrated, reinitializing\n"); 229 230 ret = ina2xx_init(data); 231 if (ret < 0) 232 return ret; 233 /* 234 * Let's make sure the power and current 235 * registers have been updated before trying 236 * again. 237 */ 238 msleep(INA2XX_MAX_DELAY); 239 continue; 240 } 241 } 242 return 0; 243 } 244 245 /* 246 * If we're here then although all write operations succeeded, the 247 * chip still returns 0 in the calibration register. Nothing more we 248 * can do here. 249 */ 250 dev_err(dev, "unable to reinitialize the chip\n"); 251 return -ENODEV; 252 } 253 254 static int ina2xx_get_value(struct ina2xx_data *data, u8 reg, 255 unsigned int regval) 256 { 257 int val; 258 259 switch (reg) { 260 case INA2XX_SHUNT_VOLTAGE: 261 /* signed register */ 262 val = DIV_ROUND_CLOSEST((s16)regval, data->config->shunt_div); 263 break; 264 case INA2XX_BUS_VOLTAGE: 265 val = (regval >> data->config->bus_voltage_shift) 266 * data->config->bus_voltage_lsb; 267 val = DIV_ROUND_CLOSEST(val, 1000); 268 break; 269 case INA2XX_POWER: 270 val = regval * data->power_lsb_uW; 271 break; 272 case INA2XX_CURRENT: 273 /* signed register, result in mA */ 274 val = (s16)regval * data->current_lsb_uA; 275 val = DIV_ROUND_CLOSEST(val, 1000); 276 break; 277 case INA2XX_CALIBRATION: 278 val = regval; 279 break; 280 default: 281 /* programmer goofed */ 282 WARN_ON_ONCE(1); 283 val = 0; 284 break; 285 } 286 287 return val; 288 } 289 290 static ssize_t ina2xx_value_show(struct device *dev, 291 struct device_attribute *da, char *buf) 292 { 293 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); 294 struct ina2xx_data *data = dev_get_drvdata(dev); 295 unsigned int regval; 296 297 int err = ina2xx_read_reg(dev, attr->index, ®val); 298 299 if (err < 0) 300 return err; 301 302 return snprintf(buf, PAGE_SIZE, "%d\n", 303 ina2xx_get_value(data, attr->index, regval)); 304 } 305 306 /* 307 * In order to keep calibration register value fixed, the product 308 * of current_lsb and shunt_resistor should also be fixed and equal 309 * to shunt_voltage_lsb = 1 / shunt_div multiplied by 10^9 in order 310 * to keep the scale. 311 */ 312 static int ina2xx_set_shunt(struct ina2xx_data *data, long val) 313 { 314 unsigned int dividend = DIV_ROUND_CLOSEST(1000000000, 315 data->config->shunt_div); 316 if (val <= 0 || val > dividend) 317 return -EINVAL; 318 319 mutex_lock(&data->config_lock); 320 data->rshunt = val; 321 data->current_lsb_uA = DIV_ROUND_CLOSEST(dividend, val); 322 data->power_lsb_uW = data->config->power_lsb_factor * 323 data->current_lsb_uA; 324 mutex_unlock(&data->config_lock); 325 326 return 0; 327 } 328 329 static ssize_t ina2xx_shunt_show(struct device *dev, 330 struct device_attribute *da, char *buf) 331 { 332 struct ina2xx_data *data = dev_get_drvdata(dev); 333 334 return snprintf(buf, PAGE_SIZE, "%li\n", data->rshunt); 335 } 336 337 static ssize_t ina2xx_shunt_store(struct device *dev, 338 struct device_attribute *da, 339 const char *buf, size_t count) 340 { 341 unsigned long val; 342 int status; 343 struct ina2xx_data *data = dev_get_drvdata(dev); 344 345 status = kstrtoul(buf, 10, &val); 346 if (status < 0) 347 return status; 348 349 status = ina2xx_set_shunt(data, val); 350 if (status < 0) 351 return status; 352 return count; 353 } 354 355 static ssize_t ina226_interval_store(struct device *dev, 356 struct device_attribute *da, 357 const char *buf, size_t count) 358 { 359 struct ina2xx_data *data = dev_get_drvdata(dev); 360 unsigned long val; 361 int status; 362 363 status = kstrtoul(buf, 10, &val); 364 if (status < 0) 365 return status; 366 367 if (val > INT_MAX || val == 0) 368 return -EINVAL; 369 370 status = regmap_update_bits(data->regmap, INA2XX_CONFIG, 371 INA226_AVG_RD_MASK, 372 ina226_interval_to_reg(val)); 373 if (status < 0) 374 return status; 375 376 return count; 377 } 378 379 static ssize_t ina226_interval_show(struct device *dev, 380 struct device_attribute *da, char *buf) 381 { 382 struct ina2xx_data *data = dev_get_drvdata(dev); 383 int status; 384 unsigned int regval; 385 386 status = regmap_read(data->regmap, INA2XX_CONFIG, ®val); 387 if (status) 388 return status; 389 390 return snprintf(buf, PAGE_SIZE, "%d\n", ina226_reg_to_interval(regval)); 391 } 392 393 /* shunt voltage */ 394 static SENSOR_DEVICE_ATTR_RO(in0_input, ina2xx_value, INA2XX_SHUNT_VOLTAGE); 395 396 /* bus voltage */ 397 static SENSOR_DEVICE_ATTR_RO(in1_input, ina2xx_value, INA2XX_BUS_VOLTAGE); 398 399 /* calculated current */ 400 static SENSOR_DEVICE_ATTR_RO(curr1_input, ina2xx_value, INA2XX_CURRENT); 401 402 /* calculated power */ 403 static SENSOR_DEVICE_ATTR_RO(power1_input, ina2xx_value, INA2XX_POWER); 404 405 /* shunt resistance */ 406 static SENSOR_DEVICE_ATTR_RW(shunt_resistor, ina2xx_shunt, INA2XX_CALIBRATION); 407 408 /* update interval (ina226 only) */ 409 static SENSOR_DEVICE_ATTR_RW(update_interval, ina226_interval, 0); 410 411 /* pointers to created device attributes */ 412 static struct attribute *ina2xx_attrs[] = { 413 &sensor_dev_attr_in0_input.dev_attr.attr, 414 &sensor_dev_attr_in1_input.dev_attr.attr, 415 &sensor_dev_attr_curr1_input.dev_attr.attr, 416 &sensor_dev_attr_power1_input.dev_attr.attr, 417 &sensor_dev_attr_shunt_resistor.dev_attr.attr, 418 NULL, 419 }; 420 421 static const struct attribute_group ina2xx_group = { 422 .attrs = ina2xx_attrs, 423 }; 424 425 static struct attribute *ina226_attrs[] = { 426 &sensor_dev_attr_update_interval.dev_attr.attr, 427 NULL, 428 }; 429 430 static const struct attribute_group ina226_group = { 431 .attrs = ina226_attrs, 432 }; 433 434 static int ina2xx_probe(struct i2c_client *client, 435 const struct i2c_device_id *id) 436 { 437 struct device *dev = &client->dev; 438 struct ina2xx_data *data; 439 struct device *hwmon_dev; 440 u32 val; 441 int ret, group = 0; 442 enum ina2xx_ids chip; 443 444 if (client->dev.of_node) 445 chip = (enum ina2xx_ids)of_device_get_match_data(&client->dev); 446 else 447 chip = id->driver_data; 448 449 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); 450 if (!data) 451 return -ENOMEM; 452 453 /* set the device type */ 454 data->config = &ina2xx_config[chip]; 455 mutex_init(&data->config_lock); 456 457 if (of_property_read_u32(dev->of_node, "shunt-resistor", &val) < 0) { 458 struct ina2xx_platform_data *pdata = dev_get_platdata(dev); 459 460 if (pdata) 461 val = pdata->shunt_uohms; 462 else 463 val = INA2XX_RSHUNT_DEFAULT; 464 } 465 466 ina2xx_set_shunt(data, val); 467 468 ina2xx_regmap_config.max_register = data->config->registers; 469 470 data->regmap = devm_regmap_init_i2c(client, &ina2xx_regmap_config); 471 if (IS_ERR(data->regmap)) { 472 dev_err(dev, "failed to allocate register map\n"); 473 return PTR_ERR(data->regmap); 474 } 475 476 ret = ina2xx_init(data); 477 if (ret < 0) { 478 dev_err(dev, "error configuring the device: %d\n", ret); 479 return -ENODEV; 480 } 481 482 data->groups[group++] = &ina2xx_group; 483 if (chip == ina226) 484 data->groups[group++] = &ina226_group; 485 486 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, 487 data, data->groups); 488 if (IS_ERR(hwmon_dev)) 489 return PTR_ERR(hwmon_dev); 490 491 dev_info(dev, "power monitor %s (Rshunt = %li uOhm)\n", 492 client->name, data->rshunt); 493 494 return 0; 495 } 496 497 static const struct i2c_device_id ina2xx_id[] = { 498 { "ina219", ina219 }, 499 { "ina220", ina219 }, 500 { "ina226", ina226 }, 501 { "ina230", ina226 }, 502 { "ina231", ina226 }, 503 { } 504 }; 505 MODULE_DEVICE_TABLE(i2c, ina2xx_id); 506 507 static const struct of_device_id __maybe_unused ina2xx_of_match[] = { 508 { 509 .compatible = "ti,ina219", 510 .data = (void *)ina219 511 }, 512 { 513 .compatible = "ti,ina220", 514 .data = (void *)ina219 515 }, 516 { 517 .compatible = "ti,ina226", 518 .data = (void *)ina226 519 }, 520 { 521 .compatible = "ti,ina230", 522 .data = (void *)ina226 523 }, 524 { 525 .compatible = "ti,ina231", 526 .data = (void *)ina226 527 }, 528 { }, 529 }; 530 MODULE_DEVICE_TABLE(of, ina2xx_of_match); 531 532 static struct i2c_driver ina2xx_driver = { 533 .driver = { 534 .name = "ina2xx", 535 .of_match_table = of_match_ptr(ina2xx_of_match), 536 }, 537 .probe = ina2xx_probe, 538 .id_table = ina2xx_id, 539 }; 540 541 module_i2c_driver(ina2xx_driver); 542 543 MODULE_AUTHOR("Lothar Felten <l-felten@ti.com>"); 544 MODULE_DESCRIPTION("ina2xx driver"); 545 MODULE_LICENSE("GPL"); 546