• Home
  • Raw
  • Download

Lines Matching +full:interrupt +full:- +full:map

18 #include <linux/dma/ipu-dma.h>
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()
98 struct ipu_irq_map *map = irq_data_get_irq_chip_data(d); in ipu_irq_unmask() local
105 bank = map->bank; in ipu_irq_unmask()
108 pr_err("IPU: %s(%u) - unmapped!\n", __func__, d->irq); in ipu_irq_unmask()
112 reg = ipu_read_reg(bank->ipu, bank->control); in ipu_irq_unmask()
113 reg |= (1UL << (map->source & 31)); in ipu_irq_unmask()
114 ipu_write_reg(bank->ipu, reg, bank->control); in ipu_irq_unmask()
121 struct ipu_irq_map *map = irq_data_get_irq_chip_data(d); in ipu_irq_mask() local
128 bank = map->bank; in ipu_irq_mask()
131 pr_err("IPU: %s(%u) - unmapped!\n", __func__, d->irq); in ipu_irq_mask()
135 reg = ipu_read_reg(bank->ipu, bank->control); in ipu_irq_mask()
136 reg &= ~(1UL << (map->source & 31)); in ipu_irq_mask()
137 ipu_write_reg(bank->ipu, reg, bank->control); in ipu_irq_mask()
144 struct ipu_irq_map *map = irq_data_get_irq_chip_data(d); in ipu_irq_ack() local
150 bank = map->bank; in ipu_irq_ack()
153 pr_err("IPU: %s(%u) - unmapped!\n", __func__, d->irq); in ipu_irq_ack()
157 ipu_write_reg(bank->ipu, 1UL << (map->source & 31), bank->status); in ipu_irq_ack()
162 * ipu_irq_status() - returns the current interrupt status of the specified IRQ.
163 * @irq: interrupt line to get status for.
164 * @return: true if the interrupt is pending/asserted or false if the
165 * interrupt is not pending.
169 struct ipu_irq_map *map = irq_get_chip_data(irq); in ipu_irq_status() local
175 bank = map->bank; in ipu_irq_status()
176 ret = bank && ipu_read_reg(bank->ipu, bank->status) & in ipu_irq_status()
177 (1UL << (map->source & 31)); in ipu_irq_status()
184 * ipu_irq_map() - map an IPU interrupt source to an IRQ number
185 * @source: interrupt source bit position (see below)
189 * sources, they are broken down in 5 32-bit registers, like 32, 32, 24, 32, 17.
191 * the possible IRQ, but rather its bit position. So, first interrupt in fourth
194 * with any interrupt bit assignments.
198 int i, ret = -ENOMEM; in ipu_irq_map()
199 struct ipu_irq_map *map; in ipu_irq_map() local
204 map = src2map(source); in ipu_irq_map()
205 if (map) { in ipu_irq_map()
206 pr_err("IPU: Source %u already mapped to IRQ %u\n", source, map->irq); in ipu_irq_map()
207 ret = -EBUSY; in ipu_irq_map()
230 pr_err("IPU: couldn't map source %u: %d\n", source, ret); in ipu_irq_map()
236 * ipu_irq_map() - map an IPU interrupt source to an IRQ number
237 * @source: interrupt source bit position (see ipu_irq_map())
242 int i, ret = -EINVAL; in ipu_irq_unmap()
255 irq_map[i].source = -EINVAL; in ipu_irq_unmap()
268 /* Chained IRQ handler for IPU function and error interrupt */
279 status = ipu_read_reg(ipu, bank->status); in ipu_irq_handler()
282 * be acked by ->handle_irq() (handle_level_irq). However, we in ipu_irq_handler()
285 status &= ipu_read_reg(ipu, bank->control); in ipu_irq_handler()
288 struct ipu_irq_map *map; in ipu_irq_handler() local
291 line--; in ipu_irq_handler()
295 map = src2map(32 * i + line); in ipu_irq_handler()
296 if (!map) { in ipu_irq_handler()
298 pr_err("IPU: Interrupt on unmapped source %u bank %d\n", in ipu_irq_handler()
302 irq = map->irq; in ipu_irq_handler()
320 int irq_base = irq_alloc_descs(-1, 0, CONFIG_MX3_IPU_IRQS, in ipu_irq_attach_irq()
341 irq_map[i].source = -EINVAL; in ipu_irq_attach_irq()
346 irq_set_chained_handler_and_data(ipu->irq_fn, ipu_irq_handler, ipu); in ipu_irq_attach_irq()
348 irq_set_chained_handler_and_data(ipu->irq_err, ipu_irq_handler, ipu); in ipu_irq_attach_irq()
350 ipu->irq_base = irq_base; in ipu_irq_attach_irq()
359 irq_base = ipu->irq_base; in ipu_irq_detach_irq()
361 irq_set_chained_handler_and_data(ipu->irq_fn, NULL, NULL); in ipu_irq_detach_irq()
363 irq_set_chained_handler_and_data(ipu->irq_err, NULL, NULL); in ipu_irq_detach_irq()