Commit 5d4e9bd79a5ab5bd4695d3becaa71da447a76a94

Authored by Peter Ujfalusi
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