Lars-Peter Clausen | 7fb7ba5 | 2010-05-24 19:55:27 +0200 | [diff] [blame] | 1 | #ifndef __LINUX_BQ27X00_BATTERY_H__ |
| 2 | #define __LINUX_BQ27X00_BATTERY_H__ |
| 3 | |
Andrew F. Davis | 703df6c | 2015-11-23 10:53:51 -0600 | [diff] [blame] | 4 | enum bq27xxx_chip { |
| 5 | BQ27000 = 1, /* bq27000, bq27200 */ |
| 6 | BQ27010, /* bq27010, bq27210 */ |
Chris Lapa | 818e301 | 2017-01-11 12:44:38 +1100 | [diff] [blame] | 7 | BQ2750X, /* bq27500 deprecated alias */ |
Chris Lapa | 6da6e4b | 2017-01-11 12:44:39 +1100 | [diff] [blame] | 8 | BQ2751X, /* bq27510, bq27520 deprecated alias */ |
Chris Lapa | 3283363 | 2017-01-11 12:44:40 +1100 | [diff] [blame] | 9 | BQ27500, /* bq27500/1 */ |
Chris Lapa | bd28177 | 2017-01-11 12:44:41 +1100 | [diff] [blame] | 10 | BQ27510G1, /* bq27510G1 */ |
Chris Lapa | 698a2bf | 2017-01-11 12:44:42 +1100 | [diff] [blame] | 11 | BQ27510G2, /* bq27510G2 */ |
Chris Lapa | 71375aa | 2017-01-11 12:44:43 +1100 | [diff] [blame] | 12 | BQ27510G3, /* bq27510G3 */ |
Chris Lapa | 68f2a81 | 2017-01-11 12:44:44 +1100 | [diff] [blame] | 13 | BQ27520G1, /* bq27520G1 */ |
Chris Lapa | a5deb9a | 2017-01-11 12:44:45 +1100 | [diff] [blame] | 14 | BQ27520G2, /* bq27520G2 */ |
Chris Lapa | 825e915 | 2017-01-11 12:44:46 +1100 | [diff] [blame] | 15 | BQ27520G3, /* bq27520G3 */ |
Chris Lapa | 8835cae | 2017-01-11 12:44:47 +1100 | [diff] [blame] | 16 | BQ27520G4, /* bq27520G4 */ |
Andrew F. Davis | 703df6c | 2015-11-23 10:53:51 -0600 | [diff] [blame] | 17 | BQ27530, /* bq27530, bq27531 */ |
| 18 | BQ27541, /* bq27541, bq27542, bq27546, bq27742 */ |
| 19 | BQ27545, /* bq27545 */ |
| 20 | BQ27421, /* bq27421, bq27425, bq27441, bq27621 */ |
| 21 | }; |
| 22 | |
Lars-Peter Clausen | 7fb7ba5 | 2010-05-24 19:55:27 +0200 | [diff] [blame] | 23 | /** |
Andrew F. Davis | 081bab2 | 2015-09-22 14:35:06 -0500 | [diff] [blame] | 24 | * struct bq27xxx_plaform_data - Platform data for bq27xxx devices |
Andrew F. Davis | 424cfde | 2015-09-22 14:35:07 -0500 | [diff] [blame] | 25 | * @name: Name of the battery. |
| 26 | * @chip: Chip class number of this device. |
Lars-Peter Clausen | 7fb7ba5 | 2010-05-24 19:55:27 +0200 | [diff] [blame] | 27 | * @read: HDQ read callback. |
| 28 | * This function should provide access to the HDQ bus the battery is |
| 29 | * connected to. |
| 30 | * The first parameter is a pointer to the battery device, the second the |
| 31 | * register to be read. The return value should either be the content of |
| 32 | * the passed register or an error value. |
| 33 | */ |
Andrew F. Davis | 081bab2 | 2015-09-22 14:35:06 -0500 | [diff] [blame] | 34 | struct bq27xxx_platform_data { |
Lars-Peter Clausen | 7fb7ba5 | 2010-05-24 19:55:27 +0200 | [diff] [blame] | 35 | const char *name; |
Andrew F. Davis | 424cfde | 2015-09-22 14:35:07 -0500 | [diff] [blame] | 36 | enum bq27xxx_chip chip; |
Lars-Peter Clausen | 7fb7ba5 | 2010-05-24 19:55:27 +0200 | [diff] [blame] | 37 | int (*read)(struct device *dev, unsigned int); |
| 38 | }; |
| 39 | |
Andrew F. Davis | 703df6c | 2015-11-23 10:53:51 -0600 | [diff] [blame] | 40 | struct bq27xxx_device_info; |
| 41 | struct bq27xxx_access_methods { |
| 42 | int (*read)(struct bq27xxx_device_info *di, u8 reg, bool single); |
Matt Ranostay | 14073f6 | 2017-06-07 11:37:54 -0700 | [diff] [blame^] | 43 | int (*write)(struct bq27xxx_device_info *di, u8 reg, int value, bool single); |
| 44 | int (*read_bulk)(struct bq27xxx_device_info *di, u8 reg, u8 *data, int len); |
| 45 | int (*write_bulk)(struct bq27xxx_device_info *di, u8 reg, u8 *data, int len); |
Andrew F. Davis | 703df6c | 2015-11-23 10:53:51 -0600 | [diff] [blame] | 46 | }; |
| 47 | |
| 48 | struct bq27xxx_reg_cache { |
| 49 | int temperature; |
| 50 | int time_to_empty; |
| 51 | int time_to_empty_avg; |
| 52 | int time_to_full; |
| 53 | int charge_full; |
| 54 | int cycle_count; |
| 55 | int capacity; |
| 56 | int energy; |
| 57 | int flags; |
| 58 | int power_avg; |
| 59 | int health; |
| 60 | }; |
| 61 | |
| 62 | struct bq27xxx_device_info { |
| 63 | struct device *dev; |
Ivaylo Dimitrov | 9aafabc | 2016-02-02 14:47:37 +0200 | [diff] [blame] | 64 | int id; |
Andrew F. Davis | 703df6c | 2015-11-23 10:53:51 -0600 | [diff] [blame] | 65 | enum bq27xxx_chip chip; |
| 66 | const char *name; |
| 67 | struct bq27xxx_access_methods bus; |
| 68 | struct bq27xxx_reg_cache cache; |
| 69 | int charge_design_full; |
| 70 | unsigned long last_update; |
| 71 | struct delayed_work work; |
| 72 | struct power_supply *bat; |
Matt Ranostay | 1d72706 | 2016-09-19 20:43:02 -0700 | [diff] [blame] | 73 | struct list_head list; |
Andrew F. Davis | 703df6c | 2015-11-23 10:53:51 -0600 | [diff] [blame] | 74 | struct mutex lock; |
| 75 | u8 *regs; |
| 76 | }; |
| 77 | |
| 78 | void bq27xxx_battery_update(struct bq27xxx_device_info *di); |
| 79 | int bq27xxx_battery_setup(struct bq27xxx_device_info *di); |
| 80 | void bq27xxx_battery_teardown(struct bq27xxx_device_info *di); |
| 81 | |
Lars-Peter Clausen | 7fb7ba5 | 2010-05-24 19:55:27 +0200 | [diff] [blame] | 82 | #endif |