diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /drivers/mfd/wm8994-irq.c | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (diff) |
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts:
litmus/sched_cedf.c
Diffstat (limited to 'drivers/mfd/wm8994-irq.c')
-rw-r--r-- | drivers/mfd/wm8994-irq.c | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/drivers/mfd/wm8994-irq.c b/drivers/mfd/wm8994-irq.c index 8400eb1ee5db..71c6e8f9aedb 100644 --- a/drivers/mfd/wm8994-irq.c +++ b/drivers/mfd/wm8994-irq.c | |||
@@ -156,16 +156,16 @@ static inline struct wm8994_irq_data *irq_to_wm8994_irq(struct wm8994 *wm8994, | |||
156 | return &wm8994_irqs[irq - wm8994->irq_base]; | 156 | return &wm8994_irqs[irq - wm8994->irq_base]; |
157 | } | 157 | } |
158 | 158 | ||
159 | static void wm8994_irq_lock(unsigned int irq) | 159 | static void wm8994_irq_lock(struct irq_data *data) |
160 | { | 160 | { |
161 | struct wm8994 *wm8994 = get_irq_chip_data(irq); | 161 | struct wm8994 *wm8994 = irq_data_get_irq_chip_data(data); |
162 | 162 | ||
163 | mutex_lock(&wm8994->irq_lock); | 163 | mutex_lock(&wm8994->irq_lock); |
164 | } | 164 | } |
165 | 165 | ||
166 | static void wm8994_irq_sync_unlock(unsigned int irq) | 166 | static void wm8994_irq_sync_unlock(struct irq_data *data) |
167 | { | 167 | { |
168 | struct wm8994 *wm8994 = get_irq_chip_data(irq); | 168 | struct wm8994 *wm8994 = irq_data_get_irq_chip_data(data); |
169 | int i; | 169 | int i; |
170 | 170 | ||
171 | for (i = 0; i < ARRAY_SIZE(wm8994->irq_masks_cur); i++) { | 171 | for (i = 0; i < ARRAY_SIZE(wm8994->irq_masks_cur); i++) { |
@@ -182,28 +182,30 @@ static void wm8994_irq_sync_unlock(unsigned int irq) | |||
182 | mutex_unlock(&wm8994->irq_lock); | 182 | mutex_unlock(&wm8994->irq_lock); |
183 | } | 183 | } |
184 | 184 | ||
185 | static void wm8994_irq_unmask(unsigned int irq) | 185 | static void wm8994_irq_enable(struct irq_data *data) |
186 | { | 186 | { |
187 | struct wm8994 *wm8994 = get_irq_chip_data(irq); | 187 | struct wm8994 *wm8994 = irq_data_get_irq_chip_data(data); |
188 | struct wm8994_irq_data *irq_data = irq_to_wm8994_irq(wm8994, irq); | 188 | struct wm8994_irq_data *irq_data = irq_to_wm8994_irq(wm8994, |
189 | data->irq); | ||
189 | 190 | ||
190 | wm8994->irq_masks_cur[irq_data->reg - 1] &= ~irq_data->mask; | 191 | wm8994->irq_masks_cur[irq_data->reg - 1] &= ~irq_data->mask; |
191 | } | 192 | } |
192 | 193 | ||
193 | static void wm8994_irq_mask(unsigned int irq) | 194 | static void wm8994_irq_disable(struct irq_data *data) |
194 | { | 195 | { |
195 | struct wm8994 *wm8994 = get_irq_chip_data(irq); | 196 | struct wm8994 *wm8994 = irq_data_get_irq_chip_data(data); |
196 | struct wm8994_irq_data *irq_data = irq_to_wm8994_irq(wm8994, irq); | 197 | struct wm8994_irq_data *irq_data = irq_to_wm8994_irq(wm8994, |
198 | data->irq); | ||
197 | 199 | ||
198 | wm8994->irq_masks_cur[irq_data->reg - 1] |= irq_data->mask; | 200 | wm8994->irq_masks_cur[irq_data->reg - 1] |= irq_data->mask; |
199 | } | 201 | } |
200 | 202 | ||
201 | static struct irq_chip wm8994_irq_chip = { | 203 | static struct irq_chip wm8994_irq_chip = { |
202 | .name = "wm8994", | 204 | .name = "wm8994", |
203 | .bus_lock = wm8994_irq_lock, | 205 | .irq_bus_lock = wm8994_irq_lock, |
204 | .bus_sync_unlock = wm8994_irq_sync_unlock, | 206 | .irq_bus_sync_unlock = wm8994_irq_sync_unlock, |
205 | .mask = wm8994_irq_mask, | 207 | .irq_disable = wm8994_irq_disable, |
206 | .unmask = wm8994_irq_unmask, | 208 | .irq_enable = wm8994_irq_enable, |
207 | }; | 209 | }; |
208 | 210 | ||
209 | /* The processing of the primary interrupt occurs in a thread so that | 211 | /* The processing of the primary interrupt occurs in a thread so that |
@@ -223,9 +225,11 @@ static irqreturn_t wm8994_irq_thread(int irq, void *data) | |||
223 | return IRQ_NONE; | 225 | return IRQ_NONE; |
224 | } | 226 | } |
225 | 227 | ||
226 | /* Apply masking */ | 228 | /* Bit swap and apply masking */ |
227 | for (i = 0; i < WM8994_NUM_IRQ_REGS; i++) | 229 | for (i = 0; i < WM8994_NUM_IRQ_REGS; i++) { |
230 | status[i] = be16_to_cpu(status[i]); | ||
228 | status[i] &= ~wm8994->irq_masks_cur[i]; | 231 | status[i] &= ~wm8994->irq_masks_cur[i]; |
232 | } | ||
229 | 233 | ||
230 | /* Report */ | 234 | /* Report */ |
231 | for (i = 0; i < ARRAY_SIZE(wm8994_irqs); i++) { | 235 | for (i = 0; i < ARRAY_SIZE(wm8994_irqs); i++) { |
@@ -274,17 +278,17 @@ int wm8994_irq_init(struct wm8994 *wm8994) | |||
274 | for (cur_irq = wm8994->irq_base; | 278 | for (cur_irq = wm8994->irq_base; |
275 | cur_irq < ARRAY_SIZE(wm8994_irqs) + wm8994->irq_base; | 279 | cur_irq < ARRAY_SIZE(wm8994_irqs) + wm8994->irq_base; |
276 | cur_irq++) { | 280 | cur_irq++) { |
277 | set_irq_chip_data(cur_irq, wm8994); | 281 | irq_set_chip_data(cur_irq, wm8994); |
278 | set_irq_chip_and_handler(cur_irq, &wm8994_irq_chip, | 282 | irq_set_chip_and_handler(cur_irq, &wm8994_irq_chip, |
279 | handle_edge_irq); | 283 | handle_edge_irq); |
280 | set_irq_nested_thread(cur_irq, 1); | 284 | irq_set_nested_thread(cur_irq, 1); |
281 | 285 | ||
282 | /* ARM needs us to explicitly flag the IRQ as valid | 286 | /* ARM needs us to explicitly flag the IRQ as valid |
283 | * and will set them noprobe when we do so. */ | 287 | * and will set them noprobe when we do so. */ |
284 | #ifdef CONFIG_ARM | 288 | #ifdef CONFIG_ARM |
285 | set_irq_flags(cur_irq, IRQF_VALID); | 289 | set_irq_flags(cur_irq, IRQF_VALID); |
286 | #else | 290 | #else |
287 | set_irq_noprobe(cur_irq); | 291 | irq_set_noprobe(cur_irq); |
288 | #endif | 292 | #endif |
289 | } | 293 | } |
290 | 294 | ||