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