Lines Matching refs:dev

93 void tw686x_disable_channel(struct tw686x_dev *dev, unsigned int channel)  in tw686x_disable_channel()  argument
95 u32 dma_en = reg_read(dev, DMA_CHANNEL_ENABLE); in tw686x_disable_channel()
96 u32 dma_cmd = reg_read(dev, DMA_CMD); in tw686x_disable_channel()
102 dev->pending_dma_en &= ~BIT(channel); in tw686x_disable_channel()
103 dev->pending_dma_cmd &= ~BIT(channel); in tw686x_disable_channel()
108 reg_write(dev, DMA_CHANNEL_ENABLE, dma_en); in tw686x_disable_channel()
109 reg_write(dev, DMA_CMD, dma_cmd); in tw686x_disable_channel()
112 void tw686x_enable_channel(struct tw686x_dev *dev, unsigned int channel) in tw686x_enable_channel() argument
114 u32 dma_en = reg_read(dev, DMA_CHANNEL_ENABLE); in tw686x_enable_channel()
115 u32 dma_cmd = reg_read(dev, DMA_CMD); in tw686x_enable_channel()
117 dev->pending_dma_en |= dma_en | BIT(channel); in tw686x_enable_channel()
118 dev->pending_dma_cmd |= dma_cmd | DMA_CMD_ENABLE | BIT(channel); in tw686x_enable_channel()
128 struct tw686x_dev *dev = from_timer(dev, t, dma_delay_timer); in tw686x_dma_delay() local
131 spin_lock_irqsave(&dev->lock, flags); in tw686x_dma_delay()
133 reg_write(dev, DMA_CHANNEL_ENABLE, dev->pending_dma_en); in tw686x_dma_delay()
134 reg_write(dev, DMA_CMD, dev->pending_dma_cmd); in tw686x_dma_delay()
135 dev->pending_dma_en = 0; in tw686x_dma_delay()
136 dev->pending_dma_cmd = 0; in tw686x_dma_delay()
138 spin_unlock_irqrestore(&dev->lock, flags); in tw686x_dma_delay()
141 static void tw686x_reset_channels(struct tw686x_dev *dev, unsigned int ch_mask) in tw686x_reset_channels() argument
145 dma_en = reg_read(dev, DMA_CHANNEL_ENABLE); in tw686x_reset_channels()
146 dma_cmd = reg_read(dev, DMA_CMD); in tw686x_reset_channels()
152 dev->pending_dma_en |= dma_en; in tw686x_reset_channels()
153 dev->pending_dma_cmd |= dma_cmd; in tw686x_reset_channels()
156 reg_write(dev, DMA_CHANNEL_ENABLE, dma_en & ~ch_mask); in tw686x_reset_channels()
159 dev_dbg(&dev->pci_dev->dev, "reset: stopping DMA\n"); in tw686x_reset_channels()
162 reg_write(dev, DMA_CMD, dma_cmd & ~ch_mask); in tw686x_reset_channels()
167 struct tw686x_dev *dev = (struct tw686x_dev *)dev_id; in tw686x_irq() local
173 int_status = reg_read(dev, INT_STATUS); /* cleared on read */ in tw686x_irq()
174 fifo_status = reg_read(dev, VIDEO_FIFO_STATUS); in tw686x_irq()
181 dev_dbg(&dev->pci_dev->dev, in tw686x_irq()
187 spin_lock_irqsave(&dev->lock, flags); in tw686x_irq()
188 dma_en = reg_read(dev, DMA_CHANNEL_ENABLE); in tw686x_irq()
189 spin_unlock_irqrestore(&dev->lock, flags); in tw686x_irq()
200 pb_status = reg_read(dev, PB_STATUS); in tw686x_irq()
207 tw686x_video_irq(dev, video_requests, pb_status, in tw686x_irq()
210 tw686x_audio_irq(dev, audio_requests, pb_status); in tw686x_irq()
214 spin_lock_irqsave(&dev->lock, flags); in tw686x_irq()
215 tw686x_reset_channels(dev, reset_ch); in tw686x_irq()
216 spin_unlock_irqrestore(&dev->lock, flags); in tw686x_irq()
217 mod_timer(&dev->dma_delay_timer, in tw686x_irq()
226 struct tw686x_dev *dev = container_of(v4l2_dev, struct tw686x_dev, in tw686x_dev_release() local
230 for (ch = 0; ch < max_channels(dev); ch++) in tw686x_dev_release()
231 v4l2_ctrl_handler_free(&dev->video_channels[ch].ctrl_handler); in tw686x_dev_release()
233 v4l2_device_unregister(&dev->v4l2_dev); in tw686x_dev_release()
235 kfree(dev->audio_channels); in tw686x_dev_release()
236 kfree(dev->video_channels); in tw686x_dev_release()
237 kfree(dev); in tw686x_dev_release()
243 struct tw686x_dev *dev; in tw686x_probe() local
246 dev = kzalloc(sizeof(*dev), GFP_KERNEL); in tw686x_probe()
247 if (!dev) in tw686x_probe()
249 dev->type = pci_id->driver_data; in tw686x_probe()
250 dev->dma_mode = dma_mode; in tw686x_probe()
251 sprintf(dev->name, "tw%04X", pci_dev->device); in tw686x_probe()
253 dev->video_channels = kcalloc(max_channels(dev), in tw686x_probe()
254 sizeof(*dev->video_channels), GFP_KERNEL); in tw686x_probe()
255 if (!dev->video_channels) { in tw686x_probe()
260 dev->audio_channels = kcalloc(max_channels(dev), in tw686x_probe()
261 sizeof(*dev->audio_channels), GFP_KERNEL); in tw686x_probe()
262 if (!dev->audio_channels) { in tw686x_probe()
267 pr_info("%s: PCI %s, IRQ %d, MMIO 0x%lx (%s mode)\n", dev->name, in tw686x_probe()
272 dev->pci_dev = pci_dev; in tw686x_probe()
279 err = dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(32)); in tw686x_probe()
281 dev_err(&pci_dev->dev, "32-bit PCI DMA not supported\n"); in tw686x_probe()
286 err = pci_request_regions(pci_dev, dev->name); in tw686x_probe()
288 dev_err(&pci_dev->dev, "unable to request PCI region\n"); in tw686x_probe()
292 dev->mmio = pci_ioremap_bar(pci_dev, 0); in tw686x_probe()
293 if (!dev->mmio) { in tw686x_probe()
294 dev_err(&pci_dev->dev, "unable to remap PCI region\n"); in tw686x_probe()
300 reg_write(dev, SYS_SOFT_RST, 0x0f); in tw686x_probe()
303 reg_write(dev, SRST[0], 0x3f); in tw686x_probe()
304 if (max_channels(dev) > 4) in tw686x_probe()
305 reg_write(dev, SRST[1], 0x3f); in tw686x_probe()
308 reg_write(dev, DMA_CMD, 0); in tw686x_probe()
309 reg_write(dev, DMA_CHANNEL_ENABLE, 0); in tw686x_probe()
312 reg_write(dev, DMA_CONFIG, 0xffffff04); in tw686x_probe()
313 reg_write(dev, DMA_CHANNEL_TIMEOUT, 0x140c8584); in tw686x_probe()
314 reg_write(dev, DMA_TIMER_INTERVAL, dma_interval); in tw686x_probe()
316 spin_lock_init(&dev->lock); in tw686x_probe()
318 timer_setup(&dev->dma_delay_timer, tw686x_dma_delay, 0); in tw686x_probe()
325 dev->v4l2_dev.release = tw686x_dev_release; in tw686x_probe()
326 err = tw686x_video_init(dev); in tw686x_probe()
328 dev_err(&pci_dev->dev, "can't register video\n"); in tw686x_probe()
332 err = tw686x_audio_init(dev); in tw686x_probe()
334 dev_warn(&pci_dev->dev, "can't register audio\n"); in tw686x_probe()
337 dev->name, dev); in tw686x_probe()
339 dev_err(&pci_dev->dev, "unable to request interrupt\n"); in tw686x_probe()
343 pci_set_drvdata(pci_dev, dev); in tw686x_probe()
347 tw686x_video_free(dev); in tw686x_probe()
348 tw686x_audio_free(dev); in tw686x_probe()
350 pci_iounmap(pci_dev, dev->mmio); in tw686x_probe()
356 kfree(dev->audio_channels); in tw686x_probe()
358 kfree(dev->video_channels); in tw686x_probe()
360 kfree(dev); in tw686x_probe()
366 struct tw686x_dev *dev = pci_get_drvdata(pci_dev); in tw686x_remove() local
372 free_irq(pci_dev->irq, dev); in tw686x_remove()
374 tw686x_video_free(dev); in tw686x_remove()
375 tw686x_audio_free(dev); in tw686x_remove()
376 del_timer_sync(&dev->dma_delay_timer); in tw686x_remove()
378 pci_iounmap(pci_dev, dev->mmio); in tw686x_remove()
389 spin_lock_irqsave(&dev->lock, flags); in tw686x_remove()
390 dev->pci_dev = NULL; in tw686x_remove()
391 spin_unlock_irqrestore(&dev->lock, flags); in tw686x_remove()
397 v4l2_device_put(&dev->v4l2_dev); in tw686x_remove()