Commit 5d4e9bd79a5ab5bd4695d3becaa71da447a76a94
Committed by
Samuel Ortiz
1 parent
c6dc96467a
mfd: twl-core: Clean up module id lookup and definitions
Use enums for all module definitions: twl_module_ids for common functionality among twl4030/twl6030 twl4030_module_ids for twl4030 specific ids twl6030_module_ids for twl6030 specific ids In this way the list can be managed easier when new functionality going to be implemented. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Showing 2 changed files with 86 additions and 85 deletions Side-by-side Diff
drivers/mfd/twl-core.c
... | ... | @@ -74,8 +74,6 @@ |
74 | 74 | #define SUB_CHIP_ID3 3 |
75 | 75 | #define SUB_CHIP_ID_INVAL 0xff |
76 | 76 | |
77 | -#define TWL_MODULE_LAST TWL4030_MODULE_LAST | |
78 | - | |
79 | 77 | /* Base Address defns for twl4030_map[] */ |
80 | 78 | |
81 | 79 | /* subchip/slave 0 - USB ID */ |
... | ... | @@ -94,10 +92,7 @@ |
94 | 92 | #define TWL4030_BASEADD_MADC 0x0000 |
95 | 93 | #define TWL4030_BASEADD_MAIN_CHARGE 0x0074 |
96 | 94 | #define TWL4030_BASEADD_PRECHARGE 0x00AA |
97 | -#define TWL4030_BASEADD_PWM0 0x00F8 | |
98 | -#define TWL4030_BASEADD_PWM1 0x00FB | |
99 | -#define TWL4030_BASEADD_PWMA 0x00EF | |
100 | -#define TWL4030_BASEADD_PWMB 0x00F1 | |
95 | +#define TWL4030_BASEADD_PWM 0x00F8 | |
101 | 96 | #define TWL4030_BASEADD_KEYPAD 0x00D2 |
102 | 97 | |
103 | 98 | #define TWL5031_BASEADD_ACCESSORY 0x0074 /* Replaces Main Charge */ |
... | ... | @@ -117,7 +112,7 @@ |
117 | 112 | |
118 | 113 | /* subchip/slave 0 0x48 - POWER */ |
119 | 114 | #define TWL6030_BASEADD_RTC 0x0000 |
120 | -#define TWL6030_BASEADD_MEM 0x0017 | |
115 | +#define TWL6030_BASEADD_SECURED_REG 0x0017 | |
121 | 116 | #define TWL6030_BASEADD_PM_MASTER 0x001F |
122 | 117 | #define TWL6030_BASEADD_PM_SLAVE_MISC 0x0030 /* PM_RECEIVER */ |
123 | 118 | #define TWL6030_BASEADD_PM_MISC 0x00E2 |
... | ... | @@ -132,6 +127,7 @@ |
132 | 127 | #define TWL6030_BASEADD_PIH 0x00D0 |
133 | 128 | #define TWL6030_BASEADD_CHARGER 0x00E0 |
134 | 129 | #define TWL6025_BASEADD_CHARGER 0x00DA |
130 | +#define TWL6030_BASEADD_LED 0x00F4 | |
135 | 131 | |
136 | 132 | /* subchip/slave 2 0x4A - DFT */ |
137 | 133 | #define TWL6030_BASEADD_DIEID 0x00C0 |
138 | 134 | |
139 | 135 | |
140 | 136 | |
141 | 137 | |
142 | 138 | |
143 | 139 | |
... | ... | @@ -188,34 +184,33 @@ |
188 | 184 | * so they continue to match the order in this table. |
189 | 185 | */ |
190 | 186 | |
187 | + /* Common IPs */ | |
191 | 188 | { 0, TWL4030_BASEADD_USB }, |
189 | + { 1, TWL4030_BASEADD_PIH }, | |
190 | + { 2, TWL4030_BASEADD_MAIN_CHARGE }, | |
191 | + { 3, TWL4030_BASEADD_PM_MASTER }, | |
192 | + { 3, TWL4030_BASEADD_PM_RECEIVER }, | |
193 | + | |
194 | + { 3, TWL4030_BASEADD_RTC }, | |
195 | + { 2, TWL4030_BASEADD_PWM }, | |
196 | + { 2, TWL4030_BASEADD_LED }, | |
197 | + { 3, TWL4030_BASEADD_SECURED_REG }, | |
198 | + | |
199 | + /* TWL4030 specific IPs */ | |
192 | 200 | { 1, TWL4030_BASEADD_AUDIO_VOICE }, |
193 | 201 | { 1, TWL4030_BASEADD_GPIO }, |
194 | 202 | { 1, TWL4030_BASEADD_INTBR }, |
195 | - { 1, TWL4030_BASEADD_PIH }, | |
196 | - | |
197 | 203 | { 1, TWL4030_BASEADD_TEST }, |
198 | 204 | { 2, TWL4030_BASEADD_KEYPAD }, |
205 | + | |
199 | 206 | { 2, TWL4030_BASEADD_MADC }, |
200 | 207 | { 2, TWL4030_BASEADD_INTERRUPTS }, |
201 | - { 2, TWL4030_BASEADD_LED }, | |
202 | - | |
203 | - { 2, TWL4030_BASEADD_MAIN_CHARGE }, | |
204 | 208 | { 2, TWL4030_BASEADD_PRECHARGE }, |
205 | - { 2, TWL4030_BASEADD_PWM0 }, | |
206 | - { 2, TWL4030_BASEADD_PWM1 }, | |
207 | - { 2, TWL4030_BASEADD_PWMA }, | |
208 | - | |
209 | - { 2, TWL4030_BASEADD_PWMB }, | |
210 | - { 2, TWL5031_BASEADD_ACCESSORY }, | |
211 | - { 2, TWL5031_BASEADD_INTERRUPTS }, | |
212 | 209 | { 3, TWL4030_BASEADD_BACKUP }, |
213 | 210 | { 3, TWL4030_BASEADD_INT }, |
214 | 211 | |
215 | - { 3, TWL4030_BASEADD_PM_MASTER }, | |
216 | - { 3, TWL4030_BASEADD_PM_RECEIVER }, | |
217 | - { 3, TWL4030_BASEADD_RTC }, | |
218 | - { 3, TWL4030_BASEADD_SECURED_REG }, | |
212 | + { 2, TWL5031_BASEADD_ACCESSORY }, | |
213 | + { 2, TWL5031_BASEADD_INTERRUPTS }, | |
219 | 214 | }; |
220 | 215 | |
221 | 216 | static struct regmap_config twl4030_regmap_config[4] = { |
222 | 217 | |
223 | 218 | |
224 | 219 | |
... | ... | @@ -251,35 +246,25 @@ |
251 | 246 | * <linux/i2c/twl.h> defines for TWL4030_MODULE_* |
252 | 247 | * so they continue to match the order in this table. |
253 | 248 | */ |
254 | - { SUB_CHIP_ID1, TWL6030_BASEADD_USB }, | |
255 | - { SUB_CHIP_ID_INVAL, TWL6030_BASEADD_AUDIO }, | |
256 | - { SUB_CHIP_ID2, TWL6030_BASEADD_DIEID }, | |
257 | - { SUB_CHIP_ID2, TWL6030_BASEADD_RSV }, | |
258 | - { SUB_CHIP_ID1, TWL6030_BASEADD_PIH }, | |
259 | 249 | |
260 | - { SUB_CHIP_ID2, TWL6030_BASEADD_RSV }, | |
261 | - { SUB_CHIP_ID2, TWL6030_BASEADD_RSV }, | |
262 | - { SUB_CHIP_ID1, TWL6030_BASEADD_GPADC_CTRL }, | |
263 | - { SUB_CHIP_ID2, TWL6030_BASEADD_RSV }, | |
264 | - { SUB_CHIP_ID2, TWL6030_BASEADD_RSV }, | |
250 | + /* Common IPs */ | |
251 | + { 1, TWL6030_BASEADD_USB }, | |
252 | + { 1, TWL6030_BASEADD_PIH }, | |
253 | + { 1, TWL6030_BASEADD_CHARGER }, | |
254 | + { 0, TWL6030_BASEADD_PM_MASTER }, | |
255 | + { 0, TWL6030_BASEADD_PM_SLAVE_MISC }, | |
265 | 256 | |
266 | - { SUB_CHIP_ID1, TWL6030_BASEADD_CHARGER }, | |
267 | - { SUB_CHIP_ID1, TWL6030_BASEADD_GASGAUGE }, | |
268 | - { SUB_CHIP_ID1, TWL6030_BASEADD_PWM }, | |
269 | - { SUB_CHIP_ID0, TWL6030_BASEADD_ZERO }, | |
270 | - { SUB_CHIP_ID1, TWL6030_BASEADD_ZERO }, | |
257 | + { 0, TWL6030_BASEADD_RTC }, | |
258 | + { 1, TWL6030_BASEADD_PWM }, | |
259 | + { 1, TWL6030_BASEADD_LED }, | |
260 | + { 0, TWL6030_BASEADD_SECURED_REG }, | |
271 | 261 | |
272 | - { SUB_CHIP_ID2, TWL6030_BASEADD_ZERO }, | |
273 | - { SUB_CHIP_ID2, TWL6030_BASEADD_ZERO }, | |
274 | - { SUB_CHIP_ID2, TWL6030_BASEADD_RSV }, | |
275 | - { SUB_CHIP_ID2, TWL6030_BASEADD_RSV }, | |
276 | - { SUB_CHIP_ID2, TWL6030_BASEADD_RSV }, | |
277 | - | |
278 | - { SUB_CHIP_ID0, TWL6030_BASEADD_PM_MASTER }, | |
279 | - { SUB_CHIP_ID0, TWL6030_BASEADD_PM_SLAVE_MISC }, | |
280 | - { SUB_CHIP_ID0, TWL6030_BASEADD_RTC }, | |
281 | - { SUB_CHIP_ID0, TWL6030_BASEADD_MEM }, | |
282 | - { SUB_CHIP_ID1, TWL6025_BASEADD_CHARGER }, | |
262 | + /* TWL6030 specific IPs */ | |
263 | + { 0, TWL6030_BASEADD_ZERO }, | |
264 | + { 1, TWL6030_BASEADD_ZERO }, | |
265 | + { 2, TWL6030_BASEADD_ZERO }, | |
266 | + { 1, TWL6030_BASEADD_GPADC_CTRL }, | |
267 | + { 1, TWL6030_BASEADD_GASGAUGE }, | |
283 | 268 | }; |
284 | 269 | |
285 | 270 | static struct regmap_config twl6030_regmap_config[3] = { |
... | ... | @@ -305,6 +290,14 @@ |
305 | 290 | |
306 | 291 | /*----------------------------------------------------------------------*/ |
307 | 292 | |
293 | +static inline int twl_get_last_module(void) | |
294 | +{ | |
295 | + if (twl_class_is_4030()) | |
296 | + return TWL4030_MODULE_LAST; | |
297 | + else | |
298 | + return TWL6030_MODULE_LAST; | |
299 | +} | |
300 | + | |
308 | 301 | /* Exported Functions */ |
309 | 302 | |
310 | 303 | /** |
... | ... | @@ -325,7 +318,7 @@ |
325 | 318 | int sid; |
326 | 319 | struct twl_client *twl; |
327 | 320 | |
328 | - if (unlikely(mod_no >= TWL_MODULE_LAST)) { | |
321 | + if (unlikely(mod_no >= twl_get_last_module())) { | |
329 | 322 | pr_err("%s: invalid module number %d\n", DRIVER_NAME, mod_no); |
330 | 323 | return -EPERM; |
331 | 324 | } |
... | ... | @@ -367,7 +360,7 @@ |
367 | 360 | int sid; |
368 | 361 | struct twl_client *twl; |
369 | 362 | |
370 | - if (unlikely(mod_no >= TWL_MODULE_LAST)) { | |
363 | + if (unlikely(mod_no >= twl_get_last_module())) { | |
371 | 364 | pr_err("%s: invalid module number %d\n", DRIVER_NAME, mod_no); |
372 | 365 | return -EPERM; |
373 | 366 | } |
... | ... | @@ -1228,6 +1221,10 @@ |
1228 | 1221 | if ((id->driver_data) & TWL6030_CLASS) { |
1229 | 1222 | twl_id = TWL6030_CLASS_ID; |
1230 | 1223 | twl_map = &twl6030_map[0]; |
1224 | + /* The charger base address is different in twl6025 */ | |
1225 | + if ((id->driver_data) & TWL6025_SUBCLASS) | |
1226 | + twl_map[TWL_MODULE_MAIN_CHARGE].base = | |
1227 | + TWL6025_BASEADD_CHARGER; | |
1231 | 1228 | twl_regmap_config = twl6030_regmap_config; |
1232 | 1229 | num_slaves = TWL_NUM_SLAVES - 1; |
1233 | 1230 | } else { |
include/linux/i2c/twl.h
... | ... | @@ -39,51 +39,55 @@ |
39 | 39 | * address each module uses within a given i2c slave. |
40 | 40 | */ |
41 | 41 | |
42 | +/* Module IDs for similar functionalities found in twl4030/twl6030 */ | |
43 | +enum twl_module_ids { | |
44 | + TWL_MODULE_USB, | |
45 | + TWL_MODULE_PIH, | |
46 | + TWL_MODULE_MAIN_CHARGE, | |
47 | + TWL_MODULE_PM_MASTER, | |
48 | + TWL_MODULE_PM_RECEIVER, | |
49 | + | |
50 | + TWL_MODULE_RTC, | |
51 | + TWL_MODULE_PWM, | |
52 | + TWL_MODULE_LED, | |
53 | + TWL_MODULE_SECURED_REG, | |
54 | + | |
55 | + TWL_MODULE_LAST, | |
56 | +}; | |
57 | + | |
58 | +/* Modules only available in twl4030 series */ | |
42 | 59 | enum twl4030_module_ids { |
43 | - TWL4030_MODULE_USB = 0, /* Slave 0 (i2c address 0x48) */ | |
44 | - TWL4030_MODULE_AUDIO_VOICE, /* Slave 1 (i2c address 0x49) */ | |
60 | + TWL4030_MODULE_AUDIO_VOICE = TWL_MODULE_LAST, | |
45 | 61 | TWL4030_MODULE_GPIO, |
46 | 62 | TWL4030_MODULE_INTBR, |
47 | - TWL4030_MODULE_PIH, | |
48 | - | |
49 | 63 | TWL4030_MODULE_TEST, |
50 | - TWL4030_MODULE_KEYPAD, /* Slave 2 (i2c address 0x4a) */ | |
64 | + TWL4030_MODULE_KEYPAD, | |
65 | + | |
51 | 66 | TWL4030_MODULE_MADC, |
52 | 67 | TWL4030_MODULE_INTERRUPTS, |
53 | - TWL4030_MODULE_LED, | |
54 | - | |
55 | - TWL4030_MODULE_MAIN_CHARGE, | |
56 | 68 | TWL4030_MODULE_PRECHARGE, |
57 | - TWL4030_MODULE_PWM0, | |
58 | - TWL4030_MODULE_PWM1, | |
59 | - TWL4030_MODULE_PWMA, | |
69 | + TWL4030_MODULE_BACKUP, | |
70 | + TWL4030_MODULE_INT, | |
60 | 71 | |
61 | - TWL4030_MODULE_PWMB, | |
62 | 72 | TWL5031_MODULE_ACCESSORY, |
63 | 73 | TWL5031_MODULE_INTERRUPTS, |
64 | - TWL4030_MODULE_BACKUP, /* Slave 3 (i2c address 0x4b) */ | |
65 | - TWL4030_MODULE_INT, | |
66 | 74 | |
67 | - TWL4030_MODULE_PM_MASTER, | |
68 | - TWL4030_MODULE_PM_RECEIVER, | |
69 | - TWL4030_MODULE_RTC, | |
70 | - TWL4030_MODULE_SECURED_REG, | |
71 | 75 | TWL4030_MODULE_LAST, |
72 | 76 | }; |
73 | 77 | |
74 | -/* Similar functionalities implemented in TWL4030/6030 */ | |
75 | -#define TWL_MODULE_USB TWL4030_MODULE_USB | |
76 | -#define TWL_MODULE_PIH TWL4030_MODULE_PIH | |
77 | -#define TWL_MODULE_MAIN_CHARGE TWL4030_MODULE_MAIN_CHARGE | |
78 | -#define TWL_MODULE_PM_MASTER TWL4030_MODULE_PM_MASTER | |
79 | -#define TWL_MODULE_PM_RECEIVER TWL4030_MODULE_PM_RECEIVER | |
80 | -#define TWL_MODULE_RTC TWL4030_MODULE_RTC | |
81 | -#define TWL_MODULE_PWM TWL4030_MODULE_PWM0 | |
82 | -#define TWL_MODULE_LED TWL4030_MODULE_LED | |
78 | +/* Modules only available in twl6030 series */ | |
79 | +enum twl6030_module_ids { | |
80 | + TWL6030_MODULE_ID0 = TWL_MODULE_LAST, | |
81 | + TWL6030_MODULE_ID1, | |
82 | + TWL6030_MODULE_ID2, | |
83 | + TWL6030_MODULE_GPADC, | |
84 | + TWL6030_MODULE_GASGAUGE, | |
83 | 85 | |
84 | -#define TWL6030_MODULE_ID0 13 | |
85 | -#define TWL6030_MODULE_ID1 14 | |
86 | -#define TWL6030_MODULE_ID2 15 | |
86 | + TWL6030_MODULE_LAST, | |
87 | +}; | |
88 | + | |
89 | +/* Until the clients has been converted to use TWL_MODULE_LED */ | |
90 | +#define TWL4030_MODULE_LED TWL_MODULE_LED | |
87 | 91 | |
88 | 92 | #define GPIO_INTR_OFFSET 0 |
89 | 93 | #define KEYPAD_INTR_OFFSET 1 |