Lines Matching +full:interrupt +full:- +full:map
23 * Register read / write - shall be inlined by the compiler
27 return __raw_readl(ipu->reg_ipu + reg); in ipu_read_reg()
32 __raw_writel(value, ipu->reg_ipu + reg); in ipu_write_reg()
99 struct ipu_irq_map *map = irq_data_get_irq_chip_data(d); in ipu_irq_unmask() local
106 bank = map->bank; in ipu_irq_unmask()
109 pr_err("IPU: %s(%u) - unmapped!\n", __func__, d->irq); in ipu_irq_unmask()
113 reg = ipu_read_reg(bank->ipu, bank->control); in ipu_irq_unmask()
114 reg |= (1UL << (map->source & 31)); in ipu_irq_unmask()
115 ipu_write_reg(bank->ipu, reg, bank->control); in ipu_irq_unmask()
122 struct ipu_irq_map *map = irq_data_get_irq_chip_data(d); in ipu_irq_mask() local
129 bank = map->bank; in ipu_irq_mask()
132 pr_err("IPU: %s(%u) - unmapped!\n", __func__, d->irq); in ipu_irq_mask()
136 reg = ipu_read_reg(bank->ipu, bank->control); in ipu_irq_mask()
137 reg &= ~(1UL << (map->source & 31)); in ipu_irq_mask()
138 ipu_write_reg(bank->ipu, reg, bank->control); in ipu_irq_mask()
145 struct ipu_irq_map *map = irq_data_get_irq_chip_data(d); in ipu_irq_ack() local
151 bank = map->bank; in ipu_irq_ack()
154 pr_err("IPU: %s(%u) - unmapped!\n", __func__, d->irq); in ipu_irq_ack()
158 ipu_write_reg(bank->ipu, 1UL << (map->source & 31), bank->status); in ipu_irq_ack()
163 * ipu_irq_status() - returns the current interrupt status of the specified IRQ.
164 * @irq: interrupt line to get status for.
165 * @return: true if the interrupt is pending/asserted or false if the
166 * interrupt is not pending.
170 struct ipu_irq_map *map = irq_get_chip_data(irq); in ipu_irq_status() local
176 bank = map->bank; in ipu_irq_status()
177 ret = bank && ipu_read_reg(bank->ipu, bank->status) & in ipu_irq_status()
178 (1UL << (map->source & 31)); in ipu_irq_status()
185 * ipu_irq_map() - map an IPU interrupt source to an IRQ number
186 * @source: interrupt source bit position (see below)
190 * sources, they are broken down in 5 32-bit registers, like 32, 32, 24, 32, 17.
192 * the possible IRQ, but rather its bit position. So, first interrupt in fourth
195 * with any interrupt bit assignments.
199 int i, ret = -ENOMEM; in ipu_irq_map()
200 struct ipu_irq_map *map; in ipu_irq_map() local
205 map = src2map(source); in ipu_irq_map()
206 if (map) { in ipu_irq_map()
207 pr_err("IPU: Source %u already mapped to IRQ %u\n", source, map->irq); in ipu_irq_map()
208 ret = -EBUSY; in ipu_irq_map()
231 pr_err("IPU: couldn't map source %u: %d\n", source, ret); in ipu_irq_map()
237 * ipu_irq_map() - map an IPU interrupt source to an IRQ number
238 * @source: interrupt source bit position (see ipu_irq_map())
243 int i, ret = -EINVAL; in ipu_irq_unmap()
256 irq_map[i].source = -EINVAL; in ipu_irq_unmap()
269 /* Chained IRQ handler for IPU error interrupt */
280 status = ipu_read_reg(ipu, bank->status); in ipu_irq_err()
283 * be acked by ->handle_irq() (handle_level_irq). However, we in ipu_irq_err()
286 status &= ipu_read_reg(ipu, bank->control); in ipu_irq_err()
289 struct ipu_irq_map *map; in ipu_irq_err() local
291 line--; in ipu_irq_err()
295 map = src2map(32 * i + line); in ipu_irq_err()
296 if (map) in ipu_irq_err()
297 irq = map->irq; in ipu_irq_err()
300 if (!map) { in ipu_irq_err()
301 pr_err("IPU: Interrupt on unmapped source %u bank %d\n", in ipu_irq_err()
310 /* Chained IRQ handler for IPU function interrupt */
321 status = ipu_read_reg(ipu, bank->status); in ipu_irq_fn()
323 status &= ipu_read_reg(ipu, bank->control); in ipu_irq_fn()
326 struct ipu_irq_map *map; in ipu_irq_fn() local
328 line--; in ipu_irq_fn()
332 map = src2map(32 * i + line); in ipu_irq_fn()
333 if (map) in ipu_irq_fn()
334 irq = map->irq; in ipu_irq_fn()
337 if (!map) { in ipu_irq_fn()
338 pr_err("IPU: Interrupt on unmapped source %u bank %d\n", in ipu_irq_fn()
357 struct ipu_platform_data *pdata = dev->dev.platform_data; in ipu_irq_attach_irq()
360 irq_base = pdata->irq_base; in ipu_irq_attach_irq()
377 irq_map[i].source = -EINVAL; in ipu_irq_attach_irq()
384 irq_set_handler_data(ipu->irq_fn, ipu); in ipu_irq_attach_irq()
385 irq_set_chained_handler(ipu->irq_fn, ipu_irq_fn); in ipu_irq_attach_irq()
387 irq_set_handler_data(ipu->irq_err, ipu); in ipu_irq_attach_irq()
388 irq_set_chained_handler(ipu->irq_err, ipu_irq_err); in ipu_irq_attach_irq()
395 struct ipu_platform_data *pdata = dev->dev.platform_data; in ipu_irq_detach_irq()
398 irq_base = pdata->irq_base; in ipu_irq_detach_irq()
400 irq_set_chained_handler(ipu->irq_fn, NULL); in ipu_irq_detach_irq()
401 irq_set_handler_data(ipu->irq_fn, NULL); in ipu_irq_detach_irq()
403 irq_set_chained_handler(ipu->irq_err, NULL); in ipu_irq_detach_irq()
404 irq_set_handler_data(ipu->irq_err, NULL); in ipu_irq_detach_irq()