diff options
author | Linus Walleij <linus.walleij@linaro.org> | 2013-01-04 07:14:34 -0500 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2013-01-30 14:42:14 -0500 |
commit | 56813f798e8cb3f79a25e0523e782d910f376083 (patch) | |
tree | 567b7786dac154f2df99f2ee88fef0ffb77ddc7f | |
parent | 1728c96d3d433e2ad3de8c98ce930446c5aa369a (diff) |
mfd: ab8500: update header file and version detection
This updates the AB8500 register map with defines for a few
new chip variants and adds version detection helpers to handle
the different variants.
Acked-by: Samuel Ortiz <sameo@linux.intel.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
-rw-r--r-- | include/linux/mfd/abx500/ab8500.h | 277 |
1 files changed, 222 insertions, 55 deletions
diff --git a/include/linux/mfd/abx500/ab8500.h b/include/linux/mfd/abx500/ab8500.h index 1cb5698b4d76..e640ea059be2 100644 --- a/include/linux/mfd/abx500/ab8500.h +++ b/include/linux/mfd/abx500/ab8500.h | |||
@@ -24,7 +24,7 @@ enum ab8500_version { | |||
24 | AB8500_VERSION_AB8500 = 0x0, | 24 | AB8500_VERSION_AB8500 = 0x0, |
25 | AB8500_VERSION_AB8505 = 0x1, | 25 | AB8500_VERSION_AB8505 = 0x1, |
26 | AB8500_VERSION_AB9540 = 0x2, | 26 | AB8500_VERSION_AB9540 = 0x2, |
27 | AB8500_VERSION_AB8540 = 0x3, | 27 | AB8500_VERSION_AB8540 = 0x4, |
28 | AB8500_VERSION_UNDEFINED, | 28 | AB8500_VERSION_UNDEFINED, |
29 | }; | 29 | }; |
30 | 30 | ||
@@ -32,6 +32,7 @@ enum ab8500_version { | |||
32 | #define AB8500_CUTEARLY 0x00 | 32 | #define AB8500_CUTEARLY 0x00 |
33 | #define AB8500_CUT1P0 0x10 | 33 | #define AB8500_CUT1P0 0x10 |
34 | #define AB8500_CUT1P1 0x11 | 34 | #define AB8500_CUT1P1 0x11 |
35 | #define AB8500_CUT1P2 0x12 /* Only valid for AB8540 */ | ||
35 | #define AB8500_CUT2P0 0x20 | 36 | #define AB8500_CUT2P0 0x20 |
36 | #define AB8500_CUT3P0 0x30 | 37 | #define AB8500_CUT3P0 0x30 |
37 | #define AB8500_CUT3P3 0x33 | 38 | #define AB8500_CUT3P3 0x33 |
@@ -39,6 +40,7 @@ enum ab8500_version { | |||
39 | /* | 40 | /* |
40 | * AB8500 bank addresses | 41 | * AB8500 bank addresses |
41 | */ | 42 | */ |
43 | #define AB8500_M_FSM_RANK 0x0 | ||
42 | #define AB8500_SYS_CTRL1_BLOCK 0x1 | 44 | #define AB8500_SYS_CTRL1_BLOCK 0x1 |
43 | #define AB8500_SYS_CTRL2_BLOCK 0x2 | 45 | #define AB8500_SYS_CTRL2_BLOCK 0x2 |
44 | #define AB8500_REGU_CTRL1 0x3 | 46 | #define AB8500_REGU_CTRL1 0x3 |
@@ -58,6 +60,7 @@ enum ab8500_version { | |||
58 | #define AB8500_DEVELOPMENT 0x11 | 60 | #define AB8500_DEVELOPMENT 0x11 |
59 | #define AB8500_DEBUG 0x12 | 61 | #define AB8500_DEBUG 0x12 |
60 | #define AB8500_PROD_TEST 0x13 | 62 | #define AB8500_PROD_TEST 0x13 |
63 | #define AB8500_STE_TEST 0x14 | ||
61 | #define AB8500_OTP_EMUL 0x15 | 64 | #define AB8500_OTP_EMUL 0x15 |
62 | 65 | ||
63 | /* | 66 | /* |
@@ -65,11 +68,11 @@ enum ab8500_version { | |||
65 | * Values used to index into array ab8500_irq_regoffset[] defined in | 68 | * Values used to index into array ab8500_irq_regoffset[] defined in |
66 | * drivers/mdf/ab8500-core.c | 69 | * drivers/mdf/ab8500-core.c |
67 | */ | 70 | */ |
68 | /* Definitions for AB8500 and AB9540 */ | 71 | /* Definitions for AB8500, AB9540 and AB8540 */ |
69 | /* ab8500_irq_regoffset[0] -> IT[Source|Latch|Mask]1 */ | 72 | /* ab8500_irq_regoffset[0] -> IT[Source|Latch|Mask]1 */ |
70 | #define AB8500_INT_MAIN_EXT_CH_NOT_OK 0 /* not 8505/9540 */ | 73 | #define AB8500_INT_MAIN_EXT_CH_NOT_OK 0 /* not 8505/9540 */ |
71 | #define AB8500_INT_UN_PLUG_TV_DET 1 /* not 8505/9540 */ | 74 | #define AB8500_INT_UN_PLUG_TV_DET 1 /* not 8505/9540/8540 */ |
72 | #define AB8500_INT_PLUG_TV_DET 2 /* not 8505/9540 */ | 75 | #define AB8500_INT_PLUG_TV_DET 2 /* not 8505/9540/8540 */ |
73 | #define AB8500_INT_TEMP_WARM 3 | 76 | #define AB8500_INT_TEMP_WARM 3 |
74 | #define AB8500_INT_PON_KEY2DB_F 4 | 77 | #define AB8500_INT_PON_KEY2DB_F 4 |
75 | #define AB8500_INT_PON_KEY2DB_R 5 | 78 | #define AB8500_INT_PON_KEY2DB_R 5 |
@@ -77,18 +80,19 @@ enum ab8500_version { | |||
77 | #define AB8500_INT_PON_KEY1DB_R 7 | 80 | #define AB8500_INT_PON_KEY1DB_R 7 |
78 | /* ab8500_irq_regoffset[1] -> IT[Source|Latch|Mask]2 */ | 81 | /* ab8500_irq_regoffset[1] -> IT[Source|Latch|Mask]2 */ |
79 | #define AB8500_INT_BATT_OVV 8 | 82 | #define AB8500_INT_BATT_OVV 8 |
80 | #define AB8500_INT_MAIN_CH_UNPLUG_DET 10 /* not 8505 */ | 83 | #define AB8500_INT_MAIN_CH_UNPLUG_DET 10 /* not 8505/8540 */ |
81 | #define AB8500_INT_MAIN_CH_PLUG_DET 11 /* not 8505 */ | 84 | #define AB8500_INT_MAIN_CH_PLUG_DET 11 /* not 8505/8540 */ |
82 | #define AB8500_INT_VBUS_DET_F 14 | 85 | #define AB8500_INT_VBUS_DET_F 14 |
83 | #define AB8500_INT_VBUS_DET_R 15 | 86 | #define AB8500_INT_VBUS_DET_R 15 |
84 | /* ab8500_irq_regoffset[2] -> IT[Source|Latch|Mask]3 */ | 87 | /* ab8500_irq_regoffset[2] -> IT[Source|Latch|Mask]3 */ |
85 | #define AB8500_INT_VBUS_CH_DROP_END 16 | 88 | #define AB8500_INT_VBUS_CH_DROP_END 16 |
86 | #define AB8500_INT_RTC_60S 17 | 89 | #define AB8500_INT_RTC_60S 17 |
87 | #define AB8500_INT_RTC_ALARM 18 | 90 | #define AB8500_INT_RTC_ALARM 18 |
91 | #define AB8540_INT_BIF_INT 19 | ||
88 | #define AB8500_INT_BAT_CTRL_INDB 20 | 92 | #define AB8500_INT_BAT_CTRL_INDB 20 |
89 | #define AB8500_INT_CH_WD_EXP 21 | 93 | #define AB8500_INT_CH_WD_EXP 21 |
90 | #define AB8500_INT_VBUS_OVV 22 | 94 | #define AB8500_INT_VBUS_OVV 22 |
91 | #define AB8500_INT_MAIN_CH_DROP_END 23 /* not 8505/9540 */ | 95 | #define AB8500_INT_MAIN_CH_DROP_END 23 /* not 8505/9540/8540 */ |
92 | /* ab8500_irq_regoffset[3] -> IT[Source|Latch|Mask]4 */ | 96 | /* ab8500_irq_regoffset[3] -> IT[Source|Latch|Mask]4 */ |
93 | #define AB8500_INT_CCN_CONV_ACC 24 | 97 | #define AB8500_INT_CCN_CONV_ACC 24 |
94 | #define AB8500_INT_INT_AUD 25 | 98 | #define AB8500_INT_INT_AUD 25 |
@@ -99,7 +103,7 @@ enum ab8500_version { | |||
99 | #define AB8500_INT_BUP_CHG_NOT_OK 30 | 103 | #define AB8500_INT_BUP_CHG_NOT_OK 30 |
100 | #define AB8500_INT_BUP_CHG_OK 31 | 104 | #define AB8500_INT_BUP_CHG_OK 31 |
101 | /* ab8500_irq_regoffset[4] -> IT[Source|Latch|Mask]5 */ | 105 | /* ab8500_irq_regoffset[4] -> IT[Source|Latch|Mask]5 */ |
102 | #define AB8500_INT_GP_HW_ADC_CONV_END 32 /* not 8505 */ | 106 | #define AB8500_INT_GP_HW_ADC_CONV_END 32 /* not 8505/8540 */ |
103 | #define AB8500_INT_ACC_DETECT_1DB_F 33 | 107 | #define AB8500_INT_ACC_DETECT_1DB_F 33 |
104 | #define AB8500_INT_ACC_DETECT_1DB_R 34 | 108 | #define AB8500_INT_ACC_DETECT_1DB_R 34 |
105 | #define AB8500_INT_ACC_DETECT_22DB_F 35 | 109 | #define AB8500_INT_ACC_DETECT_22DB_F 35 |
@@ -108,23 +112,23 @@ enum ab8500_version { | |||
108 | #define AB8500_INT_ACC_DETECT_21DB_R 38 | 112 | #define AB8500_INT_ACC_DETECT_21DB_R 38 |
109 | #define AB8500_INT_GP_SW_ADC_CONV_END 39 | 113 | #define AB8500_INT_GP_SW_ADC_CONV_END 39 |
110 | /* ab8500_irq_regoffset[5] -> IT[Source|Latch|Mask]7 */ | 114 | /* ab8500_irq_regoffset[5] -> IT[Source|Latch|Mask]7 */ |
111 | #define AB8500_INT_GPIO6R 40 /* not 8505/9540 */ | 115 | #define AB8500_INT_GPIO6R 40 /* not 8505/9540/8540 */ |
112 | #define AB8500_INT_GPIO7R 41 /* not 8505/9540 */ | 116 | #define AB8500_INT_GPIO7R 41 /* not 8505/9540/8540 */ |
113 | #define AB8500_INT_GPIO8R 42 /* not 8505/9540 */ | 117 | #define AB8500_INT_GPIO8R 42 /* not 8505/9540/8540 */ |
114 | #define AB8500_INT_GPIO9R 43 /* not 8505/9540 */ | 118 | #define AB8500_INT_GPIO9R 43 /* not 8505/9540/8540 */ |
115 | #define AB8500_INT_GPIO10R 44 | 119 | #define AB8500_INT_GPIO10R 44 /* not 8540 */ |
116 | #define AB8500_INT_GPIO11R 45 | 120 | #define AB8500_INT_GPIO11R 45 /* not 8540 */ |
117 | #define AB8500_INT_GPIO12R 46 /* not 8505 */ | 121 | #define AB8500_INT_GPIO12R 46 /* not 8505/8540 */ |
118 | #define AB8500_INT_GPIO13R 47 | 122 | #define AB8500_INT_GPIO13R 47 /* not 8540 */ |
119 | /* ab8500_irq_regoffset[6] -> IT[Source|Latch|Mask]8 */ | 123 | /* ab8500_irq_regoffset[6] -> IT[Source|Latch|Mask]8 */ |
120 | #define AB8500_INT_GPIO24R 48 /* not 8505 */ | 124 | #define AB8500_INT_GPIO24R 48 /* not 8505/8540 */ |
121 | #define AB8500_INT_GPIO25R 49 /* not 8505 */ | 125 | #define AB8500_INT_GPIO25R 49 /* not 8505/8540 */ |
122 | #define AB8500_INT_GPIO36R 50 /* not 8505/9540 */ | 126 | #define AB8500_INT_GPIO36R 50 /* not 8505/9540/8540 */ |
123 | #define AB8500_INT_GPIO37R 51 /* not 8505/9540 */ | 127 | #define AB8500_INT_GPIO37R 51 /* not 8505/9540/8540 */ |
124 | #define AB8500_INT_GPIO38R 52 /* not 8505/9540 */ | 128 | #define AB8500_INT_GPIO38R 52 /* not 8505/9540/8540 */ |
125 | #define AB8500_INT_GPIO39R 53 /* not 8505/9540 */ | 129 | #define AB8500_INT_GPIO39R 53 /* not 8505/9540/8540 */ |
126 | #define AB8500_INT_GPIO40R 54 | 130 | #define AB8500_INT_GPIO40R 54 /* not 8540 */ |
127 | #define AB8500_INT_GPIO41R 55 | 131 | #define AB8500_INT_GPIO41R 55 /* not 8540 */ |
128 | /* ab8500_irq_regoffset[7] -> IT[Source|Latch|Mask]9 */ | 132 | /* ab8500_irq_regoffset[7] -> IT[Source|Latch|Mask]9 */ |
129 | #define AB8500_INT_GPIO6F 56 /* not 8505/9540 */ | 133 | #define AB8500_INT_GPIO6F 56 /* not 8505/9540 */ |
130 | #define AB8500_INT_GPIO7F 57 /* not 8505/9540 */ | 134 | #define AB8500_INT_GPIO7F 57 /* not 8505/9540 */ |
@@ -135,14 +139,14 @@ enum ab8500_version { | |||
135 | #define AB8500_INT_GPIO12F 62 /* not 8505 */ | 139 | #define AB8500_INT_GPIO12F 62 /* not 8505 */ |
136 | #define AB8500_INT_GPIO13F 63 | 140 | #define AB8500_INT_GPIO13F 63 |
137 | /* ab8500_irq_regoffset[8] -> IT[Source|Latch|Mask]10 */ | 141 | /* ab8500_irq_regoffset[8] -> IT[Source|Latch|Mask]10 */ |
138 | #define AB8500_INT_GPIO24F 64 /* not 8505 */ | 142 | #define AB8500_INT_GPIO24F 64 /* not 8505/8540 */ |
139 | #define AB8500_INT_GPIO25F 65 /* not 8505 */ | 143 | #define AB8500_INT_GPIO25F 65 /* not 8505/8540 */ |
140 | #define AB8500_INT_GPIO36F 66 /* not 8505/9540 */ | 144 | #define AB8500_INT_GPIO36F 66 /* not 8505/9540/8540 */ |
141 | #define AB8500_INT_GPIO37F 67 /* not 8505/9540 */ | 145 | #define AB8500_INT_GPIO37F 67 /* not 8505/9540/8540 */ |
142 | #define AB8500_INT_GPIO38F 68 /* not 8505/9540 */ | 146 | #define AB8500_INT_GPIO38F 68 /* not 8505/9540/8540 */ |
143 | #define AB8500_INT_GPIO39F 69 /* not 8505/9540 */ | 147 | #define AB8500_INT_GPIO39F 69 /* not 8505/9540/8540 */ |
144 | #define AB8500_INT_GPIO40F 70 | 148 | #define AB8500_INT_GPIO40F 70 /* not 8540 */ |
145 | #define AB8500_INT_GPIO41F 71 | 149 | #define AB8500_INT_GPIO41F 71 /* not 8540 */ |
146 | /* ab8500_irq_regoffset[9] -> IT[Source|Latch|Mask]12 */ | 150 | /* ab8500_irq_regoffset[9] -> IT[Source|Latch|Mask]12 */ |
147 | #define AB8500_INT_ADP_SOURCE_ERROR 72 | 151 | #define AB8500_INT_ADP_SOURCE_ERROR 72 |
148 | #define AB8500_INT_ADP_SINK_ERROR 73 | 152 | #define AB8500_INT_ADP_SINK_ERROR 73 |
@@ -160,42 +164,44 @@ enum ab8500_version { | |||
160 | #define AB8500_INT_SRP_DETECT 88 | 164 | #define AB8500_INT_SRP_DETECT 88 |
161 | #define AB8500_INT_USB_CHARGER_NOT_OKR 89 | 165 | #define AB8500_INT_USB_CHARGER_NOT_OKR 89 |
162 | #define AB8500_INT_ID_WAKEUP_R 90 | 166 | #define AB8500_INT_ID_WAKEUP_R 90 |
167 | #define AB8500_INT_ID_DET_PLUGR 91 /* 8505/9540 cut2.0 */ | ||
163 | #define AB8500_INT_ID_DET_R1R 92 | 168 | #define AB8500_INT_ID_DET_R1R 92 |
164 | #define AB8500_INT_ID_DET_R2R 93 | 169 | #define AB8500_INT_ID_DET_R2R 93 |
165 | #define AB8500_INT_ID_DET_R3R 94 | 170 | #define AB8500_INT_ID_DET_R3R 94 |
166 | #define AB8500_INT_ID_DET_R4R 95 | 171 | #define AB8500_INT_ID_DET_R4R 95 |
167 | /* ab8500_irq_regoffset[12] -> IT[Source|Latch|Mask]21 */ | 172 | /* ab8500_irq_regoffset[12] -> IT[Source|Latch|Mask]21 */ |
168 | #define AB8500_INT_ID_WAKEUP_F 96 | 173 | #define AB8500_INT_ID_WAKEUP_F 96 /* not 8505/9540 */ |
169 | #define AB8500_INT_ID_DET_R1F 98 | 174 | #define AB8500_INT_ID_DET_PLUGF 97 /* 8505/9540 cut2.0 */ |
170 | #define AB8500_INT_ID_DET_R2F 99 | 175 | #define AB8500_INT_ID_DET_R1F 98 /* not 8505/9540 */ |
171 | #define AB8500_INT_ID_DET_R3F 100 | 176 | #define AB8500_INT_ID_DET_R2F 99 /* not 8505/9540 */ |
172 | #define AB8500_INT_ID_DET_R4F 101 | 177 | #define AB8500_INT_ID_DET_R3F 100 /* not 8505/9540 */ |
173 | #define AB8500_INT_CHAUTORESTARTAFTSEC 102 | 178 | #define AB8500_INT_ID_DET_R4F 101 /* not 8505/9540 */ |
179 | #define AB8500_INT_CHAUTORESTARTAFTSEC 102 /* not 8505/9540 */ | ||
174 | #define AB8500_INT_CHSTOPBYSEC 103 | 180 | #define AB8500_INT_CHSTOPBYSEC 103 |
175 | /* ab8500_irq_regoffset[13] -> IT[Source|Latch|Mask]22 */ | 181 | /* ab8500_irq_regoffset[13] -> IT[Source|Latch|Mask]22 */ |
176 | #define AB8500_INT_USB_CH_TH_PROT_F 104 | 182 | #define AB8500_INT_USB_CH_TH_PROT_F 104 |
177 | #define AB8500_INT_USB_CH_TH_PROT_R 105 | 183 | #define AB8500_INT_USB_CH_TH_PROT_R 105 |
178 | #define AB8500_INT_MAIN_CH_TH_PROT_F 106 /* not 8505/9540 */ | 184 | #define AB8500_INT_MAIN_CH_TH_PROT_F 106 /* not 8505/9540 */ |
179 | #define AB8500_INT_MAIN_CH_TH_PROT_R 107 /* not 8505/9540 */ | 185 | #define AB8500_INT_MAIN_CH_TH_PROT_R 107 /* not 8505/9540 */ |
180 | #define AB8500_INT_CHCURLIMNOHSCHIRP 109 | 186 | #define AB8500_INT_CHCURLIMNOHSCHIRP 109 |
181 | #define AB8500_INT_CHCURLIMHSCHIRP 110 | 187 | #define AB8500_INT_CHCURLIMHSCHIRP 110 |
182 | #define AB8500_INT_XTAL32K_KO 111 | 188 | #define AB8500_INT_XTAL32K_KO 111 |
183 | 189 | ||
184 | /* Definitions for AB9540 */ | 190 | /* Definitions for AB9540 / AB8505 */ |
185 | /* ab8500_irq_regoffset[14] -> IT[Source|Latch|Mask]13 */ | 191 | /* ab8500_irq_regoffset[14] -> IT[Source|Latch|Mask]13 */ |
186 | #define AB9540_INT_GPIO50R 113 | 192 | #define AB9540_INT_GPIO50R 113 /* not 8540 */ |
187 | #define AB9540_INT_GPIO51R 114 /* not 8505 */ | 193 | #define AB9540_INT_GPIO51R 114 /* not 8505/8540 */ |
188 | #define AB9540_INT_GPIO52R 115 | 194 | #define AB9540_INT_GPIO52R 115 /* not 8540 */ |
189 | #define AB9540_INT_GPIO53R 116 | 195 | #define AB9540_INT_GPIO53R 116 /* not 8540 */ |
190 | #define AB9540_INT_GPIO54R 117 /* not 8505 */ | 196 | #define AB9540_INT_GPIO54R 117 /* not 8505/8540 */ |
191 | #define AB9540_INT_IEXT_CH_RF_BFN_R 118 | 197 | #define AB9540_INT_IEXT_CH_RF_BFN_R 118 |
192 | #define AB9540_INT_IEXT_CH_RF_BFN_F 119 | ||
193 | /* ab8500_irq_regoffset[15] -> IT[Source|Latch|Mask]14 */ | 198 | /* ab8500_irq_regoffset[15] -> IT[Source|Latch|Mask]14 */ |
194 | #define AB9540_INT_GPIO50F 121 | 199 | #define AB9540_INT_GPIO50F 121 /* not 8540 */ |
195 | #define AB9540_INT_GPIO51F 122 /* not 8505 */ | 200 | #define AB9540_INT_GPIO51F 122 /* not 8505/8540 */ |
196 | #define AB9540_INT_GPIO52F 123 | 201 | #define AB9540_INT_GPIO52F 123 /* not 8540 */ |
197 | #define AB9540_INT_GPIO53F 124 | 202 | #define AB9540_INT_GPIO53F 124 /* not 8540 */ |
198 | #define AB9540_INT_GPIO54F 125 /* not 8505 */ | 203 | #define AB9540_INT_GPIO54F 125 /* not 8505/8540 */ |
204 | #define AB9540_INT_IEXT_CH_RF_BFN_F 126 | ||
199 | /* ab8500_irq_regoffset[16] -> IT[Source|Latch|Mask]25 */ | 205 | /* ab8500_irq_regoffset[16] -> IT[Source|Latch|Mask]25 */ |
200 | #define AB8505_INT_KEYSTUCK 128 | 206 | #define AB8505_INT_KEYSTUCK 128 |
201 | #define AB8505_INT_IKR 129 | 207 | #define AB8505_INT_IKR 129 |
@@ -204,6 +210,87 @@ enum ab8500_version { | |||
204 | #define AB8505_INT_KEYDEGLITCH 132 | 210 | #define AB8505_INT_KEYDEGLITCH 132 |
205 | #define AB8505_INT_MODPWRSTATUSF 134 | 211 | #define AB8505_INT_MODPWRSTATUSF 134 |
206 | #define AB8505_INT_MODPWRSTATUSR 135 | 212 | #define AB8505_INT_MODPWRSTATUSR 135 |
213 | /* ab8500_irq_regoffset[17] -> IT[Source|Latch|Mask]6 */ | ||
214 | #define AB8500_INT_HOOK_DET_NEG_F 138 | ||
215 | #define AB8500_INT_HOOK_DET_NEG_R 139 | ||
216 | #define AB8500_INT_HOOK_DET_POS_F 140 | ||
217 | #define AB8500_INT_HOOK_DET_POS_R 141 | ||
218 | #define AB8500_INT_PLUG_DET_COMP_F 142 | ||
219 | #define AB8500_INT_PLUG_DET_COMP_R 143 | ||
220 | /* ab8500_irq_regoffset[18] -> IT[Source|Latch|Mask]23 */ | ||
221 | #define AB8505_INT_COLL 144 | ||
222 | #define AB8505_INT_RESERR 145 | ||
223 | #define AB8505_INT_FRAERR 146 | ||
224 | #define AB8505_INT_COMERR 147 | ||
225 | #define AB8505_INT_SPDSET 148 | ||
226 | #define AB8505_INT_DSENT 149 | ||
227 | #define AB8505_INT_DREC 150 | ||
228 | #define AB8505_INT_ACC_INT 151 | ||
229 | /* ab8500_irq_regoffset[19] -> IT[Source|Latch|Mask]24 */ | ||
230 | #define AB8505_INT_NOPINT 152 | ||
231 | /* ab8540_irq_regoffset[20] -> IT[Source|Latch|Mask]26 */ | ||
232 | #define AB8540_INT_IDPLUGDETCOMPF 160 | ||
233 | #define AB8540_INT_IDPLUGDETCOMPR 161 | ||
234 | #define AB8540_INT_FMDETCOMPLOF 162 | ||
235 | #define AB8540_INT_FMDETCOMPLOR 163 | ||
236 | #define AB8540_INT_FMDETCOMPHIF 164 | ||
237 | #define AB8540_INT_FMDETCOMPHIR 165 | ||
238 | #define AB8540_INT_ID5VDETCOMPF 166 | ||
239 | #define AB8540_INT_ID5VDETCOMPR 167 | ||
240 | /* ab8540_irq_regoffset[21] -> IT[Source|Latch|Mask]27 */ | ||
241 | #define AB8540_INT_GPIO43F 168 | ||
242 | #define AB8540_INT_GPIO43R 169 | ||
243 | #define AB8540_INT_GPIO44F 170 | ||
244 | #define AB8540_INT_GPIO44R 171 | ||
245 | #define AB8540_INT_KEYPOSDETCOMPF 172 | ||
246 | #define AB8540_INT_KEYPOSDETCOMPR 173 | ||
247 | #define AB8540_INT_KEYNEGDETCOMPF 174 | ||
248 | #define AB8540_INT_KEYNEGDETCOMPR 175 | ||
249 | /* ab8540_irq_regoffset[22] -> IT[Source|Latch|Mask]28 */ | ||
250 | #define AB8540_INT_GPIO1VBATF 176 | ||
251 | #define AB8540_INT_GPIO1VBATR 177 | ||
252 | #define AB8540_INT_GPIO2VBATF 178 | ||
253 | #define AB8540_INT_GPIO2VBATR 179 | ||
254 | #define AB8540_INT_GPIO3VBATF 180 | ||
255 | #define AB8540_INT_GPIO3VBATR 181 | ||
256 | #define AB8540_INT_GPIO4VBATF 182 | ||
257 | #define AB8540_INT_GPIO4VBATR 183 | ||
258 | /* ab8540_irq_regoffset[23] -> IT[Source|Latch|Mask]29 */ | ||
259 | #define AB8540_INT_SYSCLKREQ2F 184 | ||
260 | #define AB8540_INT_SYSCLKREQ2R 185 | ||
261 | #define AB8540_INT_SYSCLKREQ3F 186 | ||
262 | #define AB8540_INT_SYSCLKREQ3R 187 | ||
263 | #define AB8540_INT_SYSCLKREQ4F 188 | ||
264 | #define AB8540_INT_SYSCLKREQ4R 189 | ||
265 | #define AB8540_INT_SYSCLKREQ5F 190 | ||
266 | #define AB8540_INT_SYSCLKREQ5R 191 | ||
267 | /* ab8540_irq_regoffset[24] -> IT[Source|Latch|Mask]30 */ | ||
268 | #define AB8540_INT_PWMOUT1F 192 | ||
269 | #define AB8540_INT_PWMOUT1R 193 | ||
270 | #define AB8540_INT_PWMCTRL0F 194 | ||
271 | #define AB8540_INT_PWMCTRL0R 195 | ||
272 | #define AB8540_INT_PWMCTRL1F 196 | ||
273 | #define AB8540_INT_PWMCTRL1R 197 | ||
274 | #define AB8540_INT_SYSCLKREQ6F 198 | ||
275 | #define AB8540_INT_SYSCLKREQ6R 199 | ||
276 | /* ab8540_irq_regoffset[25] -> IT[Source|Latch|Mask]31 */ | ||
277 | #define AB8540_INT_PWMEXTVIBRA1F 200 | ||
278 | #define AB8540_INT_PWMEXTVIBRA1R 201 | ||
279 | #define AB8540_INT_PWMEXTVIBRA2F 202 | ||
280 | #define AB8540_INT_PWMEXTVIBRA2R 203 | ||
281 | #define AB8540_INT_PWMOUT2F 204 | ||
282 | #define AB8540_INT_PWMOUT2R 205 | ||
283 | #define AB8540_INT_PWMOUT3F 206 | ||
284 | #define AB8540_INT_PWMOUT3R 207 | ||
285 | /* ab8540_irq_regoffset[26] -> IT[Source|Latch|Mask]32 */ | ||
286 | #define AB8540_INT_ADDATA2F 208 | ||
287 | #define AB8540_INT_ADDATA2R 209 | ||
288 | #define AB8540_INT_DADATA2F 210 | ||
289 | #define AB8540_INT_DADATA2R 211 | ||
290 | #define AB8540_INT_FSYNC2F 212 | ||
291 | #define AB8540_INT_FSYNC2R 213 | ||
292 | #define AB8540_INT_BITCLK2F 214 | ||
293 | #define AB8540_INT_BITCLK2R 215 | ||
207 | 294 | ||
208 | /* | 295 | /* |
209 | * AB8500_AB9540_NR_IRQS is used when configuring the IRQ numbers for the | 296 | * AB8500_AB9540_NR_IRQS is used when configuring the IRQ numbers for the |
@@ -213,13 +300,24 @@ enum ab8500_version { | |||
213 | * which is larger. | 300 | * which is larger. |
214 | */ | 301 | */ |
215 | #define AB8500_NR_IRQS 112 | 302 | #define AB8500_NR_IRQS 112 |
216 | #define AB8505_NR_IRQS 136 | 303 | #define AB8505_NR_IRQS 153 |
217 | #define AB9540_NR_IRQS 136 | 304 | #define AB9540_NR_IRQS 153 |
305 | #define AB8540_NR_IRQS 216 | ||
218 | /* This is set to the roof of any AB8500 chip variant IRQ counts */ | 306 | /* This is set to the roof of any AB8500 chip variant IRQ counts */ |
219 | #define AB8500_MAX_NR_IRQS AB9540_NR_IRQS | 307 | #define AB8500_MAX_NR_IRQS AB8540_NR_IRQS |
220 | 308 | ||
221 | #define AB8500_NUM_IRQ_REGS 14 | 309 | #define AB8500_NUM_IRQ_REGS 14 |
222 | #define AB9540_NUM_IRQ_REGS 17 | 310 | #define AB9540_NUM_IRQ_REGS 20 |
311 | #define AB8540_NUM_IRQ_REGS 27 | ||
312 | |||
313 | /* Turn On Status Event */ | ||
314 | #define AB8500_POR_ON_VBAT 0x01 | ||
315 | #define AB8500_POW_KEY_1_ON 0x02 | ||
316 | #define AB8500_POW_KEY_2_ON 0x04 | ||
317 | #define AB8500_RTC_ALARM 0x08 | ||
318 | #define AB8500_MAIN_CH_DET 0x10 | ||
319 | #define AB8500_VBUS_DET 0x20 | ||
320 | #define AB8500_USB_ID_DET 0x40 | ||
223 | 321 | ||
224 | /** | 322 | /** |
225 | * struct ab8500 - ab8500 internal structure | 323 | * struct ab8500 - ab8500 internal structure |
@@ -335,10 +433,79 @@ static inline int is_ab8500_2p0_or_earlier(struct ab8500 *ab) | |||
335 | return (is_ab8500(ab) && (ab->chip_id <= AB8500_CUT2P0)); | 433 | return (is_ab8500(ab) && (ab->chip_id <= AB8500_CUT2P0)); |
336 | } | 434 | } |
337 | 435 | ||
436 | static inline int is_ab8500_3p3_or_earlier(struct ab8500 *ab) | ||
437 | { | ||
438 | return (is_ab8500(ab) && (ab->chip_id <= AB8500_CUT3P3)); | ||
439 | } | ||
440 | |||
338 | /* exclude also ab8505, ab9540... */ | 441 | /* exclude also ab8505, ab9540... */ |
339 | static inline int is_ab8500_2p0(struct ab8500 *ab) | 442 | static inline int is_ab8500_2p0(struct ab8500 *ab) |
340 | { | 443 | { |
341 | return (is_ab8500(ab) && (ab->chip_id == AB8500_CUT2P0)); | 444 | return (is_ab8500(ab) && (ab->chip_id == AB8500_CUT2P0)); |
342 | } | 445 | } |
343 | 446 | ||
447 | static inline int is_ab8505_1p0_or_earlier(struct ab8500 *ab) | ||
448 | { | ||
449 | return (is_ab8505(ab) && (ab->chip_id <= AB8500_CUT1P0)); | ||
450 | } | ||
451 | |||
452 | static inline int is_ab8505_2p0(struct ab8500 *ab) | ||
453 | { | ||
454 | return (is_ab8505(ab) && (ab->chip_id == AB8500_CUT2P0)); | ||
455 | } | ||
456 | |||
457 | static inline int is_ab9540_1p0_or_earlier(struct ab8500 *ab) | ||
458 | { | ||
459 | return (is_ab9540(ab) && (ab->chip_id <= AB8500_CUT1P0)); | ||
460 | } | ||
461 | |||
462 | static inline int is_ab9540_2p0(struct ab8500 *ab) | ||
463 | { | ||
464 | return (is_ab9540(ab) && (ab->chip_id == AB8500_CUT2P0)); | ||
465 | } | ||
466 | |||
467 | /* | ||
468 | * Be careful, the marketing name for this chip is 2.1 | ||
469 | * but the value read from the chip is 3.0 (0x30) | ||
470 | */ | ||
471 | static inline int is_ab9540_3p0(struct ab8500 *ab) | ||
472 | { | ||
473 | return (is_ab9540(ab) && (ab->chip_id == AB8500_CUT3P0)); | ||
474 | } | ||
475 | |||
476 | static inline int is_ab8540_1p0_or_earlier(struct ab8500 *ab) | ||
477 | { | ||
478 | return is_ab8540(ab) && (ab->chip_id <= AB8500_CUT1P0); | ||
479 | } | ||
480 | |||
481 | static inline int is_ab8540_1p1_or_earlier(struct ab8500 *ab) | ||
482 | { | ||
483 | return is_ab8540(ab) && (ab->chip_id <= AB8500_CUT1P1); | ||
484 | } | ||
485 | |||
486 | static inline int is_ab8540_1p2_or_earlier(struct ab8500 *ab) | ||
487 | { | ||
488 | return is_ab8540(ab) && (ab->chip_id <= AB8500_CUT1P2); | ||
489 | } | ||
490 | |||
491 | static inline int is_ab8540_2p0_or_earlier(struct ab8500 *ab) | ||
492 | { | ||
493 | return is_ab8540(ab) && (ab->chip_id <= AB8500_CUT2P0); | ||
494 | } | ||
495 | |||
496 | static inline int is_ab8540_2p0(struct ab8500 *ab) | ||
497 | { | ||
498 | return is_ab8540(ab) && (ab->chip_id == AB8500_CUT2P0); | ||
499 | } | ||
500 | |||
501 | static inline int is_ab8505_2p0_earlier(struct ab8500 *ab) | ||
502 | { | ||
503 | return (is_ab8505(ab) && (ab->chip_id < AB8500_CUT2P0)); | ||
504 | } | ||
505 | |||
506 | static inline int is_ab9540_2p0_or_earlier(struct ab8500 *ab) | ||
507 | { | ||
508 | return (is_ab9540(ab) && (ab->chip_id < AB8500_CUT2P0)); | ||
509 | } | ||
510 | |||
344 | #endif /* MFD_AB8500_H */ | 511 | #endif /* MFD_AB8500_H */ |