3c6cae84b297528f69e99af4d55cf9a8164fcb98
[linux-2.6.git] / include / linux / max77665-charger.h
1 /*
2  * MAX77665 charger Driver
3  *
4  * Copyright (c) 2012-2013, NVIDIA CORPORATION.  All rights reserved.
5  * Author: Syed Rafiuddin <srafiuddin@nvidia.com>
6  *
7  * This program is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License version 2 as published by
9  * the Free Software Foundation.
10  *
11  * This program is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
14  * more details.
15  *
16  * You should have received a copy of the GNU General Public License along with
17  * this program.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #ifndef _LINUX_INPUT_MAX77665_CHARGER_H
21 #define _LINUX_INPUT_MAX77665_CHARGER_H
22
23 #include <linux/platform_device.h>
24 #include <linux/power_supply.h>
25 #include <linux/regulator/machine.h>
26 #include <linux/extcon.h>
27 #include <linux/mfd/max77665.h>
28
29 #define MAX77665_CHG_INT        0xb0
30 #define MAX77665_CHG_INT_MASK   0xb1
31 #define MAX77665_CHG_INT_OK     0xb2
32 /* the bit def for above three registers is same per Maxim design */
33 #define BYP_BIT                 BIT(0)
34 #define DETBAT_BIT              BIT(2)
35 #define BAT_BIT                 BIT(3)
36 #define CHG_BIT                 BIT(4)
37 #define CHGIN_BIT               BIT(6)
38
39 #define MAX77665_CHG_DTLS_00    0xb3
40 #define CHGIN_DTLS_MASK(val)    ((val & 0x60) >> 5)
41 #define CHGIN_DTLS_VALID        0x3
42
43 #define MAX77665_CHG_DTLS_01    0xb4
44 #define CHG_DTLS_MASK(val)      ((val) & 0xF)
45 #define CHG_DTLS_PREQUALIFICATION_MODE          0x0
46 #define CHG_DTLS_FAST_CONSTANT_CURRENT_MODE     0x1
47 #define CHG_DTLS_FAST_CONSTANT_VOLTAGE_MODE     0x2
48 #define CHG_DTLS_TOP_OFF_MODE                   0x3
49 #define CHG_DTLS_DONE_MODE                      0x4
50 #define CHG_DTLS_HIGH_TEMP_CHG_MODE             0x5
51 #define CHG_DTLS_TIME_FAULT_MODE                0x6
52 #define CHG_DTLS_THERMISTOR_SUSPEND_FAULT_MODE  0x7
53 #define CHG_DTLS_CHG_OFF_INPUT_INVALID          0x8
54 #define CHG_DTLS_CHG_OFF_JUNCT_TEMP             0xA
55 #define CHG_DTLS_CHG_OFF_WDT_EXPIRE             0xB
56 #define BAT_DTLS_MASK(val)      (((val) & 0x7F) >> 4)
57 #define BAT_DTLS_NO_BATTERY     0x0
58 #define BAT_DTLS_OVERCURRENT    0x6
59
60 #define MAX77665_CHG_DTLS_02    0xb5
61 #define BYP_DTLS_MASK(val)      ((val) & 0xF)
62 #define BYP_DTLS_VALID          0x0
63 #define MAX77665_CHG_DTLS_03    0xb6
64 #define MAX77665_CHG_CNFG_00    0xb7
65 #define CHARGER_OFF_OTG_OFF_BUCK_ON_BOOST_OFF 0x04
66 #define CHARGER_ON_OTG_OFF_BUCK_ON_BOOST_OFF 0x05
67 #define CHARGER_OFF_OTG_ON_BUCK_OFF_BOOST_ON 0x2A
68 #define WDTEN   (1 << 4)
69
70 #define MAX77665_CHG_CNFG_01                    0xb8
71 #define FAST_CHARGE_DURATION_DISABLE            (0x0 << 0)
72 #define FAST_CHARGE_DURATION_4HR                (0x1 << 0)
73 #define FAST_CHARGE_DURATION_6HR                (0x2 << 0)
74 #define FAST_CHARGE_DURATION_8HR                (0x3 << 0)
75 #define FAST_CHARGE_DURATION_10HR               (0x4 << 0)
76 #define FAST_CHARGE_DURATION_12HR               (0x5 << 0)
77 #define FAST_CHARGE_DURATION_14HR               (0x6 << 0)
78 #define FAST_CHARGE_DURATION_16HR               (0x7 << 0)
79 #define CHARGER_RESTART_THRESHOLD_100mV         (0x0 << 4)
80 #define CHARGER_RESTART_THRESHOLD_150mV         (0x1 << 4)
81 #define CHARGER_RESTART_THRESHOLD_200mV         (0x2 << 4)
82 #define CHARGER_RESTART_THRESHOLD_DISABLE       (0x3 << 4)
83 #define LOW_BATTERY_PREQ_DISABLE                (0x0 << 7)
84 #define LOW_BATTERY_PREQ_ENABLE                 (0x1 << 7)
85
86 #define MAX77665_CHG_CNFG_02    0xb9
87 #define MAX77665_CHG_CNFG_03    0xba
88 #define MAX77665_CHG_CNFG_04    0xbb
89 #define MAX77665_CHG_CNFG_05    0xbc
90
91 #define MAX77665_CHG_CNFG_06    0xbd
92 #define WDTCLR  (1 << 0)
93
94 #define MAX77665_CHG_CNFG_07    0xbe
95 #define MAX77665_CHG_CNFG_08    0xbf
96
97 #define MAX77665_CHG_CNFG_09    0xc0
98 #define MIN_CURRENT_LIMIT_mA    60
99 #define CURRENT_STEP_mA         20
100
101 #define MAX77665_CHG_CNFG_10    0xc1
102 #define MAX77665_CHG_CNFG_11    0xc2
103
104 #define MAX77665_CHG_CNFG_12    0xc3
105 #define BAT_TO_SYS_OVERCURRENT_MASK     0x7
106 #define BAT_TO_SYS_OVERCURRENT_3A00     (0x1 << 0)
107 #define BAT_TO_SYS_OVERCURRENT_3A25     (0x2 << 0)
108 #define BAT_TO_SYS_OVERCURRENT_3A50     (0x3 << 0)
109 #define BAT_TO_SYS_OVERCURRENT_3A75     (0x4 << 0)
110 #define BAT_TO_SYS_OVERCURRENT_4A00     (0x5 << 0)
111 #define BAT_TO_SYS_OVERCURRENT_4A25     (0x5 << 0)
112 #define BAT_TO_SYS_OVERCURRENT_4A75     (0x7 << 0)
113 #define VCHGIN_REGULATION_4V3           (0x0 << 3)
114 #define VCHGIN_REGULATION_4V7           (0x1 << 3)
115 #define VCHGIN_REGULATION_4V8           (0x2 << 3)
116 #define VCHGIN_REGULATION_4V9           (0x3 << 3)
117 #define CHARGER_LOW_POWER_MODE_OFF      (0x0 << 7)
118 #define CHARGER_LOW_POWER_MODE_ON       (0x1 << 7)
119
120 #define MAX77665_CHG_CNFG_13    0xc4
121
122 #define MAX77665_CHG_CNFG_14    0xc5
123
124 #define MAX77665_SAFEOUTCTRL    0xc6
125 #define ENSAFEOUT1              BIT(6)
126 #define ENSAFEOUT2              BIT(7)
127
128 #define MAX77665_WATCHDOG_TIMER_PERIOD_S 80
129
130 #define MAX_CABLES      6
131
132 enum max77665_mode {
133         OFF,
134         CHARGER,
135         OTG,
136 };
137
138 struct max77665_muic_platform_data {
139         const char *ext_conn_name;
140 };
141
142 struct max77665_charger_cable {
143         const char *extcon_name;
144         const char *name;
145         struct notifier_block nb;
146         struct max77665_charger *charger;
147         struct extcon_specific_cable_nb *extcon_dev;
148         struct delayed_work extcon_notifier_work;
149         long int event;
150 };
151
152 struct max77665_charger_plat_data {
153         uint32_t fast_chg_cc; /* fast charger current*/
154         uint32_t term_volt; /* charger termination voltage */
155         uint32_t curr_lim; /* input current limit */
156         uint8_t num_cables;
157         struct max77665_charger_cable *cables;
158         char *extcon_name;
159         void (*update_status)(int);
160 };
161
162 static inline bool charging_is_on(int val)
163 {
164         switch (CHG_DTLS_MASK(val)) {
165         case CHG_DTLS_PREQUALIFICATION_MODE:
166         case CHG_DTLS_FAST_CONSTANT_CURRENT_MODE:
167         case CHG_DTLS_FAST_CONSTANT_VOLTAGE_MODE:
168         case CHG_DTLS_TOP_OFF_MODE:
169         case CHG_DTLS_HIGH_TEMP_CHG_MODE:
170                 return true;
171         case CHG_DTLS_DONE_MODE:
172                 /*
173                  * Fall through:
174                  * charger is in done mode after 30mins(Tto) in top-off mode,
175                  * charging current will be 0 in this state.
176                  */
177         default:
178                 return false;
179         }
180 }
181 #endif