Lines Matching defs:pcdev

230 static int mx1_camera_setup_dma(struct mx1_camera_dev *pcdev)
232 struct videobuf_buffer *vbuf = &pcdev->active->vb;
233 struct device *dev = pcdev->icd->parent;
236 if (unlikely(!pcdev->active)) {
242 ret = imx_dma_setup_single(pcdev->dma_chan,
244 vbuf->size, pcdev->res->start +
252 /* Called under spinlock_irqsave(&pcdev->lock, ...) */
258 struct mx1_camera_dev *pcdev = ici->priv;
264 list_add_tail(&vb->queue, &pcdev->capture);
268 if (!pcdev->active) {
269 pcdev->active = buf;
272 if (!mx1_camera_setup_dma(pcdev)) {
275 temp = __raw_readl(pcdev->base + CSICR1) |
277 __raw_writel(temp, pcdev->base + CSICR1);
312 static void mx1_camera_wakeup(struct mx1_camera_dev *pcdev,
323 if (list_empty(&pcdev->capture)) {
324 pcdev->active = NULL;
328 pcdev->active = list_entry(pcdev->capture.next,
332 if (likely(!mx1_camera_setup_dma(pcdev))) {
336 temp = __raw_readl(pcdev->base + CSICR1) | CSICR1_SOF_INTEN;
337 __raw_writel(temp, pcdev->base + CSICR1);
343 struct mx1_camera_dev *pcdev = data;
344 struct device *dev = pcdev->icd->parent;
349 spin_lock_irqsave(&pcdev->lock, flags);
353 if (unlikely(!pcdev->active)) {
358 vb = &pcdev->active->vb;
364 mx1_camera_wakeup(pcdev, vb, buf);
366 spin_unlock_irqrestore(&pcdev->lock, flags);
380 struct mx1_camera_dev *pcdev = ici->priv;
383 &pcdev->lock, V4L2_BUF_TYPE_VIDEO_CAPTURE,
388 static int mclk_get_divisor(struct mx1_camera_dev *pcdev)
390 unsigned int mclk = pcdev->mclk;
394 lcdclk = clk_get_rate(pcdev->clk);
402 dev_dbg(pcdev->icd->parent,
409 static void mx1_camera_activate(struct mx1_camera_dev *pcdev)
413 dev_dbg(pcdev->icd->parent, "Activate device\n");
415 clk_enable(pcdev->clk);
418 __raw_writel(csicr1, pcdev->base + CSICR1);
421 csicr1 |= CSICR1_MCLKDIV(mclk_get_divisor(pcdev));
424 __raw_writel(csicr1, pcdev->base + CSICR1);
427 static void mx1_camera_deactivate(struct mx1_camera_dev *pcdev)
429 dev_dbg(pcdev->icd->parent, "Deactivate device\n");
432 __raw_writel(0x00, pcdev->base + CSICR1);
434 clk_disable(pcdev->clk);
444 struct mx1_camera_dev *pcdev = ici->priv;
446 if (pcdev->icd)
452 mx1_camera_activate(pcdev);
454 pcdev->icd = icd;
462 struct mx1_camera_dev *pcdev = ici->priv;
465 BUG_ON(icd != pcdev->icd);
468 csicr1 = __raw_readl(pcdev->base + CSICR1) & ~CSI_IRQ_MASK;
469 __raw_writel(csicr1, pcdev->base + CSICR1);
472 imx_dma_disable(pcdev->dma_chan);
477 mx1_camera_deactivate(pcdev);
479 pcdev->icd = NULL;
494 struct mx1_camera_dev *pcdev = ici->priv;
519 if (!pcdev->pdata ||
520 pcdev->pdata->flags & MX1_CAMERA_VSYNC_HIGH)
528 if (!pcdev->pdata ||
529 pcdev->pdata->flags & MX1_CAMERA_PCLK_RISING)
537 if (!pcdev->pdata ||
538 pcdev->pdata->flags & MX1_CAMERA_DATA_HIGH)
552 csicr1 = __raw_readl(pcdev->base + CSICR1);
561 __raw_writel(csicr1, pcdev->base + CSICR1);
716 struct mx1_camera_dev *pcdev;
737 pcdev = kzalloc(sizeof(*pcdev), GFP_KERNEL);
738 if (!pcdev) {
739 dev_err(&pdev->dev, "Could not allocate pcdev\n");
744 pcdev->res = res;
745 pcdev->clk = clk;
747 pcdev->pdata = pdev->dev.platform_data;
749 if (pcdev->pdata)
750 pcdev->mclk = pcdev->pdata->mclk_10khz * 10000;
752 if (!pcdev->mclk) {
756 pcdev->mclk = 20000000;
759 INIT_LIST_HEAD(&pcdev->capture);
760 spin_lock_init(&pcdev->lock);
775 pcdev->irq = irq;
776 pcdev->base = base;
779 pcdev->dma_chan = imx_dma_request_by_prio(DRIVER_NAME, DMA_PRIO_HIGH);
780 if (pcdev->dma_chan < 0) {
785 dev_dbg(&pdev->dev, "got DMA channel %d\n", pcdev->dma_chan);
787 imx_dma_setup_handlers(pcdev->dma_chan, mx1_camera_dma_irq, NULL,
788 pcdev);
790 imx_dma_config_channel(pcdev->dma_chan, IMX_DMA_TYPE_FIFO,
793 imx_dma_config_burstlen(pcdev->dma_chan, 0);
806 regs.ARM_r9 = (long)MX1_DMA_CCR(pcdev->dma_chan);
807 regs.ARM_r10 = (long)pcdev->base + CSICR1;
808 regs.ARM_fp = (long)pcdev->base + CSISR;
809 regs.ARM_sp = 1 << pcdev->dma_chan;
815 pcdev->soc_host.drv_name = DRIVER_NAME;
816 pcdev->soc_host.ops = &mx1_soc_camera_host_ops;
817 pcdev->soc_host.priv = pcdev;
818 pcdev->soc_host.v4l2_dev.dev = &pdev->dev;
819 pcdev->soc_host.nr = pdev->id;
820 err = soc_camera_host_register(&pcdev->soc_host);
833 imx_dma_free(pcdev->dma_chan);
839 kfree(pcdev);
849 struct mx1_camera_dev *pcdev = container_of(soc_host,
853 imx_dma_free(pcdev->dma_chan);
854 disable_fiq(pcdev->irq);
855 mxc_set_irq_fiq(pcdev->irq, 0);
858 clk_put(pcdev->clk);
862 iounmap(pcdev->base);
864 res = pcdev->res;
867 kfree(pcdev);