Commit | Line | Data |
---|---|---|
0bc98cc6 | 1 | /* |
6c47a3e0 AV |
2 | * bq2415x charger driver |
3 | * | |
4 | * Copyright (C) 2011-2012 Pali Rohár <pali.rohar@gmail.com> | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License as published by | |
8 | * the Free Software Foundation; either version 2 of the License, or | |
9 | * (at your option) any later version. | |
10 | * | |
11 | * This program is distributed in the hope that it will be useful, | |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | * GNU General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU General Public License along | |
17 | * with this program; if not, write to the Free Software Foundation, Inc., | |
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
19 | */ | |
0bc98cc6 PR |
20 | |
21 | #ifndef BQ2415X_CHARGER_H | |
22 | #define BQ2415X_CHARGER_H | |
23 | ||
24 | /* | |
6c47a3e0 AV |
25 | * This is platform data for bq2415x chip. It contains default board |
26 | * voltages and currents which can be also later configured via sysfs. If | |
27 | * value is -1 then default chip value (specified in datasheet) will be | |
28 | * used. | |
29 | * | |
30 | * Value resistor_sense is needed for for configuring charge and | |
31 | * termination current. It it is less or equal to zero, configuring charge | |
32 | * and termination current will not be possible. | |
33 | * | |
34 | * Function set_mode_hook is needed for automode (setting correct current | |
35 | * limit when charger is connected/disconnected or setting boost mode). | |
36 | * When is NULL, automode function is disabled. When is not NULL, it must | |
37 | * have this prototype: | |
38 | * | |
39 | * int (*set_mode_hook)( | |
40 | * void (*hook)(enum bq2415x_mode mode, void *data), | |
41 | * void *data) | |
42 | * | |
43 | * hook is hook function (see below) and data is pointer to driver private | |
44 | * data | |
45 | * | |
46 | * bq2415x driver will call it as: | |
47 | * | |
48 | * platform_data->set_mode_hook(bq2415x_hook_function, bq2415x_device); | |
49 | * | |
50 | * Board/platform function set_mode_hook return non zero value when hook | |
51 | * function was successful registered. Platform code should call that hook | |
52 | * function (which get from pointer, with data) every time when charger | |
53 | * was connected/disconnected or require to enable boost mode. bq2415x | |
54 | * driver then will set correct current limit, enable/disable charger or | |
55 | * boost mode. | |
56 | * | |
57 | * Hook function has this prototype: | |
58 | * | |
59 | * void hook(enum bq2415x_mode mode, void *data); | |
60 | * | |
61 | * mode is bq2415x mode (charger or boost) | |
62 | * data is pointer to driver private data (which get from | |
63 | * set_charger_type_hook) | |
64 | * | |
65 | * When bq driver is being unloaded, it call function: | |
66 | * | |
67 | * platform_data->set_mode_hook(NULL, NULL); | |
68 | * | |
69 | * (hook function and driver private data are NULL) | |
70 | * | |
71 | * After that board/platform code must not call driver hook function! It | |
72 | * is possible that pointer to hook function will not be valid and calling | |
73 | * will cause undefined result. | |
74 | */ | |
0bc98cc6 PR |
75 | |
76 | /* Supported modes with maximal current limit */ | |
77 | enum bq2415x_mode { | |
ac6324e7 PR |
78 | BQ2415X_MODE_OFF, /* offline mode (charger disabled) */ |
79 | BQ2415X_MODE_NONE, /* unknown charger (100mA) */ | |
0bc98cc6 PR |
80 | BQ2415X_MODE_HOST_CHARGER, /* usb host/hub charger (500mA) */ |
81 | BQ2415X_MODE_DEDICATED_CHARGER, /* dedicated charger (unlimited) */ | |
82 | BQ2415X_MODE_BOOST, /* boost mode (charging disabled) */ | |
83 | }; | |
84 | ||
85 | struct bq2415x_platform_data { | |
86 | int current_limit; /* mA */ | |
87 | int weak_battery_voltage; /* mV */ | |
88 | int battery_regulation_voltage; /* mV */ | |
89 | int charge_current; /* mA */ | |
90 | int termination_current; /* mA */ | |
91 | int resistor_sense; /* m ohm */ | |
92 | int (*set_mode_hook)(void (*hook)(enum bq2415x_mode mode, void *data), | |
93 | void *data); | |
94 | }; | |
95 | ||
96 | #endif |