Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003  * Driver for Richtek RT9455WSC battery charger.
0004  *
0005  * Copyright (C) 2015 Intel Corporation
0006  */
0007 
0008 #include <linux/module.h>
0009 #include <linux/interrupt.h>
0010 #include <linux/delay.h>
0011 #include <linux/of_irq.h>
0012 #include <linux/of_device.h>
0013 #include <linux/pm_runtime.h>
0014 #include <linux/power_supply.h>
0015 #include <linux/i2c.h>
0016 #include <linux/acpi.h>
0017 #include <linux/usb/phy.h>
0018 #include <linux/regmap.h>
0019 
0020 #define RT9455_MANUFACTURER         "Richtek"
0021 #define RT9455_MODEL_NAME           "RT9455"
0022 #define RT9455_DRIVER_NAME          "rt9455-charger"
0023 
0024 #define RT9455_IRQ_NAME             "interrupt"
0025 
0026 #define RT9455_PWR_RDY_DELAY            1 /* 1 second */
0027 #define RT9455_MAX_CHARGING_TIME        21600 /* 6 hrs */
0028 #define RT9455_BATT_PRESENCE_DELAY      60 /* 60 seconds */
0029 
0030 #define RT9455_CHARGE_MODE          0x00
0031 #define RT9455_BOOST_MODE           0x01
0032 
0033 #define RT9455_FAULT                0x03
0034 
0035 #define RT9455_IAICR_100MA          0x00
0036 #define RT9455_IAICR_500MA          0x01
0037 #define RT9455_IAICR_NO_LIMIT           0x03
0038 
0039 #define RT9455_CHARGE_DISABLE           0x00
0040 #define RT9455_CHARGE_ENABLE            0x01
0041 
0042 #define RT9455_PWR_FAULT            0x00
0043 #define RT9455_PWR_GOOD             0x01
0044 
0045 #define RT9455_REG_CTRL1            0x00 /* CTRL1 reg address */
0046 #define RT9455_REG_CTRL2            0x01 /* CTRL2 reg address */
0047 #define RT9455_REG_CTRL3            0x02 /* CTRL3 reg address */
0048 #define RT9455_REG_DEV_ID           0x03 /* DEV_ID reg address */
0049 #define RT9455_REG_CTRL4            0x04 /* CTRL4 reg address */
0050 #define RT9455_REG_CTRL5            0x05 /* CTRL5 reg address */
0051 #define RT9455_REG_CTRL6            0x06 /* CTRL6 reg address */
0052 #define RT9455_REG_CTRL7            0x07 /* CTRL7 reg address */
0053 #define RT9455_REG_IRQ1             0x08 /* IRQ1 reg address */
0054 #define RT9455_REG_IRQ2             0x09 /* IRQ2 reg address */
0055 #define RT9455_REG_IRQ3             0x0A /* IRQ3 reg address */
0056 #define RT9455_REG_MASK1            0x0B /* MASK1 reg address */
0057 #define RT9455_REG_MASK2            0x0C /* MASK2 reg address */
0058 #define RT9455_REG_MASK3            0x0D /* MASK3 reg address */
0059 
0060 enum rt9455_fields {
0061     F_STAT, F_BOOST, F_PWR_RDY, F_OTG_PIN_POLARITY, /* CTRL1 reg fields */
0062 
0063     F_IAICR, F_TE_SHDN_EN, F_HIGHER_OCP, F_TE, F_IAICR_INT, F_HIZ,
0064     F_OPA_MODE, /* CTRL2 reg fields */
0065 
0066     F_VOREG, F_OTG_PL, F_OTG_EN, /* CTRL3 reg fields */
0067 
0068     F_VENDOR_ID, F_CHIP_REV, /* DEV_ID reg fields */
0069 
0070     F_RST, /* CTRL4 reg fields */
0071 
0072     F_TMR_EN, F_MIVR, F_IPREC, F_IEOC_PERCENTAGE, /* CTRL5 reg fields*/
0073 
0074     F_IAICR_SEL, F_ICHRG, F_VPREC, /* CTRL6 reg fields */
0075 
0076     F_BATD_EN, F_CHG_EN, F_VMREG, /* CTRL7 reg fields */
0077 
0078     F_TSDI, F_VINOVPI, F_BATAB, /* IRQ1 reg fields */
0079 
0080     F_CHRVPI, F_CHBATOVI, F_CHTERMI, F_CHRCHGI, F_CH32MI, F_CHTREGI,
0081     F_CHMIVRI, /* IRQ2 reg fields */
0082 
0083     F_BSTBUSOVI, F_BSTOLI, F_BSTLOWVI, F_BST32SI, /* IRQ3 reg fields */
0084 
0085     F_TSDM, F_VINOVPIM, F_BATABM, /* MASK1 reg fields */
0086 
0087     F_CHRVPIM, F_CHBATOVIM, F_CHTERMIM, F_CHRCHGIM, F_CH32MIM, F_CHTREGIM,
0088     F_CHMIVRIM, /* MASK2 reg fields */
0089 
0090     F_BSTVINOVIM, F_BSTOLIM, F_BSTLOWVIM, F_BST32SIM, /* MASK3 reg fields */
0091 
0092     F_MAX_FIELDS
0093 };
0094 
0095 static const struct reg_field rt9455_reg_fields[] = {
0096     [F_STAT]        = REG_FIELD(RT9455_REG_CTRL1, 4, 5),
0097     [F_BOOST]       = REG_FIELD(RT9455_REG_CTRL1, 3, 3),
0098     [F_PWR_RDY]     = REG_FIELD(RT9455_REG_CTRL1, 2, 2),
0099     [F_OTG_PIN_POLARITY]    = REG_FIELD(RT9455_REG_CTRL1, 1, 1),
0100 
0101     [F_IAICR]       = REG_FIELD(RT9455_REG_CTRL2, 6, 7),
0102     [F_TE_SHDN_EN]      = REG_FIELD(RT9455_REG_CTRL2, 5, 5),
0103     [F_HIGHER_OCP]      = REG_FIELD(RT9455_REG_CTRL2, 4, 4),
0104     [F_TE]          = REG_FIELD(RT9455_REG_CTRL2, 3, 3),
0105     [F_IAICR_INT]       = REG_FIELD(RT9455_REG_CTRL2, 2, 2),
0106     [F_HIZ]         = REG_FIELD(RT9455_REG_CTRL2, 1, 1),
0107     [F_OPA_MODE]        = REG_FIELD(RT9455_REG_CTRL2, 0, 0),
0108 
0109     [F_VOREG]       = REG_FIELD(RT9455_REG_CTRL3, 2, 7),
0110     [F_OTG_PL]      = REG_FIELD(RT9455_REG_CTRL3, 1, 1),
0111     [F_OTG_EN]      = REG_FIELD(RT9455_REG_CTRL3, 0, 0),
0112 
0113     [F_VENDOR_ID]       = REG_FIELD(RT9455_REG_DEV_ID, 4, 7),
0114     [F_CHIP_REV]        = REG_FIELD(RT9455_REG_DEV_ID, 0, 3),
0115 
0116     [F_RST]         = REG_FIELD(RT9455_REG_CTRL4, 7, 7),
0117 
0118     [F_TMR_EN]      = REG_FIELD(RT9455_REG_CTRL5, 7, 7),
0119     [F_MIVR]        = REG_FIELD(RT9455_REG_CTRL5, 4, 5),
0120     [F_IPREC]       = REG_FIELD(RT9455_REG_CTRL5, 2, 3),
0121     [F_IEOC_PERCENTAGE] = REG_FIELD(RT9455_REG_CTRL5, 0, 1),
0122 
0123     [F_IAICR_SEL]       = REG_FIELD(RT9455_REG_CTRL6, 7, 7),
0124     [F_ICHRG]       = REG_FIELD(RT9455_REG_CTRL6, 4, 6),
0125     [F_VPREC]       = REG_FIELD(RT9455_REG_CTRL6, 0, 2),
0126 
0127     [F_BATD_EN]     = REG_FIELD(RT9455_REG_CTRL7, 6, 6),
0128     [F_CHG_EN]      = REG_FIELD(RT9455_REG_CTRL7, 4, 4),
0129     [F_VMREG]       = REG_FIELD(RT9455_REG_CTRL7, 0, 3),
0130 
0131     [F_TSDI]        = REG_FIELD(RT9455_REG_IRQ1, 7, 7),
0132     [F_VINOVPI]     = REG_FIELD(RT9455_REG_IRQ1, 6, 6),
0133     [F_BATAB]       = REG_FIELD(RT9455_REG_IRQ1, 0, 0),
0134 
0135     [F_CHRVPI]      = REG_FIELD(RT9455_REG_IRQ2, 7, 7),
0136     [F_CHBATOVI]        = REG_FIELD(RT9455_REG_IRQ2, 5, 5),
0137     [F_CHTERMI]     = REG_FIELD(RT9455_REG_IRQ2, 4, 4),
0138     [F_CHRCHGI]     = REG_FIELD(RT9455_REG_IRQ2, 3, 3),
0139     [F_CH32MI]      = REG_FIELD(RT9455_REG_IRQ2, 2, 2),
0140     [F_CHTREGI]     = REG_FIELD(RT9455_REG_IRQ2, 1, 1),
0141     [F_CHMIVRI]     = REG_FIELD(RT9455_REG_IRQ2, 0, 0),
0142 
0143     [F_BSTBUSOVI]       = REG_FIELD(RT9455_REG_IRQ3, 7, 7),
0144     [F_BSTOLI]      = REG_FIELD(RT9455_REG_IRQ3, 6, 6),
0145     [F_BSTLOWVI]        = REG_FIELD(RT9455_REG_IRQ3, 5, 5),
0146     [F_BST32SI]     = REG_FIELD(RT9455_REG_IRQ3, 3, 3),
0147 
0148     [F_TSDM]        = REG_FIELD(RT9455_REG_MASK1, 7, 7),
0149     [F_VINOVPIM]        = REG_FIELD(RT9455_REG_MASK1, 6, 6),
0150     [F_BATABM]      = REG_FIELD(RT9455_REG_MASK1, 0, 0),
0151 
0152     [F_CHRVPIM]     = REG_FIELD(RT9455_REG_MASK2, 7, 7),
0153     [F_CHBATOVIM]       = REG_FIELD(RT9455_REG_MASK2, 5, 5),
0154     [F_CHTERMIM]        = REG_FIELD(RT9455_REG_MASK2, 4, 4),
0155     [F_CHRCHGIM]        = REG_FIELD(RT9455_REG_MASK2, 3, 3),
0156     [F_CH32MIM]     = REG_FIELD(RT9455_REG_MASK2, 2, 2),
0157     [F_CHTREGIM]        = REG_FIELD(RT9455_REG_MASK2, 1, 1),
0158     [F_CHMIVRIM]        = REG_FIELD(RT9455_REG_MASK2, 0, 0),
0159 
0160     [F_BSTVINOVIM]      = REG_FIELD(RT9455_REG_MASK3, 7, 7),
0161     [F_BSTOLIM]     = REG_FIELD(RT9455_REG_MASK3, 6, 6),
0162     [F_BSTLOWVIM]       = REG_FIELD(RT9455_REG_MASK3, 5, 5),
0163     [F_BST32SIM]        = REG_FIELD(RT9455_REG_MASK3, 3, 3),
0164 };
0165 
0166 #define GET_MASK(fid)   (BIT(rt9455_reg_fields[fid].msb + 1) - \
0167              BIT(rt9455_reg_fields[fid].lsb))
0168 
0169 /*
0170  * Each array initialised below shows the possible real-world values for a
0171  * group of bits belonging to RT9455 registers. The arrays are sorted in
0172  * ascending order. The index of each real-world value represents the value
0173  * that is encoded in the group of bits belonging to RT9455 registers.
0174  */
0175 /* REG06[6:4] (ICHRG) in uAh */
0176 static const int rt9455_ichrg_values[] = {
0177      500000,  650000,  800000,  950000, 1100000, 1250000, 1400000, 1550000
0178 };
0179 
0180 /*
0181  * When the charger is in charge mode, REG02[7:2] represent battery regulation
0182  * voltage.
0183  */
0184 /* REG02[7:2] (VOREG) in uV */
0185 static const int rt9455_voreg_values[] = {
0186     3500000, 3520000, 3540000, 3560000, 3580000, 3600000, 3620000, 3640000,
0187     3660000, 3680000, 3700000, 3720000, 3740000, 3760000, 3780000, 3800000,
0188     3820000, 3840000, 3860000, 3880000, 3900000, 3920000, 3940000, 3960000,
0189     3980000, 4000000, 4020000, 4040000, 4060000, 4080000, 4100000, 4120000,
0190     4140000, 4160000, 4180000, 4200000, 4220000, 4240000, 4260000, 4280000,
0191     4300000, 4330000, 4350000, 4370000, 4390000, 4410000, 4430000, 4450000,
0192     4450000, 4450000, 4450000, 4450000, 4450000, 4450000, 4450000, 4450000,
0193     4450000, 4450000, 4450000, 4450000, 4450000, 4450000, 4450000, 4450000
0194 };
0195 
0196 /*
0197  * When the charger is in boost mode, REG02[7:2] represent boost output
0198  * voltage.
0199  */
0200 /* REG02[7:2] (Boost output voltage) in uV */
0201 static const int rt9455_boost_voltage_values[] = {
0202     4425000, 4450000, 4475000, 4500000, 4525000, 4550000, 4575000, 4600000,
0203     4625000, 4650000, 4675000, 4700000, 4725000, 4750000, 4775000, 4800000,
0204     4825000, 4850000, 4875000, 4900000, 4925000, 4950000, 4975000, 5000000,
0205     5025000, 5050000, 5075000, 5100000, 5125000, 5150000, 5175000, 5200000,
0206     5225000, 5250000, 5275000, 5300000, 5325000, 5350000, 5375000, 5400000,
0207     5425000, 5450000, 5475000, 5500000, 5525000, 5550000, 5575000, 5600000,
0208     5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 5600000,
0209     5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 5600000,
0210 };
0211 
0212 /* REG07[3:0] (VMREG) in uV */
0213 static const int rt9455_vmreg_values[] = {
0214     4200000, 4220000, 4240000, 4260000, 4280000, 4300000, 4320000, 4340000,
0215     4360000, 4380000, 4400000, 4430000, 4450000, 4450000, 4450000, 4450000
0216 };
0217 
0218 /* REG05[5:4] (IEOC_PERCENTAGE) */
0219 static const int rt9455_ieoc_percentage_values[] = {
0220     10, 30, 20, 30
0221 };
0222 
0223 /* REG05[1:0] (MIVR) in uV */
0224 static const int rt9455_mivr_values[] = {
0225     4000000, 4250000, 4500000, 5000000
0226 };
0227 
0228 /* REG05[1:0] (IAICR) in uA */
0229 static const int rt9455_iaicr_values[] = {
0230     100000, 500000, 1000000, 2000000
0231 };
0232 
0233 struct rt9455_info {
0234     struct i2c_client       *client;
0235     struct regmap           *regmap;
0236     struct regmap_field     *regmap_fields[F_MAX_FIELDS];
0237     struct power_supply     *charger;
0238 #if IS_ENABLED(CONFIG_USB_PHY)
0239     struct usb_phy          *usb_phy;
0240     struct notifier_block       nb;
0241 #endif
0242     struct delayed_work     pwr_rdy_work;
0243     struct delayed_work     max_charging_time_work;
0244     struct delayed_work     batt_presence_work;
0245     u32             voreg;
0246     u32             boost_voltage;
0247 };
0248 
0249 /*
0250  * Iterate through each element of the 'tbl' array until an element whose value
0251  * is greater than v is found. Return the index of the respective element,
0252  * or the index of the last element in the array, if no such element is found.
0253  */
0254 static unsigned int rt9455_find_idx(const int tbl[], int tbl_size, int v)
0255 {
0256     int i;
0257 
0258     /*
0259      * No need to iterate until the last index in the table because
0260      * if no element greater than v is found in the table,
0261      * or if only the last element is greater than v,
0262      * function returns the index of the last element.
0263      */
0264     for (i = 0; i < tbl_size - 1; i++)
0265         if (v <= tbl[i])
0266             return i;
0267 
0268     return (tbl_size - 1);
0269 }
0270 
0271 static int rt9455_get_field_val(struct rt9455_info *info,
0272                 enum rt9455_fields field,
0273                 const int tbl[], int tbl_size, int *val)
0274 {
0275     unsigned int v;
0276     int ret;
0277 
0278     ret = regmap_field_read(info->regmap_fields[field], &v);
0279     if (ret)
0280         return ret;
0281 
0282     v = (v >= tbl_size) ? (tbl_size - 1) : v;
0283     *val = tbl[v];
0284 
0285     return 0;
0286 }
0287 
0288 static int rt9455_set_field_val(struct rt9455_info *info,
0289                 enum rt9455_fields field,
0290                 const int tbl[], int tbl_size, int val)
0291 {
0292     unsigned int idx = rt9455_find_idx(tbl, tbl_size, val);
0293 
0294     return regmap_field_write(info->regmap_fields[field], idx);
0295 }
0296 
0297 static int rt9455_register_reset(struct rt9455_info *info)
0298 {
0299     struct device *dev = &info->client->dev;
0300     unsigned int v;
0301     int ret, limit = 100;
0302 
0303     ret = regmap_field_write(info->regmap_fields[F_RST], 0x01);
0304     if (ret) {
0305         dev_err(dev, "Failed to set RST bit\n");
0306         return ret;
0307     }
0308 
0309     /*
0310      * To make sure that reset operation has finished, loop until RST bit
0311      * is set to 0.
0312      */
0313     do {
0314         ret = regmap_field_read(info->regmap_fields[F_RST], &v);
0315         if (ret) {
0316             dev_err(dev, "Failed to read RST bit\n");
0317             return ret;
0318         }
0319 
0320         if (!v)
0321             break;
0322 
0323         usleep_range(10, 100);
0324     } while (--limit);
0325 
0326     if (!limit)
0327         return -EIO;
0328 
0329     return 0;
0330 }
0331 
0332 /* Charger power supply property routines */
0333 static enum power_supply_property rt9455_charger_properties[] = {
0334     POWER_SUPPLY_PROP_STATUS,
0335     POWER_SUPPLY_PROP_HEALTH,
0336     POWER_SUPPLY_PROP_PRESENT,
0337     POWER_SUPPLY_PROP_ONLINE,
0338     POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT,
0339     POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX,
0340     POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE,
0341     POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX,
0342     POWER_SUPPLY_PROP_SCOPE,
0343     POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT,
0344     POWER_SUPPLY_PROP_MODEL_NAME,
0345     POWER_SUPPLY_PROP_MANUFACTURER,
0346 };
0347 
0348 static char *rt9455_charger_supplied_to[] = {
0349     "main-battery",
0350 };
0351 
0352 static int rt9455_charger_get_status(struct rt9455_info *info,
0353                      union power_supply_propval *val)
0354 {
0355     unsigned int v, pwr_rdy;
0356     int ret;
0357 
0358     ret = regmap_field_read(info->regmap_fields[F_PWR_RDY],
0359                 &pwr_rdy);
0360     if (ret) {
0361         dev_err(&info->client->dev, "Failed to read PWR_RDY bit\n");
0362         return ret;
0363     }
0364 
0365     /*
0366      * If PWR_RDY bit is unset, the battery is discharging. Otherwise,
0367      * STAT bits value must be checked.
0368      */
0369     if (!pwr_rdy) {
0370         val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
0371         return 0;
0372     }
0373 
0374     ret = regmap_field_read(info->regmap_fields[F_STAT], &v);
0375     if (ret) {
0376         dev_err(&info->client->dev, "Failed to read STAT bits\n");
0377         return ret;
0378     }
0379 
0380     switch (v) {
0381     case 0:
0382         /*
0383          * If PWR_RDY bit is set, but STAT bits value is 0, the charger
0384          * may be in one of the following cases:
0385          * 1. CHG_EN bit is 0.
0386          * 2. CHG_EN bit is 1 but the battery is not connected.
0387          * In any of these cases, POWER_SUPPLY_STATUS_NOT_CHARGING is
0388          * returned.
0389          */
0390         val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
0391         return 0;
0392     case 1:
0393         val->intval = POWER_SUPPLY_STATUS_CHARGING;
0394         return 0;
0395     case 2:
0396         val->intval = POWER_SUPPLY_STATUS_FULL;
0397         return 0;
0398     default:
0399         val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
0400         return 0;
0401     }
0402 }
0403 
0404 static int rt9455_charger_get_health(struct rt9455_info *info,
0405                      union power_supply_propval *val)
0406 {
0407     struct device *dev = &info->client->dev;
0408     unsigned int v;
0409     int ret;
0410 
0411     val->intval = POWER_SUPPLY_HEALTH_GOOD;
0412 
0413     ret = regmap_read(info->regmap, RT9455_REG_IRQ1, &v);
0414     if (ret) {
0415         dev_err(dev, "Failed to read IRQ1 register\n");
0416         return ret;
0417     }
0418 
0419     if (v & GET_MASK(F_TSDI)) {
0420         val->intval = POWER_SUPPLY_HEALTH_OVERHEAT;
0421         return 0;
0422     }
0423     if (v & GET_MASK(F_VINOVPI)) {
0424         val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
0425         return 0;
0426     }
0427     if (v & GET_MASK(F_BATAB)) {
0428         val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
0429         return 0;
0430     }
0431 
0432     ret = regmap_read(info->regmap, RT9455_REG_IRQ2, &v);
0433     if (ret) {
0434         dev_err(dev, "Failed to read IRQ2 register\n");
0435         return ret;
0436     }
0437 
0438     if (v & GET_MASK(F_CHBATOVI)) {
0439         val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
0440         return 0;
0441     }
0442     if (v & GET_MASK(F_CH32MI)) {
0443         val->intval = POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE;
0444         return 0;
0445     }
0446 
0447     ret = regmap_read(info->regmap, RT9455_REG_IRQ3, &v);
0448     if (ret) {
0449         dev_err(dev, "Failed to read IRQ3 register\n");
0450         return ret;
0451     }
0452 
0453     if (v & GET_MASK(F_BSTBUSOVI)) {
0454         val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
0455         return 0;
0456     }
0457     if (v & GET_MASK(F_BSTOLI)) {
0458         val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
0459         return 0;
0460     }
0461     if (v & GET_MASK(F_BSTLOWVI)) {
0462         val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
0463         return 0;
0464     }
0465     if (v & GET_MASK(F_BST32SI)) {
0466         val->intval = POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE;
0467         return 0;
0468     }
0469 
0470     ret = regmap_field_read(info->regmap_fields[F_STAT], &v);
0471     if (ret) {
0472         dev_err(dev, "Failed to read STAT bits\n");
0473         return ret;
0474     }
0475 
0476     if (v == RT9455_FAULT) {
0477         val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
0478         return 0;
0479     }
0480 
0481     return 0;
0482 }
0483 
0484 static int rt9455_charger_get_battery_presence(struct rt9455_info *info,
0485                            union power_supply_propval *val)
0486 {
0487     unsigned int v;
0488     int ret;
0489 
0490     ret = regmap_field_read(info->regmap_fields[F_BATAB], &v);
0491     if (ret) {
0492         dev_err(&info->client->dev, "Failed to read BATAB bit\n");
0493         return ret;
0494     }
0495 
0496     /*
0497      * Since BATAB is 1 when battery is NOT present and 0 otherwise,
0498      * !BATAB is returned.
0499      */
0500     val->intval = !v;
0501 
0502     return 0;
0503 }
0504 
0505 static int rt9455_charger_get_online(struct rt9455_info *info,
0506                      union power_supply_propval *val)
0507 {
0508     unsigned int v;
0509     int ret;
0510 
0511     ret = regmap_field_read(info->regmap_fields[F_PWR_RDY], &v);
0512     if (ret) {
0513         dev_err(&info->client->dev, "Failed to read PWR_RDY bit\n");
0514         return ret;
0515     }
0516 
0517     val->intval = (int)v;
0518 
0519     return 0;
0520 }
0521 
0522 static int rt9455_charger_get_current(struct rt9455_info *info,
0523                       union power_supply_propval *val)
0524 {
0525     int curr;
0526     int ret;
0527 
0528     ret = rt9455_get_field_val(info, F_ICHRG,
0529                    rt9455_ichrg_values,
0530                    ARRAY_SIZE(rt9455_ichrg_values),
0531                    &curr);
0532     if (ret) {
0533         dev_err(&info->client->dev, "Failed to read ICHRG value\n");
0534         return ret;
0535     }
0536 
0537     val->intval = curr;
0538 
0539     return 0;
0540 }
0541 
0542 static int rt9455_charger_get_current_max(struct rt9455_info *info,
0543                       union power_supply_propval *val)
0544 {
0545     int idx = ARRAY_SIZE(rt9455_ichrg_values) - 1;
0546 
0547     val->intval = rt9455_ichrg_values[idx];
0548 
0549     return 0;
0550 }
0551 
0552 static int rt9455_charger_get_voltage(struct rt9455_info *info,
0553                       union power_supply_propval *val)
0554 {
0555     int voltage;
0556     int ret;
0557 
0558     ret = rt9455_get_field_val(info, F_VOREG,
0559                    rt9455_voreg_values,
0560                    ARRAY_SIZE(rt9455_voreg_values),
0561                    &voltage);
0562     if (ret) {
0563         dev_err(&info->client->dev, "Failed to read VOREG value\n");
0564         return ret;
0565     }
0566 
0567     val->intval = voltage;
0568 
0569     return 0;
0570 }
0571 
0572 static int rt9455_charger_get_voltage_max(struct rt9455_info *info,
0573                       union power_supply_propval *val)
0574 {
0575     int idx = ARRAY_SIZE(rt9455_vmreg_values) - 1;
0576 
0577     val->intval = rt9455_vmreg_values[idx];
0578 
0579     return 0;
0580 }
0581 
0582 static int rt9455_charger_get_term_current(struct rt9455_info *info,
0583                        union power_supply_propval *val)
0584 {
0585     struct device *dev = &info->client->dev;
0586     int ichrg, ieoc_percentage, ret;
0587 
0588     ret = rt9455_get_field_val(info, F_ICHRG,
0589                    rt9455_ichrg_values,
0590                    ARRAY_SIZE(rt9455_ichrg_values),
0591                    &ichrg);
0592     if (ret) {
0593         dev_err(dev, "Failed to read ICHRG value\n");
0594         return ret;
0595     }
0596 
0597     ret = rt9455_get_field_val(info, F_IEOC_PERCENTAGE,
0598                    rt9455_ieoc_percentage_values,
0599                    ARRAY_SIZE(rt9455_ieoc_percentage_values),
0600                    &ieoc_percentage);
0601     if (ret) {
0602         dev_err(dev, "Failed to read IEOC value\n");
0603         return ret;
0604     }
0605 
0606     val->intval = ichrg * ieoc_percentage / 100;
0607 
0608     return 0;
0609 }
0610 
0611 static int rt9455_charger_get_property(struct power_supply *psy,
0612                        enum power_supply_property psp,
0613                        union power_supply_propval *val)
0614 {
0615     struct rt9455_info *info = power_supply_get_drvdata(psy);
0616 
0617     switch (psp) {
0618     case POWER_SUPPLY_PROP_STATUS:
0619         return rt9455_charger_get_status(info, val);
0620     case POWER_SUPPLY_PROP_HEALTH:
0621         return rt9455_charger_get_health(info, val);
0622     case POWER_SUPPLY_PROP_PRESENT:
0623         return rt9455_charger_get_battery_presence(info, val);
0624     case POWER_SUPPLY_PROP_ONLINE:
0625         return rt9455_charger_get_online(info, val);
0626     case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT:
0627         return rt9455_charger_get_current(info, val);
0628     case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
0629         return rt9455_charger_get_current_max(info, val);
0630     case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE:
0631         return rt9455_charger_get_voltage(info, val);
0632     case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX:
0633         return rt9455_charger_get_voltage_max(info, val);
0634     case POWER_SUPPLY_PROP_SCOPE:
0635         val->intval = POWER_SUPPLY_SCOPE_SYSTEM;
0636         return 0;
0637     case POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT:
0638         return rt9455_charger_get_term_current(info, val);
0639     case POWER_SUPPLY_PROP_MODEL_NAME:
0640         val->strval = RT9455_MODEL_NAME;
0641         return 0;
0642     case POWER_SUPPLY_PROP_MANUFACTURER:
0643         val->strval = RT9455_MANUFACTURER;
0644         return 0;
0645     default:
0646         return -ENODATA;
0647     }
0648 }
0649 
0650 static int rt9455_hw_init(struct rt9455_info *info, u32 ichrg,
0651               u32 ieoc_percentage,
0652               u32 mivr, u32 iaicr)
0653 {
0654     struct device *dev = &info->client->dev;
0655     int idx, ret;
0656 
0657     ret = rt9455_register_reset(info);
0658     if (ret) {
0659         dev_err(dev, "Power On Reset failed\n");
0660         return ret;
0661     }
0662 
0663     /* Set TE bit in order to enable end of charge detection */
0664     ret = regmap_field_write(info->regmap_fields[F_TE], 1);
0665     if (ret) {
0666         dev_err(dev, "Failed to set TE bit\n");
0667         return ret;
0668     }
0669 
0670     /* Set TE_SHDN_EN bit in order to enable end of charge detection */
0671     ret = regmap_field_write(info->regmap_fields[F_TE_SHDN_EN], 1);
0672     if (ret) {
0673         dev_err(dev, "Failed to set TE_SHDN_EN bit\n");
0674         return ret;
0675     }
0676 
0677     /*
0678      * Set BATD_EN bit in order to enable battery detection
0679      * when charging is done
0680      */
0681     ret = regmap_field_write(info->regmap_fields[F_BATD_EN], 1);
0682     if (ret) {
0683         dev_err(dev, "Failed to set BATD_EN bit\n");
0684         return ret;
0685     }
0686 
0687     /*
0688      * Disable Safety Timer. In charge mode, this timer terminates charging
0689      * if no read or write via I2C is done within 32 minutes. This timer
0690      * avoids overcharging the baterry when the OS is not loaded and the
0691      * charger is connected to a power source.
0692      * In boost mode, this timer triggers BST32SI interrupt if no read or
0693      * write via I2C is done within 32 seconds.
0694      * When the OS is loaded and the charger driver is inserted, it is used
0695      * delayed_work, named max_charging_time_work, to avoid overcharging
0696      * the battery.
0697      */
0698     ret = regmap_field_write(info->regmap_fields[F_TMR_EN], 0x00);
0699     if (ret) {
0700         dev_err(dev, "Failed to disable Safety Timer\n");
0701         return ret;
0702     }
0703 
0704     /* Set ICHRG to value retrieved from device-specific data */
0705     ret = rt9455_set_field_val(info, F_ICHRG,
0706                    rt9455_ichrg_values,
0707                    ARRAY_SIZE(rt9455_ichrg_values), ichrg);
0708     if (ret) {
0709         dev_err(dev, "Failed to set ICHRG value\n");
0710         return ret;
0711     }
0712 
0713     /* Set IEOC Percentage to value retrieved from device-specific data */
0714     ret = rt9455_set_field_val(info, F_IEOC_PERCENTAGE,
0715                    rt9455_ieoc_percentage_values,
0716                    ARRAY_SIZE(rt9455_ieoc_percentage_values),
0717                    ieoc_percentage);
0718     if (ret) {
0719         dev_err(dev, "Failed to set IEOC Percentage value\n");
0720         return ret;
0721     }
0722 
0723     /* Set VOREG to value retrieved from device-specific data */
0724     ret = rt9455_set_field_val(info, F_VOREG,
0725                    rt9455_voreg_values,
0726                    ARRAY_SIZE(rt9455_voreg_values),
0727                    info->voreg);
0728     if (ret) {
0729         dev_err(dev, "Failed to set VOREG value\n");
0730         return ret;
0731     }
0732 
0733     /* Set VMREG value to maximum (4.45V). */
0734     idx = ARRAY_SIZE(rt9455_vmreg_values) - 1;
0735     ret = rt9455_set_field_val(info, F_VMREG,
0736                    rt9455_vmreg_values,
0737                    ARRAY_SIZE(rt9455_vmreg_values),
0738                    rt9455_vmreg_values[idx]);
0739     if (ret) {
0740         dev_err(dev, "Failed to set VMREG value\n");
0741         return ret;
0742     }
0743 
0744     /*
0745      * Set MIVR to value retrieved from device-specific data.
0746      * If no value is specified, default value for MIVR is 4.5V.
0747      */
0748     if (mivr == -1)
0749         mivr = 4500000;
0750 
0751     ret = rt9455_set_field_val(info, F_MIVR,
0752                    rt9455_mivr_values,
0753                    ARRAY_SIZE(rt9455_mivr_values), mivr);
0754     if (ret) {
0755         dev_err(dev, "Failed to set MIVR value\n");
0756         return ret;
0757     }
0758 
0759     /*
0760      * Set IAICR to value retrieved from device-specific data.
0761      * If no value is specified, default value for IAICR is 500 mA.
0762      */
0763     if (iaicr == -1)
0764         iaicr = 500000;
0765 
0766     ret = rt9455_set_field_val(info, F_IAICR,
0767                    rt9455_iaicr_values,
0768                    ARRAY_SIZE(rt9455_iaicr_values), iaicr);
0769     if (ret) {
0770         dev_err(dev, "Failed to set IAICR value\n");
0771         return ret;
0772     }
0773 
0774     /*
0775      * Set IAICR_INT bit so that IAICR value is determined by IAICR bits
0776      * and not by OTG pin.
0777      */
0778     ret = regmap_field_write(info->regmap_fields[F_IAICR_INT], 0x01);
0779     if (ret) {
0780         dev_err(dev, "Failed to set IAICR_INT bit\n");
0781         return ret;
0782     }
0783 
0784     /*
0785      * Disable CHMIVRI interrupt. Because the driver sets MIVR value,
0786      * CHMIVRI is triggered, but there is no action to be taken by the
0787      * driver when CHMIVRI is triggered.
0788      */
0789     ret = regmap_field_write(info->regmap_fields[F_CHMIVRIM], 0x01);
0790     if (ret) {
0791         dev_err(dev, "Failed to mask CHMIVRI interrupt\n");
0792         return ret;
0793     }
0794 
0795     return 0;
0796 }
0797 
0798 #if IS_ENABLED(CONFIG_USB_PHY)
0799 /*
0800  * Before setting the charger into boost mode, boost output voltage is
0801  * set. This is needed because boost output voltage may differ from battery
0802  * regulation voltage. F_VOREG bits represent either battery regulation voltage
0803  * or boost output voltage, depending on the mode the charger is. Both battery
0804  * regulation voltage and boost output voltage are read from DT/ACPI during
0805  * probe.
0806  */
0807 static int rt9455_set_boost_voltage_before_boost_mode(struct rt9455_info *info)
0808 {
0809     struct device *dev = &info->client->dev;
0810     int ret;
0811 
0812     ret = rt9455_set_field_val(info, F_VOREG,
0813                    rt9455_boost_voltage_values,
0814                    ARRAY_SIZE(rt9455_boost_voltage_values),
0815                    info->boost_voltage);
0816     if (ret) {
0817         dev_err(dev, "Failed to set boost output voltage value\n");
0818         return ret;
0819     }
0820 
0821     return 0;
0822 }
0823 #endif
0824 
0825 /*
0826  * Before setting the charger into charge mode, battery regulation voltage is
0827  * set. This is needed because boost output voltage may differ from battery
0828  * regulation voltage. F_VOREG bits represent either battery regulation voltage
0829  * or boost output voltage, depending on the mode the charger is. Both battery
0830  * regulation voltage and boost output voltage are read from DT/ACPI during
0831  * probe.
0832  */
0833 static int rt9455_set_voreg_before_charge_mode(struct rt9455_info *info)
0834 {
0835     struct device *dev = &info->client->dev;
0836     int ret;
0837 
0838     ret = rt9455_set_field_val(info, F_VOREG,
0839                    rt9455_voreg_values,
0840                    ARRAY_SIZE(rt9455_voreg_values),
0841                    info->voreg);
0842     if (ret) {
0843         dev_err(dev, "Failed to set VOREG value\n");
0844         return ret;
0845     }
0846 
0847     return 0;
0848 }
0849 
0850 static int rt9455_irq_handler_check_irq1_register(struct rt9455_info *info,
0851                           bool *_is_battery_absent,
0852                           bool *_alert_userspace)
0853 {
0854     unsigned int irq1, mask1, mask2;
0855     struct device *dev = &info->client->dev;
0856     bool is_battery_absent = false;
0857     bool alert_userspace = false;
0858     int ret;
0859 
0860     ret = regmap_read(info->regmap, RT9455_REG_IRQ1, &irq1);
0861     if (ret) {
0862         dev_err(dev, "Failed to read IRQ1 register\n");
0863         return ret;
0864     }
0865 
0866     ret = regmap_read(info->regmap, RT9455_REG_MASK1, &mask1);
0867     if (ret) {
0868         dev_err(dev, "Failed to read MASK1 register\n");
0869         return ret;
0870     }
0871 
0872     if (irq1 & GET_MASK(F_TSDI)) {
0873         dev_err(dev, "Thermal shutdown fault occurred\n");
0874         alert_userspace = true;
0875     }
0876 
0877     if (irq1 & GET_MASK(F_VINOVPI)) {
0878         dev_err(dev, "Overvoltage input occurred\n");
0879         alert_userspace = true;
0880     }
0881 
0882     if (irq1 & GET_MASK(F_BATAB)) {
0883         dev_err(dev, "Battery absence occurred\n");
0884         is_battery_absent = true;
0885         alert_userspace = true;
0886 
0887         if ((mask1 & GET_MASK(F_BATABM)) == 0) {
0888             ret = regmap_field_write(info->regmap_fields[F_BATABM],
0889                          0x01);
0890             if (ret) {
0891                 dev_err(dev, "Failed to mask BATAB interrupt\n");
0892                 return ret;
0893             }
0894         }
0895 
0896         ret = regmap_read(info->regmap, RT9455_REG_MASK2, &mask2);
0897         if (ret) {
0898             dev_err(dev, "Failed to read MASK2 register\n");
0899             return ret;
0900         }
0901 
0902         if (mask2 & GET_MASK(F_CHTERMIM)) {
0903             ret = regmap_field_write(
0904                 info->regmap_fields[F_CHTERMIM], 0x00);
0905             if (ret) {
0906                 dev_err(dev, "Failed to unmask CHTERMI interrupt\n");
0907                 return ret;
0908             }
0909         }
0910 
0911         if (mask2 & GET_MASK(F_CHRCHGIM)) {
0912             ret = regmap_field_write(
0913                 info->regmap_fields[F_CHRCHGIM], 0x00);
0914             if (ret) {
0915                 dev_err(dev, "Failed to unmask CHRCHGI interrupt\n");
0916                 return ret;
0917             }
0918         }
0919 
0920         /*
0921          * When the battery is absent, max_charging_time_work is
0922          * cancelled, since no charging is done.
0923          */
0924         cancel_delayed_work_sync(&info->max_charging_time_work);
0925         /*
0926          * Since no interrupt is triggered when the battery is
0927          * reconnected, max_charging_time_work is not rescheduled.
0928          * Therefore, batt_presence_work is scheduled to check whether
0929          * the battery is still absent or not.
0930          */
0931         queue_delayed_work(system_power_efficient_wq,
0932                    &info->batt_presence_work,
0933                    RT9455_BATT_PRESENCE_DELAY * HZ);
0934     }
0935 
0936     *_is_battery_absent = is_battery_absent;
0937 
0938     if (alert_userspace)
0939         *_alert_userspace = alert_userspace;
0940 
0941     return 0;
0942 }
0943 
0944 static int rt9455_irq_handler_check_irq2_register(struct rt9455_info *info,
0945                           bool is_battery_absent,
0946                           bool *_alert_userspace)
0947 {
0948     unsigned int irq2, mask2;
0949     struct device *dev = &info->client->dev;
0950     bool alert_userspace = false;
0951     int ret;
0952 
0953     ret = regmap_read(info->regmap, RT9455_REG_IRQ2, &irq2);
0954     if (ret) {
0955         dev_err(dev, "Failed to read IRQ2 register\n");
0956         return ret;
0957     }
0958 
0959     ret = regmap_read(info->regmap, RT9455_REG_MASK2, &mask2);
0960     if (ret) {
0961         dev_err(dev, "Failed to read MASK2 register\n");
0962         return ret;
0963     }
0964 
0965     if (irq2 & GET_MASK(F_CHRVPI)) {
0966         dev_dbg(dev, "Charger fault occurred\n");
0967         /*
0968          * CHRVPI bit is set in 2 cases:
0969          * 1. when the power source is connected to the charger.
0970          * 2. when the power source is disconnected from the charger.
0971          * To identify the case, PWR_RDY bit is checked. Because
0972          * PWR_RDY bit is set / cleared after CHRVPI interrupt is
0973          * triggered, it is used delayed_work to later read PWR_RDY bit.
0974          * Also, do not set to true alert_userspace, because there is no
0975          * need to notify userspace when CHRVPI interrupt has occurred.
0976          * Userspace will be notified after PWR_RDY bit is read.
0977          */
0978         queue_delayed_work(system_power_efficient_wq,
0979                    &info->pwr_rdy_work,
0980                    RT9455_PWR_RDY_DELAY * HZ);
0981     }
0982     if (irq2 & GET_MASK(F_CHBATOVI)) {
0983         dev_err(dev, "Battery OVP occurred\n");
0984         alert_userspace = true;
0985     }
0986     if (irq2 & GET_MASK(F_CHTERMI)) {
0987         dev_dbg(dev, "Charge terminated\n");
0988         if (!is_battery_absent) {
0989             if ((mask2 & GET_MASK(F_CHTERMIM)) == 0) {
0990                 ret = regmap_field_write(
0991                     info->regmap_fields[F_CHTERMIM], 0x01);
0992                 if (ret) {
0993                     dev_err(dev, "Failed to mask CHTERMI interrupt\n");
0994                     return ret;
0995                 }
0996                 /*
0997                  * Update MASK2 value, since CHTERMIM bit is
0998                  * set.
0999                  */
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 0;
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 #ifdef CONFIG_ACPI
1735 static const struct acpi_device_id rt9455_i2c_acpi_match[] = {
1736     { "RT945500", 0 },
1737     { }
1738 };
1739 MODULE_DEVICE_TABLE(acpi, rt9455_i2c_acpi_match);
1740 #endif
1741 
1742 static struct i2c_driver rt9455_driver = {
1743     .probe      = rt9455_probe,
1744     .remove     = rt9455_remove,
1745     .id_table   = rt9455_i2c_id_table,
1746     .driver = {
1747         .name       = RT9455_DRIVER_NAME,
1748         .of_match_table = of_match_ptr(rt9455_of_match),
1749         .acpi_match_table = ACPI_PTR(rt9455_i2c_acpi_match),
1750     },
1751 };
1752 module_i2c_driver(rt9455_driver);
1753 
1754 MODULE_LICENSE("GPL");
1755 MODULE_AUTHOR("Anda-Maria Nicolae <anda-maria.nicolae@intel.com>");
1756 MODULE_DESCRIPTION("Richtek RT9455 Charger Driver");