hc
2024-08-12 233ab1bd4c5697f5cdec94e60206e8c6ac609b4c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
/*
 * (C) Copyright 2010
 * Texas Instruments, <www.ti.com>
 *
 * SPDX-License-Identifier:    GPL-2.0+
 */
 
#ifndef TWL6030_H
#define TWL6030_H
 
#include <common.h>
#include <i2c.h>
 
/* I2C chip addresses */
#define TWL6030_CHIP_PM        0x48
 
#define TWL6030_CHIP_USB    0x49
#define TWL6030_CHIP_ADC    0x49
#define TWL6030_CHIP_CHARGER    0x49
#define TWL6030_CHIP_PWM    0x49
 
/* Slave Address 0x48 */
#define TWL6030_STS_HW_CONDITIONS    0x21
 
#define TWL6030_STS_HW_CONDITIONS_PWRON    (1 << 0)
 
#define TWL6030_PHOENIX_DEV_ON        0x25
 
#define TWL6030_PHOENIX_APP_DEVOFF    (1 << 0)
#define TWL6030_PHOENIX_CON_DEVOFF    (1 << 1)
#define TWL6030_PHOENIX_MOD_DEVOFF    (1 << 2)
 
#define TWL6030_PH_STS_BOOT        0x29
 
#define TWL6030_PH_STS_BOOT0        (1 << 0)
#define TWL6030_PH_STS_BOOT1        (1 << 1)
#define TWL6030_PH_STS_BOOT2        (1 << 2)
#define TWL6030_PH_STS_BOOT3        (1 << 3)
 
#define TWL6030_VAUX1_CFG_STATE        0x86
#define TWL6030_VAUX1_CFG_VOLTAGE    0x87
#define TWL6030_VMMC_CFG_STATE        0x9A
#define TWL6030_VMMC_CFG_VOLTAGE    0x9B
#define TWL6030_VUSB_CFG_STATE        0xA2
#define TWL6030_VUSB_CFG_VOLTAGE    0xA3
 
#define TWL6030_CFG_GRP_P1        (1 << 0)
#define TWL6030_CFG_STATE_ON        (1 << 0)
#define TWL6030_CFG_STATE_P1        (TWL6030_CFG_GRP_P1 << 5)
#define TWL6030_CFG_VOLTAGE_18        0x09
#define TWL6030_CFG_VOLTAGE_28        0x13
#define TWL6030_CFG_VOLTAGE_30        0x15
#define TWL6030_CFG_VOLTAGE_33        0x18
 
#define MISC1            0xE4
#define VAC_MEAS        (1 << 2)
#define VBAT_MEAS        (1 << 1)
#define BB_MEAS            (1 << 0)
 
#define TWL6030_MISC2            0xE5
#define TWL6030_MISC2_VUSB_IN_PMID    (1 << 3)
#define TWL6030_MISC2_VUSB_IN_VSYS    (1 << 4)
 
/* Slave Address 0x49 */
 
#define TWL6030_CONTROLLER_STAT1        0xE3
 
#define TWL6030_CONTROLLER_STAT1_VAC_DET    (1 << 3)
#define TWL6030_CONTROLLER_STAT1_VBUS_DET    (1 << 2)
 
/* Battery CHARGER REGISTERS */
#define CONTROLLER_INT_MASK    0xE0
#define CONTROLLER_CTRL1    0xE1
#define CONTROLLER_WDG        0xE2
#define CONTROLLER_STAT1    0xE3
#define CHARGERUSB_INT_STATUS    0xE4
#define CHARGERUSB_INT_MASK    0xE5
#define CHARGERUSB_STATUS_INT1    0xE6
#define CHARGERUSB_STATUS_INT2    0xE7
#define CHARGERUSB_CTRL1    0xE8
#define CHARGERUSB_CTRL2    0xE9
#define CHARGERUSB_CTRL3    0xEA
#define CHARGERUSB_STAT1    0xEB
#define CHARGERUSB_VOREG    0xEC
#define CHARGERUSB_VICHRG    0xED
#define CHARGERUSB_CINLIMIT    0xEE
#define CHARGERUSB_CTRLLIMIT1    0xEF
 
/* CHARGERUSB_VICHRG */
#define CHARGERUSB_VICHRG_500        0x4
#define CHARGERUSB_VICHRG_1500        0xE
/* CHARGERUSB_CINLIMIT */
#define CHARGERUSB_CIN_LIMIT_100    0x1
#define CHARGERUSB_CIN_LIMIT_300    0x5
#define CHARGERUSB_CIN_LIMIT_500    0x9
#define CHARGERUSB_CIN_LIMIT_NONE    0xF
/* CONTROLLER_INT_MASK */
#define MVAC_FAULT        (1 << 6)
#define MAC_EOC            (1 << 5)
#define MBAT_REMOVED        (1 << 4)
#define MFAULT_WDG        (1 << 3)
#define MBAT_TEMP        (1 << 2)
#define MVBUS_DET        (1 << 1)
#define MVAC_DET        (1 << 0)
/* CHARGERUSB_INT_MASK */
#define MASK_MCURRENT_TERM        (1 << 3)
#define MASK_MCHARGERUSB_STAT        (1 << 2)
#define MASK_MCHARGERUSB_THMREG        (1 << 1)
#define MASK_MCHARGERUSB_FAULT        (1 << 0)
/* CHARGERUSB_VOREG */
#define CHARGERUSB_VOREG_3P52        0x01
#define CHARGERUSB_VOREG_4P0        0x19
#define CHARGERUSB_VOREG_4P2        0x23
#define CHARGERUSB_VOREG_4P76        0x3F
/* CHARGERUSB_CTRL1 */
#define SUSPEND_BOOT        (1 << 7)
#define OPA_MODE        (1 << 6)
#define HZ_MODE            (1 << 5)
#define TERM            (1 << 4)
/* CHARGERUSB_CTRL2 */
#define CHARGERUSB_CTRL2_VITERM_50    (0 << 5)
#define CHARGERUSB_CTRL2_VITERM_100    (1 << 5)
#define CHARGERUSB_CTRL2_VITERM_150    (2 << 5)
#define CHARGERUSB_CTRL2_VITERM_400    (7 << 5)
/* CONTROLLER_CTRL1 */
#define CONTROLLER_CTRL1_EN_CHARGER    (1 << 4)
#define CONTROLLER_CTRL1_SEL_CHARGER    (1 << 3)
/* CONTROLLER_STAT1 */
#define CHRG_EXTCHRG_STATZ    (1 << 7)
#define CHRG_DET_N        (1 << 5)
#define VAC_DET            (1 << 3)
#define VBUS_DET        (1 << 2)
 
#define FG_REG_10    0xCA
#define FG_REG_11    0xCB
 
#define TOGGLE1        0x90
#define FGS        (1 << 5)
#define FGR        (1 << 4)
#define GPADCS        (1 << 1)
#define GPADCR        (1 << 0)
 
#define CTRL_P2        0x34
#define CTRL_P2_SP2    (1 << 2)
#define CTRL_P2_EOCP2    (1 << 1)
#define CTRL_P2_BUSY    (1 << 0)
 
#define TWL6032_CTRL_P1    0x36
#define CTRL_P1_SP1    (1 << 3)
 
#define GPCH0_LSB    0x57
#define GPCH0_MSB    0x58
 
#define TWL6032_GPCH0_LSB    0x3b
 
#define TWL6032_GPSELECT_ISB    0x35
 
#define USB_PRODUCT_ID_LSB    0x02
 
#define TWL6030_GPADC_VBAT_CHNL    0x07
#define TWL6032_GPADC_VBAT_CHNL    0x12
 
#define TWL6030_GPADC_CTRL    0x2e
#define TWL6032_GPADC_CTRL2    0x2f
#define GPADC_CTRL2_CH18_SCALER_EN    (1 << 2)
#define GPADC_CTRL_SCALER_DIV4        (1 << 3)
 
#define TWL6030_VBAT_MULT    40 * 1000
#define TWL6032_VBAT_MULT    25 * 1000
 
#define TWL6030_VBAT_SHIFT    (10 + 3)
#define TWL6032_VBAT_SHIFT    (12 + 2)
 
enum twl603x_chip_type{
   chip_TWL6030,
   chip_TWL6032,
   chip_TWL603X_cnt
};
 
struct twl6030_data{
   u8 chip_type;
   u8 adc_rbase;
   u8 adc_ctrl;
   u8 adc_enable;
   int vbat_mult;
   int vbat_shift;
};
 
/* Functions to read and write from TWL6030 */
static inline int twl6030_i2c_write_u8(u8 chip_no, u8 reg, u8 val)
{
   return i2c_write(chip_no, reg, 1, &val, 1);
}
 
static inline int twl6030_i2c_read_u8(u8 chip_no, u8 reg, u8 *val)
{
   return i2c_read(chip_no, reg, 1, val, 1);
}
 
/*
 * Power
 */
 
void twl6030_power_off(void);
void twl6030_init_battery_charging(void);
void twl6030_usb_device_settings(void);
void twl6030_start_usb_charging(void);
void twl6030_stop_usb_charging(void);
int twl6030_get_battery_voltage(void);
int twl6030_get_battery_current(void);
void twl6030_power_mmc_init(int dev_index);
 
/*
 * Input
 */
 
int twl6030_input_power_button(void);
int twl6030_input_charger(void);
int twl6030_input_usb(void);
 
#endif /* TWL6030_H */