]> Pileus Git - ~andy/linux/blob - drivers/power/bq27x00_battery.c
bq27x00_battery: Cache temperature value in converted unit
[~andy/linux] / drivers / power / bq27x00_battery.c
1 /*
2  * BQ27x00 battery driver
3  *
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>
8  *
9  * Based on a previous work by Copyright (C) 2008 Texas Instruments, Inc.
10  *
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.
14  *
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.
18  *
19  */
20
21 /*
22  * Datasheets:
23  * http://focus.ti.com/docs/prod/folders/print/bq27000.html
24  * http://focus.ti.com/docs/prod/folders/print/bq27500.html
25  */
26
27 #include <linux/module.h>
28 #include <linux/param.h>
29 #include <linux/jiffies.h>
30 #include <linux/workqueue.h>
31 #include <linux/delay.h>
32 #include <linux/platform_device.h>
33 #include <linux/power_supply.h>
34 #include <linux/idr.h>
35 #include <linux/i2c.h>
36 #include <linux/slab.h>
37 #include <asm/unaligned.h>
38
39 #include <linux/power/bq27x00_battery.h>
40
41 #define DRIVER_VERSION                  "1.2.0"
42
43 #define BQ27x00_REG_TEMP                0x06
44 #define BQ27x00_REG_VOLT                0x08
45 #define BQ27x00_REG_AI                  0x14
46 #define BQ27x00_REG_FLAGS               0x0A
47 #define BQ27x00_REG_TTE                 0x16
48 #define BQ27x00_REG_TTF                 0x18
49 #define BQ27x00_REG_TTECP               0x26
50 #define BQ27x00_REG_NAC                 0x0C /* Nominal available capaciy */
51 #define BQ27x00_REG_LMD                 0x12 /* Last measured discharge */
52 #define BQ27x00_REG_CYCT                0x2A /* Cycle count total */
53 #define BQ27x00_REG_AE                  0x22 /* Available enery */
54
55 #define BQ27000_REG_RSOC                0x0B /* Relative State-of-Charge */
56 #define BQ27000_REG_ILMD                0x76 /* Initial last measured discharge */
57 #define BQ27000_FLAG_EDVF               BIT(0) /* Final End-of-Discharge-Voltage flag */
58 #define BQ27000_FLAG_EDV1               BIT(1) /* First End-of-Discharge-Voltage flag */
59 #define BQ27000_FLAG_CI                 BIT(4) /* Capacity Inaccurate flag */
60 #define BQ27000_FLAG_FC                 BIT(5)
61 #define BQ27000_FLAG_CHGS               BIT(7) /* Charge state flag */
62
63 #define BQ27500_REG_SOC                 0x2C
64 #define BQ27500_REG_DCAP                0x3C /* Design capacity */
65 #define BQ27500_FLAG_DSC                BIT(0)
66 #define BQ27500_FLAG_SOCF               BIT(1) /* State-of-Charge threshold final */
67 #define BQ27500_FLAG_SOC1               BIT(2) /* State-of-Charge threshold 1 */
68 #define BQ27500_FLAG_FC                 BIT(9)
69
70 #define BQ27000_RS                      20 /* Resistor sense */
71
72 struct bq27x00_device_info;
73 struct bq27x00_access_methods {
74         int (*read)(struct bq27x00_device_info *di, u8 reg, bool single);
75 };
76
77 enum bq27x00_chip { BQ27000, BQ27500 };
78
79 struct bq27x00_reg_cache {
80         int temperature;
81         int time_to_empty;
82         int time_to_empty_avg;
83         int time_to_full;
84         int charge_full;
85         int cycle_count;
86         int capacity;
87         int energy;
88         int flags;
89 };
90
91 struct bq27x00_device_info {
92         struct device           *dev;
93         int                     id;
94         enum bq27x00_chip       chip;
95
96         struct bq27x00_reg_cache cache;
97         int charge_design_full;
98
99         unsigned long last_update;
100         struct delayed_work work;
101
102         struct power_supply     bat;
103
104         struct bq27x00_access_methods bus;
105
106         struct mutex lock;
107 };
108
109 static enum power_supply_property bq27x00_battery_props[] = {
110         POWER_SUPPLY_PROP_STATUS,
111         POWER_SUPPLY_PROP_PRESENT,
112         POWER_SUPPLY_PROP_VOLTAGE_NOW,
113         POWER_SUPPLY_PROP_CURRENT_NOW,
114         POWER_SUPPLY_PROP_CAPACITY,
115         POWER_SUPPLY_PROP_CAPACITY_LEVEL,
116         POWER_SUPPLY_PROP_TEMP,
117         POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW,
118         POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG,
119         POWER_SUPPLY_PROP_TIME_TO_FULL_NOW,
120         POWER_SUPPLY_PROP_TECHNOLOGY,
121         POWER_SUPPLY_PROP_CHARGE_FULL,
122         POWER_SUPPLY_PROP_CHARGE_NOW,
123         POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
124         POWER_SUPPLY_PROP_CYCLE_COUNT,
125         POWER_SUPPLY_PROP_ENERGY_NOW,
126 };
127
128 static unsigned int poll_interval = 360;
129 module_param(poll_interval, uint, 0644);
130 MODULE_PARM_DESC(poll_interval, "battery poll interval in seconds - " \
131                                 "0 disables polling");
132
133 /*
134  * Common code for BQ27x00 devices
135  */
136
137 static inline int bq27x00_read(struct bq27x00_device_info *di, u8 reg,
138                 bool single)
139 {
140         return di->bus.read(di, reg, single);
141 }
142
143 /*
144  * Return the battery Relative State-of-Charge
145  * Or < 0 if something fails.
146  */
147 static int bq27x00_battery_read_rsoc(struct bq27x00_device_info *di)
148 {
149         int rsoc;
150
151         if (di->chip == BQ27500)
152                 rsoc = bq27x00_read(di, BQ27500_REG_SOC, false);
153         else
154                 rsoc = bq27x00_read(di, BQ27000_REG_RSOC, true);
155
156         if (rsoc < 0)
157                 dev_err(di->dev, "error reading relative State-of-Charge\n");
158
159         return rsoc;
160 }
161
162 /*
163  * Return a battery charge value in µAh
164  * Or < 0 if something fails.
165  */
166 static int bq27x00_battery_read_charge(struct bq27x00_device_info *di, u8 reg)
167 {
168         int charge;
169
170         charge = bq27x00_read(di, reg, false);
171         if (charge < 0) {
172                 dev_err(di->dev, "error reading nominal available capacity\n");
173                 return charge;
174         }
175
176         if (di->chip == BQ27500)
177                 charge *= 1000;
178         else
179                 charge = charge * 3570 / BQ27000_RS;
180
181         return charge;
182 }
183
184 /*
185  * Return the battery Nominal available capaciy in µAh
186  * Or < 0 if something fails.
187  */
188 static inline int bq27x00_battery_read_nac(struct bq27x00_device_info *di)
189 {
190         return bq27x00_battery_read_charge(di, BQ27x00_REG_NAC);
191 }
192
193 /*
194  * Return the battery Last measured discharge in µAh
195  * Or < 0 if something fails.
196  */
197 static inline int bq27x00_battery_read_lmd(struct bq27x00_device_info *di)
198 {
199         return bq27x00_battery_read_charge(di, BQ27x00_REG_LMD);
200 }
201
202 /*
203  * Return the battery Initial last measured discharge in µAh
204  * Or < 0 if something fails.
205  */
206 static int bq27x00_battery_read_ilmd(struct bq27x00_device_info *di)
207 {
208         int ilmd;
209
210         if (di->chip == BQ27500)
211                 ilmd = bq27x00_read(di, BQ27500_REG_DCAP, false);
212         else
213                 ilmd = bq27x00_read(di, BQ27000_REG_ILMD, true);
214
215         if (ilmd < 0) {
216                 dev_err(di->dev, "error reading initial last measured discharge\n");
217                 return ilmd;
218         }
219
220         if (di->chip == BQ27500)
221                 ilmd *= 1000;
222         else
223                 ilmd = ilmd * 256 * 3570 / BQ27000_RS;
224
225         return ilmd;
226 }
227
228 /*
229  * Return the battery Available energy in µWh
230  * Or < 0 if something fails.
231  */
232 static int bq27x00_battery_read_energy(struct bq27x00_device_info *di)
233 {
234         int ae;
235
236         ae = bq27x00_read(di, BQ27x00_REG_AE, false);
237         if (ae < 0) {
238                 dev_err(di->dev, "error reading available energy\n");
239                 return ae;
240         }
241
242         if (di->chip == BQ27500)
243                 ae *= 1000;
244         else
245                 ae = ae * 29200 / BQ27000_RS;
246
247         return ae;
248 }
249
250 /*
251  * Return the battery temperature in tenths of degree Celsius
252  * Or < 0 if something fails.
253  */
254 static int bq27x00_battery_read_temperature(struct bq27x00_device_info *di)
255 {
256         int temp;
257
258         temp = bq27x00_read(di, BQ27x00_REG_TEMP, false);
259         if (temp < 0) {
260                 dev_err(di->dev, "error reading temperature\n");
261                 return temp;
262         }
263
264         if (di->chip == BQ27500)
265                 temp -= 2731;
266         else
267                 temp = ((temp * 5) - 5463) / 2;
268
269         return temp;
270 }
271
272 /*
273  * Return the battery Cycle count total
274  * Or < 0 if something fails.
275  */
276 static int bq27x00_battery_read_cyct(struct bq27x00_device_info *di)
277 {
278         int cyct;
279
280         cyct = bq27x00_read(di, BQ27x00_REG_CYCT, false);
281         if (cyct < 0)
282                 dev_err(di->dev, "error reading cycle count total\n");
283
284         return cyct;
285 }
286
287 /*
288  * Read a time register.
289  * Return < 0 if something fails.
290  */
291 static int bq27x00_battery_read_time(struct bq27x00_device_info *di, u8 reg)
292 {
293         int tval;
294
295         tval = bq27x00_read(di, reg, false);
296         if (tval < 0) {
297                 dev_err(di->dev, "error reading register %02x: %d\n", reg, tval);
298                 return tval;
299         }
300
301         if (tval == 65535)
302                 return -ENODATA;
303
304         return tval * 60;
305 }
306
307 static void bq27x00_update(struct bq27x00_device_info *di)
308 {
309         struct bq27x00_reg_cache cache = {0, };
310         bool is_bq27500 = di->chip == BQ27500;
311
312         cache.flags = bq27x00_read(di, BQ27x00_REG_FLAGS, is_bq27500);
313         if (cache.flags >= 0) {
314                 if (!is_bq27500 && (cache.flags & BQ27000_FLAG_CI)) {
315                         cache.capacity = -ENODATA;
316                         cache.energy = -ENODATA;
317                         cache.time_to_empty = -ENODATA;
318                         cache.time_to_empty_avg = -ENODATA;
319                         cache.time_to_full = -ENODATA;
320                         cache.charge_full = -ENODATA;
321                 } else {
322                         cache.capacity = bq27x00_battery_read_rsoc(di);
323                         cache.energy = bq27x00_battery_read_energy(di);
324                         cache.time_to_empty = bq27x00_battery_read_time(di, BQ27x00_REG_TTE);
325                         cache.time_to_empty_avg = bq27x00_battery_read_time(di, BQ27x00_REG_TTECP);
326                         cache.time_to_full = bq27x00_battery_read_time(di, BQ27x00_REG_TTF);
327                         cache.charge_full = bq27x00_battery_read_lmd(di);
328                 }
329                 cache.temperature = bq27x00_battery_read_temperature(di);
330                 cache.cycle_count = bq27x00_battery_read_cyct(di);
331
332                 /* We only have to read charge design full once */
333                 if (di->charge_design_full <= 0)
334                         di->charge_design_full = bq27x00_battery_read_ilmd(di);
335         }
336
337         if (memcmp(&di->cache, &cache, sizeof(cache)) != 0) {
338                 di->cache = cache;
339                 power_supply_changed(&di->bat);
340         }
341
342         di->last_update = jiffies;
343 }
344
345 static void bq27x00_battery_poll(struct work_struct *work)
346 {
347         struct bq27x00_device_info *di =
348                 container_of(work, struct bq27x00_device_info, work.work);
349
350         bq27x00_update(di);
351
352         if (poll_interval > 0) {
353                 /* The timer does not have to be accurate. */
354                 set_timer_slack(&di->work.timer, poll_interval * HZ / 4);
355                 schedule_delayed_work(&di->work, poll_interval * HZ);
356         }
357 }
358
359 /*
360  * Return the battery average current in µA
361  * Note that current can be negative signed as well
362  * Or 0 if something fails.
363  */
364 static int bq27x00_battery_current(struct bq27x00_device_info *di,
365         union power_supply_propval *val)
366 {
367         int curr;
368         int flags;
369
370         curr = bq27x00_read(di, BQ27x00_REG_AI, false);
371         if (curr < 0)
372                 return curr;
373
374         if (di->chip == BQ27500) {
375                 /* bq27500 returns signed value */
376                 val->intval = (int)((s16)curr) * 1000;
377         } else {
378                 flags = bq27x00_read(di, BQ27x00_REG_FLAGS, false);
379                 if (flags & BQ27000_FLAG_CHGS) {
380                         dev_dbg(di->dev, "negative current!\n");
381                         curr = -curr;
382                 }
383
384                 val->intval = curr * 3570 / BQ27000_RS;
385         }
386
387         return 0;
388 }
389
390 static int bq27x00_battery_status(struct bq27x00_device_info *di,
391         union power_supply_propval *val)
392 {
393         int status;
394
395         if (di->chip == BQ27500) {
396                 if (di->cache.flags & BQ27500_FLAG_FC)
397                         status = POWER_SUPPLY_STATUS_FULL;
398                 else if (di->cache.flags & BQ27500_FLAG_DSC)
399                         status = POWER_SUPPLY_STATUS_DISCHARGING;
400                 else
401                         status = POWER_SUPPLY_STATUS_CHARGING;
402         } else {
403                 if (di->cache.flags & BQ27000_FLAG_FC)
404                         status = POWER_SUPPLY_STATUS_FULL;
405                 else if (di->cache.flags & BQ27000_FLAG_CHGS)
406                         status = POWER_SUPPLY_STATUS_CHARGING;
407                 else if (power_supply_am_i_supplied(&di->bat))
408                         status = POWER_SUPPLY_STATUS_NOT_CHARGING;
409                 else
410                         status = POWER_SUPPLY_STATUS_DISCHARGING;
411         }
412
413         val->intval = status;
414
415         return 0;
416 }
417
418 static int bq27x00_battery_capacity_level(struct bq27x00_device_info *di,
419         union power_supply_propval *val)
420 {
421         int level;
422
423         if (di->chip == BQ27500) {
424                 if (di->cache.flags & BQ27500_FLAG_FC)
425                         level = POWER_SUPPLY_CAPACITY_LEVEL_FULL;
426                 else if (di->cache.flags & BQ27500_FLAG_SOC1)
427                         level = POWER_SUPPLY_CAPACITY_LEVEL_LOW;
428                 else if (di->cache.flags & BQ27500_FLAG_SOCF)
429                         level = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL;
430                 else
431                         level = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
432         } else {
433                 if (di->cache.flags & BQ27000_FLAG_FC)
434                         level = POWER_SUPPLY_CAPACITY_LEVEL_FULL;
435                 else if (di->cache.flags & BQ27000_FLAG_EDV1)
436                         level = POWER_SUPPLY_CAPACITY_LEVEL_LOW;
437                 else if (di->cache.flags & BQ27000_FLAG_EDVF)
438                         level = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL;
439                 else
440                         level = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
441         }
442
443         val->intval = level;
444
445         return 0;
446 }
447
448 /*
449  * Return the battery Voltage in milivolts
450  * Or < 0 if something fails.
451  */
452 static int bq27x00_battery_voltage(struct bq27x00_device_info *di,
453         union power_supply_propval *val)
454 {
455         int volt;
456
457         volt = bq27x00_read(di, BQ27x00_REG_VOLT, false);
458         if (volt < 0)
459                 return volt;
460
461         val->intval = volt * 1000;
462
463         return 0;
464 }
465
466 static int bq27x00_simple_value(int value,
467         union power_supply_propval *val)
468 {
469         if (value < 0)
470                 return value;
471
472         val->intval = value;
473
474         return 0;
475 }
476
477 #define to_bq27x00_device_info(x) container_of((x), \
478                                 struct bq27x00_device_info, bat);
479
480 static int bq27x00_battery_get_property(struct power_supply *psy,
481                                         enum power_supply_property psp,
482                                         union power_supply_propval *val)
483 {
484         int ret = 0;
485         struct bq27x00_device_info *di = to_bq27x00_device_info(psy);
486
487         mutex_lock(&di->lock);
488         if (time_is_before_jiffies(di->last_update + 5 * HZ)) {
489                 cancel_delayed_work_sync(&di->work);
490                 bq27x00_battery_poll(&di->work.work);
491         }
492         mutex_unlock(&di->lock);
493
494         if (psp != POWER_SUPPLY_PROP_PRESENT && di->cache.flags < 0)
495                 return -ENODEV;
496
497         switch (psp) {
498         case POWER_SUPPLY_PROP_STATUS:
499                 ret = bq27x00_battery_status(di, val);
500                 break;
501         case POWER_SUPPLY_PROP_VOLTAGE_NOW:
502                 ret = bq27x00_battery_voltage(di, val);
503                 break;
504         case POWER_SUPPLY_PROP_PRESENT:
505                 val->intval = di->cache.flags < 0 ? 0 : 1;
506                 break;
507         case POWER_SUPPLY_PROP_CURRENT_NOW:
508                 ret = bq27x00_battery_current(di, val);
509                 break;
510         case POWER_SUPPLY_PROP_CAPACITY:
511                 ret = bq27x00_simple_value(di->cache.capacity, val);
512                 break;
513         case POWER_SUPPLY_PROP_CAPACITY_LEVEL:
514                 ret = bq27x00_battery_capacity_level(di, val);
515                 break;
516         case POWER_SUPPLY_PROP_TEMP:
517                 ret = bq27x00_simple_value(di->cache.temperature, val);
518                 break;
519         case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW:
520                 ret = bq27x00_simple_value(di->cache.time_to_empty, val);
521                 break;
522         case POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG:
523                 ret = bq27x00_simple_value(di->cache.time_to_empty_avg, val);
524                 break;
525         case POWER_SUPPLY_PROP_TIME_TO_FULL_NOW:
526                 ret = bq27x00_simple_value(di->cache.time_to_full, val);
527                 break;
528         case POWER_SUPPLY_PROP_TECHNOLOGY:
529                 val->intval = POWER_SUPPLY_TECHNOLOGY_LION;
530                 break;
531         case POWER_SUPPLY_PROP_CHARGE_NOW:
532                 ret = bq27x00_simple_value(bq27x00_battery_read_nac(di), val);
533                 break;
534         case POWER_SUPPLY_PROP_CHARGE_FULL:
535                 ret = bq27x00_simple_value(di->cache.charge_full, val);
536                 break;
537         case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
538                 ret = bq27x00_simple_value(di->charge_design_full, val);
539                 break;
540         case POWER_SUPPLY_PROP_CYCLE_COUNT:
541                 ret = bq27x00_simple_value(di->cache.cycle_count, val);
542                 break;
543         case POWER_SUPPLY_PROP_ENERGY_NOW:
544                 ret = bq27x00_simple_value(di->cache.energy, val);
545                 break;
546         default:
547                 return -EINVAL;
548         }
549
550         return ret;
551 }
552
553 static void bq27x00_external_power_changed(struct power_supply *psy)
554 {
555         struct bq27x00_device_info *di = to_bq27x00_device_info(psy);
556
557         cancel_delayed_work_sync(&di->work);
558         schedule_delayed_work(&di->work, 0);
559 }
560
561 static int bq27x00_powersupply_init(struct bq27x00_device_info *di)
562 {
563         int ret;
564
565         di->bat.type = POWER_SUPPLY_TYPE_BATTERY;
566         di->bat.properties = bq27x00_battery_props;
567         di->bat.num_properties = ARRAY_SIZE(bq27x00_battery_props);
568         di->bat.get_property = bq27x00_battery_get_property;
569         di->bat.external_power_changed = bq27x00_external_power_changed;
570
571         INIT_DELAYED_WORK(&di->work, bq27x00_battery_poll);
572         mutex_init(&di->lock);
573
574         ret = power_supply_register(di->dev, &di->bat);
575         if (ret) {
576                 dev_err(di->dev, "failed to register battery: %d\n", ret);
577                 return ret;
578         }
579
580         dev_info(di->dev, "support ver. %s enabled\n", DRIVER_VERSION);
581
582         bq27x00_update(di);
583
584         return 0;
585 }
586
587 static void bq27x00_powersupply_unregister(struct bq27x00_device_info *di)
588 {
589         cancel_delayed_work_sync(&di->work);
590
591         power_supply_unregister(&di->bat);
592
593         mutex_destroy(&di->lock);
594 }
595
596
597 /* i2c specific code */
598 #ifdef CONFIG_BATTERY_BQ27X00_I2C
599
600 /* If the system has several batteries we need a different name for each
601  * of them...
602  */
603 static DEFINE_IDR(battery_id);
604 static DEFINE_MUTEX(battery_mutex);
605
606 static int bq27x00_read_i2c(struct bq27x00_device_info *di, u8 reg, bool single)
607 {
608         struct i2c_client *client = to_i2c_client(di->dev);
609         struct i2c_msg msg[2];
610         unsigned char data[2];
611         int ret;
612
613         if (!client->adapter)
614                 return -ENODEV;
615
616         msg[0].addr = client->addr;
617         msg[0].flags = 0;
618         msg[0].buf = &reg;
619         msg[0].len = sizeof(reg);
620         msg[1].addr = client->addr;
621         msg[1].flags = I2C_M_RD;
622         msg[1].buf = data;
623         if (single)
624                 msg[1].len = 1;
625         else
626                 msg[1].len = 2;
627
628         ret = i2c_transfer(client->adapter, msg, ARRAY_SIZE(msg));
629         if (ret < 0)
630                 return ret;
631
632         if (!single)
633                 ret = get_unaligned_le16(data);
634         else
635                 ret = data[0];
636
637         return ret;
638 }
639
640 static int bq27x00_battery_probe(struct i2c_client *client,
641                                  const struct i2c_device_id *id)
642 {
643         char *name;
644         struct bq27x00_device_info *di;
645         int num;
646         int retval = 0;
647
648         /* Get new ID for the new battery device */
649         retval = idr_pre_get(&battery_id, GFP_KERNEL);
650         if (retval == 0)
651                 return -ENOMEM;
652         mutex_lock(&battery_mutex);
653         retval = idr_get_new(&battery_id, client, &num);
654         mutex_unlock(&battery_mutex);
655         if (retval < 0)
656                 return retval;
657
658         name = kasprintf(GFP_KERNEL, "%s-%d", id->name, num);
659         if (!name) {
660                 dev_err(&client->dev, "failed to allocate device name\n");
661                 retval = -ENOMEM;
662                 goto batt_failed_1;
663         }
664
665         di = kzalloc(sizeof(*di), GFP_KERNEL);
666         if (!di) {
667                 dev_err(&client->dev, "failed to allocate device info data\n");
668                 retval = -ENOMEM;
669                 goto batt_failed_2;
670         }
671
672         di->id = num;
673         di->dev = &client->dev;
674         di->chip = id->driver_data;
675         di->bat.name = name;
676         di->bus.read = &bq27x00_read_i2c;
677
678         if (bq27x00_powersupply_init(di))
679                 goto batt_failed_3;
680
681         i2c_set_clientdata(client, di);
682
683         return 0;
684
685 batt_failed_3:
686         kfree(di);
687 batt_failed_2:
688         kfree(name);
689 batt_failed_1:
690         mutex_lock(&battery_mutex);
691         idr_remove(&battery_id, num);
692         mutex_unlock(&battery_mutex);
693
694         return retval;
695 }
696
697 static int bq27x00_battery_remove(struct i2c_client *client)
698 {
699         struct bq27x00_device_info *di = i2c_get_clientdata(client);
700
701         bq27x00_powersupply_unregister(di);
702
703         kfree(di->bat.name);
704
705         mutex_lock(&battery_mutex);
706         idr_remove(&battery_id, di->id);
707         mutex_unlock(&battery_mutex);
708
709         kfree(di);
710
711         return 0;
712 }
713
714 static const struct i2c_device_id bq27x00_id[] = {
715         { "bq27200", BQ27000 }, /* bq27200 is same as bq27000, but with i2c */
716         { "bq27500", BQ27500 },
717         {},
718 };
719 MODULE_DEVICE_TABLE(i2c, bq27x00_id);
720
721 static struct i2c_driver bq27x00_battery_driver = {
722         .driver = {
723                 .name = "bq27x00-battery",
724         },
725         .probe = bq27x00_battery_probe,
726         .remove = bq27x00_battery_remove,
727         .id_table = bq27x00_id,
728 };
729
730 static inline int bq27x00_battery_i2c_init(void)
731 {
732         int ret = i2c_add_driver(&bq27x00_battery_driver);
733         if (ret)
734                 printk(KERN_ERR "Unable to register BQ27x00 i2c driver\n");
735
736         return ret;
737 }
738
739 static inline void bq27x00_battery_i2c_exit(void)
740 {
741         i2c_del_driver(&bq27x00_battery_driver);
742 }
743
744 #else
745
746 static inline int bq27x00_battery_i2c_init(void) { return 0; }
747 static inline void bq27x00_battery_i2c_exit(void) {};
748
749 #endif
750
751 /* platform specific code */
752 #ifdef CONFIG_BATTERY_BQ27X00_PLATFORM
753
754 static int bq27000_read_platform(struct bq27x00_device_info *di, u8 reg,
755                         bool single)
756 {
757         struct device *dev = di->dev;
758         struct bq27000_platform_data *pdata = dev->platform_data;
759         unsigned int timeout = 3;
760         int upper, lower;
761         int temp;
762
763         if (!single) {
764                 /* Make sure the value has not changed in between reading the
765                  * lower and the upper part */
766                 upper = pdata->read(dev, reg + 1);
767                 do {
768                         temp = upper;
769                         if (upper < 0)
770                                 return upper;
771
772                         lower = pdata->read(dev, reg);
773                         if (lower < 0)
774                                 return lower;
775
776                         upper = pdata->read(dev, reg + 1);
777                 } while (temp != upper && --timeout);
778
779                 if (timeout == 0)
780                         return -EIO;
781
782                 return (upper << 8) | lower;
783         }
784
785         return pdata->read(dev, reg);
786 }
787
788 static int __devinit bq27000_battery_probe(struct platform_device *pdev)
789 {
790         struct bq27x00_device_info *di;
791         struct bq27000_platform_data *pdata = pdev->dev.platform_data;
792         int ret;
793
794         if (!pdata) {
795                 dev_err(&pdev->dev, "no platform_data supplied\n");
796                 return -EINVAL;
797         }
798
799         if (!pdata->read) {
800                 dev_err(&pdev->dev, "no hdq read callback supplied\n");
801                 return -EINVAL;
802         }
803
804         di = kzalloc(sizeof(*di), GFP_KERNEL);
805         if (!di) {
806                 dev_err(&pdev->dev, "failed to allocate device info data\n");
807                 return -ENOMEM;
808         }
809
810         platform_set_drvdata(pdev, di);
811
812         di->dev = &pdev->dev;
813         di->chip = BQ27000;
814
815         di->bat.name = pdata->name ?: dev_name(&pdev->dev);
816         di->bus.read = &bq27000_read_platform;
817
818         ret = bq27x00_powersupply_init(di);
819         if (ret)
820                 goto err_free;
821
822         return 0;
823
824 err_free:
825         platform_set_drvdata(pdev, NULL);
826         kfree(di);
827
828         return ret;
829 }
830
831 static int __devexit bq27000_battery_remove(struct platform_device *pdev)
832 {
833         struct bq27x00_device_info *di = platform_get_drvdata(pdev);
834
835         bq27x00_powersupply_unregister(di);
836
837         platform_set_drvdata(pdev, NULL);
838         kfree(di);
839
840         return 0;
841 }
842
843 static struct platform_driver bq27000_battery_driver = {
844         .probe  = bq27000_battery_probe,
845         .remove = __devexit_p(bq27000_battery_remove),
846         .driver = {
847                 .name = "bq27000-battery",
848                 .owner = THIS_MODULE,
849         },
850 };
851
852 static inline int bq27x00_battery_platform_init(void)
853 {
854         int ret = platform_driver_register(&bq27000_battery_driver);
855         if (ret)
856                 printk(KERN_ERR "Unable to register BQ27000 platform driver\n");
857
858         return ret;
859 }
860
861 static inline void bq27x00_battery_platform_exit(void)
862 {
863         platform_driver_unregister(&bq27000_battery_driver);
864 }
865
866 #else
867
868 static inline int bq27x00_battery_platform_init(void) { return 0; }
869 static inline void bq27x00_battery_platform_exit(void) {};
870
871 #endif
872
873 /*
874  * Module stuff
875  */
876
877 static int __init bq27x00_battery_init(void)
878 {
879         int ret;
880
881         ret = bq27x00_battery_i2c_init();
882         if (ret)
883                 return ret;
884
885         ret = bq27x00_battery_platform_init();
886         if (ret)
887                 bq27x00_battery_i2c_exit();
888
889         return ret;
890 }
891 module_init(bq27x00_battery_init);
892
893 static void __exit bq27x00_battery_exit(void)
894 {
895         bq27x00_battery_platform_exit();
896         bq27x00_battery_i2c_exit();
897 }
898 module_exit(bq27x00_battery_exit);
899
900 MODULE_AUTHOR("Rodolfo Giometti <giometti@linux.it>");
901 MODULE_DESCRIPTION("BQ27x00 battery monitor driver");
902 MODULE_LICENSE("GPL");