2 * BQ27xxx battery driver
4 * Copyright (C) 2008 Rodolfo Giometti <giometti@linux.it>
5 * Copyright (C) 2008 Eurotech S.p.A. <info@eurotech.it>
6 * Copyright (C) 2010-2011 Lars-Peter Clausen <lars@metafoo.de>
7 * Copyright (C) 2011 Pali Rohár <pali.rohar@gmail.com>
9 * Based on a previous work by Copyright (C) 2008 Texas Instruments, Inc.
11 * This package is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
15 * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
16 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
17 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
20 * http://www.ti.com/product/bq27000
21 * http://www.ti.com/product/bq27200
22 * http://www.ti.com/product/bq27010
23 * http://www.ti.com/product/bq27210
24 * http://www.ti.com/product/bq27500
25 * http://www.ti.com/product/bq27510-g3
26 * http://www.ti.com/product/bq27520-g4
27 * http://www.ti.com/product/bq27530-g1
28 * http://www.ti.com/product/bq27531-g1
29 * http://www.ti.com/product/bq27541-g1
30 * http://www.ti.com/product/bq27542-g1
31 * http://www.ti.com/product/bq27546-g1
32 * http://www.ti.com/product/bq27742-g1
33 * http://www.ti.com/product/bq27545-g1
34 * http://www.ti.com/product/bq27421-g1
35 * http://www.ti.com/product/bq27425-g1
36 * http://www.ti.com/product/bq27411-g1
37 * http://www.ti.com/product/bq27621-g1
40 #include <linux/device.h>
41 #include <linux/module.h>
42 #include <linux/param.h>
43 #include <linux/jiffies.h>
44 #include <linux/workqueue.h>
45 #include <linux/delay.h>
46 #include <linux/platform_device.h>
47 #include <linux/power_supply.h>
48 #include <linux/slab.h>
51 #include <linux/power/bq27xxx_battery.h>
53 #define DRIVER_VERSION "1.2.0"
55 #define BQ27XXX_MANUFACTURER "Texas Instruments"
58 #define BQ27XXX_FLAG_DSC BIT(0)
59 #define BQ27XXX_FLAG_SOCF BIT(1) /* State-of-Charge threshold final */
60 #define BQ27XXX_FLAG_SOC1 BIT(2) /* State-of-Charge threshold 1 */
61 #define BQ27XXX_FLAG_FC BIT(9)
62 #define BQ27XXX_FLAG_OTD BIT(14)
63 #define BQ27XXX_FLAG_OTC BIT(15)
64 #define BQ27XXX_FLAG_UT BIT(14)
65 #define BQ27XXX_FLAG_OT BIT(15)
67 /* BQ27000 has different layout for Flags register */
68 #define BQ27000_FLAG_EDVF BIT(0) /* Final End-of-Discharge-Voltage flag */
69 #define BQ27000_FLAG_EDV1 BIT(1) /* First End-of-Discharge-Voltage flag */
70 #define BQ27000_FLAG_CI BIT(4) /* Capacity Inaccurate flag */
71 #define BQ27000_FLAG_FC BIT(5)
72 #define BQ27000_FLAG_CHGS BIT(7) /* Charge state flag */
74 #define BQ27XXX_RS (20) /* Resistor sense mOhm */
75 #define BQ27XXX_POWER_CONSTANT (29200) /* 29.2 µV^2 * 1000 */
76 #define BQ27XXX_CURRENT_CONSTANT (3570) /* 3.57 µV * 1000 */
78 #define INVALID_REG_ADDR 0xff
81 * bq27xxx_reg_index - Register names
83 * These are indexes into a device's register mapping array.
85 enum bq27xxx_reg_index
{
86 BQ27XXX_REG_CTRL
= 0, /* Control */
87 BQ27XXX_REG_TEMP
, /* Temperature */
88 BQ27XXX_REG_INT_TEMP
, /* Internal Temperature */
89 BQ27XXX_REG_VOLT
, /* Voltage */
90 BQ27XXX_REG_AI
, /* Average Current */
91 BQ27XXX_REG_FLAGS
, /* Flags */
92 BQ27XXX_REG_TTE
, /* Time-to-Empty */
93 BQ27XXX_REG_TTF
, /* Time-to-Full */
94 BQ27XXX_REG_TTES
, /* Time-to-Empty Standby */
95 BQ27XXX_REG_TTECP
, /* Time-to-Empty at Constant Power */
96 BQ27XXX_REG_NAC
, /* Nominal Available Capacity */
97 BQ27XXX_REG_FCC
, /* Full Charge Capacity */
98 BQ27XXX_REG_CYCT
, /* Cycle Count */
99 BQ27XXX_REG_AE
, /* Available Energy */
100 BQ27XXX_REG_SOC
, /* State-of-Charge */
101 BQ27XXX_REG_DCAP
, /* Design Capacity */
102 BQ27XXX_REG_AP
, /* Average Power */
105 /* Register mappings */
106 static u8 bq27000_regs
[] = {
109 INVALID_REG_ADDR
, /* INT TEMP - NA*/
121 0x0b, /* SOC(RSOC) */
122 0x76, /* DCAP(ILMD) */
126 static u8 bq27010_regs
[] = {
129 INVALID_REG_ADDR
, /* INT TEMP - NA*/
140 INVALID_REG_ADDR
, /* AE - NA */
141 0x0b, /* SOC(RSOC) */
142 0x76, /* DCAP(ILMD) */
143 INVALID_REG_ADDR
, /* AP - NA */
146 static u8 bq27500_regs
[] = {
154 INVALID_REG_ADDR
, /* TTF - NA */
156 INVALID_REG_ADDR
, /* TTECP - NA */
160 INVALID_REG_ADDR
, /* AE - NA */
161 0x2c, /* SOC(RSOC) */
162 0x3c, /* DCAP(ILMD) */
163 INVALID_REG_ADDR
, /* AP - NA */
166 static u8 bq27530_regs
[] = {
174 INVALID_REG_ADDR
, /* TTF - NA */
175 INVALID_REG_ADDR
, /* TTES - NA */
176 INVALID_REG_ADDR
, /* TTECP - NA */
180 INVALID_REG_ADDR
, /* AE - NA */
181 0x2c, /* SOC(RSOC) */
182 INVALID_REG_ADDR
, /* DCAP - NA */
186 static u8 bq27541_regs
[] = {
194 INVALID_REG_ADDR
, /* TTF - NA */
195 INVALID_REG_ADDR
, /* TTES - NA */
196 INVALID_REG_ADDR
, /* TTECP - NA */
200 INVALID_REG_ADDR
, /* AE - NA */
201 0x2c, /* SOC(RSOC) */
206 static u8 bq27545_regs
[] = {
214 INVALID_REG_ADDR
, /* TTF - NA */
215 INVALID_REG_ADDR
, /* TTES - NA */
216 INVALID_REG_ADDR
, /* TTECP - NA */
220 INVALID_REG_ADDR
, /* AE - NA */
221 0x2c, /* SOC(RSOC) */
222 INVALID_REG_ADDR
, /* DCAP - NA */
226 static u8 bq27421_regs
[] = {
233 INVALID_REG_ADDR
, /* TTE - NA */
234 INVALID_REG_ADDR
, /* TTF - NA */
235 INVALID_REG_ADDR
, /* TTES - NA */
236 INVALID_REG_ADDR
, /* TTECP - NA */
239 INVALID_REG_ADDR
, /* CYCT - NA */
240 INVALID_REG_ADDR
, /* AE - NA */
246 static u8
*bq27xxx_regs
[] = {
247 [BQ27000
] = bq27000_regs
,
248 [BQ27010
] = bq27010_regs
,
249 [BQ27500
] = bq27500_regs
,
250 [BQ27530
] = bq27530_regs
,
251 [BQ27541
] = bq27541_regs
,
252 [BQ27545
] = bq27545_regs
,
253 [BQ27421
] = bq27421_regs
,
256 static enum power_supply_property bq27000_battery_props
[] = {
257 POWER_SUPPLY_PROP_STATUS
,
258 POWER_SUPPLY_PROP_PRESENT
,
259 POWER_SUPPLY_PROP_VOLTAGE_NOW
,
260 POWER_SUPPLY_PROP_CURRENT_NOW
,
261 POWER_SUPPLY_PROP_CAPACITY
,
262 POWER_SUPPLY_PROP_CAPACITY_LEVEL
,
263 POWER_SUPPLY_PROP_TEMP
,
264 POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW
,
265 POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG
,
266 POWER_SUPPLY_PROP_TIME_TO_FULL_NOW
,
267 POWER_SUPPLY_PROP_TECHNOLOGY
,
268 POWER_SUPPLY_PROP_CHARGE_FULL
,
269 POWER_SUPPLY_PROP_CHARGE_NOW
,
270 POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN
,
271 POWER_SUPPLY_PROP_CYCLE_COUNT
,
272 POWER_SUPPLY_PROP_ENERGY_NOW
,
273 POWER_SUPPLY_PROP_POWER_AVG
,
274 POWER_SUPPLY_PROP_HEALTH
,
275 POWER_SUPPLY_PROP_MANUFACTURER
,
278 static enum power_supply_property bq27010_battery_props
[] = {
279 POWER_SUPPLY_PROP_STATUS
,
280 POWER_SUPPLY_PROP_PRESENT
,
281 POWER_SUPPLY_PROP_VOLTAGE_NOW
,
282 POWER_SUPPLY_PROP_CURRENT_NOW
,
283 POWER_SUPPLY_PROP_CAPACITY
,
284 POWER_SUPPLY_PROP_CAPACITY_LEVEL
,
285 POWER_SUPPLY_PROP_TEMP
,
286 POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW
,
287 POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG
,
288 POWER_SUPPLY_PROP_TIME_TO_FULL_NOW
,
289 POWER_SUPPLY_PROP_TECHNOLOGY
,
290 POWER_SUPPLY_PROP_CHARGE_FULL
,
291 POWER_SUPPLY_PROP_CHARGE_NOW
,
292 POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN
,
293 POWER_SUPPLY_PROP_CYCLE_COUNT
,
294 POWER_SUPPLY_PROP_HEALTH
,
295 POWER_SUPPLY_PROP_MANUFACTURER
,
298 static enum power_supply_property bq27500_battery_props
[] = {
299 POWER_SUPPLY_PROP_STATUS
,
300 POWER_SUPPLY_PROP_PRESENT
,
301 POWER_SUPPLY_PROP_VOLTAGE_NOW
,
302 POWER_SUPPLY_PROP_CURRENT_NOW
,
303 POWER_SUPPLY_PROP_CAPACITY
,
304 POWER_SUPPLY_PROP_CAPACITY_LEVEL
,
305 POWER_SUPPLY_PROP_TEMP
,
306 POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW
,
307 POWER_SUPPLY_PROP_TECHNOLOGY
,
308 POWER_SUPPLY_PROP_CHARGE_FULL
,
309 POWER_SUPPLY_PROP_CHARGE_NOW
,
310 POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN
,
311 POWER_SUPPLY_PROP_CYCLE_COUNT
,
312 POWER_SUPPLY_PROP_HEALTH
,
313 POWER_SUPPLY_PROP_MANUFACTURER
,
316 static enum power_supply_property bq27530_battery_props
[] = {
317 POWER_SUPPLY_PROP_STATUS
,
318 POWER_SUPPLY_PROP_PRESENT
,
319 POWER_SUPPLY_PROP_VOLTAGE_NOW
,
320 POWER_SUPPLY_PROP_CURRENT_NOW
,
321 POWER_SUPPLY_PROP_CAPACITY
,
322 POWER_SUPPLY_PROP_CAPACITY_LEVEL
,
323 POWER_SUPPLY_PROP_TEMP
,
324 POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW
,
325 POWER_SUPPLY_PROP_TECHNOLOGY
,
326 POWER_SUPPLY_PROP_CHARGE_FULL
,
327 POWER_SUPPLY_PROP_CHARGE_NOW
,
328 POWER_SUPPLY_PROP_POWER_AVG
,
329 POWER_SUPPLY_PROP_HEALTH
,
330 POWER_SUPPLY_PROP_CYCLE_COUNT
,
331 POWER_SUPPLY_PROP_MANUFACTURER
,
334 static enum power_supply_property bq27541_battery_props
[] = {
335 POWER_SUPPLY_PROP_STATUS
,
336 POWER_SUPPLY_PROP_PRESENT
,
337 POWER_SUPPLY_PROP_VOLTAGE_NOW
,
338 POWER_SUPPLY_PROP_CURRENT_NOW
,
339 POWER_SUPPLY_PROP_CAPACITY
,
340 POWER_SUPPLY_PROP_CAPACITY_LEVEL
,
341 POWER_SUPPLY_PROP_TEMP
,
342 POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW
,
343 POWER_SUPPLY_PROP_TECHNOLOGY
,
344 POWER_SUPPLY_PROP_CHARGE_FULL
,
345 POWER_SUPPLY_PROP_CHARGE_NOW
,
346 POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN
,
347 POWER_SUPPLY_PROP_CYCLE_COUNT
,
348 POWER_SUPPLY_PROP_POWER_AVG
,
349 POWER_SUPPLY_PROP_HEALTH
,
350 POWER_SUPPLY_PROP_MANUFACTURER
,
353 static enum power_supply_property bq27545_battery_props
[] = {
354 POWER_SUPPLY_PROP_STATUS
,
355 POWER_SUPPLY_PROP_PRESENT
,
356 POWER_SUPPLY_PROP_VOLTAGE_NOW
,
357 POWER_SUPPLY_PROP_CURRENT_NOW
,
358 POWER_SUPPLY_PROP_CAPACITY
,
359 POWER_SUPPLY_PROP_CAPACITY_LEVEL
,
360 POWER_SUPPLY_PROP_TEMP
,
361 POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW
,
362 POWER_SUPPLY_PROP_TECHNOLOGY
,
363 POWER_SUPPLY_PROP_CHARGE_FULL
,
364 POWER_SUPPLY_PROP_CHARGE_NOW
,
365 POWER_SUPPLY_PROP_HEALTH
,
366 POWER_SUPPLY_PROP_CYCLE_COUNT
,
367 POWER_SUPPLY_PROP_POWER_AVG
,
368 POWER_SUPPLY_PROP_MANUFACTURER
,
371 static enum power_supply_property bq27421_battery_props
[] = {
372 POWER_SUPPLY_PROP_STATUS
,
373 POWER_SUPPLY_PROP_PRESENT
,
374 POWER_SUPPLY_PROP_VOLTAGE_NOW
,
375 POWER_SUPPLY_PROP_CURRENT_NOW
,
376 POWER_SUPPLY_PROP_CAPACITY
,
377 POWER_SUPPLY_PROP_CAPACITY_LEVEL
,
378 POWER_SUPPLY_PROP_TEMP
,
379 POWER_SUPPLY_PROP_TECHNOLOGY
,
380 POWER_SUPPLY_PROP_CHARGE_FULL
,
381 POWER_SUPPLY_PROP_CHARGE_NOW
,
382 POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN
,
383 POWER_SUPPLY_PROP_MANUFACTURER
,
386 #define BQ27XXX_PROP(_id, _prop) \
389 .size = ARRAY_SIZE(_prop), \
393 enum power_supply_property
*props
;
395 } bq27xxx_battery_props
[] = {
396 BQ27XXX_PROP(BQ27000
, bq27000_battery_props
),
397 BQ27XXX_PROP(BQ27010
, bq27010_battery_props
),
398 BQ27XXX_PROP(BQ27500
, bq27500_battery_props
),
399 BQ27XXX_PROP(BQ27530
, bq27530_battery_props
),
400 BQ27XXX_PROP(BQ27541
, bq27541_battery_props
),
401 BQ27XXX_PROP(BQ27545
, bq27545_battery_props
),
402 BQ27XXX_PROP(BQ27421
, bq27421_battery_props
),
405 static unsigned int poll_interval
= 360;
406 module_param(poll_interval
, uint
, 0644);
407 MODULE_PARM_DESC(poll_interval
,
408 "battery poll interval in seconds - 0 disables polling");
411 * Common code for BQ27xxx devices
414 static inline int bq27xxx_read(struct bq27xxx_device_info
*di
, int reg_index
,
417 /* Reports EINVAL for invalid/missing registers */
418 if (!di
|| di
->regs
[reg_index
] == INVALID_REG_ADDR
)
421 return di
->bus
.read(di
, di
->regs
[reg_index
], single
);
425 * Return the battery State-of-Charge
426 * Or < 0 if something fails.
428 static int bq27xxx_battery_read_soc(struct bq27xxx_device_info
*di
)
432 if (di
->chip
== BQ27000
|| di
->chip
== BQ27010
)
433 soc
= bq27xxx_read(di
, BQ27XXX_REG_SOC
, true);
435 soc
= bq27xxx_read(di
, BQ27XXX_REG_SOC
, false);
438 dev_dbg(di
->dev
, "error reading State-of-Charge\n");
444 * Return a battery charge value in µAh
445 * Or < 0 if something fails.
447 static int bq27xxx_battery_read_charge(struct bq27xxx_device_info
*di
, u8 reg
)
451 charge
= bq27xxx_read(di
, reg
, false);
453 dev_dbg(di
->dev
, "error reading charge register %02x: %d\n",
458 if (di
->chip
== BQ27000
|| di
->chip
== BQ27010
)
459 charge
*= BQ27XXX_CURRENT_CONSTANT
/ BQ27XXX_RS
;
467 * Return the battery Nominal available capacity in µAh
468 * Or < 0 if something fails.
470 static inline int bq27xxx_battery_read_nac(struct bq27xxx_device_info
*di
)
474 if (di
->chip
== BQ27000
|| di
->chip
== BQ27010
) {
475 flags
= bq27xxx_read(di
, BQ27XXX_REG_FLAGS
, true);
476 if (flags
>= 0 && (flags
& BQ27000_FLAG_CI
))
480 return bq27xxx_battery_read_charge(di
, BQ27XXX_REG_NAC
);
484 * Return the battery Full Charge Capacity in µAh
485 * Or < 0 if something fails.
487 static inline int bq27xxx_battery_read_fcc(struct bq27xxx_device_info
*di
)
489 return bq27xxx_battery_read_charge(di
, BQ27XXX_REG_FCC
);
493 * Return the Design Capacity in µAh
494 * Or < 0 if something fails.
496 static int bq27xxx_battery_read_dcap(struct bq27xxx_device_info
*di
)
500 if (di
->chip
== BQ27000
|| di
->chip
== BQ27010
)
501 dcap
= bq27xxx_read(di
, BQ27XXX_REG_DCAP
, true);
503 dcap
= bq27xxx_read(di
, BQ27XXX_REG_DCAP
, false);
506 dev_dbg(di
->dev
, "error reading initial last measured discharge\n");
510 if (di
->chip
== BQ27000
|| di
->chip
== BQ27010
)
511 dcap
= (dcap
<< 8) * BQ27XXX_CURRENT_CONSTANT
/ BQ27XXX_RS
;
519 * Return the battery Available energy in µWh
520 * Or < 0 if something fails.
522 static int bq27xxx_battery_read_energy(struct bq27xxx_device_info
*di
)
526 ae
= bq27xxx_read(di
, BQ27XXX_REG_AE
, false);
528 dev_dbg(di
->dev
, "error reading available energy\n");
532 if (di
->chip
== BQ27000
|| di
->chip
== BQ27010
)
533 ae
*= BQ27XXX_POWER_CONSTANT
/ BQ27XXX_RS
;
541 * Return the battery temperature in tenths of degree Kelvin
542 * Or < 0 if something fails.
544 static int bq27xxx_battery_read_temperature(struct bq27xxx_device_info
*di
)
548 temp
= bq27xxx_read(di
, BQ27XXX_REG_TEMP
, false);
550 dev_err(di
->dev
, "error reading temperature\n");
554 if (di
->chip
== BQ27000
|| di
->chip
== BQ27010
)
561 * Return the battery Cycle count total
562 * Or < 0 if something fails.
564 static int bq27xxx_battery_read_cyct(struct bq27xxx_device_info
*di
)
568 cyct
= bq27xxx_read(di
, BQ27XXX_REG_CYCT
, false);
570 dev_err(di
->dev
, "error reading cycle count total\n");
576 * Read a time register.
577 * Return < 0 if something fails.
579 static int bq27xxx_battery_read_time(struct bq27xxx_device_info
*di
, u8 reg
)
583 tval
= bq27xxx_read(di
, reg
, false);
585 dev_dbg(di
->dev
, "error reading time register %02x: %d\n",
597 * Read an average power register.
598 * Return < 0 if something fails.
600 static int bq27xxx_battery_read_pwr_avg(struct bq27xxx_device_info
*di
)
604 tval
= bq27xxx_read(di
, BQ27XXX_REG_AP
, false);
606 dev_err(di
->dev
, "error reading average power register %02x: %d\n",
607 BQ27XXX_REG_AP
, tval
);
611 if (di
->chip
== BQ27000
|| di
->chip
== BQ27010
)
612 return (tval
* BQ27XXX_POWER_CONSTANT
) / BQ27XXX_RS
;
618 * Returns true if a battery over temperature condition is detected
620 static bool bq27xxx_battery_overtemp(struct bq27xxx_device_info
*di
, u16 flags
)
622 if (di
->chip
== BQ27500
|| di
->chip
== BQ27541
|| di
->chip
== BQ27545
)
623 return flags
& (BQ27XXX_FLAG_OTC
| BQ27XXX_FLAG_OTD
);
624 if (di
->chip
== BQ27530
|| di
->chip
== BQ27421
)
625 return flags
& BQ27XXX_FLAG_OT
;
631 * Returns true if a battery under temperature condition is detected
633 static bool bq27xxx_battery_undertemp(struct bq27xxx_device_info
*di
, u16 flags
)
635 if (di
->chip
== BQ27530
|| di
->chip
== BQ27421
)
636 return flags
& BQ27XXX_FLAG_UT
;
642 * Returns true if a low state of charge condition is detected
644 static bool bq27xxx_battery_dead(struct bq27xxx_device_info
*di
, u16 flags
)
646 if (di
->chip
== BQ27000
|| di
->chip
== BQ27010
)
647 return flags
& (BQ27000_FLAG_EDV1
| BQ27000_FLAG_EDVF
);
649 return flags
& (BQ27XXX_FLAG_SOC1
| BQ27XXX_FLAG_SOCF
);
653 * Read flag register.
654 * Return < 0 if something fails.
656 static int bq27xxx_battery_read_health(struct bq27xxx_device_info
*di
)
660 flags
= bq27xxx_read(di
, BQ27XXX_REG_FLAGS
, false);
662 dev_err(di
->dev
, "error reading flag register:%d\n", flags
);
666 /* Unlikely but important to return first */
667 if (unlikely(bq27xxx_battery_overtemp(di
, flags
)))
668 return POWER_SUPPLY_HEALTH_OVERHEAT
;
669 if (unlikely(bq27xxx_battery_undertemp(di
, flags
)))
670 return POWER_SUPPLY_HEALTH_COLD
;
671 if (unlikely(bq27xxx_battery_dead(di
, flags
)))
672 return POWER_SUPPLY_HEALTH_DEAD
;
674 return POWER_SUPPLY_HEALTH_GOOD
;
677 void bq27xxx_battery_update(struct bq27xxx_device_info
*di
)
679 struct bq27xxx_reg_cache cache
= {0, };
680 bool has_ci_flag
= di
->chip
== BQ27000
|| di
->chip
== BQ27010
;
681 bool has_singe_flag
= di
->chip
== BQ27000
|| di
->chip
== BQ27010
;
683 cache
.flags
= bq27xxx_read(di
, BQ27XXX_REG_FLAGS
, has_singe_flag
);
684 if ((cache
.flags
& 0xff) == 0xff)
685 cache
.flags
= -1; /* read error */
686 if (cache
.flags
>= 0) {
687 cache
.temperature
= bq27xxx_battery_read_temperature(di
);
688 if (has_ci_flag
&& (cache
.flags
& BQ27000_FLAG_CI
)) {
689 dev_info_once(di
->dev
, "battery is not calibrated! ignoring capacity values\n");
690 cache
.capacity
= -ENODATA
;
691 cache
.energy
= -ENODATA
;
692 cache
.time_to_empty
= -ENODATA
;
693 cache
.time_to_empty_avg
= -ENODATA
;
694 cache
.time_to_full
= -ENODATA
;
695 cache
.charge_full
= -ENODATA
;
696 cache
.health
= -ENODATA
;
698 if (di
->regs
[BQ27XXX_REG_TTE
] != INVALID_REG_ADDR
)
699 cache
.time_to_empty
= bq27xxx_battery_read_time(di
, BQ27XXX_REG_TTE
);
700 if (di
->regs
[BQ27XXX_REG_TTECP
] != INVALID_REG_ADDR
)
701 cache
.time_to_empty_avg
= bq27xxx_battery_read_time(di
, BQ27XXX_REG_TTECP
);
702 if (di
->regs
[BQ27XXX_REG_TTF
] != INVALID_REG_ADDR
)
703 cache
.time_to_full
= bq27xxx_battery_read_time(di
, BQ27XXX_REG_TTF
);
704 cache
.charge_full
= bq27xxx_battery_read_fcc(di
);
705 cache
.capacity
= bq27xxx_battery_read_soc(di
);
706 if (di
->regs
[BQ27XXX_REG_AE
] != INVALID_REG_ADDR
)
707 cache
.energy
= bq27xxx_battery_read_energy(di
);
708 cache
.health
= bq27xxx_battery_read_health(di
);
710 if (di
->regs
[BQ27XXX_REG_CYCT
] != INVALID_REG_ADDR
)
711 cache
.cycle_count
= bq27xxx_battery_read_cyct(di
);
712 if (di
->regs
[BQ27XXX_REG_AP
] != INVALID_REG_ADDR
)
713 cache
.power_avg
= bq27xxx_battery_read_pwr_avg(di
);
715 /* We only have to read charge design full once */
716 if (di
->charge_design_full
<= 0)
717 di
->charge_design_full
= bq27xxx_battery_read_dcap(di
);
720 if (di
->cache
.capacity
!= cache
.capacity
)
721 power_supply_changed(di
->bat
);
723 if (memcmp(&di
->cache
, &cache
, sizeof(cache
)) != 0)
726 di
->last_update
= jiffies
;
728 EXPORT_SYMBOL_GPL(bq27xxx_battery_update
);
730 static void bq27xxx_battery_poll(struct work_struct
*work
)
732 struct bq27xxx_device_info
*di
=
733 container_of(work
, struct bq27xxx_device_info
,
736 bq27xxx_battery_update(di
);
738 if (poll_interval
> 0) {
739 /* The timer does not have to be accurate. */
740 set_timer_slack(&di
->work
.timer
, poll_interval
* HZ
/ 4);
741 schedule_delayed_work(&di
->work
, poll_interval
* HZ
);
746 * Return the battery average current in µA
747 * Note that current can be negative signed as well
748 * Or 0 if something fails.
750 static int bq27xxx_battery_current(struct bq27xxx_device_info
*di
,
751 union power_supply_propval
*val
)
756 curr
= bq27xxx_read(di
, BQ27XXX_REG_AI
, false);
758 dev_err(di
->dev
, "error reading current\n");
762 if (di
->chip
== BQ27000
|| di
->chip
== BQ27010
) {
763 flags
= bq27xxx_read(di
, BQ27XXX_REG_FLAGS
, false);
764 if (flags
& BQ27000_FLAG_CHGS
) {
765 dev_dbg(di
->dev
, "negative current!\n");
769 val
->intval
= curr
* BQ27XXX_CURRENT_CONSTANT
/ BQ27XXX_RS
;
771 /* Other gauges return signed value */
772 val
->intval
= (int)((s16
)curr
) * 1000;
778 static int bq27xxx_battery_status(struct bq27xxx_device_info
*di
,
779 union power_supply_propval
*val
)
783 if (di
->chip
== BQ27000
|| di
->chip
== BQ27010
) {
784 if (di
->cache
.flags
& BQ27000_FLAG_FC
)
785 status
= POWER_SUPPLY_STATUS_FULL
;
786 else if (di
->cache
.flags
& BQ27000_FLAG_CHGS
)
787 status
= POWER_SUPPLY_STATUS_CHARGING
;
788 else if (power_supply_am_i_supplied(di
->bat
))
789 status
= POWER_SUPPLY_STATUS_NOT_CHARGING
;
791 status
= POWER_SUPPLY_STATUS_DISCHARGING
;
793 if (di
->cache
.flags
& BQ27XXX_FLAG_FC
)
794 status
= POWER_SUPPLY_STATUS_FULL
;
795 else if (di
->cache
.flags
& BQ27XXX_FLAG_DSC
)
796 status
= POWER_SUPPLY_STATUS_DISCHARGING
;
798 status
= POWER_SUPPLY_STATUS_CHARGING
;
801 val
->intval
= status
;
806 static int bq27xxx_battery_capacity_level(struct bq27xxx_device_info
*di
,
807 union power_supply_propval
*val
)
811 if (di
->chip
== BQ27000
|| di
->chip
== BQ27010
) {
812 if (di
->cache
.flags
& BQ27000_FLAG_FC
)
813 level
= POWER_SUPPLY_CAPACITY_LEVEL_FULL
;
814 else if (di
->cache
.flags
& BQ27000_FLAG_EDV1
)
815 level
= POWER_SUPPLY_CAPACITY_LEVEL_LOW
;
816 else if (di
->cache
.flags
& BQ27000_FLAG_EDVF
)
817 level
= POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL
;
819 level
= POWER_SUPPLY_CAPACITY_LEVEL_NORMAL
;
821 if (di
->cache
.flags
& BQ27XXX_FLAG_FC
)
822 level
= POWER_SUPPLY_CAPACITY_LEVEL_FULL
;
823 else if (di
->cache
.flags
& BQ27XXX_FLAG_SOC1
)
824 level
= POWER_SUPPLY_CAPACITY_LEVEL_LOW
;
825 else if (di
->cache
.flags
& BQ27XXX_FLAG_SOCF
)
826 level
= POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL
;
828 level
= POWER_SUPPLY_CAPACITY_LEVEL_NORMAL
;
837 * Return the battery Voltage in millivolts
838 * Or < 0 if something fails.
840 static int bq27xxx_battery_voltage(struct bq27xxx_device_info
*di
,
841 union power_supply_propval
*val
)
845 volt
= bq27xxx_read(di
, BQ27XXX_REG_VOLT
, false);
847 dev_err(di
->dev
, "error reading voltage\n");
851 val
->intval
= volt
* 1000;
856 static int bq27xxx_simple_value(int value
,
857 union power_supply_propval
*val
)
867 static int bq27xxx_battery_get_property(struct power_supply
*psy
,
868 enum power_supply_property psp
,
869 union power_supply_propval
*val
)
872 struct bq27xxx_device_info
*di
= power_supply_get_drvdata(psy
);
874 mutex_lock(&di
->lock
);
875 if (time_is_before_jiffies(di
->last_update
+ 5 * HZ
)) {
876 cancel_delayed_work_sync(&di
->work
);
877 bq27xxx_battery_poll(&di
->work
.work
);
879 mutex_unlock(&di
->lock
);
881 if (psp
!= POWER_SUPPLY_PROP_PRESENT
&& di
->cache
.flags
< 0)
885 case POWER_SUPPLY_PROP_STATUS
:
886 ret
= bq27xxx_battery_status(di
, val
);
888 case POWER_SUPPLY_PROP_VOLTAGE_NOW
:
889 ret
= bq27xxx_battery_voltage(di
, val
);
891 case POWER_SUPPLY_PROP_PRESENT
:
892 val
->intval
= di
->cache
.flags
< 0 ? 0 : 1;
894 case POWER_SUPPLY_PROP_CURRENT_NOW
:
895 ret
= bq27xxx_battery_current(di
, val
);
897 case POWER_SUPPLY_PROP_CAPACITY
:
898 ret
= bq27xxx_simple_value(di
->cache
.capacity
, val
);
900 case POWER_SUPPLY_PROP_CAPACITY_LEVEL
:
901 ret
= bq27xxx_battery_capacity_level(di
, val
);
903 case POWER_SUPPLY_PROP_TEMP
:
904 ret
= bq27xxx_simple_value(di
->cache
.temperature
, val
);
906 val
->intval
-= 2731; /* convert decidegree k to c */
908 case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW
:
909 ret
= bq27xxx_simple_value(di
->cache
.time_to_empty
, val
);
911 case POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG
:
912 ret
= bq27xxx_simple_value(di
->cache
.time_to_empty_avg
, val
);
914 case POWER_SUPPLY_PROP_TIME_TO_FULL_NOW
:
915 ret
= bq27xxx_simple_value(di
->cache
.time_to_full
, val
);
917 case POWER_SUPPLY_PROP_TECHNOLOGY
:
918 val
->intval
= POWER_SUPPLY_TECHNOLOGY_LION
;
920 case POWER_SUPPLY_PROP_CHARGE_NOW
:
921 ret
= bq27xxx_simple_value(bq27xxx_battery_read_nac(di
), val
);
923 case POWER_SUPPLY_PROP_CHARGE_FULL
:
924 ret
= bq27xxx_simple_value(di
->cache
.charge_full
, val
);
926 case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN
:
927 ret
= bq27xxx_simple_value(di
->charge_design_full
, val
);
929 case POWER_SUPPLY_PROP_CYCLE_COUNT
:
930 ret
= bq27xxx_simple_value(di
->cache
.cycle_count
, val
);
932 case POWER_SUPPLY_PROP_ENERGY_NOW
:
933 ret
= bq27xxx_simple_value(di
->cache
.energy
, val
);
935 case POWER_SUPPLY_PROP_POWER_AVG
:
936 ret
= bq27xxx_simple_value(di
->cache
.power_avg
, val
);
938 case POWER_SUPPLY_PROP_HEALTH
:
939 ret
= bq27xxx_simple_value(di
->cache
.health
, val
);
941 case POWER_SUPPLY_PROP_MANUFACTURER
:
942 val
->strval
= BQ27XXX_MANUFACTURER
;
951 static void bq27xxx_external_power_changed(struct power_supply
*psy
)
953 struct bq27xxx_device_info
*di
= power_supply_get_drvdata(psy
);
955 cancel_delayed_work_sync(&di
->work
);
956 schedule_delayed_work(&di
->work
, 0);
959 int bq27xxx_battery_setup(struct bq27xxx_device_info
*di
)
961 struct power_supply_desc
*psy_desc
;
962 struct power_supply_config psy_cfg
= { .drv_data
= di
, };
964 INIT_DELAYED_WORK(&di
->work
, bq27xxx_battery_poll
);
965 mutex_init(&di
->lock
);
966 di
->regs
= bq27xxx_regs
[di
->chip
];
968 psy_desc
= devm_kzalloc(di
->dev
, sizeof(*psy_desc
), GFP_KERNEL
);
972 psy_desc
->name
= di
->name
;
973 psy_desc
->type
= POWER_SUPPLY_TYPE_BATTERY
;
974 psy_desc
->properties
= bq27xxx_battery_props
[di
->chip
].props
;
975 psy_desc
->num_properties
= bq27xxx_battery_props
[di
->chip
].size
;
976 psy_desc
->get_property
= bq27xxx_battery_get_property
;
977 psy_desc
->external_power_changed
= bq27xxx_external_power_changed
;
979 di
->bat
= power_supply_register_no_ws(di
->dev
, psy_desc
, &psy_cfg
);
980 if (IS_ERR(di
->bat
)) {
981 dev_err(di
->dev
, "failed to register battery\n");
982 return PTR_ERR(di
->bat
);
985 dev_info(di
->dev
, "support ver. %s enabled\n", DRIVER_VERSION
);
987 bq27xxx_battery_update(di
);
991 EXPORT_SYMBOL_GPL(bq27xxx_battery_setup
);
993 void bq27xxx_battery_teardown(struct bq27xxx_device_info
*di
)
996 * power_supply_unregister call bq27xxx_battery_get_property which
997 * call bq27xxx_battery_poll.
998 * Make sure that bq27xxx_battery_poll will not call
999 * schedule_delayed_work again after unregister (which cause OOPS).
1003 cancel_delayed_work_sync(&di
->work
);
1005 power_supply_unregister(di
->bat
);
1007 mutex_destroy(&di
->lock
);
1009 EXPORT_SYMBOL_GPL(bq27xxx_battery_teardown
);
1011 static int bq27xxx_battery_platform_read(struct bq27xxx_device_info
*di
, u8 reg
,
1014 struct device
*dev
= di
->dev
;
1015 struct bq27xxx_platform_data
*pdata
= dev
->platform_data
;
1016 unsigned int timeout
= 3;
1021 /* Make sure the value has not changed in between reading the
1022 * lower and the upper part */
1023 upper
= pdata
->read(dev
, reg
+ 1);
1029 lower
= pdata
->read(dev
, reg
);
1033 upper
= pdata
->read(dev
, reg
+ 1);
1034 } while (temp
!= upper
&& --timeout
);
1039 return (upper
<< 8) | lower
;
1042 return pdata
->read(dev
, reg
);
1045 static int bq27xxx_battery_platform_probe(struct platform_device
*pdev
)
1047 struct bq27xxx_device_info
*di
;
1048 struct bq27xxx_platform_data
*pdata
= pdev
->dev
.platform_data
;
1051 dev_err(&pdev
->dev
, "no platform_data supplied\n");
1056 dev_err(&pdev
->dev
, "no hdq read callback supplied\n");
1061 dev_err(&pdev
->dev
, "no device supplied\n");
1065 di
= devm_kzalloc(&pdev
->dev
, sizeof(*di
), GFP_KERNEL
);
1069 platform_set_drvdata(pdev
, di
);
1071 di
->dev
= &pdev
->dev
;
1072 di
->chip
= pdata
->chip
;
1073 di
->name
= pdata
->name
?: dev_name(&pdev
->dev
);
1074 di
->bus
.read
= bq27xxx_battery_platform_read
;
1076 return bq27xxx_battery_setup(di
);
1079 static int bq27xxx_battery_platform_remove(struct platform_device
*pdev
)
1081 struct bq27xxx_device_info
*di
= platform_get_drvdata(pdev
);
1083 bq27xxx_battery_teardown(di
);
1088 static const struct platform_device_id bq27xxx_battery_platform_id_table
[] = {
1089 { "bq27000-battery", },
1092 MODULE_DEVICE_TABLE(platform
, bq27xxx_battery_platform_id_table
);
1095 static const struct of_device_id bq27xxx_battery_platform_of_match_table
[] = {
1096 { .compatible
= "ti,bq27000" },
1099 MODULE_DEVICE_TABLE(of
, bq27xxx_battery_platform_of_match_table
);
1102 static struct platform_driver bq27xxx_battery_platform_driver
= {
1103 .probe
= bq27xxx_battery_platform_probe
,
1104 .remove
= bq27xxx_battery_platform_remove
,
1106 .name
= "bq27000-battery",
1107 .of_match_table
= of_match_ptr(bq27xxx_battery_platform_of_match_table
),
1109 .id_table
= bq27xxx_battery_platform_id_table
,
1111 module_platform_driver(bq27xxx_battery_platform_driver
);
1113 MODULE_ALIAS("platform:bq27000-battery");
1115 MODULE_AUTHOR("Rodolfo Giometti <giometti@linux.it>");
1116 MODULE_DESCRIPTION("BQ27xxx battery monitor driver");
1117 MODULE_LICENSE("GPL");