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
|
/*
* (C) Copyright 2009
* Windriver, <www.windriver.com>
* Tom Rix <Tom.Rix@windriver.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
#include <common.h>
#include <i2c.h>
/* I2C chip addresses */
/* USB ID */
#define TWL4030_CHIP_USB 0x48
/* AUD ID */
#define TWL4030_CHIP_AUDIO_VOICE 0x49
#define TWL4030_CHIP_GPIO 0x49
#define TWL4030_CHIP_INTBR 0x49
#define TWL4030_CHIP_PIH 0x49
#define TWL4030_CHIP_TEST 0x49
/* AUX ID */
#define TWL4030_CHIP_KEYPAD 0x4a
#define TWL4030_CHIP_MADC 0x4a
#define TWL4030_CHIP_INTERRUPTS 0x4a
#define TWL4030_CHIP_LED 0x4a
#define TWL4030_CHIP_MAIN_CHARGE 0x4a
#define TWL4030_CHIP_PRECHARGE 0x4a
#define TWL4030_CHIP_PWM0 0x4a
#define TWL4030_CHIP_PWM1 0x4a
#define TWL4030_CHIP_PWMA 0x4a
#define TWL4030_CHIP_PWMB 0x4a
/* POWER ID */
#define TWL4030_CHIP_BACKUP 0x4b
#define TWL4030_CHIP_INT 0x4b
#define TWL4030_CHIP_PM_MASTER 0x4b
#define TWL4030_CHIP_PM_RECIEVER 0x4b
#define TWL4030_CHIP_RTC 0x4b
#define TWL4030_CHIP_SECURED_REG 0x4b
/* Register base addresses */
/* USB ID */
#define TWL4030_BASEADD_USB 0x0000
/* AUD ID */
#define TWL4030_BASEADD_AUDIO_VOICE 0x0000
#define TWL4030_BASEADD_GPIO 0x0098
#define TWL4030_BASEADD_INTBR 0x0085
#define TWL4030_BASEADD_PIH 0x0080
#define TWL4030_BASEADD_TEST 0x004C
/* AUX ID */
#define TWL4030_BASEADD_INTERRUPTS 0x00B9
#define TWL4030_BASEADD_LED 0x00EE
#define TWL4030_BASEADD_MADC 0x0000
#define TWL4030_BASEADD_MAIN_CHARGE 0x0074
#define TWL4030_BASEADD_PRECHARGE 0x00AA
#define TWL4030_BASEADD_PWM0 0x00F8
#define TWL4030_BASEADD_PWM1 0x00FB
#define TWL4030_BASEADD_PWMA 0x00EF
#define TWL4030_BASEADD_PWMB 0x00F1
#define TWL4030_BASEADD_KEYPAD 0x00D2
/* POWER ID */
#define TWL4030_BASEADD_BACKUP 0x0014
#define TWL4030_BASEADD_INT 0x002E
#define TWL4030_BASEADD_PM_MASTER 0x0036
#define TWL4030_BASEADD_PM_RECIEVER 0x005B
#define TWL4030_BASEADD_RTC 0x001C
#define TWL4030_BASEADD_SECURED_REG 0x0000
/* Register addresses */
#define REG_STS_HW_CONDITIONS (TWL4030_BASEADD_PM_MASTER + 0x0F)
#define STS_VBUS 0x080
#define STS_CHG 0x02
#define REG_BCICTL1 (TWL4030_BASEADD_PM_MASTER + 0x023)
#define REG_BCICTL2 (TWL4030_BASEADD_PM_MASTER + 0x024)
#define CGAIN 0x020
#define ITHEN 0x010
#define ITHSENS 0x007
#define REG_BCIMFTH1 (TWL4030_BASEADD_PM_MASTER + 0x016)
#define REG_BCIMFTH2 (TWL4030_BASEADD_PM_MASTER + 0x017)
#define BCIAUTOWEN (TWL4030_BASEADD_PM_MASTER + 0x020)
#define CONFIG_DONE 0x010
#define BCIAUTOUSB 0x002
#define BCIAUTOAC 0x001
#define BCIMSTAT_MASK 0x03F
#define REG_BOOT_BCI (TWL4030_BASEADD_PM_MASTER + 0x007)
#define REG_GPBR1 (TWL4030_BASEADD_INTBR + 0x0c)
#define MADC_HFCLK_EN 0x80
#define DEFAULT_MADC_CLK_EN 0x10
#define REG_CTRL1 (TWL4030_BASEADD_MADC + 0x00)
#define MADC_ON 0x01
#define REG_SW1SELECT_MSB 0x07
#define SW1_CH9_SEL 0x02
#define REG_CTRL_SW1 (TWL4030_BASEADD_MADC + 0x012)
#define SW1_TRIGGER 0x020
#define EOC_SW1 0x002
#define BUSY 0x001
#define REG_GPCH9 (TWL4030_BASEADD_MADC + 0x049)
#define REG_BCIMSTATEC (TWL4030_BASEADD_MAIN_CHARGE + 0x002)
#define REG_BCIMFSTS2 (TWL4030_BASEADD_MAIN_CHARGE + 0x00E)
#define REG_BCIMFSTS3 (TWL4030_BASEADD_MAIN_CHARGE + 0x00F)
#define REG_BCIMFSTS4 (TWL4030_BASEADD_MAIN_CHARGE + 0x010)
#define REG_BCIMFKEY (TWL4030_BASEADD_MAIN_CHARGE + 0x011)
#define REG_BCIIREF1 (TWL4030_BASEADD_MAIN_CHARGE + 0x027)
#define REG_BCIMFSTS1 (TWL4030_BASEADD_PRECHARGE + 0x001)
#define USBFASTMCHG 0x004
#define BATSTSPCHG 0x004
#define BATSTSMCHG 0x040
#define VBATOV4 0x020
#define VBATOV3 0x010
#define VBATOV2 0x008
#define VBATOV1 0x004
#define MADC_LSB_MASK 0xC0
#define REG_BB_CFG (TWL4030_BASEADD_PM_RECIEVER + 0x12)
#define BBCHEN 0x10
#define BBSEL_2500mV 0x00
#define BBSEL_3000mV 0x04
#define BBSEL_3100mV 0x08
#define BBSEL_3200mV 0x0C
#define BBISEL_25uA 0x00
#define BBISEL_150uA 0x01
#define BBISEL_500uA 0x02
#define BBISEL_1000uA 0x03
#define REG_POWER_CTRL (TWL4030_BASEADD_USB + 0x0AC)
#define REG_POWER_CTRL_SET (TWL4030_BASEADD_USB + 0x0AD)
#define REG_POWER_CTRL_CLR (TWL4030_BASEADD_USB + 0x0AE)
#define OTG_EN 0x020
#define REG_PHY_CLK_CTRL (TWL4030_BASEADD_USB + 0x0FE)
#define REG_PHY_CLK_CTRL_STS (TWL4030_BASEADD_USB + 0x0FF)
#define PHY_DPLL_CLK 0x01
/* TWL4030 battery measuring parameters */
#define T2_BATTERY_VOLT (TWL4030_BASEADD_MAIN_CHARGE + 0x04)
#define T2_BATTERY_TEMP (TWL4030_BASEADD_MAIN_CHARGE + 0x06)
#define T2_BATTERY_CUR (TWL4030_BASEADD_MAIN_CHARGE + 0x08)
#define T2_BATTERY_ACVOLT (TWL4030_BASEADD_MAIN_CHARGE + 0x0A)
#define T2_BATTERY_USBVOLT (TWL4030_BASEADD_MAIN_CHARGE + 0x0C)
/* Keypad */
#define KEYPAD_KEYP_CTRL_REG 0xD2
#define KEYPAD_KEY_DEB_REG 0xD3
#define KEYPAD_LONG_KEY_REG1 0xD4
#define KEYPAD_LK_PTV_REG 0xD5
#define KEYPAD_TIME_OUT_REG1 0xD6
#define KEYPAD_TIME_OUT_REG2 0xD7
#define KEYPAD_KBC_REG 0xD8
#define KEYPAD_KBR_REG 0xD9
#define KEYPAD_KEYP_SMS 0xDA
#define KEYPAD_FULL_CODE_7_0 0xDB
#define KEYPAD_FULL_CODE_15_8 0xDC
#define KEYPAD_FULL_CODE_23_16 0xDD
#define KEYPAD_FULL_CODE_31_24 0xDE
#define KEYPAD_FULL_CODE_39_32 0xDF
#define KEYPAD_FULL_CODE_47_40 0xE0
#define KEYPAD_FULL_CODE_55_48 0xE1
#define KEYPAD_FULL_CODE_63_56 0xE2
#define KEYPAD_KEYP_ISR1 0xE3
#define KEYPAD_KEYP_IMR1 0xE4
#define KEYPAD_KEYP_ISR2 0xE5
#define KEYPAD_KEYP_IMR2 0xE6
#define KEYPAD_KEYP_SIR 0xE7
#define KEYPAD_KEYP_EDR 0xE8
#define KEYPAD_KEYP_SIH_CTRL 0xE9
#define CTRL_KBD_ON (1 << 6)
#define CTRL_RP_EN (1 << 5)
#define CTRL_TOLE_EN (1 << 4)
#define CTRL_TOE_EN (1 << 3)
#define CTRL_LK_EN (1 << 2)
#define CTRL_SOFTMODEN (1 << 1)
#define CTRL_SOFT_NRST (1 << 0)
int twl4030_init_battery_charging(void);
/* Declarations for users of the keypad, stubs for everyone else. */
#if (defined(CONFIG_TWL4030_KEYPAD) && (CONFIG_TWL4030_KEYPAD))
int twl4030_keypad_init(void);
int twl4030_keypad_reset(void);
int twl4030_keypad_keys_pressed(unsigned char *key1, unsigned char *key2);
#else
#define twl4030_keypad_init() 0
#define twl4030_keypad_reset() 0
#define twl4030_keypad_keys_pressed(a, b) 0
#endif
|