1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Driver for Richtek RT9455WSC battery charger. 4 * 5 * Copyright (C) 2015 Intel Corporation 6 */ 7 8 #include <linux/module.h> 9 #include <linux/interrupt.h> 10 #include <linux/delay.h> 11 #include <linux/of_irq.h> 12 #include <linux/of_device.h> 13 #include <linux/pm_runtime.h> 14 #include <linux/power_supply.h> 15 #include <linux/i2c.h> 16 #include <linux/acpi.h> 17 #include <linux/usb/phy.h> 18 #include <linux/regmap.h> 19 20 #define RT9455_MANUFACTURER "Richtek" 21 #define RT9455_MODEL_NAME "RT9455" 22 #define RT9455_DRIVER_NAME "rt9455-charger" 23 24 #define RT9455_IRQ_NAME "interrupt" 25 26 #define RT9455_PWR_RDY_DELAY 1 /* 1 second */ 27 #define RT9455_MAX_CHARGING_TIME 21600 /* 6 hrs */ 28 #define RT9455_BATT_PRESENCE_DELAY 60 /* 60 seconds */ 29 30 #define RT9455_CHARGE_MODE 0x00 31 #define RT9455_BOOST_MODE 0x01 32 33 #define RT9455_FAULT 0x03 34 35 #define RT9455_IAICR_100MA 0x00 36 #define RT9455_IAICR_500MA 0x01 37 #define RT9455_IAICR_NO_LIMIT 0x03 38 39 #define RT9455_CHARGE_DISABLE 0x00 40 #define RT9455_CHARGE_ENABLE 0x01 41 42 #define RT9455_PWR_FAULT 0x00 43 #define RT9455_PWR_GOOD 0x01 44 45 #define RT9455_REG_CTRL1 0x00 /* CTRL1 reg address */ 46 #define RT9455_REG_CTRL2 0x01 /* CTRL2 reg address */ 47 #define RT9455_REG_CTRL3 0x02 /* CTRL3 reg address */ 48 #define RT9455_REG_DEV_ID 0x03 /* DEV_ID reg address */ 49 #define RT9455_REG_CTRL4 0x04 /* CTRL4 reg address */ 50 #define RT9455_REG_CTRL5 0x05 /* CTRL5 reg address */ 51 #define RT9455_REG_CTRL6 0x06 /* CTRL6 reg address */ 52 #define RT9455_REG_CTRL7 0x07 /* CTRL7 reg address */ 53 #define RT9455_REG_IRQ1 0x08 /* IRQ1 reg address */ 54 #define RT9455_REG_IRQ2 0x09 /* IRQ2 reg address */ 55 #define RT9455_REG_IRQ3 0x0A /* IRQ3 reg address */ 56 #define RT9455_REG_MASK1 0x0B /* MASK1 reg address */ 57 #define RT9455_REG_MASK2 0x0C /* MASK2 reg address */ 58 #define RT9455_REG_MASK3 0x0D /* MASK3 reg address */ 59 60 enum rt9455_fields { 61 F_STAT, F_BOOST, F_PWR_RDY, F_OTG_PIN_POLARITY, /* CTRL1 reg fields */ 62 63 F_IAICR, F_TE_SHDN_EN, F_HIGHER_OCP, F_TE, F_IAICR_INT, F_HIZ, 64 F_OPA_MODE, /* CTRL2 reg fields */ 65 66 F_VOREG, F_OTG_PL, F_OTG_EN, /* CTRL3 reg fields */ 67 68 F_VENDOR_ID, F_CHIP_REV, /* DEV_ID reg fields */ 69 70 F_RST, /* CTRL4 reg fields */ 71 72 F_TMR_EN, F_MIVR, F_IPREC, F_IEOC_PERCENTAGE, /* CTRL5 reg fields*/ 73 74 F_IAICR_SEL, F_ICHRG, F_VPREC, /* CTRL6 reg fields */ 75 76 F_BATD_EN, F_CHG_EN, F_VMREG, /* CTRL7 reg fields */ 77 78 F_TSDI, F_VINOVPI, F_BATAB, /* IRQ1 reg fields */ 79 80 F_CHRVPI, F_CHBATOVI, F_CHTERMI, F_CHRCHGI, F_CH32MI, F_CHTREGI, 81 F_CHMIVRI, /* IRQ2 reg fields */ 82 83 F_BSTBUSOVI, F_BSTOLI, F_BSTLOWVI, F_BST32SI, /* IRQ3 reg fields */ 84 85 F_TSDM, F_VINOVPIM, F_BATABM, /* MASK1 reg fields */ 86 87 F_CHRVPIM, F_CHBATOVIM, F_CHTERMIM, F_CHRCHGIM, F_CH32MIM, F_CHTREGIM, 88 F_CHMIVRIM, /* MASK2 reg fields */ 89 90 F_BSTVINOVIM, F_BSTOLIM, F_BSTLOWVIM, F_BST32SIM, /* MASK3 reg fields */ 91 92 F_MAX_FIELDS 93 }; 94 95 static const struct reg_field rt9455_reg_fields[] = { 96 [F_STAT] = REG_FIELD(RT9455_REG_CTRL1, 4, 5), 97 [F_BOOST] = REG_FIELD(RT9455_REG_CTRL1, 3, 3), 98 [F_PWR_RDY] = REG_FIELD(RT9455_REG_CTRL1, 2, 2), 99 [F_OTG_PIN_POLARITY] = REG_FIELD(RT9455_REG_CTRL1, 1, 1), 100 101 [F_IAICR] = REG_FIELD(RT9455_REG_CTRL2, 6, 7), 102 [F_TE_SHDN_EN] = REG_FIELD(RT9455_REG_CTRL2, 5, 5), 103 [F_HIGHER_OCP] = REG_FIELD(RT9455_REG_CTRL2, 4, 4), 104 [F_TE] = REG_FIELD(RT9455_REG_CTRL2, 3, 3), 105 [F_IAICR_INT] = REG_FIELD(RT9455_REG_CTRL2, 2, 2), 106 [F_HIZ] = REG_FIELD(RT9455_REG_CTRL2, 1, 1), 107 [F_OPA_MODE] = REG_FIELD(RT9455_REG_CTRL2, 0, 0), 108 109 [F_VOREG] = REG_FIELD(RT9455_REG_CTRL3, 2, 7), 110 [F_OTG_PL] = REG_FIELD(RT9455_REG_CTRL3, 1, 1), 111 [F_OTG_EN] = REG_FIELD(RT9455_REG_CTRL3, 0, 0), 112 113 [F_VENDOR_ID] = REG_FIELD(RT9455_REG_DEV_ID, 4, 7), 114 [F_CHIP_REV] = REG_FIELD(RT9455_REG_DEV_ID, 0, 3), 115 116 [F_RST] = REG_FIELD(RT9455_REG_CTRL4, 7, 7), 117 118 [F_TMR_EN] = REG_FIELD(RT9455_REG_CTRL5, 7, 7), 119 [F_MIVR] = REG_FIELD(RT9455_REG_CTRL5, 4, 5), 120 [F_IPREC] = REG_FIELD(RT9455_REG_CTRL5, 2, 3), 121 [F_IEOC_PERCENTAGE] = REG_FIELD(RT9455_REG_CTRL5, 0, 1), 122 123 [F_IAICR_SEL] = REG_FIELD(RT9455_REG_CTRL6, 7, 7), 124 [F_ICHRG] = REG_FIELD(RT9455_REG_CTRL6, 4, 6), 125 [F_VPREC] = REG_FIELD(RT9455_REG_CTRL6, 0, 2), 126 127 [F_BATD_EN] = REG_FIELD(RT9455_REG_CTRL7, 6, 6), 128 [F_CHG_EN] = REG_FIELD(RT9455_REG_CTRL7, 4, 4), 129 [F_VMREG] = REG_FIELD(RT9455_REG_CTRL7, 0, 3), 130 131 [F_TSDI] = REG_FIELD(RT9455_REG_IRQ1, 7, 7), 132 [F_VINOVPI] = REG_FIELD(RT9455_REG_IRQ1, 6, 6), 133 [F_BATAB] = REG_FIELD(RT9455_REG_IRQ1, 0, 0), 134 135 [F_CHRVPI] = REG_FIELD(RT9455_REG_IRQ2, 7, 7), 136 [F_CHBATOVI] = REG_FIELD(RT9455_REG_IRQ2, 5, 5), 137 [F_CHTERMI] = REG_FIELD(RT9455_REG_IRQ2, 4, 4), 138 [F_CHRCHGI] = REG_FIELD(RT9455_REG_IRQ2, 3, 3), 139 [F_CH32MI] = REG_FIELD(RT9455_REG_IRQ2, 2, 2), 140 [F_CHTREGI] = REG_FIELD(RT9455_REG_IRQ2, 1, 1), 141 [F_CHMIVRI] = REG_FIELD(RT9455_REG_IRQ2, 0, 0), 142 143 [F_BSTBUSOVI] = REG_FIELD(RT9455_REG_IRQ3, 7, 7), 144 [F_BSTOLI] = REG_FIELD(RT9455_REG_IRQ3, 6, 6), 145 [F_BSTLOWVI] = REG_FIELD(RT9455_REG_IRQ3, 5, 5), 146 [F_BST32SI] = REG_FIELD(RT9455_REG_IRQ3, 3, 3), 147 148 [F_TSDM] = REG_FIELD(RT9455_REG_MASK1, 7, 7), 149 [F_VINOVPIM] = REG_FIELD(RT9455_REG_MASK1, 6, 6), 150 [F_BATABM] = REG_FIELD(RT9455_REG_MASK1, 0, 0), 151 152 [F_CHRVPIM] = REG_FIELD(RT9455_REG_MASK2, 7, 7), 153 [F_CHBATOVIM] = REG_FIELD(RT9455_REG_MASK2, 5, 5), 154 [F_CHTERMIM] = REG_FIELD(RT9455_REG_MASK2, 4, 4), 155 [F_CHRCHGIM] = REG_FIELD(RT9455_REG_MASK2, 3, 3), 156 [F_CH32MIM] = REG_FIELD(RT9455_REG_MASK2, 2, 2), 157 [F_CHTREGIM] = REG_FIELD(RT9455_REG_MASK2, 1, 1), 158 [F_CHMIVRIM] = REG_FIELD(RT9455_REG_MASK2, 0, 0), 159 160 [F_BSTVINOVIM] = REG_FIELD(RT9455_REG_MASK3, 7, 7), 161 [F_BSTOLIM] = REG_FIELD(RT9455_REG_MASK3, 6, 6), 162 [F_BSTLOWVIM] = REG_FIELD(RT9455_REG_MASK3, 5, 5), 163 [F_BST32SIM] = REG_FIELD(RT9455_REG_MASK3, 3, 3), 164 }; 165 166 #define GET_MASK(fid) (BIT(rt9455_reg_fields[fid].msb + 1) - \ 167 BIT(rt9455_reg_fields[fid].lsb)) 168 169 /* 170 * Each array initialised below shows the possible real-world values for a 171 * group of bits belonging to RT9455 registers. The arrays are sorted in 172 * ascending order. The index of each real-world value represents the value 173 * that is encoded in the group of bits belonging to RT9455 registers. 174 */ 175 /* REG06[6:4] (ICHRG) in uAh */ 176 static const int rt9455_ichrg_values[] = { 177 500000, 650000, 800000, 950000, 1100000, 1250000, 1400000, 1550000 178 }; 179 180 /* 181 * When the charger is in charge mode, REG02[7:2] represent battery regulation 182 * voltage. 183 */ 184 /* REG02[7:2] (VOREG) in uV */ 185 static const int rt9455_voreg_values[] = { 186 3500000, 3520000, 3540000, 3560000, 3580000, 3600000, 3620000, 3640000, 187 3660000, 3680000, 3700000, 3720000, 3740000, 3760000, 3780000, 3800000, 188 3820000, 3840000, 3860000, 3880000, 3900000, 3920000, 3940000, 3960000, 189 3980000, 4000000, 4020000, 4040000, 4060000, 4080000, 4100000, 4120000, 190 4140000, 4160000, 4180000, 4200000, 4220000, 4240000, 4260000, 4280000, 191 4300000, 4330000, 4350000, 4370000, 4390000, 4410000, 4430000, 4450000, 192 4450000, 4450000, 4450000, 4450000, 4450000, 4450000, 4450000, 4450000, 193 4450000, 4450000, 4450000, 4450000, 4450000, 4450000, 4450000, 4450000 194 }; 195 196 /* 197 * When the charger is in boost mode, REG02[7:2] represent boost output 198 * voltage. 199 */ 200 /* REG02[7:2] (Boost output voltage) in uV */ 201 static const int rt9455_boost_voltage_values[] = { 202 4425000, 4450000, 4475000, 4500000, 4525000, 4550000, 4575000, 4600000, 203 4625000, 4650000, 4675000, 4700000, 4725000, 4750000, 4775000, 4800000, 204 4825000, 4850000, 4875000, 4900000, 4925000, 4950000, 4975000, 5000000, 205 5025000, 5050000, 5075000, 5100000, 5125000, 5150000, 5175000, 5200000, 206 5225000, 5250000, 5275000, 5300000, 5325000, 5350000, 5375000, 5400000, 207 5425000, 5450000, 5475000, 5500000, 5525000, 5550000, 5575000, 5600000, 208 5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 209 5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 210 }; 211 212 /* REG07[3:0] (VMREG) in uV */ 213 static const int rt9455_vmreg_values[] = { 214 4200000, 4220000, 4240000, 4260000, 4280000, 4300000, 4320000, 4340000, 215 4360000, 4380000, 4400000, 4430000, 4450000, 4450000, 4450000, 4450000 216 }; 217 218 /* REG05[5:4] (IEOC_PERCENTAGE) */ 219 static const int rt9455_ieoc_percentage_values[] = { 220 10, 30, 20, 30 221 }; 222 223 /* REG05[1:0] (MIVR) in uV */ 224 static const int rt9455_mivr_values[] = { 225 4000000, 4250000, 4500000, 5000000 226 }; 227 228 /* REG05[1:0] (IAICR) in uA */ 229 static const int rt9455_iaicr_values[] = { 230 100000, 500000, 1000000, 2000000 231 }; 232 233 struct rt9455_info { 234 struct i2c_client *client; 235 struct regmap *regmap; 236 struct regmap_field *regmap_fields[F_MAX_FIELDS]; 237 struct power_supply *charger; 238 #if IS_ENABLED(CONFIG_USB_PHY) 239 struct usb_phy *usb_phy; 240 struct notifier_block nb; 241 #endif 242 struct delayed_work pwr_rdy_work; 243 struct delayed_work max_charging_time_work; 244 struct delayed_work batt_presence_work; 245 u32 voreg; 246 u32 boost_voltage; 247 }; 248 249 /* 250 * Iterate through each element of the 'tbl' array until an element whose value 251 * is greater than v is found. Return the index of the respective element, 252 * or the index of the last element in the array, if no such element is found. 253 */ 254 static unsigned int rt9455_find_idx(const int tbl[], int tbl_size, int v) 255 { 256 int i; 257 258 /* 259 * No need to iterate until the last index in the table because 260 * if no element greater than v is found in the table, 261 * or if only the last element is greater than v, 262 * function returns the index of the last element. 263 */ 264 for (i = 0; i < tbl_size - 1; i++) 265 if (v <= tbl[i]) 266 return i; 267 268 return (tbl_size - 1); 269 } 270 271 static int rt9455_get_field_val(struct rt9455_info *info, 272 enum rt9455_fields field, 273 const int tbl[], int tbl_size, int *val) 274 { 275 unsigned int v; 276 int ret; 277 278 ret = regmap_field_read(info->regmap_fields[field], &v); 279 if (ret) 280 return ret; 281 282 v = (v >= tbl_size) ? (tbl_size - 1) : v; 283 *val = tbl[v]; 284 285 return 0; 286 } 287 288 static int rt9455_set_field_val(struct rt9455_info *info, 289 enum rt9455_fields field, 290 const int tbl[], int tbl_size, int val) 291 { 292 unsigned int idx = rt9455_find_idx(tbl, tbl_size, val); 293 294 return regmap_field_write(info->regmap_fields[field], idx); 295 } 296 297 static int rt9455_register_reset(struct rt9455_info *info) 298 { 299 struct device *dev = &info->client->dev; 300 unsigned int v; 301 int ret, limit = 100; 302 303 ret = regmap_field_write(info->regmap_fields[F_RST], 0x01); 304 if (ret) { 305 dev_err(dev, "Failed to set RST bit\n"); 306 return ret; 307 } 308 309 /* 310 * To make sure that reset operation has finished, loop until RST bit 311 * is set to 0. 312 */ 313 do { 314 ret = regmap_field_read(info->regmap_fields[F_RST], &v); 315 if (ret) { 316 dev_err(dev, "Failed to read RST bit\n"); 317 return ret; 318 } 319 320 if (!v) 321 break; 322 323 usleep_range(10, 100); 324 } while (--limit); 325 326 if (!limit) 327 return -EIO; 328 329 return 0; 330 } 331 332 /* Charger power supply property routines */ 333 static enum power_supply_property rt9455_charger_properties[] = { 334 POWER_SUPPLY_PROP_STATUS, 335 POWER_SUPPLY_PROP_HEALTH, 336 POWER_SUPPLY_PROP_PRESENT, 337 POWER_SUPPLY_PROP_ONLINE, 338 POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT, 339 POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX, 340 POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE, 341 POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX, 342 POWER_SUPPLY_PROP_SCOPE, 343 POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT, 344 POWER_SUPPLY_PROP_MODEL_NAME, 345 POWER_SUPPLY_PROP_MANUFACTURER, 346 }; 347 348 static char *rt9455_charger_supplied_to[] = { 349 "main-battery", 350 }; 351 352 static int rt9455_charger_get_status(struct rt9455_info *info, 353 union power_supply_propval *val) 354 { 355 unsigned int v, pwr_rdy; 356 int ret; 357 358 ret = regmap_field_read(info->regmap_fields[F_PWR_RDY], 359 &pwr_rdy); 360 if (ret) { 361 dev_err(&info->client->dev, "Failed to read PWR_RDY bit\n"); 362 return ret; 363 } 364 365 /* 366 * If PWR_RDY bit is unset, the battery is discharging. Otherwise, 367 * STAT bits value must be checked. 368 */ 369 if (!pwr_rdy) { 370 val->intval = POWER_SUPPLY_STATUS_DISCHARGING; 371 return 0; 372 } 373 374 ret = regmap_field_read(info->regmap_fields[F_STAT], &v); 375 if (ret) { 376 dev_err(&info->client->dev, "Failed to read STAT bits\n"); 377 return ret; 378 } 379 380 switch (v) { 381 case 0: 382 /* 383 * If PWR_RDY bit is set, but STAT bits value is 0, the charger 384 * may be in one of the following cases: 385 * 1. CHG_EN bit is 0. 386 * 2. CHG_EN bit is 1 but the battery is not connected. 387 * In any of these cases, POWER_SUPPLY_STATUS_NOT_CHARGING is 388 * returned. 389 */ 390 val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING; 391 return 0; 392 case 1: 393 val->intval = POWER_SUPPLY_STATUS_CHARGING; 394 return 0; 395 case 2: 396 val->intval = POWER_SUPPLY_STATUS_FULL; 397 return 0; 398 default: 399 val->intval = POWER_SUPPLY_STATUS_UNKNOWN; 400 return 0; 401 } 402 } 403 404 static int rt9455_charger_get_health(struct rt9455_info *info, 405 union power_supply_propval *val) 406 { 407 struct device *dev = &info->client->dev; 408 unsigned int v; 409 int ret; 410 411 val->intval = POWER_SUPPLY_HEALTH_GOOD; 412 413 ret = regmap_read(info->regmap, RT9455_REG_IRQ1, &v); 414 if (ret) { 415 dev_err(dev, "Failed to read IRQ1 register\n"); 416 return ret; 417 } 418 419 if (v & GET_MASK(F_TSDI)) { 420 val->intval = POWER_SUPPLY_HEALTH_OVERHEAT; 421 return 0; 422 } 423 if (v & GET_MASK(F_VINOVPI)) { 424 val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE; 425 return 0; 426 } 427 if (v & GET_MASK(F_BATAB)) { 428 val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE; 429 return 0; 430 } 431 432 ret = regmap_read(info->regmap, RT9455_REG_IRQ2, &v); 433 if (ret) { 434 dev_err(dev, "Failed to read IRQ2 register\n"); 435 return ret; 436 } 437 438 if (v & GET_MASK(F_CHBATOVI)) { 439 val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE; 440 return 0; 441 } 442 if (v & GET_MASK(F_CH32MI)) { 443 val->intval = POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE; 444 return 0; 445 } 446 447 ret = regmap_read(info->regmap, RT9455_REG_IRQ3, &v); 448 if (ret) { 449 dev_err(dev, "Failed to read IRQ3 register\n"); 450 return ret; 451 } 452 453 if (v & GET_MASK(F_BSTBUSOVI)) { 454 val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE; 455 return 0; 456 } 457 if (v & GET_MASK(F_BSTOLI)) { 458 val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE; 459 return 0; 460 } 461 if (v & GET_MASK(F_BSTLOWVI)) { 462 val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE; 463 return 0; 464 } 465 if (v & GET_MASK(F_BST32SI)) { 466 val->intval = POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE; 467 return 0; 468 } 469 470 ret = regmap_field_read(info->regmap_fields[F_STAT], &v); 471 if (ret) { 472 dev_err(dev, "Failed to read STAT bits\n"); 473 return ret; 474 } 475 476 if (v == RT9455_FAULT) { 477 val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE; 478 return 0; 479 } 480 481 return 0; 482 } 483 484 static int rt9455_charger_get_battery_presence(struct rt9455_info *info, 485 union power_supply_propval *val) 486 { 487 unsigned int v; 488 int ret; 489 490 ret = regmap_field_read(info->regmap_fields[F_BATAB], &v); 491 if (ret) { 492 dev_err(&info->client->dev, "Failed to read BATAB bit\n"); 493 return ret; 494 } 495 496 /* 497 * Since BATAB is 1 when battery is NOT present and 0 otherwise, 498 * !BATAB is returned. 499 */ 500 val->intval = !v; 501 502 return 0; 503 } 504 505 static int rt9455_charger_get_online(struct rt9455_info *info, 506 union power_supply_propval *val) 507 { 508 unsigned int v; 509 int ret; 510 511 ret = regmap_field_read(info->regmap_fields[F_PWR_RDY], &v); 512 if (ret) { 513 dev_err(&info->client->dev, "Failed to read PWR_RDY bit\n"); 514 return ret; 515 } 516 517 val->intval = (int)v; 518 519 return 0; 520 } 521 522 static int rt9455_charger_get_current(struct rt9455_info *info, 523 union power_supply_propval *val) 524 { 525 int curr; 526 int ret; 527 528 ret = rt9455_get_field_val(info, F_ICHRG, 529 rt9455_ichrg_values, 530 ARRAY_SIZE(rt9455_ichrg_values), 531 &curr); 532 if (ret) { 533 dev_err(&info->client->dev, "Failed to read ICHRG value\n"); 534 return ret; 535 } 536 537 val->intval = curr; 538 539 return 0; 540 } 541 542 static int rt9455_charger_get_current_max(struct rt9455_info *info, 543 union power_supply_propval *val) 544 { 545 int idx = ARRAY_SIZE(rt9455_ichrg_values) - 1; 546 547 val->intval = rt9455_ichrg_values[idx]; 548 549 return 0; 550 } 551 552 static int rt9455_charger_get_voltage(struct rt9455_info *info, 553 union power_supply_propval *val) 554 { 555 int voltage; 556 int ret; 557 558 ret = rt9455_get_field_val(info, F_VOREG, 559 rt9455_voreg_values, 560 ARRAY_SIZE(rt9455_voreg_values), 561 &voltage); 562 if (ret) { 563 dev_err(&info->client->dev, "Failed to read VOREG value\n"); 564 return ret; 565 } 566 567 val->intval = voltage; 568 569 return 0; 570 } 571 572 static int rt9455_charger_get_voltage_max(struct rt9455_info *info, 573 union power_supply_propval *val) 574 { 575 int idx = ARRAY_SIZE(rt9455_vmreg_values) - 1; 576 577 val->intval = rt9455_vmreg_values[idx]; 578 579 return 0; 580 } 581 582 static int rt9455_charger_get_term_current(struct rt9455_info *info, 583 union power_supply_propval *val) 584 { 585 struct device *dev = &info->client->dev; 586 int ichrg, ieoc_percentage, ret; 587 588 ret = rt9455_get_field_val(info, F_ICHRG, 589 rt9455_ichrg_values, 590 ARRAY_SIZE(rt9455_ichrg_values), 591 &ichrg); 592 if (ret) { 593 dev_err(dev, "Failed to read ICHRG value\n"); 594 return ret; 595 } 596 597 ret = rt9455_get_field_val(info, F_IEOC_PERCENTAGE, 598 rt9455_ieoc_percentage_values, 599 ARRAY_SIZE(rt9455_ieoc_percentage_values), 600 &ieoc_percentage); 601 if (ret) { 602 dev_err(dev, "Failed to read IEOC value\n"); 603 return ret; 604 } 605 606 val->intval = ichrg * ieoc_percentage / 100; 607 608 return 0; 609 } 610 611 static int rt9455_charger_get_property(struct power_supply *psy, 612 enum power_supply_property psp, 613 union power_supply_propval *val) 614 { 615 struct rt9455_info *info = power_supply_get_drvdata(psy); 616 617 switch (psp) { 618 case POWER_SUPPLY_PROP_STATUS: 619 return rt9455_charger_get_status(info, val); 620 case POWER_SUPPLY_PROP_HEALTH: 621 return rt9455_charger_get_health(info, val); 622 case POWER_SUPPLY_PROP_PRESENT: 623 return rt9455_charger_get_battery_presence(info, val); 624 case POWER_SUPPLY_PROP_ONLINE: 625 return rt9455_charger_get_online(info, val); 626 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT: 627 return rt9455_charger_get_current(info, val); 628 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX: 629 return rt9455_charger_get_current_max(info, val); 630 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE: 631 return rt9455_charger_get_voltage(info, val); 632 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX: 633 return rt9455_charger_get_voltage_max(info, val); 634 case POWER_SUPPLY_PROP_SCOPE: 635 val->intval = POWER_SUPPLY_SCOPE_SYSTEM; 636 return 0; 637 case POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT: 638 return rt9455_charger_get_term_current(info, val); 639 case POWER_SUPPLY_PROP_MODEL_NAME: 640 val->strval = RT9455_MODEL_NAME; 641 return 0; 642 case POWER_SUPPLY_PROP_MANUFACTURER: 643 val->strval = RT9455_MANUFACTURER; 644 return 0; 645 default: 646 return -ENODATA; 647 } 648 } 649 650 static int rt9455_hw_init(struct rt9455_info *info, u32 ichrg, 651 u32 ieoc_percentage, 652 u32 mivr, u32 iaicr) 653 { 654 struct device *dev = &info->client->dev; 655 int idx, ret; 656 657 ret = rt9455_register_reset(info); 658 if (ret) { 659 dev_err(dev, "Power On Reset failed\n"); 660 return ret; 661 } 662 663 /* Set TE bit in order to enable end of charge detection */ 664 ret = regmap_field_write(info->regmap_fields[F_TE], 1); 665 if (ret) { 666 dev_err(dev, "Failed to set TE bit\n"); 667 return ret; 668 } 669 670 /* Set TE_SHDN_EN bit in order to enable end of charge detection */ 671 ret = regmap_field_write(info->regmap_fields[F_TE_SHDN_EN], 1); 672 if (ret) { 673 dev_err(dev, "Failed to set TE_SHDN_EN bit\n"); 674 return ret; 675 } 676 677 /* 678 * Set BATD_EN bit in order to enable battery detection 679 * when charging is done 680 */ 681 ret = regmap_field_write(info->regmap_fields[F_BATD_EN], 1); 682 if (ret) { 683 dev_err(dev, "Failed to set BATD_EN bit\n"); 684 return ret; 685 } 686 687 /* 688 * Disable Safety Timer. In charge mode, this timer terminates charging 689 * if no read or write via I2C is done within 32 minutes. This timer 690 * avoids overcharging the baterry when the OS is not loaded and the 691 * charger is connected to a power source. 692 * In boost mode, this timer triggers BST32SI interrupt if no read or 693 * write via I2C is done within 32 seconds. 694 * When the OS is loaded and the charger driver is inserted, it is used 695 * delayed_work, named max_charging_time_work, to avoid overcharging 696 * the battery. 697 */ 698 ret = regmap_field_write(info->regmap_fields[F_TMR_EN], 0x00); 699 if (ret) { 700 dev_err(dev, "Failed to disable Safety Timer\n"); 701 return ret; 702 } 703 704 /* Set ICHRG to value retrieved from device-specific data */ 705 ret = rt9455_set_field_val(info, F_ICHRG, 706 rt9455_ichrg_values, 707 ARRAY_SIZE(rt9455_ichrg_values), ichrg); 708 if (ret) { 709 dev_err(dev, "Failed to set ICHRG value\n"); 710 return ret; 711 } 712 713 /* Set IEOC Percentage to value retrieved from device-specific data */ 714 ret = rt9455_set_field_val(info, F_IEOC_PERCENTAGE, 715 rt9455_ieoc_percentage_values, 716 ARRAY_SIZE(rt9455_ieoc_percentage_values), 717 ieoc_percentage); 718 if (ret) { 719 dev_err(dev, "Failed to set IEOC Percentage value\n"); 720 return ret; 721 } 722 723 /* Set VOREG to value retrieved from device-specific data */ 724 ret = rt9455_set_field_val(info, F_VOREG, 725 rt9455_voreg_values, 726 ARRAY_SIZE(rt9455_voreg_values), 727 info->voreg); 728 if (ret) { 729 dev_err(dev, "Failed to set VOREG value\n"); 730 return ret; 731 } 732 733 /* Set VMREG value to maximum (4.45V). */ 734 idx = ARRAY_SIZE(rt9455_vmreg_values) - 1; 735 ret = rt9455_set_field_val(info, F_VMREG, 736 rt9455_vmreg_values, 737 ARRAY_SIZE(rt9455_vmreg_values), 738 rt9455_vmreg_values[idx]); 739 if (ret) { 740 dev_err(dev, "Failed to set VMREG value\n"); 741 return ret; 742 } 743 744 /* 745 * Set MIVR to value retrieved from device-specific data. 746 * If no value is specified, default value for MIVR is 4.5V. 747 */ 748 if (mivr == -1) 749 mivr = 4500000; 750 751 ret = rt9455_set_field_val(info, F_MIVR, 752 rt9455_mivr_values, 753 ARRAY_SIZE(rt9455_mivr_values), mivr); 754 if (ret) { 755 dev_err(dev, "Failed to set MIVR value\n"); 756 return ret; 757 } 758 759 /* 760 * Set IAICR to value retrieved from device-specific data. 761 * If no value is specified, default value for IAICR is 500 mA. 762 */ 763 if (iaicr == -1) 764 iaicr = 500000; 765 766 ret = rt9455_set_field_val(info, F_IAICR, 767 rt9455_iaicr_values, 768 ARRAY_SIZE(rt9455_iaicr_values), iaicr); 769 if (ret) { 770 dev_err(dev, "Failed to set IAICR value\n"); 771 return ret; 772 } 773 774 /* 775 * Set IAICR_INT bit so that IAICR value is determined by IAICR bits 776 * and not by OTG pin. 777 */ 778 ret = regmap_field_write(info->regmap_fields[F_IAICR_INT], 0x01); 779 if (ret) { 780 dev_err(dev, "Failed to set IAICR_INT bit\n"); 781 return ret; 782 } 783 784 /* 785 * Disable CHMIVRI interrupt. Because the driver sets MIVR value, 786 * CHMIVRI is triggered, but there is no action to be taken by the 787 * driver when CHMIVRI is triggered. 788 */ 789 ret = regmap_field_write(info->regmap_fields[F_CHMIVRIM], 0x01); 790 if (ret) { 791 dev_err(dev, "Failed to mask CHMIVRI interrupt\n"); 792 return ret; 793 } 794 795 return 0; 796 } 797 798 #if IS_ENABLED(CONFIG_USB_PHY) 799 /* 800 * Before setting the charger into boost mode, boost output voltage is 801 * set. This is needed because boost output voltage may differ from battery 802 * regulation voltage. F_VOREG bits represent either battery regulation voltage 803 * or boost output voltage, depending on the mode the charger is. Both battery 804 * regulation voltage and boost output voltage are read from DT/ACPI during 805 * probe. 806 */ 807 static int rt9455_set_boost_voltage_before_boost_mode(struct rt9455_info *info) 808 { 809 struct device *dev = &info->client->dev; 810 int ret; 811 812 ret = rt9455_set_field_val(info, F_VOREG, 813 rt9455_boost_voltage_values, 814 ARRAY_SIZE(rt9455_boost_voltage_values), 815 info->boost_voltage); 816 if (ret) { 817 dev_err(dev, "Failed to set boost output voltage value\n"); 818 return ret; 819 } 820 821 return 0; 822 } 823 #endif 824 825 /* 826 * Before setting the charger into charge mode, battery regulation voltage is 827 * set. This is needed because boost output voltage may differ from battery 828 * regulation voltage. F_VOREG bits represent either battery regulation voltage 829 * or boost output voltage, depending on the mode the charger is. Both battery 830 * regulation voltage and boost output voltage are read from DT/ACPI during 831 * probe. 832 */ 833 static int rt9455_set_voreg_before_charge_mode(struct rt9455_info *info) 834 { 835 struct device *dev = &info->client->dev; 836 int ret; 837 838 ret = rt9455_set_field_val(info, F_VOREG, 839 rt9455_voreg_values, 840 ARRAY_SIZE(rt9455_voreg_values), 841 info->voreg); 842 if (ret) { 843 dev_err(dev, "Failed to set VOREG value\n"); 844 return ret; 845 } 846 847 return 0; 848 } 849 850 static int rt9455_irq_handler_check_irq1_register(struct rt9455_info *info, 851 bool *_is_battery_absent, 852 bool *_alert_userspace) 853 { 854 unsigned int irq1, mask1, mask2; 855 struct device *dev = &info->client->dev; 856 bool is_battery_absent = false; 857 bool alert_userspace = false; 858 int ret; 859 860 ret = regmap_read(info->regmap, RT9455_REG_IRQ1, &irq1); 861 if (ret) { 862 dev_err(dev, "Failed to read IRQ1 register\n"); 863 return ret; 864 } 865 866 ret = regmap_read(info->regmap, RT9455_REG_MASK1, &mask1); 867 if (ret) { 868 dev_err(dev, "Failed to read MASK1 register\n"); 869 return ret; 870 } 871 872 if (irq1 & GET_MASK(F_TSDI)) { 873 dev_err(dev, "Thermal shutdown fault occurred\n"); 874 alert_userspace = true; 875 } 876 877 if (irq1 & GET_MASK(F_VINOVPI)) { 878 dev_err(dev, "Overvoltage input occurred\n"); 879 alert_userspace = true; 880 } 881 882 if (irq1 & GET_MASK(F_BATAB)) { 883 dev_err(dev, "Battery absence occurred\n"); 884 is_battery_absent = true; 885 alert_userspace = true; 886 887 if ((mask1 & GET_MASK(F_BATABM)) == 0) { 888 ret = regmap_field_write(info->regmap_fields[F_BATABM], 889 0x01); 890 if (ret) { 891 dev_err(dev, "Failed to mask BATAB interrupt\n"); 892 return ret; 893 } 894 } 895 896 ret = regmap_read(info->regmap, RT9455_REG_MASK2, &mask2); 897 if (ret) { 898 dev_err(dev, "Failed to read MASK2 register\n"); 899 return ret; 900 } 901 902 if (mask2 & GET_MASK(F_CHTERMIM)) { 903 ret = regmap_field_write( 904 info->regmap_fields[F_CHTERMIM], 0x00); 905 if (ret) { 906 dev_err(dev, "Failed to unmask CHTERMI interrupt\n"); 907 return ret; 908 } 909 } 910 911 if (mask2 & GET_MASK(F_CHRCHGIM)) { 912 ret = regmap_field_write( 913 info->regmap_fields[F_CHRCHGIM], 0x00); 914 if (ret) { 915 dev_err(dev, "Failed to unmask CHRCHGI interrupt\n"); 916 return ret; 917 } 918 } 919 920 /* 921 * When the battery is absent, max_charging_time_work is 922 * cancelled, since no charging is done. 923 */ 924 cancel_delayed_work_sync(&info->max_charging_time_work); 925 /* 926 * Since no interrupt is triggered when the battery is 927 * reconnected, max_charging_time_work is not rescheduled. 928 * Therefore, batt_presence_work is scheduled to check whether 929 * the battery is still absent or not. 930 */ 931 queue_delayed_work(system_power_efficient_wq, 932 &info->batt_presence_work, 933 RT9455_BATT_PRESENCE_DELAY * HZ); 934 } 935 936 *_is_battery_absent = is_battery_absent; 937 938 if (alert_userspace) 939 *_alert_userspace = alert_userspace; 940 941 return 0; 942 } 943 944 static int rt9455_irq_handler_check_irq2_register(struct rt9455_info *info, 945 bool is_battery_absent, 946 bool *_alert_userspace) 947 { 948 unsigned int irq2, mask2; 949 struct device *dev = &info->client->dev; 950 bool alert_userspace = false; 951 int ret; 952 953 ret = regmap_read(info->regmap, RT9455_REG_IRQ2, &irq2); 954 if (ret) { 955 dev_err(dev, "Failed to read IRQ2 register\n"); 956 return ret; 957 } 958 959 ret = regmap_read(info->regmap, RT9455_REG_MASK2, &mask2); 960 if (ret) { 961 dev_err(dev, "Failed to read MASK2 register\n"); 962 return ret; 963 } 964 965 if (irq2 & GET_MASK(F_CHRVPI)) { 966 dev_dbg(dev, "Charger fault occurred\n"); 967 /* 968 * CHRVPI bit is set in 2 cases: 969 * 1. when the power source is connected to the charger. 970 * 2. when the power source is disconnected from the charger. 971 * To identify the case, PWR_RDY bit is checked. Because 972 * PWR_RDY bit is set / cleared after CHRVPI interrupt is 973 * triggered, it is used delayed_work to later read PWR_RDY bit. 974 * Also, do not set to true alert_userspace, because there is no 975 * need to notify userspace when CHRVPI interrupt has occurred. 976 * Userspace will be notified after PWR_RDY bit is read. 977 */ 978 queue_delayed_work(system_power_efficient_wq, 979 &info->pwr_rdy_work, 980 RT9455_PWR_RDY_DELAY * HZ); 981 } 982 if (irq2 & GET_MASK(F_CHBATOVI)) { 983 dev_err(dev, "Battery OVP occurred\n"); 984 alert_userspace = true; 985 } 986 if (irq2 & GET_MASK(F_CHTERMI)) { 987 dev_dbg(dev, "Charge terminated\n"); 988 if (!is_battery_absent) { 989 if ((mask2 & GET_MASK(F_CHTERMIM)) == 0) { 990 ret = regmap_field_write( 991 info->regmap_fields[F_CHTERMIM], 0x01); 992 if (ret) { 993 dev_err(dev, "Failed to mask CHTERMI interrupt\n"); 994 return ret; 995 } 996 /* 997 * Update MASK2 value, since CHTERMIM bit is 998 * set. 999 */ 1000 mask2 = mask2 | GET_MASK(F_CHTERMIM); 1001 } 1002 cancel_delayed_work_sync(&info->max_charging_time_work); 1003 alert_userspace = true; 1004 } 1005 } 1006 if (irq2 & GET_MASK(F_CHRCHGI)) { 1007 dev_dbg(dev, "Recharge request\n"); 1008 ret = regmap_field_write(info->regmap_fields[F_CHG_EN], 1009 RT9455_CHARGE_ENABLE); 1010 if (ret) { 1011 dev_err(dev, "Failed to enable charging\n"); 1012 return ret; 1013 } 1014 if (mask2 & GET_MASK(F_CHTERMIM)) { 1015 ret = regmap_field_write( 1016 info->regmap_fields[F_CHTERMIM], 0x00); 1017 if (ret) { 1018 dev_err(dev, "Failed to unmask CHTERMI interrupt\n"); 1019 return ret; 1020 } 1021 /* Update MASK2 value, since CHTERMIM bit is cleared. */ 1022 mask2 = mask2 & ~GET_MASK(F_CHTERMIM); 1023 } 1024 if (!is_battery_absent) { 1025 /* 1026 * No need to check whether the charger is connected to 1027 * power source when CHRCHGI is received, since CHRCHGI 1028 * is not triggered if the charger is not connected to 1029 * the power source. 1030 */ 1031 queue_delayed_work(system_power_efficient_wq, 1032 &info->max_charging_time_work, 1033 RT9455_MAX_CHARGING_TIME * HZ); 1034 alert_userspace = true; 1035 } 1036 } 1037 if (irq2 & GET_MASK(F_CH32MI)) { 1038 dev_err(dev, "Charger fault. 32 mins timeout occurred\n"); 1039 alert_userspace = true; 1040 } 1041 if (irq2 & GET_MASK(F_CHTREGI)) { 1042 dev_warn(dev, 1043 "Charger warning. Thermal regulation loop active\n"); 1044 alert_userspace = true; 1045 } 1046 if (irq2 & GET_MASK(F_CHMIVRI)) { 1047 dev_dbg(dev, 1048 "Charger warning. Input voltage MIVR loop active\n"); 1049 } 1050 1051 if (alert_userspace) 1052 *_alert_userspace = alert_userspace; 1053 1054 return 0; 1055 } 1056 1057 static int rt9455_irq_handler_check_irq3_register(struct rt9455_info *info, 1058 bool *_alert_userspace) 1059 { 1060 unsigned int irq3, mask3; 1061 struct device *dev = &info->client->dev; 1062 bool alert_userspace = false; 1063 int ret; 1064 1065 ret = regmap_read(info->regmap, RT9455_REG_IRQ3, &irq3); 1066 if (ret) { 1067 dev_err(dev, "Failed to read IRQ3 register\n"); 1068 return ret; 1069 } 1070 1071 ret = regmap_read(info->regmap, RT9455_REG_MASK3, &mask3); 1072 if (ret) { 1073 dev_err(dev, "Failed to read MASK3 register\n"); 1074 return ret; 1075 } 1076 1077 if (irq3 & GET_MASK(F_BSTBUSOVI)) { 1078 dev_err(dev, "Boost fault. Overvoltage input occurred\n"); 1079 alert_userspace = true; 1080 } 1081 if (irq3 & GET_MASK(F_BSTOLI)) { 1082 dev_err(dev, "Boost fault. Overload\n"); 1083 alert_userspace = true; 1084 } 1085 if (irq3 & GET_MASK(F_BSTLOWVI)) { 1086 dev_err(dev, "Boost fault. Battery voltage too low\n"); 1087 alert_userspace = true; 1088 } 1089 if (irq3 & GET_MASK(F_BST32SI)) { 1090 dev_err(dev, "Boost fault. 32 seconds timeout occurred.\n"); 1091 alert_userspace = true; 1092 } 1093 1094 if (alert_userspace) { 1095 dev_info(dev, "Boost fault occurred, therefore the charger goes into charge mode\n"); 1096 ret = rt9455_set_voreg_before_charge_mode(info); 1097 if (ret) { 1098 dev_err(dev, "Failed to set VOREG before entering charge mode\n"); 1099 return ret; 1100 } 1101 ret = regmap_field_write(info->regmap_fields[F_OPA_MODE], 1102 RT9455_CHARGE_MODE); 1103 if (ret) { 1104 dev_err(dev, "Failed to set charger in charge mode\n"); 1105 return ret; 1106 } 1107 *_alert_userspace = alert_userspace; 1108 } 1109 1110 return 0; 1111 } 1112 1113 static irqreturn_t rt9455_irq_handler_thread(int irq, void *data) 1114 { 1115 struct rt9455_info *info = data; 1116 struct device *dev; 1117 bool alert_userspace = false; 1118 bool is_battery_absent = false; 1119 unsigned int status; 1120 int ret; 1121 1122 if (!info) 1123 return IRQ_NONE; 1124 1125 dev = &info->client->dev; 1126 1127 if (irq != info->client->irq) { 1128 dev_err(dev, "Interrupt is not for RT9455 charger\n"); 1129 return IRQ_NONE; 1130 } 1131 1132 ret = regmap_field_read(info->regmap_fields[F_STAT], &status); 1133 if (ret) { 1134 dev_err(dev, "Failed to read STAT bits\n"); 1135 return IRQ_HANDLED; 1136 } 1137 dev_dbg(dev, "Charger status is %d\n", status); 1138 1139 /* 1140 * Each function that processes an IRQ register receives as output 1141 * parameter alert_userspace pointer. alert_userspace is set to true 1142 * in such a function only if an interrupt has occurred in the 1143 * respective interrupt register. This way, it is avoided the following 1144 * case: interrupt occurs only in IRQ1 register, 1145 * rt9455_irq_handler_check_irq1_register() function sets to true 1146 * alert_userspace, but rt9455_irq_handler_check_irq2_register() 1147 * and rt9455_irq_handler_check_irq3_register() functions set to false 1148 * alert_userspace and power_supply_changed() is never called. 1149 */ 1150 ret = rt9455_irq_handler_check_irq1_register(info, &is_battery_absent, 1151 &alert_userspace); 1152 if (ret) { 1153 dev_err(dev, "Failed to handle IRQ1 register\n"); 1154 return IRQ_HANDLED; 1155 } 1156 1157 ret = rt9455_irq_handler_check_irq2_register(info, is_battery_absent, 1158 &alert_userspace); 1159 if (ret) { 1160 dev_err(dev, "Failed to handle IRQ2 register\n"); 1161 return IRQ_HANDLED; 1162 } 1163 1164 ret = rt9455_irq_handler_check_irq3_register(info, &alert_userspace); 1165 if (ret) { 1166 dev_err(dev, "Failed to handle IRQ3 register\n"); 1167 return IRQ_HANDLED; 1168 } 1169 1170 if (alert_userspace) { 1171 /* 1172 * Sometimes, an interrupt occurs while rt9455_probe() function 1173 * is executing and power_supply_register() is not yet called. 1174 * Do not call power_supply_changed() in this case. 1175 */ 1176 if (info->charger) 1177 power_supply_changed(info->charger); 1178 } 1179 1180 return IRQ_HANDLED; 1181 } 1182 1183 static int rt9455_discover_charger(struct rt9455_info *info, u32 *ichrg, 1184 u32 *ieoc_percentage, 1185 u32 *mivr, u32 *iaicr) 1186 { 1187 struct device *dev = &info->client->dev; 1188 int ret; 1189 1190 if (!dev->of_node && !ACPI_HANDLE(dev)) { 1191 dev_err(dev, "No support for either device tree or ACPI\n"); 1192 return -EINVAL; 1193 } 1194 /* 1195 * ICHRG, IEOC_PERCENTAGE, VOREG and boost output voltage are mandatory 1196 * parameters. 1197 */ 1198 ret = device_property_read_u32(dev, "richtek,output-charge-current", 1199 ichrg); 1200 if (ret) { 1201 dev_err(dev, "Error: missing \"output-charge-current\" property\n"); 1202 return ret; 1203 } 1204 1205 ret = device_property_read_u32(dev, "richtek,end-of-charge-percentage", 1206 ieoc_percentage); 1207 if (ret) { 1208 dev_err(dev, "Error: missing \"end-of-charge-percentage\" property\n"); 1209 return ret; 1210 } 1211 1212 ret = device_property_read_u32(dev, 1213 "richtek,battery-regulation-voltage", 1214 &info->voreg); 1215 if (ret) { 1216 dev_err(dev, "Error: missing \"battery-regulation-voltage\" property\n"); 1217 return ret; 1218 } 1219 1220 ret = device_property_read_u32(dev, "richtek,boost-output-voltage", 1221 &info->boost_voltage); 1222 if (ret) { 1223 dev_err(dev, "Error: missing \"boost-output-voltage\" property\n"); 1224 return ret; 1225 } 1226 1227 /* 1228 * MIVR and IAICR are optional parameters. Do not return error if one of 1229 * them is not present in ACPI table or device tree specification. 1230 */ 1231 device_property_read_u32(dev, "richtek,min-input-voltage-regulation", 1232 mivr); 1233 device_property_read_u32(dev, "richtek,avg-input-current-regulation", 1234 iaicr); 1235 1236 return 0; 1237 } 1238 1239 #if IS_ENABLED(CONFIG_USB_PHY) 1240 static int rt9455_usb_event_none(struct rt9455_info *info, 1241 u8 opa_mode, u8 iaicr) 1242 { 1243 struct device *dev = &info->client->dev; 1244 int ret; 1245 1246 if (opa_mode == RT9455_BOOST_MODE) { 1247 ret = rt9455_set_voreg_before_charge_mode(info); 1248 if (ret) { 1249 dev_err(dev, "Failed to set VOREG before entering charge mode\n"); 1250 return ret; 1251 } 1252 /* 1253 * If the charger is in boost mode, and it has received 1254 * USB_EVENT_NONE, this means the consumer device powered by the 1255 * charger is not connected anymore. 1256 * In this case, the charger goes into charge mode. 1257 */ 1258 dev_dbg(dev, "USB_EVENT_NONE received, therefore the charger goes into charge mode\n"); 1259 ret = regmap_field_write(info->regmap_fields[F_OPA_MODE], 1260 RT9455_CHARGE_MODE); 1261 if (ret) { 1262 dev_err(dev, "Failed to set charger in charge mode\n"); 1263 return NOTIFY_DONE; 1264 } 1265 } 1266 1267 dev_dbg(dev, "USB_EVENT_NONE received, therefore IAICR is set to its minimum value\n"); 1268 if (iaicr != RT9455_IAICR_100MA) { 1269 ret = regmap_field_write(info->regmap_fields[F_IAICR], 1270 RT9455_IAICR_100MA); 1271 if (ret) { 1272 dev_err(dev, "Failed to set IAICR value\n"); 1273 return NOTIFY_DONE; 1274 } 1275 } 1276 1277 return NOTIFY_OK; 1278 } 1279 1280 static int rt9455_usb_event_vbus(struct rt9455_info *info, 1281 u8 opa_mode, u8 iaicr) 1282 { 1283 struct device *dev = &info->client->dev; 1284 int ret; 1285 1286 if (opa_mode == RT9455_BOOST_MODE) { 1287 ret = rt9455_set_voreg_before_charge_mode(info); 1288 if (ret) { 1289 dev_err(dev, "Failed to set VOREG before entering charge mode\n"); 1290 return ret; 1291 } 1292 /* 1293 * If the charger is in boost mode, and it has received 1294 * USB_EVENT_VBUS, this means the consumer device powered by the 1295 * charger is not connected anymore. 1296 * In this case, the charger goes into charge mode. 1297 */ 1298 dev_dbg(dev, "USB_EVENT_VBUS received, therefore the charger goes into charge mode\n"); 1299 ret = regmap_field_write(info->regmap_fields[F_OPA_MODE], 1300 RT9455_CHARGE_MODE); 1301 if (ret) { 1302 dev_err(dev, "Failed to set charger in charge mode\n"); 1303 return NOTIFY_DONE; 1304 } 1305 } 1306 1307 dev_dbg(dev, "USB_EVENT_VBUS received, therefore IAICR is set to 500 mA\n"); 1308 if (iaicr != RT9455_IAICR_500MA) { 1309 ret = regmap_field_write(info->regmap_fields[F_IAICR], 1310 RT9455_IAICR_500MA); 1311 if (ret) { 1312 dev_err(dev, "Failed to set IAICR value\n"); 1313 return NOTIFY_DONE; 1314 } 1315 } 1316 1317 return NOTIFY_OK; 1318 } 1319 1320 static int rt9455_usb_event_id(struct rt9455_info *info, 1321 u8 opa_mode, u8 iaicr) 1322 { 1323 struct device *dev = &info->client->dev; 1324 int ret; 1325 1326 if (opa_mode == RT9455_CHARGE_MODE) { 1327 ret = rt9455_set_boost_voltage_before_boost_mode(info); 1328 if (ret) { 1329 dev_err(dev, "Failed to set boost output voltage before entering boost mode\n"); 1330 return ret; 1331 } 1332 /* 1333 * If the charger is in charge mode, and it has received 1334 * USB_EVENT_ID, this means a consumer device is connected and 1335 * it should be powered by the charger. 1336 * In this case, the charger goes into boost mode. 1337 */ 1338 dev_dbg(dev, "USB_EVENT_ID received, therefore the charger goes into boost mode\n"); 1339 ret = regmap_field_write(info->regmap_fields[F_OPA_MODE], 1340 RT9455_BOOST_MODE); 1341 if (ret) { 1342 dev_err(dev, "Failed to set charger in boost mode\n"); 1343 return NOTIFY_DONE; 1344 } 1345 } 1346 1347 dev_dbg(dev, "USB_EVENT_ID received, therefore IAICR is set to its minimum value\n"); 1348 if (iaicr != RT9455_IAICR_100MA) { 1349 ret = regmap_field_write(info->regmap_fields[F_IAICR], 1350 RT9455_IAICR_100MA); 1351 if (ret) { 1352 dev_err(dev, "Failed to set IAICR value\n"); 1353 return NOTIFY_DONE; 1354 } 1355 } 1356 1357 return NOTIFY_OK; 1358 } 1359 1360 static int rt9455_usb_event_charger(struct rt9455_info *info, 1361 u8 opa_mode, u8 iaicr) 1362 { 1363 struct device *dev = &info->client->dev; 1364 int ret; 1365 1366 if (opa_mode == RT9455_BOOST_MODE) { 1367 ret = rt9455_set_voreg_before_charge_mode(info); 1368 if (ret) { 1369 dev_err(dev, "Failed to set VOREG before entering charge mode\n"); 1370 return ret; 1371 } 1372 /* 1373 * If the charger is in boost mode, and it has received 1374 * USB_EVENT_CHARGER, this means the consumer device powered by 1375 * the charger is not connected anymore. 1376 * In this case, the charger goes into charge mode. 1377 */ 1378 dev_dbg(dev, "USB_EVENT_CHARGER received, therefore the charger goes into charge mode\n"); 1379 ret = regmap_field_write(info->regmap_fields[F_OPA_MODE], 1380 RT9455_CHARGE_MODE); 1381 if (ret) { 1382 dev_err(dev, "Failed to set charger in charge mode\n"); 1383 return NOTIFY_DONE; 1384 } 1385 } 1386 1387 dev_dbg(dev, "USB_EVENT_CHARGER received, therefore IAICR is set to no current limit\n"); 1388 if (iaicr != RT9455_IAICR_NO_LIMIT) { 1389 ret = regmap_field_write(info->regmap_fields[F_IAICR], 1390 RT9455_IAICR_NO_LIMIT); 1391 if (ret) { 1392 dev_err(dev, "Failed to set IAICR value\n"); 1393 return NOTIFY_DONE; 1394 } 1395 } 1396 1397 return NOTIFY_OK; 1398 } 1399 1400 static int rt9455_usb_event(struct notifier_block *nb, 1401 unsigned long event, void *power) 1402 { 1403 struct rt9455_info *info = container_of(nb, struct rt9455_info, nb); 1404 struct device *dev = &info->client->dev; 1405 unsigned int opa_mode, iaicr; 1406 int ret; 1407 1408 /* 1409 * Determine whether the charger is in charge mode 1410 * or in boost mode. 1411 */ 1412 ret = regmap_field_read(info->regmap_fields[F_OPA_MODE], 1413 &opa_mode); 1414 if (ret) { 1415 dev_err(dev, "Failed to read OPA_MODE value\n"); 1416 return NOTIFY_DONE; 1417 } 1418 1419 ret = regmap_field_read(info->regmap_fields[F_IAICR], 1420 &iaicr); 1421 if (ret) { 1422 dev_err(dev, "Failed to read IAICR value\n"); 1423 return NOTIFY_DONE; 1424 } 1425 1426 dev_dbg(dev, "Received USB event %lu\n", event); 1427 switch (event) { 1428 case USB_EVENT_NONE: 1429 return rt9455_usb_event_none(info, opa_mode, iaicr); 1430 case USB_EVENT_VBUS: 1431 return rt9455_usb_event_vbus(info, opa_mode, iaicr); 1432 case USB_EVENT_ID: 1433 return rt9455_usb_event_id(info, opa_mode, iaicr); 1434 case USB_EVENT_CHARGER: 1435 return rt9455_usb_event_charger(info, opa_mode, iaicr); 1436 default: 1437 dev_err(dev, "Unknown USB event\n"); 1438 } 1439 return NOTIFY_DONE; 1440 } 1441 #endif 1442 1443 static void rt9455_pwr_rdy_work_callback(struct work_struct *work) 1444 { 1445 struct rt9455_info *info = container_of(work, struct rt9455_info, 1446 pwr_rdy_work.work); 1447 struct device *dev = &info->client->dev; 1448 unsigned int pwr_rdy; 1449 int ret; 1450 1451 ret = regmap_field_read(info->regmap_fields[F_PWR_RDY], &pwr_rdy); 1452 if (ret) { 1453 dev_err(dev, "Failed to read PWR_RDY bit\n"); 1454 return; 1455 } 1456 switch (pwr_rdy) { 1457 case RT9455_PWR_FAULT: 1458 dev_dbg(dev, "Charger disconnected from power source\n"); 1459 cancel_delayed_work_sync(&info->max_charging_time_work); 1460 break; 1461 case RT9455_PWR_GOOD: 1462 dev_dbg(dev, "Charger connected to power source\n"); 1463 ret = regmap_field_write(info->regmap_fields[F_CHG_EN], 1464 RT9455_CHARGE_ENABLE); 1465 if (ret) { 1466 dev_err(dev, "Failed to enable charging\n"); 1467 return; 1468 } 1469 queue_delayed_work(system_power_efficient_wq, 1470 &info->max_charging_time_work, 1471 RT9455_MAX_CHARGING_TIME * HZ); 1472 break; 1473 } 1474 /* 1475 * Notify userspace that the charger has been either connected to or 1476 * disconnected from the power source. 1477 */ 1478 power_supply_changed(info->charger); 1479 } 1480 1481 static void rt9455_max_charging_time_work_callback(struct work_struct *work) 1482 { 1483 struct rt9455_info *info = container_of(work, struct rt9455_info, 1484 max_charging_time_work.work); 1485 struct device *dev = &info->client->dev; 1486 int ret; 1487 1488 dev_err(dev, "Battery has been charging for at least 6 hours and is not yet fully charged. Battery is dead, therefore charging is disabled.\n"); 1489 ret = regmap_field_write(info->regmap_fields[F_CHG_EN], 1490 RT9455_CHARGE_DISABLE); 1491 if (ret) 1492 dev_err(dev, "Failed to disable charging\n"); 1493 } 1494 1495 static void rt9455_batt_presence_work_callback(struct work_struct *work) 1496 { 1497 struct rt9455_info *info = container_of(work, struct rt9455_info, 1498 batt_presence_work.work); 1499 struct device *dev = &info->client->dev; 1500 unsigned int irq1, mask1; 1501 int ret; 1502 1503 ret = regmap_read(info->regmap, RT9455_REG_IRQ1, &irq1); 1504 if (ret) { 1505 dev_err(dev, "Failed to read IRQ1 register\n"); 1506 return; 1507 } 1508 1509 /* 1510 * If the battery is still absent, batt_presence_work is rescheduled. 1511 * Otherwise, max_charging_time is scheduled. 1512 */ 1513 if (irq1 & GET_MASK(F_BATAB)) { 1514 queue_delayed_work(system_power_efficient_wq, 1515 &info->batt_presence_work, 1516 RT9455_BATT_PRESENCE_DELAY * HZ); 1517 } else { 1518 queue_delayed_work(system_power_efficient_wq, 1519 &info->max_charging_time_work, 1520 RT9455_MAX_CHARGING_TIME * HZ); 1521 1522 ret = regmap_read(info->regmap, RT9455_REG_MASK1, &mask1); 1523 if (ret) { 1524 dev_err(dev, "Failed to read MASK1 register\n"); 1525 return; 1526 } 1527 1528 if (mask1 & GET_MASK(F_BATABM)) { 1529 ret = regmap_field_write(info->regmap_fields[F_BATABM], 1530 0x00); 1531 if (ret) 1532 dev_err(dev, "Failed to unmask BATAB interrupt\n"); 1533 } 1534 /* 1535 * Notify userspace that the battery is now connected to the 1536 * charger. 1537 */ 1538 power_supply_changed(info->charger); 1539 } 1540 } 1541 1542 static const struct power_supply_desc rt9455_charger_desc = { 1543 .name = RT9455_DRIVER_NAME, 1544 .type = POWER_SUPPLY_TYPE_USB, 1545 .properties = rt9455_charger_properties, 1546 .num_properties = ARRAY_SIZE(rt9455_charger_properties), 1547 .get_property = rt9455_charger_get_property, 1548 }; 1549 1550 static bool rt9455_is_writeable_reg(struct device *dev, unsigned int reg) 1551 { 1552 switch (reg) { 1553 case RT9455_REG_DEV_ID: 1554 case RT9455_REG_IRQ1: 1555 case RT9455_REG_IRQ2: 1556 case RT9455_REG_IRQ3: 1557 return false; 1558 default: 1559 return true; 1560 } 1561 } 1562 1563 static bool rt9455_is_volatile_reg(struct device *dev, unsigned int reg) 1564 { 1565 switch (reg) { 1566 case RT9455_REG_DEV_ID: 1567 case RT9455_REG_CTRL5: 1568 case RT9455_REG_CTRL6: 1569 return false; 1570 default: 1571 return true; 1572 } 1573 } 1574 1575 static const struct regmap_config rt9455_regmap_config = { 1576 .reg_bits = 8, 1577 .val_bits = 8, 1578 .writeable_reg = rt9455_is_writeable_reg, 1579 .volatile_reg = rt9455_is_volatile_reg, 1580 .max_register = RT9455_REG_MASK3, 1581 .cache_type = REGCACHE_RBTREE, 1582 }; 1583 1584 static int rt9455_probe(struct i2c_client *client) 1585 { 1586 struct i2c_adapter *adapter = client->adapter; 1587 struct device *dev = &client->dev; 1588 struct rt9455_info *info; 1589 struct power_supply_config rt9455_charger_config = {}; 1590 /* 1591 * Mandatory device-specific data values. Also, VOREG and boost output 1592 * voltage are mandatory values, but they are stored in rt9455_info 1593 * structure. 1594 */ 1595 u32 ichrg, ieoc_percentage; 1596 /* Optional device-specific data values. */ 1597 u32 mivr = -1, iaicr = -1; 1598 int i, ret; 1599 1600 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { 1601 dev_err(dev, "No support for SMBUS_BYTE_DATA\n"); 1602 return -ENODEV; 1603 } 1604 info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL); 1605 if (!info) 1606 return -ENOMEM; 1607 1608 info->client = client; 1609 i2c_set_clientdata(client, info); 1610 1611 info->regmap = devm_regmap_init_i2c(client, 1612 &rt9455_regmap_config); 1613 if (IS_ERR(info->regmap)) { 1614 dev_err(dev, "Failed to initialize register map\n"); 1615 return -EINVAL; 1616 } 1617 1618 for (i = 0; i < F_MAX_FIELDS; i++) { 1619 info->regmap_fields[i] = 1620 devm_regmap_field_alloc(dev, info->regmap, 1621 rt9455_reg_fields[i]); 1622 if (IS_ERR(info->regmap_fields[i])) { 1623 dev_err(dev, 1624 "Failed to allocate regmap field = %d\n", i); 1625 return PTR_ERR(info->regmap_fields[i]); 1626 } 1627 } 1628 1629 ret = rt9455_discover_charger(info, &ichrg, &ieoc_percentage, 1630 &mivr, &iaicr); 1631 if (ret) { 1632 dev_err(dev, "Failed to discover charger\n"); 1633 return ret; 1634 } 1635 1636 #if IS_ENABLED(CONFIG_USB_PHY) 1637 info->usb_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2); 1638 if (IS_ERR(info->usb_phy)) { 1639 dev_err(dev, "Failed to get USB transceiver\n"); 1640 } else { 1641 info->nb.notifier_call = rt9455_usb_event; 1642 ret = usb_register_notifier(info->usb_phy, &info->nb); 1643 if (ret) { 1644 dev_err(dev, "Failed to register USB notifier\n"); 1645 /* 1646 * If usb_register_notifier() fails, set notifier_call 1647 * to NULL, to avoid calling usb_unregister_notifier(). 1648 */ 1649 info->nb.notifier_call = NULL; 1650 } 1651 } 1652 #endif 1653 1654 INIT_DEFERRABLE_WORK(&info->pwr_rdy_work, rt9455_pwr_rdy_work_callback); 1655 INIT_DEFERRABLE_WORK(&info->max_charging_time_work, 1656 rt9455_max_charging_time_work_callback); 1657 INIT_DEFERRABLE_WORK(&info->batt_presence_work, 1658 rt9455_batt_presence_work_callback); 1659 1660 rt9455_charger_config.of_node = dev->of_node; 1661 rt9455_charger_config.drv_data = info; 1662 rt9455_charger_config.supplied_to = rt9455_charger_supplied_to; 1663 rt9455_charger_config.num_supplicants = 1664 ARRAY_SIZE(rt9455_charger_supplied_to); 1665 ret = devm_request_threaded_irq(dev, client->irq, NULL, 1666 rt9455_irq_handler_thread, 1667 IRQF_TRIGGER_LOW | IRQF_ONESHOT, 1668 RT9455_DRIVER_NAME, info); 1669 if (ret) { 1670 dev_err(dev, "Failed to register IRQ handler\n"); 1671 goto put_usb_notifier; 1672 } 1673 1674 ret = rt9455_hw_init(info, ichrg, ieoc_percentage, mivr, iaicr); 1675 if (ret) { 1676 dev_err(dev, "Failed to set charger to its default values\n"); 1677 goto put_usb_notifier; 1678 } 1679 1680 info->charger = devm_power_supply_register(dev, &rt9455_charger_desc, 1681 &rt9455_charger_config); 1682 if (IS_ERR(info->charger)) { 1683 dev_err(dev, "Failed to register charger\n"); 1684 ret = PTR_ERR(info->charger); 1685 goto put_usb_notifier; 1686 } 1687 1688 return 0; 1689 1690 put_usb_notifier: 1691 #if IS_ENABLED(CONFIG_USB_PHY) 1692 if (info->nb.notifier_call) { 1693 usb_unregister_notifier(info->usb_phy, &info->nb); 1694 info->nb.notifier_call = NULL; 1695 } 1696 #endif 1697 return ret; 1698 } 1699 1700 static void rt9455_remove(struct i2c_client *client) 1701 { 1702 int ret; 1703 struct rt9455_info *info = i2c_get_clientdata(client); 1704 1705 ret = rt9455_register_reset(info); 1706 if (ret) 1707 dev_err(&info->client->dev, "Failed to set charger to its default values\n"); 1708 1709 #if IS_ENABLED(CONFIG_USB_PHY) 1710 if (info->nb.notifier_call) 1711 usb_unregister_notifier(info->usb_phy, &info->nb); 1712 #endif 1713 1714 cancel_delayed_work_sync(&info->pwr_rdy_work); 1715 cancel_delayed_work_sync(&info->max_charging_time_work); 1716 cancel_delayed_work_sync(&info->batt_presence_work); 1717 } 1718 1719 static const struct i2c_device_id rt9455_i2c_id_table[] = { 1720 { RT9455_DRIVER_NAME, 0 }, 1721 { }, 1722 }; 1723 MODULE_DEVICE_TABLE(i2c, rt9455_i2c_id_table); 1724 1725 static const struct of_device_id rt9455_of_match[] = { 1726 { .compatible = "richtek,rt9455", }, 1727 { }, 1728 }; 1729 MODULE_DEVICE_TABLE(of, rt9455_of_match); 1730 1731 #ifdef CONFIG_ACPI 1732 static const struct acpi_device_id rt9455_i2c_acpi_match[] = { 1733 { "RT945500", 0 }, 1734 { } 1735 }; 1736 MODULE_DEVICE_TABLE(acpi, rt9455_i2c_acpi_match); 1737 #endif 1738 1739 static struct i2c_driver rt9455_driver = { 1740 .probe_new = rt9455_probe, 1741 .remove = rt9455_remove, 1742 .id_table = rt9455_i2c_id_table, 1743 .driver = { 1744 .name = RT9455_DRIVER_NAME, 1745 .of_match_table = of_match_ptr(rt9455_of_match), 1746 .acpi_match_table = ACPI_PTR(rt9455_i2c_acpi_match), 1747 }, 1748 }; 1749 module_i2c_driver(rt9455_driver); 1750 1751 MODULE_LICENSE("GPL"); 1752 MODULE_AUTHOR("Anda-Maria Nicolae <anda-maria.nicolae@intel.com>"); 1753 MODULE_DESCRIPTION("Richtek RT9455 Charger Driver"); 1754