root/drivers/power/supply/rt9455_charger.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. rt9455_find_idx
  2. rt9455_get_field_val
  3. rt9455_set_field_val
  4. rt9455_register_reset
  5. rt9455_charger_get_status
  6. rt9455_charger_get_health
  7. rt9455_charger_get_battery_presence
  8. rt9455_charger_get_online
  9. rt9455_charger_get_current
  10. rt9455_charger_get_current_max
  11. rt9455_charger_get_voltage
  12. rt9455_charger_get_voltage_max
  13. rt9455_charger_get_term_current
  14. rt9455_charger_get_property
  15. rt9455_hw_init
  16. rt9455_set_boost_voltage_before_boost_mode
  17. rt9455_set_voreg_before_charge_mode
  18. rt9455_irq_handler_check_irq1_register
  19. rt9455_irq_handler_check_irq2_register
  20. rt9455_irq_handler_check_irq3_register
  21. rt9455_irq_handler_thread
  22. rt9455_discover_charger
  23. rt9455_usb_event_none
  24. rt9455_usb_event_vbus
  25. rt9455_usb_event_id
  26. rt9455_usb_event_charger
  27. rt9455_usb_event
  28. rt9455_pwr_rdy_work_callback
  29. rt9455_max_charging_time_work_callback
  30. rt9455_batt_presence_work_callback
  31. rt9455_is_writeable_reg
  32. rt9455_is_volatile_reg
  33. rt9455_probe
  34. rt9455_remove

   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                         const struct i2c_device_id *id)
1586 {
1587         struct i2c_adapter *adapter = client->adapter;
1588         struct device *dev = &client->dev;
1589         struct rt9455_info *info;
1590         struct power_supply_config rt9455_charger_config = {};
1591         /*
1592          * Mandatory device-specific data values. Also, VOREG and boost output
1593          * voltage are mandatory values, but they are stored in rt9455_info
1594          * structure.
1595          */
1596         u32 ichrg, ieoc_percentage;
1597         /* Optional device-specific data values. */
1598         u32 mivr = -1, iaicr = -1;
1599         int i, ret;
1600 
1601         if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
1602                 dev_err(dev, "No support for SMBUS_BYTE_DATA\n");
1603                 return -ENODEV;
1604         }
1605         info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
1606         if (!info)
1607                 return -ENOMEM;
1608 
1609         info->client = client;
1610         i2c_set_clientdata(client, info);
1611 
1612         info->regmap = devm_regmap_init_i2c(client,
1613                                             &rt9455_regmap_config);
1614         if (IS_ERR(info->regmap)) {
1615                 dev_err(dev, "Failed to initialize register map\n");
1616                 return -EINVAL;
1617         }
1618 
1619         for (i = 0; i < F_MAX_FIELDS; i++) {
1620                 info->regmap_fields[i] =
1621                         devm_regmap_field_alloc(dev, info->regmap,
1622                                                 rt9455_reg_fields[i]);
1623                 if (IS_ERR(info->regmap_fields[i])) {
1624                         dev_err(dev,
1625                                 "Failed to allocate regmap field = %d\n", i);
1626                         return PTR_ERR(info->regmap_fields[i]);
1627                 }
1628         }
1629 
1630         ret = rt9455_discover_charger(info, &ichrg, &ieoc_percentage,
1631                                       &mivr, &iaicr);
1632         if (ret) {
1633                 dev_err(dev, "Failed to discover charger\n");
1634                 return ret;
1635         }
1636 
1637 #if IS_ENABLED(CONFIG_USB_PHY)
1638         info->usb_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
1639         if (IS_ERR(info->usb_phy)) {
1640                 dev_err(dev, "Failed to get USB transceiver\n");
1641         } else {
1642                 info->nb.notifier_call = rt9455_usb_event;
1643                 ret = usb_register_notifier(info->usb_phy, &info->nb);
1644                 if (ret) {
1645                         dev_err(dev, "Failed to register USB notifier\n");
1646                         /*
1647                          * If usb_register_notifier() fails, set notifier_call
1648                          * to NULL, to avoid calling usb_unregister_notifier().
1649                          */
1650                         info->nb.notifier_call = NULL;
1651                 }
1652         }
1653 #endif
1654 
1655         INIT_DEFERRABLE_WORK(&info->pwr_rdy_work, rt9455_pwr_rdy_work_callback);
1656         INIT_DEFERRABLE_WORK(&info->max_charging_time_work,
1657                              rt9455_max_charging_time_work_callback);
1658         INIT_DEFERRABLE_WORK(&info->batt_presence_work,
1659                              rt9455_batt_presence_work_callback);
1660 
1661         rt9455_charger_config.of_node           = dev->of_node;
1662         rt9455_charger_config.drv_data          = info;
1663         rt9455_charger_config.supplied_to       = rt9455_charger_supplied_to;
1664         rt9455_charger_config.num_supplicants   =
1665                                         ARRAY_SIZE(rt9455_charger_supplied_to);
1666         ret = devm_request_threaded_irq(dev, client->irq, NULL,
1667                                         rt9455_irq_handler_thread,
1668                                         IRQF_TRIGGER_LOW | IRQF_ONESHOT,
1669                                         RT9455_DRIVER_NAME, info);
1670         if (ret) {
1671                 dev_err(dev, "Failed to register IRQ handler\n");
1672                 goto put_usb_notifier;
1673         }
1674 
1675         ret = rt9455_hw_init(info, ichrg, ieoc_percentage, mivr, iaicr);
1676         if (ret) {
1677                 dev_err(dev, "Failed to set charger to its default values\n");
1678                 goto put_usb_notifier;
1679         }
1680 
1681         info->charger = devm_power_supply_register(dev, &rt9455_charger_desc,
1682                                                    &rt9455_charger_config);
1683         if (IS_ERR(info->charger)) {
1684                 dev_err(dev, "Failed to register charger\n");
1685                 ret = PTR_ERR(info->charger);
1686                 goto put_usb_notifier;
1687         }
1688 
1689         return 0;
1690 
1691 put_usb_notifier:
1692 #if IS_ENABLED(CONFIG_USB_PHY)
1693         if (info->nb.notifier_call)  {
1694                 usb_unregister_notifier(info->usb_phy, &info->nb);
1695                 info->nb.notifier_call = NULL;
1696         }
1697 #endif
1698         return ret;
1699 }
1700 
1701 static int rt9455_remove(struct i2c_client *client)
1702 {
1703         int ret;
1704         struct rt9455_info *info = i2c_get_clientdata(client);
1705 
1706         ret = rt9455_register_reset(info);
1707         if (ret)
1708                 dev_err(&info->client->dev, "Failed to set charger to its default values\n");
1709 
1710 #if IS_ENABLED(CONFIG_USB_PHY)
1711         if (info->nb.notifier_call)
1712                 usb_unregister_notifier(info->usb_phy, &info->nb);
1713 #endif
1714 
1715         cancel_delayed_work_sync(&info->pwr_rdy_work);
1716         cancel_delayed_work_sync(&info->max_charging_time_work);
1717         cancel_delayed_work_sync(&info->batt_presence_work);
1718 
1719         return ret;
1720 }
1721 
1722 static const struct i2c_device_id rt9455_i2c_id_table[] = {
1723         { RT9455_DRIVER_NAME, 0 },
1724         { },
1725 };
1726 MODULE_DEVICE_TABLE(i2c, rt9455_i2c_id_table);
1727 
1728 static const struct of_device_id rt9455_of_match[] = {
1729         { .compatible = "richtek,rt9455", },
1730         { },
1731 };
1732 MODULE_DEVICE_TABLE(of, rt9455_of_match);
1733 
1734 static const struct acpi_device_id rt9455_i2c_acpi_match[] = {
1735         { "RT945500", 0 },
1736         { }
1737 };
1738 MODULE_DEVICE_TABLE(acpi, rt9455_i2c_acpi_match);
1739 
1740 static struct i2c_driver rt9455_driver = {
1741         .probe          = rt9455_probe,
1742         .remove         = rt9455_remove,
1743         .id_table       = rt9455_i2c_id_table,
1744         .driver = {
1745                 .name           = RT9455_DRIVER_NAME,
1746                 .of_match_table = of_match_ptr(rt9455_of_match),
1747                 .acpi_match_table = ACPI_PTR(rt9455_i2c_acpi_match),
1748         },
1749 };
1750 module_i2c_driver(rt9455_driver);
1751 
1752 MODULE_LICENSE("GPL");
1753 MODULE_AUTHOR("Anda-Maria Nicolae <anda-maria.nicolae@intel.com>");
1754 MODULE_DESCRIPTION("Richtek RT9455 Charger Driver");

/* [<][>][^][v][top][bottom][index][help] */