Merge tag 'rtc-5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux
[linux-2.6-microblaze.git] / drivers / power / supply / bq25980_charger.c
1 // SPDX-License-Identifier: GPL-2.0
2 // BQ25980 Battery Charger Driver
3 // Copyright (C) 2020 Texas Instruments Incorporated - http://www.ti.com/
4
5 #include <linux/err.h>
6 #include <linux/i2c.h>
7 #include <linux/init.h>
8 #include <linux/interrupt.h>
9 #include <linux/kernel.h>
10 #include <linux/module.h>
11 #include <linux/gpio/consumer.h>
12 #include <linux/power_supply.h>
13 #include <linux/regmap.h>
14 #include <linux/types.h>
15 #include <linux/delay.h>
16 #include <linux/device.h>
17 #include <linux/moduleparam.h>
18 #include <linux/slab.h>
19
20 #include "bq25980_charger.h"
21
22 struct bq25980_state {
23         bool dischg;
24         bool ovp;
25         bool ocp;
26         bool wdt;
27         bool tflt;
28         bool online;
29         bool ce;
30         bool hiz;
31         bool bypass;
32
33         u32 vbat_adc;
34         u32 vsys_adc;
35         u32 ibat_adc;
36 };
37
38 enum bq25980_id {
39         BQ25980,
40         BQ25975,
41         BQ25960,
42 };
43
44 struct bq25980_chip_info {
45
46         int model_id;
47
48         const struct regmap_config *regmap_config;
49
50         int busocp_def;
51         int busocp_sc_max;
52         int busocp_byp_max;
53         int busocp_sc_min;
54         int busocp_byp_min;
55
56         int busovp_sc_def;
57         int busovp_byp_def;
58         int busovp_sc_step;
59
60         int busovp_sc_offset;
61         int busovp_byp_step;
62         int busovp_byp_offset;
63         int busovp_sc_min;
64         int busovp_sc_max;
65         int busovp_byp_min;
66         int busovp_byp_max;
67
68         int batovp_def;
69         int batovp_max;
70         int batovp_min;
71         int batovp_step;
72         int batovp_offset;
73
74         int batocp_def;
75         int batocp_max;
76 };
77
78 struct bq25980_init_data {
79         u32 ichg;
80         u32 bypass_ilim;
81         u32 sc_ilim;
82         u32 vreg;
83         u32 iterm;
84         u32 iprechg;
85         u32 bypass_vlim;
86         u32 sc_vlim;
87         u32 ichg_max;
88         u32 vreg_max;
89 };
90
91 struct bq25980_device {
92         struct i2c_client *client;
93         struct device *dev;
94         struct power_supply *charger;
95         struct power_supply *battery;
96         struct mutex lock;
97         struct regmap *regmap;
98
99         char model_name[I2C_NAME_SIZE];
100
101         struct bq25980_init_data init_data;
102         const struct bq25980_chip_info *chip_info;
103         struct bq25980_state state;
104         int watchdog_timer;
105 };
106
107 static struct reg_default bq25980_reg_defs[] = {
108         {BQ25980_BATOVP, 0x5A},
109         {BQ25980_BATOVP_ALM, 0x46},
110         {BQ25980_BATOCP, 0x51},
111         {BQ25980_BATOCP_ALM, 0x50},
112         {BQ25980_BATUCP_ALM, 0x28},
113         {BQ25980_CHRGR_CTRL_1, 0x0},
114         {BQ25980_BUSOVP, 0x26},
115         {BQ25980_BUSOVP_ALM, 0x22},
116         {BQ25980_BUSOCP, 0xD},
117         {BQ25980_BUSOCP_ALM, 0xC},
118         {BQ25980_TEMP_CONTROL, 0x30},
119         {BQ25980_TDIE_ALM, 0xC8},
120         {BQ25980_TSBUS_FLT, 0x15},
121         {BQ25980_TSBAT_FLG, 0x15},
122         {BQ25980_VAC_CONTROL, 0x0},
123         {BQ25980_CHRGR_CTRL_2, 0x0},
124         {BQ25980_CHRGR_CTRL_3, 0x20},
125         {BQ25980_CHRGR_CTRL_4, 0x1D},
126         {BQ25980_CHRGR_CTRL_5, 0x18},
127         {BQ25980_STAT1, 0x0},
128         {BQ25980_STAT2, 0x0},
129         {BQ25980_STAT3, 0x0},
130         {BQ25980_STAT4, 0x0},
131         {BQ25980_STAT5, 0x0},
132         {BQ25980_FLAG1, 0x0},
133         {BQ25980_FLAG2, 0x0},
134         {BQ25980_FLAG3, 0x0},
135         {BQ25980_FLAG4, 0x0},
136         {BQ25980_FLAG5, 0x0},
137         {BQ25980_MASK1, 0x0},
138         {BQ25980_MASK2, 0x0},
139         {BQ25980_MASK3, 0x0},
140         {BQ25980_MASK4, 0x0},
141         {BQ25980_MASK5, 0x0},
142         {BQ25980_DEVICE_INFO, 0x8},
143         {BQ25980_ADC_CONTROL1, 0x0},
144         {BQ25980_ADC_CONTROL2, 0x0},
145         {BQ25980_IBUS_ADC_LSB, 0x0},
146         {BQ25980_IBUS_ADC_MSB, 0x0},
147         {BQ25980_VBUS_ADC_LSB, 0x0},
148         {BQ25980_VBUS_ADC_MSB, 0x0},
149         {BQ25980_VAC1_ADC_LSB, 0x0},
150         {BQ25980_VAC2_ADC_LSB, 0x0},
151         {BQ25980_VOUT_ADC_LSB, 0x0},
152         {BQ25980_VBAT_ADC_LSB, 0x0},
153         {BQ25980_IBAT_ADC_MSB, 0x0},
154         {BQ25980_IBAT_ADC_LSB, 0x0},
155         {BQ25980_TSBUS_ADC_LSB, 0x0},
156         {BQ25980_TSBAT_ADC_LSB, 0x0},
157         {BQ25980_TDIE_ADC_LSB, 0x0},
158         {BQ25980_DEGLITCH_TIME, 0x0},
159         {BQ25980_CHRGR_CTRL_6, 0x0},
160 };
161
162 static struct reg_default bq25975_reg_defs[] = {
163         {BQ25980_BATOVP, 0x5A},
164         {BQ25980_BATOVP_ALM, 0x46},
165         {BQ25980_BATOCP, 0x51},
166         {BQ25980_BATOCP_ALM, 0x50},
167         {BQ25980_BATUCP_ALM, 0x28},
168         {BQ25980_CHRGR_CTRL_1, 0x0},
169         {BQ25980_BUSOVP, 0x26},
170         {BQ25980_BUSOVP_ALM, 0x22},
171         {BQ25980_BUSOCP, 0xD},
172         {BQ25980_BUSOCP_ALM, 0xC},
173         {BQ25980_TEMP_CONTROL, 0x30},
174         {BQ25980_TDIE_ALM, 0xC8},
175         {BQ25980_TSBUS_FLT, 0x15},
176         {BQ25980_TSBAT_FLG, 0x15},
177         {BQ25980_VAC_CONTROL, 0x0},
178         {BQ25980_CHRGR_CTRL_2, 0x0},
179         {BQ25980_CHRGR_CTRL_3, 0x20},
180         {BQ25980_CHRGR_CTRL_4, 0x1D},
181         {BQ25980_CHRGR_CTRL_5, 0x18},
182         {BQ25980_STAT1, 0x0},
183         {BQ25980_STAT2, 0x0},
184         {BQ25980_STAT3, 0x0},
185         {BQ25980_STAT4, 0x0},
186         {BQ25980_STAT5, 0x0},
187         {BQ25980_FLAG1, 0x0},
188         {BQ25980_FLAG2, 0x0},
189         {BQ25980_FLAG3, 0x0},
190         {BQ25980_FLAG4, 0x0},
191         {BQ25980_FLAG5, 0x0},
192         {BQ25980_MASK1, 0x0},
193         {BQ25980_MASK2, 0x0},
194         {BQ25980_MASK3, 0x0},
195         {BQ25980_MASK4, 0x0},
196         {BQ25980_MASK5, 0x0},
197         {BQ25980_DEVICE_INFO, 0x8},
198         {BQ25980_ADC_CONTROL1, 0x0},
199         {BQ25980_ADC_CONTROL2, 0x0},
200         {BQ25980_IBUS_ADC_LSB, 0x0},
201         {BQ25980_IBUS_ADC_MSB, 0x0},
202         {BQ25980_VBUS_ADC_LSB, 0x0},
203         {BQ25980_VBUS_ADC_MSB, 0x0},
204         {BQ25980_VAC1_ADC_LSB, 0x0},
205         {BQ25980_VAC2_ADC_LSB, 0x0},
206         {BQ25980_VOUT_ADC_LSB, 0x0},
207         {BQ25980_VBAT_ADC_LSB, 0x0},
208         {BQ25980_IBAT_ADC_MSB, 0x0},
209         {BQ25980_IBAT_ADC_LSB, 0x0},
210         {BQ25980_TSBUS_ADC_LSB, 0x0},
211         {BQ25980_TSBAT_ADC_LSB, 0x0},
212         {BQ25980_TDIE_ADC_LSB, 0x0},
213         {BQ25980_DEGLITCH_TIME, 0x0},
214         {BQ25980_CHRGR_CTRL_6, 0x0},
215 };
216
217 static struct reg_default bq25960_reg_defs[] = {
218         {BQ25980_BATOVP, 0x5A},
219         {BQ25980_BATOVP_ALM, 0x46},
220         {BQ25980_BATOCP, 0x51},
221         {BQ25980_BATOCP_ALM, 0x50},
222         {BQ25980_BATUCP_ALM, 0x28},
223         {BQ25980_CHRGR_CTRL_1, 0x0},
224         {BQ25980_BUSOVP, 0x26},
225         {BQ25980_BUSOVP_ALM, 0x22},
226         {BQ25980_BUSOCP, 0xD},
227         {BQ25980_BUSOCP_ALM, 0xC},
228         {BQ25980_TEMP_CONTROL, 0x30},
229         {BQ25980_TDIE_ALM, 0xC8},
230         {BQ25980_TSBUS_FLT, 0x15},
231         {BQ25980_TSBAT_FLG, 0x15},
232         {BQ25980_VAC_CONTROL, 0x0},
233         {BQ25980_CHRGR_CTRL_2, 0x0},
234         {BQ25980_CHRGR_CTRL_3, 0x20},
235         {BQ25980_CHRGR_CTRL_4, 0x1D},
236         {BQ25980_CHRGR_CTRL_5, 0x18},
237         {BQ25980_STAT1, 0x0},
238         {BQ25980_STAT2, 0x0},
239         {BQ25980_STAT3, 0x0},
240         {BQ25980_STAT4, 0x0},
241         {BQ25980_STAT5, 0x0},
242         {BQ25980_FLAG1, 0x0},
243         {BQ25980_FLAG2, 0x0},
244         {BQ25980_FLAG3, 0x0},
245         {BQ25980_FLAG4, 0x0},
246         {BQ25980_FLAG5, 0x0},
247         {BQ25980_MASK1, 0x0},
248         {BQ25980_MASK2, 0x0},
249         {BQ25980_MASK3, 0x0},
250         {BQ25980_MASK4, 0x0},
251         {BQ25980_MASK5, 0x0},
252         {BQ25980_DEVICE_INFO, 0x8},
253         {BQ25980_ADC_CONTROL1, 0x0},
254         {BQ25980_ADC_CONTROL2, 0x0},
255         {BQ25980_IBUS_ADC_LSB, 0x0},
256         {BQ25980_IBUS_ADC_MSB, 0x0},
257         {BQ25980_VBUS_ADC_LSB, 0x0},
258         {BQ25980_VBUS_ADC_MSB, 0x0},
259         {BQ25980_VAC1_ADC_LSB, 0x0},
260         {BQ25980_VAC2_ADC_LSB, 0x0},
261         {BQ25980_VOUT_ADC_LSB, 0x0},
262         {BQ25980_VBAT_ADC_LSB, 0x0},
263         {BQ25980_IBAT_ADC_MSB, 0x0},
264         {BQ25980_IBAT_ADC_LSB, 0x0},
265         {BQ25980_TSBUS_ADC_LSB, 0x0},
266         {BQ25980_TSBAT_ADC_LSB, 0x0},
267         {BQ25980_TDIE_ADC_LSB, 0x0},
268         {BQ25980_DEGLITCH_TIME, 0x0},
269         {BQ25980_CHRGR_CTRL_6, 0x0},
270 };
271
272 static int bq25980_watchdog_time[BQ25980_NUM_WD_VAL] = {5000, 10000, 50000,
273                                                         300000};
274
275 static int bq25980_get_input_curr_lim(struct bq25980_device *bq)
276 {
277         unsigned int busocp_reg_code;
278         int ret;
279
280         ret = regmap_read(bq->regmap, BQ25980_BUSOCP, &busocp_reg_code);
281         if (ret)
282                 return ret;
283
284         return (busocp_reg_code * BQ25980_BUSOCP_STEP_uA) + BQ25980_BUSOCP_OFFSET_uA;
285 }
286
287 static int bq25980_set_hiz(struct bq25980_device *bq, int setting)
288 {
289         return regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_2,
290                         BQ25980_EN_HIZ, setting);
291 }
292
293 static int bq25980_set_input_curr_lim(struct bq25980_device *bq, int busocp)
294 {
295         unsigned int busocp_reg_code;
296         int ret;
297
298         if (!busocp)
299                 return bq25980_set_hiz(bq, BQ25980_ENABLE_HIZ);
300
301         bq25980_set_hiz(bq, BQ25980_DISABLE_HIZ);
302
303         if (busocp < BQ25980_BUSOCP_MIN_uA)
304                 busocp = BQ25980_BUSOCP_MIN_uA;
305
306         if (bq->state.bypass)
307                 busocp = min(busocp, bq->chip_info->busocp_sc_max);
308         else
309                 busocp = min(busocp, bq->chip_info->busocp_byp_max);
310
311         busocp_reg_code = (busocp - BQ25980_BUSOCP_OFFSET_uA)
312                                                 / BQ25980_BUSOCP_STEP_uA;
313
314         ret = regmap_write(bq->regmap, BQ25980_BUSOCP, busocp_reg_code);
315         if (ret)
316                 return ret;
317
318         return regmap_write(bq->regmap, BQ25980_BUSOCP_ALM, busocp_reg_code);
319 }
320
321 static int bq25980_get_input_volt_lim(struct bq25980_device *bq)
322 {
323         unsigned int busovp_reg_code;
324         unsigned int busovp_offset;
325         unsigned int busovp_step;
326         int ret;
327
328         if (bq->state.bypass) {
329                 busovp_step = bq->chip_info->busovp_byp_step;
330                 busovp_offset = bq->chip_info->busovp_byp_offset;
331         } else {
332                 busovp_step = bq->chip_info->busovp_sc_step;
333                 busovp_offset = bq->chip_info->busovp_sc_offset;
334         }
335
336         ret = regmap_read(bq->regmap, BQ25980_BUSOVP, &busovp_reg_code);
337         if (ret)
338                 return ret;
339
340         return (busovp_reg_code * busovp_step) + busovp_offset;
341 }
342
343 static int bq25980_set_input_volt_lim(struct bq25980_device *bq, int busovp)
344 {
345         unsigned int busovp_reg_code;
346         unsigned int busovp_step;
347         unsigned int busovp_offset;
348         int ret;
349
350         if (bq->state.bypass) {
351                 busovp_step = bq->chip_info->busovp_byp_step;
352                 busovp_offset = bq->chip_info->busovp_byp_offset;
353                 if (busovp > bq->chip_info->busovp_byp_max)
354                         busovp = bq->chip_info->busovp_byp_max;
355                 else if (busovp < bq->chip_info->busovp_byp_min)
356                         busovp = bq->chip_info->busovp_byp_min;
357         } else {
358                 busovp_step = bq->chip_info->busovp_sc_step;
359                 busovp_offset = bq->chip_info->busovp_sc_offset;
360                 if (busovp > bq->chip_info->busovp_sc_max)
361                         busovp = bq->chip_info->busovp_sc_max;
362                 else if (busovp < bq->chip_info->busovp_sc_min)
363                         busovp = bq->chip_info->busovp_sc_min;
364         }
365
366         busovp_reg_code = (busovp - busovp_offset) / busovp_step;
367
368         ret = regmap_write(bq->regmap, BQ25980_BUSOVP, busovp_reg_code);
369         if (ret)
370                 return ret;
371
372         return regmap_write(bq->regmap, BQ25980_BUSOVP_ALM, busovp_reg_code);
373 }
374
375 static int bq25980_get_const_charge_curr(struct bq25980_device *bq)
376 {
377         unsigned int batocp_reg_code;
378         int ret;
379
380         ret = regmap_read(bq->regmap, BQ25980_BATOCP, &batocp_reg_code);
381         if (ret)
382                 return ret;
383
384         return (batocp_reg_code & BQ25980_BATOCP_MASK) *
385                                                 BQ25980_BATOCP_STEP_uA;
386 }
387
388 static int bq25980_set_const_charge_curr(struct bq25980_device *bq, int batocp)
389 {
390         unsigned int batocp_reg_code;
391         int ret;
392
393         batocp = max(batocp, BQ25980_BATOCP_MIN_uA);
394         batocp = min(batocp, bq->chip_info->batocp_max);
395
396         batocp_reg_code = batocp / BQ25980_BATOCP_STEP_uA;
397
398         ret = regmap_update_bits(bq->regmap, BQ25980_BATOCP,
399                                 BQ25980_BATOCP_MASK, batocp_reg_code);
400         if (ret)
401                 return ret;
402
403         return regmap_update_bits(bq->regmap, BQ25980_BATOCP_ALM,
404                                 BQ25980_BATOCP_MASK, batocp_reg_code);
405 }
406
407 static int bq25980_get_const_charge_volt(struct bq25980_device *bq)
408 {
409         unsigned int batovp_reg_code;
410         int ret;
411
412         ret = regmap_read(bq->regmap, BQ25980_BATOVP, &batovp_reg_code);
413         if (ret)
414                 return ret;
415
416         return ((batovp_reg_code * bq->chip_info->batovp_step) +
417                         bq->chip_info->batovp_offset);
418 }
419
420 static int bq25980_set_const_charge_volt(struct bq25980_device *bq, int batovp)
421 {
422         unsigned int batovp_reg_code;
423         int ret;
424
425         if (batovp < bq->chip_info->batovp_min)
426                 batovp = bq->chip_info->batovp_min;
427
428         if (batovp > bq->chip_info->batovp_max)
429                 batovp = bq->chip_info->batovp_max;
430
431         batovp_reg_code = (batovp - bq->chip_info->batovp_offset) /
432                                                 bq->chip_info->batovp_step;
433
434         ret = regmap_write(bq->regmap, BQ25980_BATOVP, batovp_reg_code);
435         if (ret)
436                 return ret;
437
438         return regmap_write(bq->regmap, BQ25980_BATOVP_ALM, batovp_reg_code);
439 }
440
441 static int bq25980_set_bypass(struct bq25980_device *bq, bool en_bypass)
442 {
443         int ret;
444
445         if (en_bypass)
446                 ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_2,
447                                         BQ25980_EN_BYPASS, BQ25980_EN_BYPASS);
448         else
449                 ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_2,
450                                         BQ25980_EN_BYPASS, en_bypass);
451         if (ret)
452                 return ret;
453
454         bq->state.bypass = en_bypass;
455
456         return bq->state.bypass;
457 }
458
459 static int bq25980_set_chg_en(struct bq25980_device *bq, bool en_chg)
460 {
461         int ret;
462
463         if (en_chg)
464                 ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_2,
465                                         BQ25980_CHG_EN, BQ25980_CHG_EN);
466         else
467                 ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_2,
468                                         BQ25980_CHG_EN, en_chg);
469         if (ret)
470                 return ret;
471
472         bq->state.ce = en_chg;
473
474         return 0;
475 }
476
477 static int bq25980_get_adc_ibus(struct bq25980_device *bq)
478 {
479         int ibus_adc_lsb, ibus_adc_msb;
480         u16 ibus_adc;
481         int ret;
482
483         ret = regmap_read(bq->regmap, BQ25980_IBUS_ADC_MSB, &ibus_adc_msb);
484         if (ret)
485                 return ret;
486
487         ret = regmap_read(bq->regmap, BQ25980_IBUS_ADC_LSB, &ibus_adc_lsb);
488         if (ret)
489                 return ret;
490
491         ibus_adc = (ibus_adc_msb << 8) | ibus_adc_lsb;
492
493         if (ibus_adc_msb & BQ25980_ADC_POLARITY_BIT)
494                 return ((ibus_adc ^ 0xffff) + 1) * BQ25980_ADC_CURR_STEP_uA;
495
496         return ibus_adc * BQ25980_ADC_CURR_STEP_uA;
497 }
498
499 static int bq25980_get_adc_vbus(struct bq25980_device *bq)
500 {
501         int vbus_adc_lsb, vbus_adc_msb;
502         u16 vbus_adc;
503         int ret;
504
505         ret = regmap_read(bq->regmap, BQ25980_VBUS_ADC_MSB, &vbus_adc_msb);
506         if (ret)
507                 return ret;
508
509         ret = regmap_read(bq->regmap, BQ25980_VBUS_ADC_LSB, &vbus_adc_lsb);
510         if (ret)
511                 return ret;
512
513         vbus_adc = (vbus_adc_msb << 8) | vbus_adc_lsb;
514
515         return vbus_adc * BQ25980_ADC_VOLT_STEP_uV;
516 }
517
518 static int bq25980_get_ibat_adc(struct bq25980_device *bq)
519 {
520         int ret;
521         int ibat_adc_lsb, ibat_adc_msb;
522         int ibat_adc;
523
524         ret = regmap_read(bq->regmap, BQ25980_IBAT_ADC_MSB, &ibat_adc_msb);
525         if (ret)
526                 return ret;
527
528         ret = regmap_read(bq->regmap, BQ25980_IBAT_ADC_LSB, &ibat_adc_lsb);
529         if (ret)
530                 return ret;
531
532         ibat_adc = (ibat_adc_msb << 8) | ibat_adc_lsb;
533
534         if (ibat_adc_msb & BQ25980_ADC_POLARITY_BIT)
535                 return ((ibat_adc ^ 0xffff) + 1) * BQ25980_ADC_CURR_STEP_uA;
536
537         return ibat_adc * BQ25980_ADC_CURR_STEP_uA;
538 }
539
540 static int bq25980_get_adc_vbat(struct bq25980_device *bq)
541 {
542         int vsys_adc_lsb, vsys_adc_msb;
543         u16 vsys_adc;
544         int ret;
545
546         ret = regmap_read(bq->regmap, BQ25980_VBAT_ADC_MSB, &vsys_adc_msb);
547         if (ret)
548                 return ret;
549
550         ret = regmap_read(bq->regmap, BQ25980_VBAT_ADC_LSB, &vsys_adc_lsb);
551         if (ret)
552                 return ret;
553
554         vsys_adc = (vsys_adc_msb << 8) | vsys_adc_lsb;
555
556         return vsys_adc * BQ25980_ADC_VOLT_STEP_uV;
557 }
558
559 static int bq25980_get_state(struct bq25980_device *bq,
560                                 struct bq25980_state *state)
561 {
562         unsigned int chg_ctrl_2;
563         unsigned int stat1;
564         unsigned int stat2;
565         unsigned int stat3;
566         unsigned int stat4;
567         unsigned int ibat_adc_msb;
568         int ret;
569
570         ret = regmap_read(bq->regmap, BQ25980_STAT1, &stat1);
571         if (ret)
572                 return ret;
573
574         ret = regmap_read(bq->regmap, BQ25980_STAT2, &stat2);
575         if (ret)
576                 return ret;
577
578         ret = regmap_read(bq->regmap, BQ25980_STAT3, &stat3);
579         if (ret)
580                 return ret;
581
582         ret = regmap_read(bq->regmap, BQ25980_STAT4, &stat4);
583         if (ret)
584                 return ret;
585
586         ret = regmap_read(bq->regmap, BQ25980_CHRGR_CTRL_2, &chg_ctrl_2);
587         if (ret)
588                 return ret;
589
590         ret = regmap_read(bq->regmap, BQ25980_IBAT_ADC_MSB, &ibat_adc_msb);
591         if (ret)
592                 return ret;
593
594         state->dischg = ibat_adc_msb & BQ25980_ADC_POLARITY_BIT;
595         state->ovp = (stat1 & BQ25980_STAT1_OVP_MASK) |
596                 (stat3 & BQ25980_STAT3_OVP_MASK);
597         state->ocp = (stat1 & BQ25980_STAT1_OCP_MASK) |
598                 (stat2 & BQ25980_STAT2_OCP_MASK);
599         state->tflt = stat4 & BQ25980_STAT4_TFLT_MASK;
600         state->wdt = stat4 & BQ25980_WD_STAT;
601         state->online = stat3 & BQ25980_PRESENT_MASK;
602         state->ce = chg_ctrl_2 & BQ25980_CHG_EN;
603         state->hiz = chg_ctrl_2 & BQ25980_EN_HIZ;
604         state->bypass = chg_ctrl_2 & BQ25980_EN_BYPASS;
605
606         return 0;
607 }
608
609 static int bq25980_set_battery_property(struct power_supply *psy,
610                                 enum power_supply_property psp,
611                                 const union power_supply_propval *val)
612 {
613         struct bq25980_device *bq = power_supply_get_drvdata(psy);
614         int ret = 0;
615
616         switch (psp) {
617         case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT:
618                 ret = bq25980_set_const_charge_curr(bq, val->intval);
619                 if (ret)
620                         return ret;
621                 break;
622
623         case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE:
624                 ret = bq25980_set_const_charge_volt(bq, val->intval);
625                 if (ret)
626                         return ret;
627                 break;
628
629         default:
630                 return -EINVAL;
631         }
632
633         return ret;
634 }
635
636 static int bq25980_get_battery_property(struct power_supply *psy,
637                                 enum power_supply_property psp,
638                                 union power_supply_propval *val)
639 {
640         struct bq25980_device *bq = power_supply_get_drvdata(psy);
641         int ret = 0;
642
643         switch (psp) {
644         case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
645                 val->intval = bq->init_data.ichg_max;
646                 break;
647
648         case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX:
649                 val->intval = bq->init_data.vreg_max;
650                 break;
651
652         case POWER_SUPPLY_PROP_CURRENT_NOW:
653                 ret = bq25980_get_ibat_adc(bq);
654                 val->intval = ret;
655                 break;
656
657         case POWER_SUPPLY_PROP_VOLTAGE_NOW:
658                 ret = bq25980_get_adc_vbat(bq);
659                 if (ret < 0)
660                         return ret;
661
662                 val->intval = ret;
663                 break;
664
665         default:
666                 return -EINVAL;
667         }
668
669         return ret;
670 }
671
672 static int bq25980_set_charger_property(struct power_supply *psy,
673                 enum power_supply_property prop,
674                 const union power_supply_propval *val)
675 {
676         struct bq25980_device *bq = power_supply_get_drvdata(psy);
677         int ret = -EINVAL;
678
679         switch (prop) {
680         case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
681                 ret = bq25980_set_input_curr_lim(bq, val->intval);
682                 if (ret)
683                         return ret;
684                 break;
685
686         case POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT:
687                 ret = bq25980_set_input_volt_lim(bq, val->intval);
688                 if (ret)
689                         return ret;
690                 break;
691
692         case POWER_SUPPLY_PROP_CHARGE_TYPE:
693                 ret = bq25980_set_bypass(bq, val->intval);
694                 if (ret)
695                         return ret;
696                 break;
697
698         case POWER_SUPPLY_PROP_STATUS:
699                 ret = bq25980_set_chg_en(bq, val->intval);
700                 if (ret)
701                         return ret;
702                 break;
703
704         default:
705                 return -EINVAL;
706         }
707
708         return ret;
709 }
710
711 static int bq25980_get_charger_property(struct power_supply *psy,
712                                 enum power_supply_property psp,
713                                 union power_supply_propval *val)
714 {
715         struct bq25980_device *bq = power_supply_get_drvdata(psy);
716         struct bq25980_state state;
717         int ret = 0;
718
719         mutex_lock(&bq->lock);
720         ret = bq25980_get_state(bq, &state);
721         mutex_unlock(&bq->lock);
722         if (ret)
723                 return ret;
724
725         switch (psp) {
726         case POWER_SUPPLY_PROP_MANUFACTURER:
727                 val->strval = BQ25980_MANUFACTURER;
728                 break;
729         case POWER_SUPPLY_PROP_MODEL_NAME:
730                 val->strval = bq->model_name;
731                 break;
732         case POWER_SUPPLY_PROP_ONLINE:
733                 val->intval = state.online;
734                 break;
735
736         case POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT:
737                 ret = bq25980_get_input_volt_lim(bq);
738                 if (ret < 0)
739                         return ret;
740                 val->intval = ret;
741                 break;
742
743         case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
744                 ret = bq25980_get_input_curr_lim(bq);
745                 if (ret < 0)
746                         return ret;
747
748                 val->intval = ret;
749                 break;
750
751         case POWER_SUPPLY_PROP_HEALTH:
752                 val->intval = POWER_SUPPLY_HEALTH_GOOD;
753
754                 if (state.tflt)
755                         val->intval = POWER_SUPPLY_HEALTH_OVERHEAT;
756                 else if (state.ovp)
757                         val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
758                 else if (state.ocp)
759                         val->intval = POWER_SUPPLY_HEALTH_OVERCURRENT;
760                 else if (state.wdt)
761                         val->intval =
762                                 POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE;
763                 break;
764
765         case POWER_SUPPLY_PROP_STATUS:
766                 val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
767
768                 if ((state.ce) && (!state.hiz))
769                         val->intval = POWER_SUPPLY_STATUS_CHARGING;
770                 else if (state.dischg)
771                         val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
772                 else if (!state.ce)
773                         val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
774                 break;
775
776         case POWER_SUPPLY_PROP_CHARGE_TYPE:
777                 val->intval = POWER_SUPPLY_CHARGE_TYPE_UNKNOWN;
778
779                 if (!state.ce)
780                         val->intval = POWER_SUPPLY_CHARGE_TYPE_NONE;
781                 else if (state.bypass)
782                         val->intval = POWER_SUPPLY_CHARGE_TYPE_FAST;
783                 else if (!state.bypass)
784                         val->intval = POWER_SUPPLY_CHARGE_TYPE_STANDARD;
785                 break;
786
787         case POWER_SUPPLY_PROP_CURRENT_NOW:
788                 ret = bq25980_get_adc_ibus(bq);
789                 if (ret < 0)
790                         return ret;
791
792                 val->intval = ret;
793                 break;
794
795         case POWER_SUPPLY_PROP_VOLTAGE_NOW:
796                 ret = bq25980_get_adc_vbus(bq);
797                 if (ret < 0)
798                         return ret;
799
800                 val->intval = ret;
801                 break;
802
803         case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT:
804                 ret = bq25980_get_const_charge_curr(bq);
805                 if (ret < 0)
806                         return ret;
807
808                 val->intval = ret;
809                 break;
810
811         case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE:
812                 ret = bq25980_get_const_charge_volt(bq);
813                 if (ret < 0)
814                         return ret;
815
816                 val->intval = ret;
817                 break;
818
819         default:
820                 return -EINVAL;
821         }
822
823         return ret;
824 }
825
826 static bool bq25980_state_changed(struct bq25980_device *bq,
827                                   struct bq25980_state *new_state)
828 {
829         struct bq25980_state old_state;
830
831         mutex_lock(&bq->lock);
832         old_state = bq->state;
833         mutex_unlock(&bq->lock);
834
835         return (old_state.dischg != new_state->dischg ||
836                 old_state.ovp != new_state->ovp ||
837                 old_state.ocp != new_state->ocp ||
838                 old_state.online != new_state->online ||
839                 old_state.wdt != new_state->wdt ||
840                 old_state.tflt != new_state->tflt ||
841                 old_state.ce != new_state->ce ||
842                 old_state.hiz != new_state->hiz ||
843                 old_state.bypass != new_state->bypass);
844 }
845
846 static irqreturn_t bq25980_irq_handler_thread(int irq, void *private)
847 {
848         struct bq25980_device *bq = private;
849         struct bq25980_state state;
850         int ret;
851
852         ret = bq25980_get_state(bq, &state);
853         if (ret < 0)
854                 goto irq_out;
855
856         if (!bq25980_state_changed(bq, &state))
857                 goto irq_out;
858
859         mutex_lock(&bq->lock);
860         bq->state = state;
861         mutex_unlock(&bq->lock);
862
863         power_supply_changed(bq->charger);
864
865 irq_out:
866         return IRQ_HANDLED;
867 }
868
869 static enum power_supply_property bq25980_power_supply_props[] = {
870         POWER_SUPPLY_PROP_MANUFACTURER,
871         POWER_SUPPLY_PROP_MODEL_NAME,
872         POWER_SUPPLY_PROP_STATUS,
873         POWER_SUPPLY_PROP_ONLINE,
874         POWER_SUPPLY_PROP_HEALTH,
875         POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT,
876         POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
877         POWER_SUPPLY_PROP_CHARGE_TYPE,
878         POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT,
879         POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE,
880         POWER_SUPPLY_PROP_CURRENT_NOW,
881         POWER_SUPPLY_PROP_VOLTAGE_NOW,
882 };
883
884 static enum power_supply_property bq25980_battery_props[] = {
885         POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX,
886         POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX,
887         POWER_SUPPLY_PROP_CURRENT_NOW,
888         POWER_SUPPLY_PROP_VOLTAGE_NOW,
889 };
890
891 static char *bq25980_charger_supplied_to[] = {
892         "main-battery",
893 };
894
895 static int bq25980_property_is_writeable(struct power_supply *psy,
896                                          enum power_supply_property prop)
897 {
898         switch (prop) {
899         case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
900         case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE:
901         case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT:
902         case POWER_SUPPLY_PROP_CHARGE_TYPE:
903         case POWER_SUPPLY_PROP_STATUS:
904         case POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT:
905                 return true;
906         default:
907                 return false;
908         }
909 }
910
911 static const struct power_supply_desc bq25980_power_supply_desc = {
912         .name = "bq25980-charger",
913         .type = POWER_SUPPLY_TYPE_MAINS,
914         .properties = bq25980_power_supply_props,
915         .num_properties = ARRAY_SIZE(bq25980_power_supply_props),
916         .get_property = bq25980_get_charger_property,
917         .set_property = bq25980_set_charger_property,
918         .property_is_writeable = bq25980_property_is_writeable,
919 };
920
921 static struct power_supply_desc bq25980_battery_desc = {
922         .name                   = "bq25980-battery",
923         .type                   = POWER_SUPPLY_TYPE_BATTERY,
924         .get_property           = bq25980_get_battery_property,
925         .set_property           = bq25980_set_battery_property,
926         .properties             = bq25980_battery_props,
927         .num_properties         = ARRAY_SIZE(bq25980_battery_props),
928         .property_is_writeable  = bq25980_property_is_writeable,
929 };
930
931
932 static bool bq25980_is_volatile_reg(struct device *dev, unsigned int reg)
933 {
934         switch (reg) {
935         case BQ25980_CHRGR_CTRL_2:
936         case BQ25980_STAT1...BQ25980_FLAG5:
937         case BQ25980_ADC_CONTROL1...BQ25980_TDIE_ADC_LSB:
938                 return true;
939         default:
940                 return false;
941         }
942 }
943
944 static const struct regmap_config bq25980_regmap_config = {
945         .reg_bits = 8,
946         .val_bits = 8,
947
948         .max_register = BQ25980_CHRGR_CTRL_6,
949         .reg_defaults   = bq25980_reg_defs,
950         .num_reg_defaults = ARRAY_SIZE(bq25980_reg_defs),
951         .cache_type = REGCACHE_RBTREE,
952         .volatile_reg = bq25980_is_volatile_reg,
953 };
954
955 static const struct regmap_config bq25975_regmap_config = {
956         .reg_bits = 8,
957         .val_bits = 8,
958
959         .max_register = BQ25980_CHRGR_CTRL_6,
960         .reg_defaults   = bq25975_reg_defs,
961         .num_reg_defaults = ARRAY_SIZE(bq25975_reg_defs),
962         .cache_type = REGCACHE_RBTREE,
963         .volatile_reg = bq25980_is_volatile_reg,
964 };
965
966 static const struct regmap_config bq25960_regmap_config = {
967         .reg_bits = 8,
968         .val_bits = 8,
969
970         .max_register = BQ25980_CHRGR_CTRL_6,
971         .reg_defaults   = bq25960_reg_defs,
972         .num_reg_defaults = ARRAY_SIZE(bq25960_reg_defs),
973         .cache_type = REGCACHE_RBTREE,
974         .volatile_reg = bq25980_is_volatile_reg,
975 };
976
977 static const struct bq25980_chip_info bq25980_chip_info_tbl[] = {
978         [BQ25980] = {
979                 .model_id = BQ25980,
980                 .regmap_config = &bq25980_regmap_config,
981
982                 .busocp_def = BQ25980_BUSOCP_DFLT_uA,
983                 .busocp_sc_min = BQ25960_BUSOCP_SC_MAX_uA,
984                 .busocp_sc_max = BQ25980_BUSOCP_SC_MAX_uA,
985                 .busocp_byp_max = BQ25980_BUSOCP_BYP_MAX_uA,
986                 .busocp_byp_min = BQ25980_BUSOCP_MIN_uA,
987
988                 .busovp_sc_def = BQ25980_BUSOVP_DFLT_uV,
989                 .busovp_byp_def = BQ25980_BUSOVP_BYPASS_DFLT_uV,
990                 .busovp_sc_step = BQ25980_BUSOVP_SC_STEP_uV,
991                 .busovp_sc_offset = BQ25980_BUSOVP_SC_OFFSET_uV,
992                 .busovp_byp_step = BQ25980_BUSOVP_BYP_STEP_uV,
993                 .busovp_byp_offset = BQ25980_BUSOVP_BYP_OFFSET_uV,
994                 .busovp_sc_min = BQ25980_BUSOVP_SC_MIN_uV,
995                 .busovp_sc_max = BQ25980_BUSOVP_SC_MAX_uV,
996                 .busovp_byp_min = BQ25980_BUSOVP_BYP_MIN_uV,
997                 .busovp_byp_max = BQ25980_BUSOVP_BYP_MAX_uV,
998
999                 .batovp_def = BQ25980_BATOVP_DFLT_uV,
1000                 .batovp_max = BQ25980_BATOVP_MAX_uV,
1001                 .batovp_min = BQ25980_BATOVP_MIN_uV,
1002                 .batovp_step = BQ25980_BATOVP_STEP_uV,
1003                 .batovp_offset = BQ25980_BATOVP_OFFSET_uV,
1004
1005                 .batocp_def = BQ25980_BATOCP_DFLT_uA,
1006                 .batocp_max = BQ25980_BATOCP_MAX_uA,
1007         },
1008
1009         [BQ25975] = {
1010                 .model_id = BQ25975,
1011                 .regmap_config = &bq25975_regmap_config,
1012
1013                 .busocp_def = BQ25975_BUSOCP_DFLT_uA,
1014                 .busocp_sc_min = BQ25975_BUSOCP_SC_MAX_uA,
1015                 .busocp_sc_max = BQ25975_BUSOCP_SC_MAX_uA,
1016                 .busocp_byp_min = BQ25980_BUSOCP_MIN_uA,
1017                 .busocp_byp_max = BQ25975_BUSOCP_BYP_MAX_uA,
1018
1019                 .busovp_sc_def = BQ25975_BUSOVP_DFLT_uV,
1020                 .busovp_byp_def = BQ25975_BUSOVP_BYPASS_DFLT_uV,
1021                 .busovp_sc_step = BQ25975_BUSOVP_SC_STEP_uV,
1022                 .busovp_sc_offset = BQ25975_BUSOVP_SC_OFFSET_uV,
1023                 .busovp_byp_step = BQ25975_BUSOVP_BYP_STEP_uV,
1024                 .busovp_byp_offset = BQ25975_BUSOVP_BYP_OFFSET_uV,
1025                 .busovp_sc_min = BQ25975_BUSOVP_SC_MIN_uV,
1026                 .busovp_sc_max = BQ25975_BUSOVP_SC_MAX_uV,
1027                 .busovp_byp_min = BQ25975_BUSOVP_BYP_MIN_uV,
1028                 .busovp_byp_max = BQ25975_BUSOVP_BYP_MAX_uV,
1029
1030                 .batovp_def = BQ25975_BATOVP_DFLT_uV,
1031                 .batovp_max = BQ25975_BATOVP_MAX_uV,
1032                 .batovp_min = BQ25975_BATOVP_MIN_uV,
1033                 .batovp_step = BQ25975_BATOVP_STEP_uV,
1034                 .batovp_offset = BQ25975_BATOVP_OFFSET_uV,
1035
1036                 .batocp_def = BQ25980_BATOCP_DFLT_uA,
1037                 .batocp_max = BQ25980_BATOCP_MAX_uA,
1038         },
1039
1040         [BQ25960] = {
1041                 .model_id = BQ25960,
1042                 .regmap_config = &bq25960_regmap_config,
1043
1044                 .busocp_def = BQ25960_BUSOCP_DFLT_uA,
1045                 .busocp_sc_min = BQ25960_BUSOCP_SC_MAX_uA,
1046                 .busocp_sc_max = BQ25960_BUSOCP_SC_MAX_uA,
1047                 .busocp_byp_min = BQ25960_BUSOCP_SC_MAX_uA,
1048                 .busocp_byp_max = BQ25960_BUSOCP_BYP_MAX_uA,
1049
1050                 .busovp_sc_def = BQ25975_BUSOVP_DFLT_uV,
1051                 .busovp_byp_def = BQ25975_BUSOVP_BYPASS_DFLT_uV,
1052                 .busovp_sc_step = BQ25960_BUSOVP_SC_STEP_uV,
1053                 .busovp_sc_offset = BQ25960_BUSOVP_SC_OFFSET_uV,
1054                 .busovp_byp_step = BQ25960_BUSOVP_BYP_STEP_uV,
1055                 .busovp_byp_offset = BQ25960_BUSOVP_BYP_OFFSET_uV,
1056                 .busovp_sc_min = BQ25960_BUSOVP_SC_MIN_uV,
1057                 .busovp_sc_max = BQ25960_BUSOVP_SC_MAX_uV,
1058                 .busovp_byp_min = BQ25960_BUSOVP_BYP_MIN_uV,
1059                 .busovp_byp_max = BQ25960_BUSOVP_BYP_MAX_uV,
1060
1061                 .batovp_def = BQ25960_BATOVP_DFLT_uV,
1062                 .batovp_max = BQ25960_BATOVP_MAX_uV,
1063                 .batovp_min = BQ25960_BATOVP_MIN_uV,
1064                 .batovp_step = BQ25960_BATOVP_STEP_uV,
1065                 .batovp_offset = BQ25960_BATOVP_OFFSET_uV,
1066
1067                 .batocp_def = BQ25960_BATOCP_DFLT_uA,
1068                 .batocp_max = BQ25960_BATOCP_MAX_uA,
1069         },
1070 };
1071
1072 static int bq25980_power_supply_init(struct bq25980_device *bq,
1073                                                         struct device *dev)
1074 {
1075         struct power_supply_config psy_cfg = { .drv_data = bq,
1076                                                 .of_node = dev->of_node, };
1077
1078         psy_cfg.supplied_to = bq25980_charger_supplied_to;
1079         psy_cfg.num_supplicants = ARRAY_SIZE(bq25980_charger_supplied_to);
1080
1081         bq->charger = devm_power_supply_register(bq->dev,
1082                                                  &bq25980_power_supply_desc,
1083                                                  &psy_cfg);
1084         if (IS_ERR(bq->charger))
1085                 return -EINVAL;
1086
1087         bq->battery = devm_power_supply_register(bq->dev,
1088                                                       &bq25980_battery_desc,
1089                                                       &psy_cfg);
1090         if (IS_ERR(bq->battery))
1091                 return -EINVAL;
1092
1093         return 0;
1094 }
1095
1096 static int bq25980_hw_init(struct bq25980_device *bq)
1097 {
1098         struct power_supply_battery_info bat_info = { };
1099         int wd_reg_val = BQ25980_WATCHDOG_DIS;
1100         int wd_max_val = BQ25980_NUM_WD_VAL - 1;
1101         int ret = 0;
1102         int curr_val;
1103         int volt_val;
1104         int i;
1105
1106         if (bq->watchdog_timer) {
1107                 if (bq->watchdog_timer >= bq25980_watchdog_time[wd_max_val])
1108                         wd_reg_val = wd_max_val;
1109                 else {
1110                         for (i = 0; i < wd_max_val; i++) {
1111                                 if (bq->watchdog_timer > bq25980_watchdog_time[i] &&
1112                                     bq->watchdog_timer < bq25980_watchdog_time[i + 1]) {
1113                                         wd_reg_val = i;
1114                                         break;
1115                                 }
1116                         }
1117                 }
1118         }
1119
1120         ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_3,
1121                                  BQ25980_WATCHDOG_MASK, wd_reg_val);
1122         if (ret)
1123                 return ret;
1124
1125         ret = power_supply_get_battery_info(bq->charger, &bat_info);
1126         if (ret) {
1127                 dev_warn(bq->dev, "battery info missing\n");
1128                 return -EINVAL;
1129         }
1130
1131         bq->init_data.ichg_max = bat_info.constant_charge_current_max_ua;
1132         bq->init_data.vreg_max = bat_info.constant_charge_voltage_max_uv;
1133
1134         if (bq->state.bypass) {
1135                 ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_2,
1136                                         BQ25980_EN_BYPASS, BQ25980_EN_BYPASS);
1137                 if (ret)
1138                         return ret;
1139
1140                 curr_val = bq->init_data.bypass_ilim;
1141                 volt_val = bq->init_data.bypass_vlim;
1142         } else {
1143                 curr_val = bq->init_data.sc_ilim;
1144                 volt_val = bq->init_data.sc_vlim;
1145         }
1146
1147         ret = bq25980_set_input_curr_lim(bq, curr_val);
1148         if (ret)
1149                 return ret;
1150
1151         ret = bq25980_set_input_volt_lim(bq, volt_val);
1152         if (ret)
1153                 return ret;
1154
1155         return regmap_update_bits(bq->regmap, BQ25980_ADC_CONTROL1,
1156                                  BQ25980_ADC_EN, BQ25980_ADC_EN);
1157 }
1158
1159 static int bq25980_parse_dt(struct bq25980_device *bq)
1160 {
1161         int ret;
1162
1163         ret = device_property_read_u32(bq->dev, "ti,watchdog-timeout-ms",
1164                                        &bq->watchdog_timer);
1165         if (ret)
1166                 bq->watchdog_timer = BQ25980_WATCHDOG_MIN;
1167
1168         if (bq->watchdog_timer > BQ25980_WATCHDOG_MAX ||
1169             bq->watchdog_timer < BQ25980_WATCHDOG_MIN)
1170                 return -EINVAL;
1171
1172         ret = device_property_read_u32(bq->dev,
1173                                        "ti,sc-ovp-limit-microvolt",
1174                                        &bq->init_data.sc_vlim);
1175         if (ret)
1176                 bq->init_data.sc_vlim = bq->chip_info->busovp_sc_def;
1177
1178         if (bq->init_data.sc_vlim > bq->chip_info->busovp_sc_max ||
1179             bq->init_data.sc_vlim < bq->chip_info->busovp_sc_min) {
1180                 dev_err(bq->dev, "SC ovp limit is out of range\n");
1181                 return -EINVAL;
1182         }
1183
1184         ret = device_property_read_u32(bq->dev,
1185                                        "ti,sc-ocp-limit-microamp",
1186                                        &bq->init_data.sc_ilim);
1187         if (ret)
1188                 bq->init_data.sc_ilim = bq->chip_info->busocp_def;
1189
1190         if (bq->init_data.sc_ilim > bq->chip_info->busocp_sc_max ||
1191             bq->init_data.sc_ilim < bq->chip_info->busocp_sc_min) {
1192                 dev_err(bq->dev, "SC ocp limit is out of range\n");
1193                 return -EINVAL;
1194         }
1195
1196         ret = device_property_read_u32(bq->dev,
1197                                        "ti,bypass-ovp-limit-microvolt",
1198                                        &bq->init_data.bypass_vlim);
1199         if (ret)
1200                 bq->init_data.bypass_vlim = bq->chip_info->busovp_byp_def;
1201
1202         if (bq->init_data.bypass_vlim > bq->chip_info->busovp_byp_max ||
1203             bq->init_data.bypass_vlim < bq->chip_info->busovp_byp_min) {
1204                 dev_err(bq->dev, "Bypass ovp limit is out of range\n");
1205                 return -EINVAL;
1206         }
1207
1208         ret = device_property_read_u32(bq->dev,
1209                                        "ti,bypass-ocp-limit-microamp",
1210                                        &bq->init_data.bypass_ilim);
1211         if (ret)
1212                 bq->init_data.bypass_ilim = bq->chip_info->busocp_def;
1213
1214         if (bq->init_data.bypass_ilim > bq->chip_info->busocp_byp_max ||
1215             bq->init_data.bypass_ilim < bq->chip_info->busocp_byp_min) {
1216                 dev_err(bq->dev, "Bypass ocp limit is out of range\n");
1217                 return -EINVAL;
1218         }
1219
1220
1221         bq->state.bypass = device_property_read_bool(bq->dev,
1222                                                       "ti,bypass-enable");
1223         return 0;
1224 }
1225
1226 static int bq25980_probe(struct i2c_client *client,
1227                          const struct i2c_device_id *id)
1228 {
1229         struct device *dev = &client->dev;
1230         struct bq25980_device *bq;
1231         int ret;
1232
1233         bq = devm_kzalloc(dev, sizeof(*bq), GFP_KERNEL);
1234         if (!bq)
1235                 return -ENOMEM;
1236
1237         bq->client = client;
1238         bq->dev = dev;
1239
1240         mutex_init(&bq->lock);
1241
1242         strncpy(bq->model_name, id->name, I2C_NAME_SIZE);
1243         bq->chip_info = &bq25980_chip_info_tbl[id->driver_data];
1244
1245         bq->regmap = devm_regmap_init_i2c(client,
1246                                           bq->chip_info->regmap_config);
1247         if (IS_ERR(bq->regmap)) {
1248                 dev_err(dev, "Failed to allocate register map\n");
1249                 return PTR_ERR(bq->regmap);
1250         }
1251
1252         i2c_set_clientdata(client, bq);
1253
1254         ret = bq25980_parse_dt(bq);
1255         if (ret) {
1256                 dev_err(dev, "Failed to read device tree properties%d\n", ret);
1257                 return ret;
1258         }
1259
1260         if (client->irq) {
1261                 ret = devm_request_threaded_irq(dev, client->irq, NULL,
1262                                                 bq25980_irq_handler_thread,
1263                                                 IRQF_TRIGGER_FALLING |
1264                                                 IRQF_ONESHOT,
1265                                                 dev_name(&client->dev), bq);
1266                 if (ret)
1267                         return ret;
1268         }
1269
1270         ret = bq25980_power_supply_init(bq, dev);
1271         if (ret) {
1272                 dev_err(dev, "Failed to register power supply\n");
1273                 return ret;
1274         }
1275
1276         ret = bq25980_hw_init(bq);
1277         if (ret) {
1278                 dev_err(dev, "Cannot initialize the chip.\n");
1279                 return ret;
1280         }
1281
1282         return 0;
1283 }
1284
1285 static const struct i2c_device_id bq25980_i2c_ids[] = {
1286         { "bq25980", BQ25980 },
1287         { "bq25975", BQ25975 },
1288         { "bq25975", BQ25975 },
1289         {},
1290 };
1291 MODULE_DEVICE_TABLE(i2c, bq25980_i2c_ids);
1292
1293 static const struct of_device_id bq25980_of_match[] = {
1294         { .compatible = "ti,bq25980", .data = (void *)BQ25980 },
1295         { .compatible = "ti,bq25975", .data = (void *)BQ25975 },
1296         { .compatible = "ti,bq25960", .data = (void *)BQ25960 },
1297         { },
1298 };
1299 MODULE_DEVICE_TABLE(of, bq25980_of_match);
1300
1301 static struct i2c_driver bq25980_driver = {
1302         .driver = {
1303                 .name = "bq25980-charger",
1304                 .of_match_table = bq25980_of_match,
1305         },
1306         .probe = bq25980_probe,
1307         .id_table = bq25980_i2c_ids,
1308 };
1309 module_i2c_driver(bq25980_driver);
1310
1311 MODULE_AUTHOR("Dan Murphy <dmurphy@ti.com>");
1312 MODULE_AUTHOR("Ricardo Rivera-Matos <r-rivera-matos@ti.com>");
1313 MODULE_DESCRIPTION("bq25980 charger driver");
1314 MODULE_LICENSE("GPL v2");