Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * TI BQ25890 charger driver
4 *
5 * Copyright (C) 2015 Intel Corporation
6 */
7
8#include <linux/module.h>
9#include <linux/i2c.h>
10#include <linux/power_supply.h>
11#include <linux/power/bq25890_charger.h>
12#include <linux/regmap.h>
13#include <linux/regulator/driver.h>
14#include <linux/types.h>
15#include <linux/gpio/consumer.h>
16#include <linux/interrupt.h>
17#include <linux/delay.h>
18#include <linux/usb/phy.h>
19
20#include <linux/acpi.h>
21#include <linux/of.h>
22
23#define BQ25890_MANUFACTURER "Texas Instruments"
24#define BQ25890_IRQ_PIN "bq25890_irq"
25
26#define BQ25890_ID 3
27#define BQ25895_ID 7
28#define BQ25896_ID 0
29
30#define PUMP_EXPRESS_START_DELAY (5 * HZ)
31#define PUMP_EXPRESS_MAX_TRIES 6
32#define PUMP_EXPRESS_VBUS_MARGIN_uV 1000000
33
34enum bq25890_chip_version {
35 BQ25890,
36 BQ25892,
37 BQ25895,
38 BQ25896,
39};
40
41static const char *const bq25890_chip_name[] = {
42 "BQ25890",
43 "BQ25892",
44 "BQ25895",
45 "BQ25896",
46};
47
48enum bq25890_fields {
49 F_EN_HIZ, F_EN_ILIM, F_IINLIM, /* Reg00 */
50 F_BHOT, F_BCOLD, F_VINDPM_OFS, /* Reg01 */
51 F_CONV_START, F_CONV_RATE, F_BOOSTF, F_ICO_EN,
52 F_HVDCP_EN, F_MAXC_EN, F_FORCE_DPM, F_AUTO_DPDM_EN, /* Reg02 */
53 F_BAT_LOAD_EN, F_WD_RST, F_OTG_CFG, F_CHG_CFG, F_SYSVMIN,
54 F_MIN_VBAT_SEL, /* Reg03 */
55 F_PUMPX_EN, F_ICHG, /* Reg04 */
56 F_IPRECHG, F_ITERM, /* Reg05 */
57 F_VREG, F_BATLOWV, F_VRECHG, /* Reg06 */
58 F_TERM_EN, F_STAT_DIS, F_WD, F_TMR_EN, F_CHG_TMR,
59 F_JEITA_ISET, /* Reg07 */
60 F_BATCMP, F_VCLAMP, F_TREG, /* Reg08 */
61 F_FORCE_ICO, F_TMR2X_EN, F_BATFET_DIS, F_JEITA_VSET,
62 F_BATFET_DLY, F_BATFET_RST_EN, F_PUMPX_UP, F_PUMPX_DN, /* Reg09 */
63 F_BOOSTV, F_PFM_OTG_DIS, F_BOOSTI, /* Reg0A */
64 F_VBUS_STAT, F_CHG_STAT, F_PG_STAT, F_SDP_STAT, F_0B_RSVD,
65 F_VSYS_STAT, /* Reg0B */
66 F_WD_FAULT, F_BOOST_FAULT, F_CHG_FAULT, F_BAT_FAULT,
67 F_NTC_FAULT, /* Reg0C */
68 F_FORCE_VINDPM, F_VINDPM, /* Reg0D */
69 F_THERM_STAT, F_BATV, /* Reg0E */
70 F_SYSV, /* Reg0F */
71 F_TSPCT, /* Reg10 */
72 F_VBUS_GD, F_VBUSV, /* Reg11 */
73 F_ICHGR, /* Reg12 */
74 F_VDPM_STAT, F_IDPM_STAT, F_IDPM_LIM, /* Reg13 */
75 F_REG_RST, F_ICO_OPTIMIZED, F_PN, F_TS_PROFILE, F_DEV_REV, /* Reg14 */
76
77 F_MAX_FIELDS
78};
79
80/* initial field values, converted to register values */
81struct bq25890_init_data {
82 u8 ichg; /* charge current */
83 u8 vreg; /* regulation voltage */
84 u8 iterm; /* termination current */
85 u8 iprechg; /* precharge current */
86 u8 sysvmin; /* minimum system voltage limit */
87 u8 boostv; /* boost regulation voltage */
88 u8 boosti; /* boost current limit */
89 u8 boostf; /* boost frequency */
90 u8 ilim_en; /* enable ILIM pin */
91 u8 treg; /* thermal regulation threshold */
92 u8 rbatcomp; /* IBAT sense resistor value */
93 u8 vclamp; /* IBAT compensation voltage limit */
94};
95
96struct bq25890_state {
97 u8 online;
98 u8 chrg_status;
99 u8 chrg_fault;
100 u8 vsys_status;
101 u8 boost_fault;
102 u8 bat_fault;
103 u8 ntc_fault;
104};
105
106struct bq25890_device {
107 struct i2c_client *client;
108 struct device *dev;
109 struct power_supply *charger;
110
111 struct usb_phy *usb_phy;
112 struct notifier_block usb_nb;
113 struct work_struct usb_work;
114 struct delayed_work pump_express_work;
115 unsigned long usb_event;
116
117 struct regmap *rmap;
118 struct regmap_field *rmap_fields[F_MAX_FIELDS];
119
120 bool skip_reset;
121 bool read_back_init_data;
122 u32 pump_express_vbus_max;
123 enum bq25890_chip_version chip_version;
124 struct bq25890_init_data init_data;
125 struct bq25890_state state;
126
127 struct mutex lock; /* protect state data */
128};
129
130static const struct regmap_range bq25890_readonly_reg_ranges[] = {
131 regmap_reg_range(0x0b, 0x0c),
132 regmap_reg_range(0x0e, 0x13),
133};
134
135static const struct regmap_access_table bq25890_writeable_regs = {
136 .no_ranges = bq25890_readonly_reg_ranges,
137 .n_no_ranges = ARRAY_SIZE(bq25890_readonly_reg_ranges),
138};
139
140static const struct regmap_range bq25890_volatile_reg_ranges[] = {
141 regmap_reg_range(0x00, 0x00),
142 regmap_reg_range(0x02, 0x02),
143 regmap_reg_range(0x09, 0x09),
144 regmap_reg_range(0x0b, 0x14),
145};
146
147static const struct regmap_access_table bq25890_volatile_regs = {
148 .yes_ranges = bq25890_volatile_reg_ranges,
149 .n_yes_ranges = ARRAY_SIZE(bq25890_volatile_reg_ranges),
150};
151
152static const struct regmap_config bq25890_regmap_config = {
153 .reg_bits = 8,
154 .val_bits = 8,
155
156 .max_register = 0x14,
157 .cache_type = REGCACHE_RBTREE,
158
159 .wr_table = &bq25890_writeable_regs,
160 .volatile_table = &bq25890_volatile_regs,
161};
162
163static const struct reg_field bq25890_reg_fields[] = {
164 /* REG00 */
165 [F_EN_HIZ] = REG_FIELD(0x00, 7, 7),
166 [F_EN_ILIM] = REG_FIELD(0x00, 6, 6),
167 [F_IINLIM] = REG_FIELD(0x00, 0, 5),
168 /* REG01 */
169 [F_BHOT] = REG_FIELD(0x01, 6, 7),
170 [F_BCOLD] = REG_FIELD(0x01, 5, 5),
171 [F_VINDPM_OFS] = REG_FIELD(0x01, 0, 4),
172 /* REG02 */
173 [F_CONV_START] = REG_FIELD(0x02, 7, 7),
174 [F_CONV_RATE] = REG_FIELD(0x02, 6, 6),
175 [F_BOOSTF] = REG_FIELD(0x02, 5, 5),
176 [F_ICO_EN] = REG_FIELD(0x02, 4, 4),
177 [F_HVDCP_EN] = REG_FIELD(0x02, 3, 3), // reserved on BQ25896
178 [F_MAXC_EN] = REG_FIELD(0x02, 2, 2), // reserved on BQ25896
179 [F_FORCE_DPM] = REG_FIELD(0x02, 1, 1),
180 [F_AUTO_DPDM_EN] = REG_FIELD(0x02, 0, 0),
181 /* REG03 */
182 [F_BAT_LOAD_EN] = REG_FIELD(0x03, 7, 7),
183 [F_WD_RST] = REG_FIELD(0x03, 6, 6),
184 [F_OTG_CFG] = REG_FIELD(0x03, 5, 5),
185 [F_CHG_CFG] = REG_FIELD(0x03, 4, 4),
186 [F_SYSVMIN] = REG_FIELD(0x03, 1, 3),
187 [F_MIN_VBAT_SEL] = REG_FIELD(0x03, 0, 0), // BQ25896 only
188 /* REG04 */
189 [F_PUMPX_EN] = REG_FIELD(0x04, 7, 7),
190 [F_ICHG] = REG_FIELD(0x04, 0, 6),
191 /* REG05 */
192 [F_IPRECHG] = REG_FIELD(0x05, 4, 7),
193 [F_ITERM] = REG_FIELD(0x05, 0, 3),
194 /* REG06 */
195 [F_VREG] = REG_FIELD(0x06, 2, 7),
196 [F_BATLOWV] = REG_FIELD(0x06, 1, 1),
197 [F_VRECHG] = REG_FIELD(0x06, 0, 0),
198 /* REG07 */
199 [F_TERM_EN] = REG_FIELD(0x07, 7, 7),
200 [F_STAT_DIS] = REG_FIELD(0x07, 6, 6),
201 [F_WD] = REG_FIELD(0x07, 4, 5),
202 [F_TMR_EN] = REG_FIELD(0x07, 3, 3),
203 [F_CHG_TMR] = REG_FIELD(0x07, 1, 2),
204 [F_JEITA_ISET] = REG_FIELD(0x07, 0, 0), // reserved on BQ25895
205 /* REG08 */
206 [F_BATCMP] = REG_FIELD(0x08, 5, 7),
207 [F_VCLAMP] = REG_FIELD(0x08, 2, 4),
208 [F_TREG] = REG_FIELD(0x08, 0, 1),
209 /* REG09 */
210 [F_FORCE_ICO] = REG_FIELD(0x09, 7, 7),
211 [F_TMR2X_EN] = REG_FIELD(0x09, 6, 6),
212 [F_BATFET_DIS] = REG_FIELD(0x09, 5, 5),
213 [F_JEITA_VSET] = REG_FIELD(0x09, 4, 4), // reserved on BQ25895
214 [F_BATFET_DLY] = REG_FIELD(0x09, 3, 3),
215 [F_BATFET_RST_EN] = REG_FIELD(0x09, 2, 2),
216 [F_PUMPX_UP] = REG_FIELD(0x09, 1, 1),
217 [F_PUMPX_DN] = REG_FIELD(0x09, 0, 0),
218 /* REG0A */
219 [F_BOOSTV] = REG_FIELD(0x0A, 4, 7),
220 [F_BOOSTI] = REG_FIELD(0x0A, 0, 2), // reserved on BQ25895
221 [F_PFM_OTG_DIS] = REG_FIELD(0x0A, 3, 3), // BQ25896 only
222 /* REG0B */
223 [F_VBUS_STAT] = REG_FIELD(0x0B, 5, 7),
224 [F_CHG_STAT] = REG_FIELD(0x0B, 3, 4),
225 [F_PG_STAT] = REG_FIELD(0x0B, 2, 2),
226 [F_SDP_STAT] = REG_FIELD(0x0B, 1, 1), // reserved on BQ25896
227 [F_VSYS_STAT] = REG_FIELD(0x0B, 0, 0),
228 /* REG0C */
229 [F_WD_FAULT] = REG_FIELD(0x0C, 7, 7),
230 [F_BOOST_FAULT] = REG_FIELD(0x0C, 6, 6),
231 [F_CHG_FAULT] = REG_FIELD(0x0C, 4, 5),
232 [F_BAT_FAULT] = REG_FIELD(0x0C, 3, 3),
233 [F_NTC_FAULT] = REG_FIELD(0x0C, 0, 2),
234 /* REG0D */
235 [F_FORCE_VINDPM] = REG_FIELD(0x0D, 7, 7),
236 [F_VINDPM] = REG_FIELD(0x0D, 0, 6),
237 /* REG0E */
238 [F_THERM_STAT] = REG_FIELD(0x0E, 7, 7),
239 [F_BATV] = REG_FIELD(0x0E, 0, 6),
240 /* REG0F */
241 [F_SYSV] = REG_FIELD(0x0F, 0, 6),
242 /* REG10 */
243 [F_TSPCT] = REG_FIELD(0x10, 0, 6),
244 /* REG11 */
245 [F_VBUS_GD] = REG_FIELD(0x11, 7, 7),
246 [F_VBUSV] = REG_FIELD(0x11, 0, 6),
247 /* REG12 */
248 [F_ICHGR] = REG_FIELD(0x12, 0, 6),
249 /* REG13 */
250 [F_VDPM_STAT] = REG_FIELD(0x13, 7, 7),
251 [F_IDPM_STAT] = REG_FIELD(0x13, 6, 6),
252 [F_IDPM_LIM] = REG_FIELD(0x13, 0, 5),
253 /* REG14 */
254 [F_REG_RST] = REG_FIELD(0x14, 7, 7),
255 [F_ICO_OPTIMIZED] = REG_FIELD(0x14, 6, 6),
256 [F_PN] = REG_FIELD(0x14, 3, 5),
257 [F_TS_PROFILE] = REG_FIELD(0x14, 2, 2),
258 [F_DEV_REV] = REG_FIELD(0x14, 0, 1)
259};
260
261/*
262 * Most of the val -> idx conversions can be computed, given the minimum,
263 * maximum and the step between values. For the rest of conversions, we use
264 * lookup tables.
265 */
266enum bq25890_table_ids {
267 /* range tables */
268 TBL_ICHG,
269 TBL_ITERM,
270 TBL_IINLIM,
271 TBL_VREG,
272 TBL_BOOSTV,
273 TBL_SYSVMIN,
274 TBL_VBUSV,
275 TBL_VBATCOMP,
276 TBL_RBATCOMP,
277
278 /* lookup tables */
279 TBL_TREG,
280 TBL_BOOSTI,
281 TBL_TSPCT,
282};
283
284/* Thermal Regulation Threshold lookup table, in degrees Celsius */
285static const u32 bq25890_treg_tbl[] = { 60, 80, 100, 120 };
286
287#define BQ25890_TREG_TBL_SIZE ARRAY_SIZE(bq25890_treg_tbl)
288
289/* Boost mode current limit lookup table, in uA */
290static const u32 bq25890_boosti_tbl[] = {
291 500000, 700000, 1100000, 1300000, 1600000, 1800000, 2100000, 2400000
292};
293
294#define BQ25890_BOOSTI_TBL_SIZE ARRAY_SIZE(bq25890_boosti_tbl)
295
296/* NTC 10K temperature lookup table in tenths of a degree */
297static const u32 bq25890_tspct_tbl[] = {
298 850, 840, 830, 820, 810, 800, 790, 780,
299 770, 760, 750, 740, 730, 720, 710, 700,
300 690, 685, 680, 675, 670, 660, 650, 645,
301 640, 630, 620, 615, 610, 600, 590, 585,
302 580, 570, 565, 560, 550, 540, 535, 530,
303 520, 515, 510, 500, 495, 490, 480, 475,
304 470, 460, 455, 450, 440, 435, 430, 425,
305 420, 410, 405, 400, 390, 385, 380, 370,
306 365, 360, 355, 350, 340, 335, 330, 320,
307 310, 305, 300, 290, 285, 280, 275, 270,
308 260, 250, 245, 240, 230, 225, 220, 210,
309 205, 200, 190, 180, 175, 170, 160, 150,
310 145, 140, 130, 120, 115, 110, 100, 90,
311 80, 70, 60, 50, 40, 30, 20, 10,
312 0, -10, -20, -30, -40, -60, -70, -80,
313 -90, -10, -120, -140, -150, -170, -190, -210,
314};
315
316#define BQ25890_TSPCT_TBL_SIZE ARRAY_SIZE(bq25890_tspct_tbl)
317
318struct bq25890_range {
319 u32 min;
320 u32 max;
321 u32 step;
322};
323
324struct bq25890_lookup {
325 const u32 *tbl;
326 u32 size;
327};
328
329static const union {
330 struct bq25890_range rt;
331 struct bq25890_lookup lt;
332} bq25890_tables[] = {
333 /* range tables */
334 /* TODO: BQ25896 has max ICHG 3008 mA */
335 [TBL_ICHG] = { .rt = {0, 5056000, 64000} }, /* uA */
336 [TBL_ITERM] = { .rt = {64000, 1024000, 64000} }, /* uA */
337 [TBL_IINLIM] = { .rt = {100000, 3250000, 50000} }, /* uA */
338 [TBL_VREG] = { .rt = {3840000, 4608000, 16000} }, /* uV */
339 [TBL_BOOSTV] = { .rt = {4550000, 5510000, 64000} }, /* uV */
340 [TBL_SYSVMIN] = { .rt = {3000000, 3700000, 100000} }, /* uV */
341 [TBL_VBUSV] = { .rt = {2600000, 15300000, 100000} }, /* uV */
342 [TBL_VBATCOMP] = { .rt = {0, 224000, 32000} }, /* uV */
343 [TBL_RBATCOMP] = { .rt = {0, 140000, 20000} }, /* uOhm */
344
345 /* lookup tables */
346 [TBL_TREG] = { .lt = {bq25890_treg_tbl, BQ25890_TREG_TBL_SIZE} },
347 [TBL_BOOSTI] = { .lt = {bq25890_boosti_tbl, BQ25890_BOOSTI_TBL_SIZE} },
348 [TBL_TSPCT] = { .lt = {bq25890_tspct_tbl, BQ25890_TSPCT_TBL_SIZE} }
349};
350
351static int bq25890_field_read(struct bq25890_device *bq,
352 enum bq25890_fields field_id)
353{
354 int ret;
355 int val;
356
357 ret = regmap_field_read(bq->rmap_fields[field_id], &val);
358 if (ret < 0)
359 return ret;
360
361 return val;
362}
363
364static int bq25890_field_write(struct bq25890_device *bq,
365 enum bq25890_fields field_id, u8 val)
366{
367 return regmap_field_write(bq->rmap_fields[field_id], val);
368}
369
370static u8 bq25890_find_idx(u32 value, enum bq25890_table_ids id)
371{
372 u8 idx;
373
374 if (id >= TBL_TREG) {
375 const u32 *tbl = bq25890_tables[id].lt.tbl;
376 u32 tbl_size = bq25890_tables[id].lt.size;
377
378 for (idx = 1; idx < tbl_size && tbl[idx] <= value; idx++)
379 ;
380 } else {
381 const struct bq25890_range *rtbl = &bq25890_tables[id].rt;
382 u8 rtbl_size;
383
384 rtbl_size = (rtbl->max - rtbl->min) / rtbl->step + 1;
385
386 for (idx = 1;
387 idx < rtbl_size && (idx * rtbl->step + rtbl->min <= value);
388 idx++)
389 ;
390 }
391
392 return idx - 1;
393}
394
395static u32 bq25890_find_val(u8 idx, enum bq25890_table_ids id)
396{
397 const struct bq25890_range *rtbl;
398
399 /* lookup table? */
400 if (id >= TBL_TREG)
401 return bq25890_tables[id].lt.tbl[idx];
402
403 /* range table */
404 rtbl = &bq25890_tables[id].rt;
405
406 return (rtbl->min + idx * rtbl->step);
407}
408
409enum bq25890_status {
410 STATUS_NOT_CHARGING,
411 STATUS_PRE_CHARGING,
412 STATUS_FAST_CHARGING,
413 STATUS_TERMINATION_DONE,
414};
415
416enum bq25890_chrg_fault {
417 CHRG_FAULT_NORMAL,
418 CHRG_FAULT_INPUT,
419 CHRG_FAULT_THERMAL_SHUTDOWN,
420 CHRG_FAULT_TIMER_EXPIRED,
421};
422
423enum bq25890_ntc_fault {
424 NTC_FAULT_NORMAL = 0,
425 NTC_FAULT_WARM = 2,
426 NTC_FAULT_COOL = 3,
427 NTC_FAULT_COLD = 5,
428 NTC_FAULT_HOT = 6,
429};
430
431static bool bq25890_is_adc_property(enum power_supply_property psp)
432{
433 switch (psp) {
434 case POWER_SUPPLY_PROP_VOLTAGE_NOW:
435 case POWER_SUPPLY_PROP_CURRENT_NOW:
436 case POWER_SUPPLY_PROP_TEMP:
437 return true;
438
439 default:
440 return false;
441 }
442}
443
444static irqreturn_t __bq25890_handle_irq(struct bq25890_device *bq);
445
446static int bq25890_get_vbus_voltage(struct bq25890_device *bq)
447{
448 int ret;
449
450 ret = bq25890_field_read(bq, F_VBUSV);
451 if (ret < 0)
452 return ret;
453
454 return bq25890_find_val(ret, TBL_VBUSV);
455}
456
457static int bq25890_power_supply_get_property(struct power_supply *psy,
458 enum power_supply_property psp,
459 union power_supply_propval *val)
460{
461 struct bq25890_device *bq = power_supply_get_drvdata(psy);
462 struct bq25890_state state;
463 bool do_adc_conv;
464 int ret;
465
466 mutex_lock(&bq->lock);
467 /* update state in case we lost an interrupt */
468 __bq25890_handle_irq(bq);
469 state = bq->state;
470 do_adc_conv = !state.online && bq25890_is_adc_property(psp);
471 if (do_adc_conv)
472 bq25890_field_write(bq, F_CONV_START, 1);
473 mutex_unlock(&bq->lock);
474
475 if (do_adc_conv)
476 regmap_field_read_poll_timeout(bq->rmap_fields[F_CONV_START],
477 ret, !ret, 25000, 1000000);
478
479 switch (psp) {
480 case POWER_SUPPLY_PROP_STATUS:
481 if (!state.online)
482 val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
483 else if (state.chrg_status == STATUS_NOT_CHARGING)
484 val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
485 else if (state.chrg_status == STATUS_PRE_CHARGING ||
486 state.chrg_status == STATUS_FAST_CHARGING)
487 val->intval = POWER_SUPPLY_STATUS_CHARGING;
488 else if (state.chrg_status == STATUS_TERMINATION_DONE)
489 val->intval = POWER_SUPPLY_STATUS_FULL;
490 else
491 val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
492
493 break;
494
495 case POWER_SUPPLY_PROP_CHARGE_TYPE:
496 if (!state.online || state.chrg_status == STATUS_NOT_CHARGING ||
497 state.chrg_status == STATUS_TERMINATION_DONE)
498 val->intval = POWER_SUPPLY_CHARGE_TYPE_NONE;
499 else if (state.chrg_status == STATUS_PRE_CHARGING)
500 val->intval = POWER_SUPPLY_CHARGE_TYPE_STANDARD;
501 else if (state.chrg_status == STATUS_FAST_CHARGING)
502 val->intval = POWER_SUPPLY_CHARGE_TYPE_FAST;
503 else /* unreachable */
504 val->intval = POWER_SUPPLY_CHARGE_TYPE_UNKNOWN;
505 break;
506
507 case POWER_SUPPLY_PROP_MANUFACTURER:
508 val->strval = BQ25890_MANUFACTURER;
509 break;
510
511 case POWER_SUPPLY_PROP_MODEL_NAME:
512 val->strval = bq25890_chip_name[bq->chip_version];
513 break;
514
515 case POWER_SUPPLY_PROP_ONLINE:
516 val->intval = state.online;
517 break;
518
519 case POWER_SUPPLY_PROP_HEALTH:
520 if (!state.chrg_fault && !state.bat_fault && !state.boost_fault)
521 val->intval = POWER_SUPPLY_HEALTH_GOOD;
522 else if (state.bat_fault)
523 val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
524 else if (state.chrg_fault == CHRG_FAULT_TIMER_EXPIRED)
525 val->intval = POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE;
526 else if (state.chrg_fault == CHRG_FAULT_THERMAL_SHUTDOWN)
527 val->intval = POWER_SUPPLY_HEALTH_OVERHEAT;
528 else
529 val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
530 break;
531
532 case POWER_SUPPLY_PROP_PRECHARGE_CURRENT:
533 val->intval = bq25890_find_val(bq->init_data.iprechg, TBL_ITERM);
534 break;
535
536 case POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT:
537 val->intval = bq25890_find_val(bq->init_data.iterm, TBL_ITERM);
538 break;
539
540 case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
541 ret = bq25890_field_read(bq, F_IINLIM);
542 if (ret < 0)
543 return ret;
544
545 val->intval = bq25890_find_val(ret, TBL_IINLIM);
546 break;
547
548 case POWER_SUPPLY_PROP_CURRENT_NOW: /* I_BAT now */
549 /*
550 * This is ADC-sampled immediate charge current supplied
551 * from charger to battery. The property name is confusing,
552 * for clarification refer to:
553 * Documentation/ABI/testing/sysfs-class-power
554 * /sys/class/power_supply/<supply_name>/current_now
555 */
556 ret = bq25890_field_read(bq, F_ICHGR); /* read measured value */
557 if (ret < 0)
558 return ret;
559
560 /* converted_val = ADC_val * 50mA (table 10.3.19) */
561 val->intval = ret * -50000;
562 break;
563
564 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT: /* I_BAT user limit */
565 /*
566 * This is user-configured constant charge current supplied
567 * from charger to battery in first phase of charging, when
568 * battery voltage is below constant charge voltage.
569 *
570 * This value reflects the current hardware setting.
571 *
572 * The POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX is the
573 * maximum value of this property.
574 */
575 ret = bq25890_field_read(bq, F_ICHG);
576 if (ret < 0)
577 return ret;
578 val->intval = bq25890_find_val(ret, TBL_ICHG);
579
580 /* When temperature is too low, charge current is decreased */
581 if (bq->state.ntc_fault == NTC_FAULT_COOL) {
582 ret = bq25890_field_read(bq, F_JEITA_ISET);
583 if (ret < 0)
584 return ret;
585
586 if (ret)
587 val->intval /= 5;
588 else
589 val->intval /= 2;
590 }
591 break;
592
593 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX: /* I_BAT max */
594 /*
595 * This is maximum allowed constant charge current supplied
596 * from charger to battery in first phase of charging, when
597 * battery voltage is below constant charge voltage.
598 *
599 * This value is constant for each battery and set from DT.
600 */
601 val->intval = bq25890_find_val(bq->init_data.ichg, TBL_ICHG);
602 break;
603
604 case POWER_SUPPLY_PROP_VOLTAGE_NOW: /* V_BAT now */
605 /*
606 * This is ADC-sampled immediate charge voltage supplied
607 * from charger to battery. The property name is confusing,
608 * for clarification refer to:
609 * Documentation/ABI/testing/sysfs-class-power
610 * /sys/class/power_supply/<supply_name>/voltage_now
611 */
612 ret = bq25890_field_read(bq, F_BATV); /* read measured value */
613 if (ret < 0)
614 return ret;
615
616 /* converted_val = 2.304V + ADC_val * 20mV (table 10.3.15) */
617 val->intval = 2304000 + ret * 20000;
618 break;
619
620 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE: /* V_BAT user limit */
621 /*
622 * This is user-configured constant charge voltage supplied
623 * from charger to battery in second phase of charging, when
624 * battery voltage reached constant charge voltage.
625 *
626 * This value reflects the current hardware setting.
627 *
628 * The POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX is the
629 * maximum value of this property.
630 */
631 ret = bq25890_field_read(bq, F_VREG);
632 if (ret < 0)
633 return ret;
634
635 val->intval = bq25890_find_val(ret, TBL_VREG);
636 break;
637
638 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX: /* V_BAT max */
639 /*
640 * This is maximum allowed constant charge voltage supplied
641 * from charger to battery in second phase of charging, when
642 * battery voltage reached constant charge voltage.
643 *
644 * This value is constant for each battery and set from DT.
645 */
646 val->intval = bq25890_find_val(bq->init_data.vreg, TBL_VREG);
647 break;
648
649 case POWER_SUPPLY_PROP_TEMP:
650 ret = bq25890_field_read(bq, F_TSPCT);
651 if (ret < 0)
652 return ret;
653
654 /* convert TS percentage into rough temperature */
655 val->intval = bq25890_find_val(ret, TBL_TSPCT);
656 break;
657
658 default:
659 return -EINVAL;
660 }
661
662 return 0;
663}
664
665static int bq25890_power_supply_set_property(struct power_supply *psy,
666 enum power_supply_property psp,
667 const union power_supply_propval *val)
668{
669 struct bq25890_device *bq = power_supply_get_drvdata(psy);
670 int maxval;
671 u8 lval;
672
673 switch (psp) {
674 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT:
675 maxval = bq25890_find_val(bq->init_data.ichg, TBL_ICHG);
676 lval = bq25890_find_idx(min(val->intval, maxval), TBL_ICHG);
677 return bq25890_field_write(bq, F_ICHG, lval);
678 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE:
679 maxval = bq25890_find_val(bq->init_data.vreg, TBL_VREG);
680 lval = bq25890_find_idx(min(val->intval, maxval), TBL_VREG);
681 return bq25890_field_write(bq, F_VREG, lval);
682 case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
683 lval = bq25890_find_idx(val->intval, TBL_IINLIM);
684 return bq25890_field_write(bq, F_IINLIM, lval);
685 default:
686 return -EINVAL;
687 }
688}
689
690static int bq25890_power_supply_property_is_writeable(struct power_supply *psy,
691 enum power_supply_property psp)
692{
693 switch (psp) {
694 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT:
695 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE:
696 case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
697 return true;
698 default:
699 return false;
700 }
701}
702
703/* On the BQ25892 try to get charger-type info from our supplier */
704static void bq25890_charger_external_power_changed(struct power_supply *psy)
705{
706 struct bq25890_device *bq = power_supply_get_drvdata(psy);
707 union power_supply_propval val;
708 int input_current_limit, ret;
709
710 if (bq->chip_version != BQ25892)
711 return;
712
713 ret = power_supply_get_property_from_supplier(bq->charger,
714 POWER_SUPPLY_PROP_USB_TYPE,
715 &val);
716 if (ret)
717 return;
718
719 switch (val.intval) {
720 case POWER_SUPPLY_USB_TYPE_DCP:
721 input_current_limit = bq25890_find_idx(2000000, TBL_IINLIM);
722 if (bq->pump_express_vbus_max) {
723 queue_delayed_work(system_power_efficient_wq,
724 &bq->pump_express_work,
725 PUMP_EXPRESS_START_DELAY);
726 }
727 break;
728 case POWER_SUPPLY_USB_TYPE_CDP:
729 case POWER_SUPPLY_USB_TYPE_ACA:
730 input_current_limit = bq25890_find_idx(1500000, TBL_IINLIM);
731 break;
732 case POWER_SUPPLY_USB_TYPE_SDP:
733 default:
734 input_current_limit = bq25890_find_idx(500000, TBL_IINLIM);
735 }
736
737 bq25890_field_write(bq, F_IINLIM, input_current_limit);
738}
739
740static int bq25890_get_chip_state(struct bq25890_device *bq,
741 struct bq25890_state *state)
742{
743 int i, ret;
744
745 struct {
746 enum bq25890_fields id;
747 u8 *data;
748 } state_fields[] = {
749 {F_CHG_STAT, &state->chrg_status},
750 {F_PG_STAT, &state->online},
751 {F_VSYS_STAT, &state->vsys_status},
752 {F_BOOST_FAULT, &state->boost_fault},
753 {F_BAT_FAULT, &state->bat_fault},
754 {F_CHG_FAULT, &state->chrg_fault},
755 {F_NTC_FAULT, &state->ntc_fault}
756 };
757
758 for (i = 0; i < ARRAY_SIZE(state_fields); i++) {
759 ret = bq25890_field_read(bq, state_fields[i].id);
760 if (ret < 0)
761 return ret;
762
763 *state_fields[i].data = ret;
764 }
765
766 dev_dbg(bq->dev, "S:CHG/PG/VSYS=%d/%d/%d, F:CHG/BOOST/BAT/NTC=%d/%d/%d/%d\n",
767 state->chrg_status, state->online, state->vsys_status,
768 state->chrg_fault, state->boost_fault, state->bat_fault,
769 state->ntc_fault);
770
771 return 0;
772}
773
774static irqreturn_t __bq25890_handle_irq(struct bq25890_device *bq)
775{
776 struct bq25890_state new_state;
777 int ret;
778
779 ret = bq25890_get_chip_state(bq, &new_state);
780 if (ret < 0)
781 return IRQ_NONE;
782
783 if (!memcmp(&bq->state, &new_state, sizeof(new_state)))
784 return IRQ_NONE;
785
786 if (!new_state.online && bq->state.online) { /* power removed */
787 /* disable ADC */
788 ret = bq25890_field_write(bq, F_CONV_RATE, 0);
789 if (ret < 0)
790 goto error;
791 } else if (new_state.online && !bq->state.online) { /* power inserted */
792 /* enable ADC, to have control of charge current/voltage */
793 ret = bq25890_field_write(bq, F_CONV_RATE, 1);
794 if (ret < 0)
795 goto error;
796 }
797
798 bq->state = new_state;
799 power_supply_changed(bq->charger);
800
801 return IRQ_HANDLED;
802error:
803 dev_err(bq->dev, "Error communicating with the chip: %pe\n",
804 ERR_PTR(ret));
805 return IRQ_HANDLED;
806}
807
808static irqreturn_t bq25890_irq_handler_thread(int irq, void *private)
809{
810 struct bq25890_device *bq = private;
811 irqreturn_t ret;
812
813 mutex_lock(&bq->lock);
814 ret = __bq25890_handle_irq(bq);
815 mutex_unlock(&bq->lock);
816
817 return ret;
818}
819
820static int bq25890_chip_reset(struct bq25890_device *bq)
821{
822 int ret;
823 int rst_check_counter = 10;
824
825 ret = bq25890_field_write(bq, F_REG_RST, 1);
826 if (ret < 0)
827 return ret;
828
829 do {
830 ret = bq25890_field_read(bq, F_REG_RST);
831 if (ret < 0)
832 return ret;
833
834 usleep_range(5, 10);
835 } while (ret == 1 && --rst_check_counter);
836
837 if (!rst_check_counter)
838 return -ETIMEDOUT;
839
840 return 0;
841}
842
843static int bq25890_rw_init_data(struct bq25890_device *bq)
844{
845 bool write = !bq->read_back_init_data;
846 int ret;
847 int i;
848
849 const struct {
850 enum bq25890_fields id;
851 u8 *value;
852 } init_data[] = {
853 {F_ICHG, &bq->init_data.ichg},
854 {F_VREG, &bq->init_data.vreg},
855 {F_ITERM, &bq->init_data.iterm},
856 {F_IPRECHG, &bq->init_data.iprechg},
857 {F_SYSVMIN, &bq->init_data.sysvmin},
858 {F_BOOSTV, &bq->init_data.boostv},
859 {F_BOOSTI, &bq->init_data.boosti},
860 {F_BOOSTF, &bq->init_data.boostf},
861 {F_EN_ILIM, &bq->init_data.ilim_en},
862 {F_TREG, &bq->init_data.treg},
863 {F_BATCMP, &bq->init_data.rbatcomp},
864 {F_VCLAMP, &bq->init_data.vclamp},
865 };
866
867 for (i = 0; i < ARRAY_SIZE(init_data); i++) {
868 if (write) {
869 ret = bq25890_field_write(bq, init_data[i].id,
870 *init_data[i].value);
871 } else {
872 ret = bq25890_field_read(bq, init_data[i].id);
873 if (ret >= 0)
874 *init_data[i].value = ret;
875 }
876 if (ret < 0) {
877 dev_dbg(bq->dev, "Accessing init data failed %d\n", ret);
878 return ret;
879 }
880 }
881
882 return 0;
883}
884
885static int bq25890_hw_init(struct bq25890_device *bq)
886{
887 int ret;
888
889 if (!bq->skip_reset) {
890 ret = bq25890_chip_reset(bq);
891 if (ret < 0) {
892 dev_dbg(bq->dev, "Reset failed %d\n", ret);
893 return ret;
894 }
895 } else {
896 /*
897 * Ensure charging is enabled, on some boards where the fw
898 * takes care of initalizition F_CHG_CFG is set to 0 before
899 * handing control over to the OS.
900 */
901 ret = bq25890_field_write(bq, F_CHG_CFG, 1);
902 if (ret < 0) {
903 dev_dbg(bq->dev, "Enabling charging failed %d\n", ret);
904 return ret;
905 }
906 }
907
908 /* disable watchdog */
909 ret = bq25890_field_write(bq, F_WD, 0);
910 if (ret < 0) {
911 dev_dbg(bq->dev, "Disabling watchdog failed %d\n", ret);
912 return ret;
913 }
914
915 /* initialize currents/voltages and other parameters */
916 ret = bq25890_rw_init_data(bq);
917 if (ret)
918 return ret;
919
920 ret = bq25890_get_chip_state(bq, &bq->state);
921 if (ret < 0) {
922 dev_dbg(bq->dev, "Get state failed %d\n", ret);
923 return ret;
924 }
925
926 /* Configure ADC for continuous conversions when charging */
927 ret = bq25890_field_write(bq, F_CONV_RATE, !!bq->state.online);
928 if (ret < 0) {
929 dev_dbg(bq->dev, "Config ADC failed %d\n", ret);
930 return ret;
931 }
932
933 return 0;
934}
935
936static const enum power_supply_property bq25890_power_supply_props[] = {
937 POWER_SUPPLY_PROP_MANUFACTURER,
938 POWER_SUPPLY_PROP_MODEL_NAME,
939 POWER_SUPPLY_PROP_STATUS,
940 POWER_SUPPLY_PROP_CHARGE_TYPE,
941 POWER_SUPPLY_PROP_ONLINE,
942 POWER_SUPPLY_PROP_HEALTH,
943 POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT,
944 POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX,
945 POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE,
946 POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX,
947 POWER_SUPPLY_PROP_PRECHARGE_CURRENT,
948 POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT,
949 POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
950 POWER_SUPPLY_PROP_VOLTAGE_NOW,
951 POWER_SUPPLY_PROP_CURRENT_NOW,
952 POWER_SUPPLY_PROP_TEMP,
953};
954
955static char *bq25890_charger_supplied_to[] = {
956 "main-battery",
957};
958
959static const struct power_supply_desc bq25890_power_supply_desc = {
960 .name = "bq25890-charger",
961 .type = POWER_SUPPLY_TYPE_USB,
962 .properties = bq25890_power_supply_props,
963 .num_properties = ARRAY_SIZE(bq25890_power_supply_props),
964 .get_property = bq25890_power_supply_get_property,
965 .set_property = bq25890_power_supply_set_property,
966 .property_is_writeable = bq25890_power_supply_property_is_writeable,
967 .external_power_changed = bq25890_charger_external_power_changed,
968};
969
970static int bq25890_power_supply_init(struct bq25890_device *bq)
971{
972 struct power_supply_config psy_cfg = { .drv_data = bq, };
973
974 psy_cfg.supplied_to = bq25890_charger_supplied_to;
975 psy_cfg.num_supplicants = ARRAY_SIZE(bq25890_charger_supplied_to);
976
977 bq->charger = devm_power_supply_register(bq->dev,
978 &bq25890_power_supply_desc,
979 &psy_cfg);
980
981 return PTR_ERR_OR_ZERO(bq->charger);
982}
983
984static int bq25890_set_otg_cfg(struct bq25890_device *bq, u8 val)
985{
986 int ret;
987
988 ret = bq25890_field_write(bq, F_OTG_CFG, val);
989 if (ret < 0)
990 dev_err(bq->dev, "Error switching to boost/charger mode: %d\n", ret);
991
992 return ret;
993}
994
995static void bq25890_pump_express_work(struct work_struct *data)
996{
997 struct bq25890_device *bq =
998 container_of(data, struct bq25890_device, pump_express_work.work);
999 int voltage, i, ret;
1000
1001 dev_dbg(bq->dev, "Start to request input voltage increasing\n");
1002
1003 /* Enable current pulse voltage control protocol */
1004 ret = bq25890_field_write(bq, F_PUMPX_EN, 1);
1005 if (ret < 0)
1006 goto error_print;
1007
1008 for (i = 0; i < PUMP_EXPRESS_MAX_TRIES; i++) {
1009 voltage = bq25890_get_vbus_voltage(bq);
1010 if (voltage < 0)
1011 goto error_print;
1012 dev_dbg(bq->dev, "input voltage = %d uV\n", voltage);
1013
1014 if ((voltage + PUMP_EXPRESS_VBUS_MARGIN_uV) >
1015 bq->pump_express_vbus_max)
1016 break;
1017
1018 ret = bq25890_field_write(bq, F_PUMPX_UP, 1);
1019 if (ret < 0)
1020 goto error_print;
1021
1022 /* Note a single PUMPX up pulse-sequence takes 2.1s */
1023 ret = regmap_field_read_poll_timeout(bq->rmap_fields[F_PUMPX_UP],
1024 ret, !ret, 100000, 3000000);
1025 if (ret < 0)
1026 goto error_print;
1027
1028 /* Make sure ADC has sampled Vbus before checking again */
1029 msleep(1000);
1030 }
1031
1032 bq25890_field_write(bq, F_PUMPX_EN, 0);
1033
1034 dev_info(bq->dev, "Hi-voltage charging requested, input voltage is %d mV\n",
1035 voltage);
1036
1037 return;
1038error_print:
1039 bq25890_field_write(bq, F_PUMPX_EN, 0);
1040 dev_err(bq->dev, "Failed to request hi-voltage charging\n");
1041}
1042
1043static void bq25890_usb_work(struct work_struct *data)
1044{
1045 int ret;
1046 struct bq25890_device *bq =
1047 container_of(data, struct bq25890_device, usb_work);
1048
1049 switch (bq->usb_event) {
1050 case USB_EVENT_ID:
1051 /* Enable boost mode */
1052 bq25890_set_otg_cfg(bq, 1);
1053 break;
1054
1055 case USB_EVENT_NONE:
1056 /* Disable boost mode */
1057 ret = bq25890_set_otg_cfg(bq, 0);
1058 if (ret == 0)
1059 power_supply_changed(bq->charger);
1060 break;
1061 }
1062}
1063
1064static int bq25890_usb_notifier(struct notifier_block *nb, unsigned long val,
1065 void *priv)
1066{
1067 struct bq25890_device *bq =
1068 container_of(nb, struct bq25890_device, usb_nb);
1069
1070 bq->usb_event = val;
1071 queue_work(system_power_efficient_wq, &bq->usb_work);
1072
1073 return NOTIFY_OK;
1074}
1075
1076#ifdef CONFIG_REGULATOR
1077static int bq25890_vbus_enable(struct regulator_dev *rdev)
1078{
1079 struct bq25890_device *bq = rdev_get_drvdata(rdev);
1080
1081 return bq25890_set_otg_cfg(bq, 1);
1082}
1083
1084static int bq25890_vbus_disable(struct regulator_dev *rdev)
1085{
1086 struct bq25890_device *bq = rdev_get_drvdata(rdev);
1087
1088 return bq25890_set_otg_cfg(bq, 0);
1089}
1090
1091static int bq25890_vbus_is_enabled(struct regulator_dev *rdev)
1092{
1093 struct bq25890_device *bq = rdev_get_drvdata(rdev);
1094
1095 return bq25890_field_read(bq, F_OTG_CFG);
1096}
1097
1098static int bq25890_vbus_get_voltage(struct regulator_dev *rdev)
1099{
1100 struct bq25890_device *bq = rdev_get_drvdata(rdev);
1101
1102 return bq25890_get_vbus_voltage(bq);
1103}
1104
1105static int bq25890_vsys_get_voltage(struct regulator_dev *rdev)
1106{
1107 struct bq25890_device *bq = rdev_get_drvdata(rdev);
1108 int ret;
1109
1110 /* Should be some output voltage ? */
1111 ret = bq25890_field_read(bq, F_SYSV); /* read measured value */
1112 if (ret < 0)
1113 return ret;
1114
1115 /* converted_val = 2.304V + ADC_val * 20mV (table 10.3.15) */
1116 return 2304000 + ret * 20000;
1117}
1118
1119static const struct regulator_ops bq25890_vbus_ops = {
1120 .enable = bq25890_vbus_enable,
1121 .disable = bq25890_vbus_disable,
1122 .is_enabled = bq25890_vbus_is_enabled,
1123 .get_voltage = bq25890_vbus_get_voltage,
1124};
1125
1126static const struct regulator_desc bq25890_vbus_desc = {
1127 .name = "usb_otg_vbus",
1128 .of_match = "usb-otg-vbus",
1129 .type = REGULATOR_VOLTAGE,
1130 .owner = THIS_MODULE,
1131 .ops = &bq25890_vbus_ops,
1132};
1133
1134static const struct regulator_ops bq25890_vsys_ops = {
1135 .get_voltage = bq25890_vsys_get_voltage,
1136};
1137
1138static const struct regulator_desc bq25890_vsys_desc = {
1139 .name = "vsys",
1140 .of_match = "vsys",
1141 .type = REGULATOR_VOLTAGE,
1142 .owner = THIS_MODULE,
1143 .ops = &bq25890_vsys_ops,
1144};
1145
1146static int bq25890_register_regulator(struct bq25890_device *bq)
1147{
1148 struct bq25890_platform_data *pdata = dev_get_platdata(bq->dev);
1149 struct regulator_config cfg = {
1150 .dev = bq->dev,
1151 .driver_data = bq,
1152 };
1153 struct regulator_dev *reg;
1154
1155 if (pdata)
1156 cfg.init_data = pdata->regulator_init_data;
1157
1158 reg = devm_regulator_register(bq->dev, &bq25890_vbus_desc, &cfg);
1159 if (IS_ERR(reg)) {
1160 return dev_err_probe(bq->dev, PTR_ERR(reg),
1161 "registering vbus regulator");
1162 }
1163
1164 /* pdata->regulator_init_data is for vbus only */
1165 cfg.init_data = NULL;
1166 reg = devm_regulator_register(bq->dev, &bq25890_vsys_desc, &cfg);
1167 if (IS_ERR(reg)) {
1168 return dev_err_probe(bq->dev, PTR_ERR(reg),
1169 "registering vsys regulator");
1170 }
1171
1172 return 0;
1173}
1174#else
1175static inline int
1176bq25890_register_regulator(struct bq25890_device *bq)
1177{
1178 return 0;
1179}
1180#endif
1181
1182static int bq25890_get_chip_version(struct bq25890_device *bq)
1183{
1184 int id, rev;
1185
1186 id = bq25890_field_read(bq, F_PN);
1187 if (id < 0) {
1188 dev_err(bq->dev, "Cannot read chip ID: %d\n", id);
1189 return id;
1190 }
1191
1192 rev = bq25890_field_read(bq, F_DEV_REV);
1193 if (rev < 0) {
1194 dev_err(bq->dev, "Cannot read chip revision: %d\n", rev);
1195 return rev;
1196 }
1197
1198 switch (id) {
1199 case BQ25890_ID:
1200 bq->chip_version = BQ25890;
1201 break;
1202
1203 /* BQ25892 and BQ25896 share same ID 0 */
1204 case BQ25896_ID:
1205 switch (rev) {
1206 case 2:
1207 bq->chip_version = BQ25896;
1208 break;
1209 case 1:
1210 bq->chip_version = BQ25892;
1211 break;
1212 default:
1213 dev_err(bq->dev,
1214 "Unknown device revision %d, assume BQ25892\n",
1215 rev);
1216 bq->chip_version = BQ25892;
1217 }
1218 break;
1219
1220 case BQ25895_ID:
1221 bq->chip_version = BQ25895;
1222 break;
1223
1224 default:
1225 dev_err(bq->dev, "Unknown chip ID %d\n", id);
1226 return -ENODEV;
1227 }
1228
1229 return 0;
1230}
1231
1232static int bq25890_irq_probe(struct bq25890_device *bq)
1233{
1234 struct gpio_desc *irq;
1235
1236 irq = devm_gpiod_get(bq->dev, BQ25890_IRQ_PIN, GPIOD_IN);
1237 if (IS_ERR(irq))
1238 return dev_err_probe(bq->dev, PTR_ERR(irq),
1239 "Could not probe irq pin.\n");
1240
1241 return gpiod_to_irq(irq);
1242}
1243
1244static int bq25890_fw_read_u32_props(struct bq25890_device *bq)
1245{
1246 int ret;
1247 u32 property;
1248 int i;
1249 struct bq25890_init_data *init = &bq->init_data;
1250 struct {
1251 char *name;
1252 bool optional;
1253 enum bq25890_table_ids tbl_id;
1254 u8 *conv_data; /* holds converted value from given property */
1255 } props[] = {
1256 /* required properties */
1257 {"ti,charge-current", false, TBL_ICHG, &init->ichg},
1258 {"ti,battery-regulation-voltage", false, TBL_VREG, &init->vreg},
1259 {"ti,termination-current", false, TBL_ITERM, &init->iterm},
1260 {"ti,precharge-current", false, TBL_ITERM, &init->iprechg},
1261 {"ti,minimum-sys-voltage", false, TBL_SYSVMIN, &init->sysvmin},
1262 {"ti,boost-voltage", false, TBL_BOOSTV, &init->boostv},
1263 {"ti,boost-max-current", false, TBL_BOOSTI, &init->boosti},
1264
1265 /* optional properties */
1266 {"ti,thermal-regulation-threshold", true, TBL_TREG, &init->treg},
1267 {"ti,ibatcomp-micro-ohms", true, TBL_RBATCOMP, &init->rbatcomp},
1268 {"ti,ibatcomp-clamp-microvolt", true, TBL_VBATCOMP, &init->vclamp},
1269 };
1270
1271 /* initialize data for optional properties */
1272 init->treg = 3; /* 120 degrees Celsius */
1273 init->rbatcomp = init->vclamp = 0; /* IBAT compensation disabled */
1274
1275 for (i = 0; i < ARRAY_SIZE(props); i++) {
1276 ret = device_property_read_u32(bq->dev, props[i].name,
1277 &property);
1278 if (ret < 0) {
1279 if (props[i].optional)
1280 continue;
1281
1282 dev_err(bq->dev, "Unable to read property %d %s\n", ret,
1283 props[i].name);
1284
1285 return ret;
1286 }
1287
1288 *props[i].conv_data = bq25890_find_idx(property,
1289 props[i].tbl_id);
1290 }
1291
1292 return 0;
1293}
1294
1295static int bq25890_fw_probe(struct bq25890_device *bq)
1296{
1297 int ret;
1298 struct bq25890_init_data *init = &bq->init_data;
1299
1300 /* Optional, left at 0 if property is not present */
1301 device_property_read_u32(bq->dev, "linux,pump-express-vbus-max",
1302 &bq->pump_express_vbus_max);
1303
1304 bq->skip_reset = device_property_read_bool(bq->dev, "linux,skip-reset");
1305 bq->read_back_init_data = device_property_read_bool(bq->dev,
1306 "linux,read-back-settings");
1307 if (bq->read_back_init_data)
1308 return 0;
1309
1310 ret = bq25890_fw_read_u32_props(bq);
1311 if (ret < 0)
1312 return ret;
1313
1314 init->ilim_en = device_property_read_bool(bq->dev, "ti,use-ilim-pin");
1315 init->boostf = device_property_read_bool(bq->dev, "ti,boost-low-freq");
1316
1317 return 0;
1318}
1319
1320static void bq25890_non_devm_cleanup(void *data)
1321{
1322 struct bq25890_device *bq = data;
1323
1324 cancel_delayed_work_sync(&bq->pump_express_work);
1325}
1326
1327static int bq25890_probe(struct i2c_client *client)
1328{
1329 struct device *dev = &client->dev;
1330 struct bq25890_device *bq;
1331 int ret;
1332
1333 bq = devm_kzalloc(dev, sizeof(*bq), GFP_KERNEL);
1334 if (!bq)
1335 return -ENOMEM;
1336
1337 bq->client = client;
1338 bq->dev = dev;
1339
1340 mutex_init(&bq->lock);
1341 INIT_DELAYED_WORK(&bq->pump_express_work, bq25890_pump_express_work);
1342
1343 bq->rmap = devm_regmap_init_i2c(client, &bq25890_regmap_config);
1344 if (IS_ERR(bq->rmap))
1345 return dev_err_probe(dev, PTR_ERR(bq->rmap),
1346 "failed to allocate register map\n");
1347
1348 ret = devm_regmap_field_bulk_alloc(dev, bq->rmap, bq->rmap_fields,
1349 bq25890_reg_fields, F_MAX_FIELDS);
1350 if (ret)
1351 return ret;
1352
1353 i2c_set_clientdata(client, bq);
1354
1355 ret = bq25890_get_chip_version(bq);
1356 if (ret) {
1357 dev_err(dev, "Cannot read chip ID or unknown chip: %d\n", ret);
1358 return ret;
1359 }
1360
1361 ret = bq25890_fw_probe(bq);
1362 if (ret < 0)
1363 return dev_err_probe(dev, ret, "reading device properties\n");
1364
1365 ret = bq25890_hw_init(bq);
1366 if (ret < 0) {
1367 dev_err(dev, "Cannot initialize the chip: %d\n", ret);
1368 return ret;
1369 }
1370
1371 if (client->irq <= 0)
1372 client->irq = bq25890_irq_probe(bq);
1373
1374 if (client->irq < 0) {
1375 dev_err(dev, "No irq resource found.\n");
1376 return client->irq;
1377 }
1378
1379 /* OTG reporting */
1380 bq->usb_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
1381
1382 /*
1383 * This must be before bq25890_power_supply_init(), so that it runs
1384 * after devm unregisters the power_supply.
1385 */
1386 ret = devm_add_action_or_reset(dev, bq25890_non_devm_cleanup, bq);
1387 if (ret)
1388 return ret;
1389
1390 ret = bq25890_register_regulator(bq);
1391 if (ret)
1392 return ret;
1393
1394 ret = bq25890_power_supply_init(bq);
1395 if (ret < 0)
1396 return dev_err_probe(dev, ret, "registering power supply\n");
1397
1398 ret = devm_request_threaded_irq(dev, client->irq, NULL,
1399 bq25890_irq_handler_thread,
1400 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
1401 BQ25890_IRQ_PIN, bq);
1402 if (ret)
1403 return ret;
1404
1405 if (!IS_ERR_OR_NULL(bq->usb_phy)) {
1406 INIT_WORK(&bq->usb_work, bq25890_usb_work);
1407 bq->usb_nb.notifier_call = bq25890_usb_notifier;
1408 usb_register_notifier(bq->usb_phy, &bq->usb_nb);
1409 }
1410
1411 return 0;
1412}
1413
1414static void bq25890_remove(struct i2c_client *client)
1415{
1416 struct bq25890_device *bq = i2c_get_clientdata(client);
1417
1418 if (!IS_ERR_OR_NULL(bq->usb_phy)) {
1419 usb_unregister_notifier(bq->usb_phy, &bq->usb_nb);
1420 cancel_work_sync(&bq->usb_work);
1421 }
1422
1423 if (!bq->skip_reset) {
1424 /* reset all registers to default values */
1425 bq25890_chip_reset(bq);
1426 }
1427}
1428
1429static void bq25890_shutdown(struct i2c_client *client)
1430{
1431 struct bq25890_device *bq = i2c_get_clientdata(client);
1432
1433 /*
1434 * TODO this if + return should probably be removed, but that would
1435 * introduce a function change for boards using the usb-phy framework.
1436 * This needs to be tested on such a board before making this change.
1437 */
1438 if (!IS_ERR_OR_NULL(bq->usb_phy))
1439 return;
1440
1441 /*
1442 * Turn off the 5v Boost regulator which outputs Vbus to the device's
1443 * Micro-USB or Type-C USB port. Leaving this on drains power and
1444 * this avoids the PMIC on some device-models seeing this as Vbus
1445 * getting inserted after shutdown, causing the device to immediately
1446 * power-up again.
1447 */
1448 bq25890_set_otg_cfg(bq, 0);
1449}
1450
1451#ifdef CONFIG_PM_SLEEP
1452static int bq25890_suspend(struct device *dev)
1453{
1454 struct bq25890_device *bq = dev_get_drvdata(dev);
1455
1456 /*
1457 * If charger is removed, while in suspend, make sure ADC is diabled
1458 * since it consumes slightly more power.
1459 */
1460 return bq25890_field_write(bq, F_CONV_RATE, 0);
1461}
1462
1463static int bq25890_resume(struct device *dev)
1464{
1465 int ret;
1466 struct bq25890_device *bq = dev_get_drvdata(dev);
1467
1468 mutex_lock(&bq->lock);
1469
1470 ret = bq25890_get_chip_state(bq, &bq->state);
1471 if (ret < 0)
1472 goto unlock;
1473
1474 /* Re-enable ADC only if charger is plugged in. */
1475 if (bq->state.online) {
1476 ret = bq25890_field_write(bq, F_CONV_RATE, 1);
1477 if (ret < 0)
1478 goto unlock;
1479 }
1480
1481 /* signal userspace, maybe state changed while suspended */
1482 power_supply_changed(bq->charger);
1483
1484unlock:
1485 mutex_unlock(&bq->lock);
1486
1487 return ret;
1488}
1489#endif
1490
1491static const struct dev_pm_ops bq25890_pm = {
1492 SET_SYSTEM_SLEEP_PM_OPS(bq25890_suspend, bq25890_resume)
1493};
1494
1495static const struct i2c_device_id bq25890_i2c_ids[] = {
1496 { "bq25890", 0 },
1497 { "bq25892", 0 },
1498 { "bq25895", 0 },
1499 { "bq25896", 0 },
1500 {},
1501};
1502MODULE_DEVICE_TABLE(i2c, bq25890_i2c_ids);
1503
1504static const struct of_device_id bq25890_of_match[] = {
1505 { .compatible = "ti,bq25890", },
1506 { .compatible = "ti,bq25892", },
1507 { .compatible = "ti,bq25895", },
1508 { .compatible = "ti,bq25896", },
1509 { },
1510};
1511MODULE_DEVICE_TABLE(of, bq25890_of_match);
1512
1513#ifdef CONFIG_ACPI
1514static const struct acpi_device_id bq25890_acpi_match[] = {
1515 {"BQ258900", 0},
1516 {},
1517};
1518MODULE_DEVICE_TABLE(acpi, bq25890_acpi_match);
1519#endif
1520
1521static struct i2c_driver bq25890_driver = {
1522 .driver = {
1523 .name = "bq25890-charger",
1524 .of_match_table = of_match_ptr(bq25890_of_match),
1525 .acpi_match_table = ACPI_PTR(bq25890_acpi_match),
1526 .pm = &bq25890_pm,
1527 },
1528 .probe_new = bq25890_probe,
1529 .remove = bq25890_remove,
1530 .shutdown = bq25890_shutdown,
1531 .id_table = bq25890_i2c_ids,
1532};
1533module_i2c_driver(bq25890_driver);
1534
1535MODULE_AUTHOR("Laurentiu Palcu <laurentiu.palcu@intel.com>");
1536MODULE_DESCRIPTION("bq25890 charger driver");
1537MODULE_LICENSE("GPL");