Lines Matching refs:pcdev
789 static struct device *pcdev_to_dev(struct pxa_camera_dev *pcdev) in pcdev_to_dev() argument
791 return pcdev->v4l2_dev.dev; in pcdev_to_dev()
799 static void pxa_camera_dma_irq(struct pxa_camera_dev *pcdev,
804 struct pxa_camera_dev *pcdev = data; in pxa_camera_dma_irq_y() local
806 pxa_camera_dma_irq(pcdev, DMA_Y); in pxa_camera_dma_irq_y()
811 struct pxa_camera_dev *pcdev = data; in pxa_camera_dma_irq_u() local
813 pxa_camera_dma_irq(pcdev, DMA_U); in pxa_camera_dma_irq_u()
818 struct pxa_camera_dev *pcdev = data; in pxa_camera_dma_irq_v() local
820 pxa_camera_dma_irq(pcdev, DMA_V); in pxa_camera_dma_irq_v()
835 static int pxa_init_dma_channel(struct pxa_camera_dev *pcdev, in pxa_init_dma_channel() argument
839 struct dma_chan *dma_chan = pcdev->dma_chans[channel]; in pxa_init_dma_channel()
845 dev_err(pcdev_to_dev(pcdev), in pxa_init_dma_channel()
850 tx->callback_param = pcdev; in pxa_init_dma_channel()
866 dev_dbg(pcdev_to_dev(pcdev), in pxa_init_dma_channel()
873 static void pxa_videobuf_set_actdma(struct pxa_camera_dev *pcdev, in pxa_videobuf_set_actdma() argument
888 static void pxa_dma_start_channels(struct pxa_camera_dev *pcdev) in pxa_dma_start_channels() argument
892 for (i = 0; i < pcdev->channels; i++) { in pxa_dma_start_channels()
893 dev_dbg(pcdev_to_dev(pcdev), in pxa_dma_start_channels()
895 dma_async_issue_pending(pcdev->dma_chans[i]); in pxa_dma_start_channels()
899 static void pxa_dma_stop_channels(struct pxa_camera_dev *pcdev) in pxa_dma_stop_channels() argument
903 for (i = 0; i < pcdev->channels; i++) { in pxa_dma_stop_channels()
904 dev_dbg(pcdev_to_dev(pcdev), in pxa_dma_stop_channels()
906 dmaengine_terminate_all(pcdev->dma_chans[i]); in pxa_dma_stop_channels()
910 static void pxa_dma_add_tail_buf(struct pxa_camera_dev *pcdev, in pxa_dma_add_tail_buf() argument
915 for (i = 0; i < pcdev->channels; i++) { in pxa_dma_add_tail_buf()
917 dev_dbg(pcdev_to_dev(pcdev), in pxa_dma_add_tail_buf()
931 static void pxa_camera_start_capture(struct pxa_camera_dev *pcdev) in pxa_camera_start_capture() argument
935 dev_dbg(pcdev_to_dev(pcdev), "%s\n", __func__); in pxa_camera_start_capture()
936 __raw_writel(__raw_readl(pcdev->base + CISR), pcdev->base + CISR); in pxa_camera_start_capture()
938 cicr0 = __raw_readl(pcdev->base + CICR0) | CICR0_ENB; in pxa_camera_start_capture()
940 __raw_writel(cicr0, pcdev->base + CICR0); in pxa_camera_start_capture()
943 static void pxa_camera_stop_capture(struct pxa_camera_dev *pcdev) in pxa_camera_stop_capture() argument
947 pxa_dma_stop_channels(pcdev); in pxa_camera_stop_capture()
949 cicr0 = __raw_readl(pcdev->base + CICR0) & ~CICR0_ENB; in pxa_camera_stop_capture()
950 __raw_writel(cicr0, pcdev->base + CICR0); in pxa_camera_stop_capture()
952 pcdev->active = NULL; in pxa_camera_stop_capture()
953 dev_dbg(pcdev_to_dev(pcdev), "%s\n", __func__); in pxa_camera_stop_capture()
956 static void pxa_camera_wakeup(struct pxa_camera_dev *pcdev, in pxa_camera_wakeup() argument
966 vbuf->sequence = pcdev->buf_sequence++; in pxa_camera_wakeup()
969 dev_dbg(pcdev_to_dev(pcdev), "%s dequeued buffer (buf=0x%p)\n", in pxa_camera_wakeup()
972 if (list_empty(&pcdev->capture)) { in pxa_camera_wakeup()
973 pxa_camera_stop_capture(pcdev); in pxa_camera_wakeup()
977 pcdev->active = list_entry(pcdev->capture.next, in pxa_camera_wakeup()
997 static void pxa_camera_check_link_miss(struct pxa_camera_dev *pcdev, in pxa_camera_check_link_miss() argument
1003 dev_dbg(pcdev_to_dev(pcdev), in pxa_camera_check_link_miss()
1005 __func__, pcdev->active, is_dma_stopped); in pxa_camera_check_link_miss()
1007 if (pcdev->active && is_dma_stopped) in pxa_camera_check_link_miss()
1008 pxa_camera_start_capture(pcdev); in pxa_camera_check_link_miss()
1011 static void pxa_camera_dma_irq(struct pxa_camera_dev *pcdev, in pxa_camera_dma_irq() argument
1021 spin_lock_irqsave(&pcdev->lock, flags); in pxa_camera_dma_irq()
1023 camera_status = __raw_readl(pcdev->base + CISR); in pxa_camera_dma_irq()
1024 dev_dbg(pcdev_to_dev(pcdev), "camera dma irq, cisr=0x%x dma=%d\n", in pxa_camera_dma_irq()
1027 if (pcdev->channels == 3) in pxa_camera_dma_irq()
1042 if (!pcdev->active) in pxa_camera_dma_irq()
1045 buf = pcdev->active; in pxa_camera_dma_irq()
1063 last_buf = list_entry(pcdev->capture.prev, in pxa_camera_dma_irq()
1065 last_status = dma_async_is_tx_complete(pcdev->dma_chans[chan], in pxa_camera_dma_irq()
1070 dev_dbg(pcdev_to_dev(pcdev), "FIFO overrun! CISR: %x\n", in pxa_camera_dma_irq()
1072 pxa_camera_stop_capture(pcdev); in pxa_camera_dma_irq()
1073 list_for_each_entry(buf, &pcdev->capture, queue) in pxa_camera_dma_irq()
1074 pxa_dma_add_tail_buf(pcdev, buf); in pxa_camera_dma_irq()
1075 pxa_camera_start_capture(pcdev); in pxa_camera_dma_irq()
1080 pxa_camera_wakeup(pcdev, buf, VB2_BUF_STATE_DONE); in pxa_camera_dma_irq()
1081 pxa_camera_check_link_miss(pcdev, last_buf->cookie[chan], in pxa_camera_dma_irq()
1086 spin_unlock_irqrestore(&pcdev->lock, flags); in pxa_camera_dma_irq()
1090 struct pxa_camera_dev *pcdev) in mclk_get_divisor() argument
1092 unsigned long mclk = pcdev->mclk; in mclk_get_divisor()
1096 lcdclk = clk_get_rate(pcdev->clk); in mclk_get_divisor()
1097 pcdev->ciclk = lcdclk; in mclk_get_divisor()
1102 dev_warn(pcdev_to_dev(pcdev), in mclk_get_divisor()
1110 if (pcdev->platform_flags & PXA_CAMERA_MCLK_EN) in mclk_get_divisor()
1111 pcdev->mclk = lcdclk / (2 * (div + 1)); in mclk_get_divisor()
1113 dev_dbg(pcdev_to_dev(pcdev), "LCD clock %luHz, target freq %luHz, divisor %u\n", in mclk_get_divisor()
1119 static void recalculate_fifo_timeout(struct pxa_camera_dev *pcdev, in recalculate_fifo_timeout() argument
1123 u32 ciclk_per_pixel = pcdev->ciclk / pclk + 1; in recalculate_fifo_timeout()
1125 __raw_writel(ciclk_per_pixel, pcdev->base + CITOR); in recalculate_fifo_timeout()
1128 static void pxa_camera_activate(struct pxa_camera_dev *pcdev) in pxa_camera_activate() argument
1133 __raw_writel(0x3ff, pcdev->base + CICR0); in pxa_camera_activate()
1135 if (pcdev->platform_flags & PXA_CAMERA_PCLK_EN) in pxa_camera_activate()
1137 if (pcdev->platform_flags & PXA_CAMERA_MCLK_EN) in pxa_camera_activate()
1139 if (pcdev->platform_flags & PXA_CAMERA_PCP) in pxa_camera_activate()
1141 if (pcdev->platform_flags & PXA_CAMERA_HSP) in pxa_camera_activate()
1143 if (pcdev->platform_flags & PXA_CAMERA_VSP) in pxa_camera_activate()
1146 __raw_writel(pcdev->mclk_divisor | cicr4, pcdev->base + CICR4); in pxa_camera_activate()
1148 if (pcdev->platform_flags & PXA_CAMERA_MCLK_EN) in pxa_camera_activate()
1150 recalculate_fifo_timeout(pcdev, pcdev->mclk); in pxa_camera_activate()
1153 recalculate_fifo_timeout(pcdev, 13000000); in pxa_camera_activate()
1155 clk_prepare_enable(pcdev->clk); in pxa_camera_activate()
1158 static void pxa_camera_deactivate(struct pxa_camera_dev *pcdev) in pxa_camera_deactivate() argument
1160 clk_disable_unprepare(pcdev->clk); in pxa_camera_deactivate()
1165 struct pxa_camera_dev *pcdev = (struct pxa_camera_dev *)arg; in pxa_camera_eof() local
1169 dev_dbg(pcdev_to_dev(pcdev), in pxa_camera_eof()
1171 __raw_readl(pcdev->base + CISR)); in pxa_camera_eof()
1174 cifr = __raw_readl(pcdev->base + CIFR) | CIFR_RESET_F; in pxa_camera_eof()
1175 __raw_writel(cifr, pcdev->base + CIFR); in pxa_camera_eof()
1177 pcdev->active = list_first_entry(&pcdev->capture, in pxa_camera_eof()
1179 buf = pcdev->active; in pxa_camera_eof()
1180 pxa_videobuf_set_actdma(pcdev, buf); in pxa_camera_eof()
1182 pxa_dma_start_channels(pcdev); in pxa_camera_eof()
1187 struct pxa_camera_dev *pcdev = data; in pxa_camera_irq() local
1190 status = __raw_readl(pcdev->base + CISR); in pxa_camera_irq()
1191 dev_dbg(pcdev_to_dev(pcdev), in pxa_camera_irq()
1197 __raw_writel(status, pcdev->base + CISR); in pxa_camera_irq()
1200 cicr0 = __raw_readl(pcdev->base + CICR0) | CICR0_EOFM; in pxa_camera_irq()
1201 __raw_writel(cicr0, pcdev->base + CICR0); in pxa_camera_irq()
1202 tasklet_schedule(&pcdev->task_eof); in pxa_camera_irq()
1208 static int test_platform_param(struct pxa_camera_dev *pcdev, in test_platform_param() argument
1216 *flags = (pcdev->platform_flags & PXA_CAMERA_MASTER ? in test_platform_param()
1227 if ((1 << (buswidth - 1)) & pcdev->width_flags) in test_platform_param()
1233 static void pxa_camera_setup_cicr(struct pxa_camera_dev *pcdev, in pxa_camera_setup_cicr() argument
1238 int ret = sensor_call(pcdev, sensor, g_skip_top_lines, &y_skip_top); in pxa_camera_setup_cicr()
1247 switch (pcdev->current_fmt->host_fmt->bits_per_sample) { in pxa_camera_setup_cicr()
1266 if (pcdev->platform_flags & PXA_CAMERA_PCLK_EN) in pxa_camera_setup_cicr()
1268 if (pcdev->platform_flags & PXA_CAMERA_MCLK_EN) in pxa_camera_setup_cicr()
1277 cicr0 = __raw_readl(pcdev->base + CICR0); in pxa_camera_setup_cicr()
1279 __raw_writel(cicr0 & ~CICR0_ENB, pcdev->base + CICR0); in pxa_camera_setup_cicr()
1281 cicr1 = CICR1_PPL_VAL(pcdev->current_pix.width - 1) | bpp | dw; in pxa_camera_setup_cicr()
1285 pcdev->channels = 3; in pxa_camera_setup_cicr()
1310 cicr3 = CICR3_LPF_VAL(pcdev->current_pix.height - 1) | in pxa_camera_setup_cicr()
1312 cicr4 |= pcdev->mclk_divisor; in pxa_camera_setup_cicr()
1314 __raw_writel(cicr1, pcdev->base + CICR1); in pxa_camera_setup_cicr()
1315 __raw_writel(cicr2, pcdev->base + CICR2); in pxa_camera_setup_cicr()
1316 __raw_writel(cicr3, pcdev->base + CICR3); in pxa_camera_setup_cicr()
1317 __raw_writel(cicr4, pcdev->base + CICR4); in pxa_camera_setup_cicr()
1320 cicr0 = (cicr0 & CICR0_ENB) | (pcdev->platform_flags & PXA_CAMERA_MASTER ? in pxa_camera_setup_cicr()
1323 __raw_writel(cicr0, pcdev->base + CICR0); in pxa_camera_setup_cicr()
1344 static int pxa_buffer_init(struct pxa_camera_dev *pcdev, in pxa_buffer_init() argument
1349 int nb_channels = pcdev->channels; in pxa_buffer_init()
1370 dev_err(pcdev_to_dev(pcdev), in pxa_buffer_init()
1375 ret = pxa_init_dma_channel(pcdev, buf, i, in pxa_buffer_init()
1390 struct pxa_camera_dev *pcdev = vb2_get_drv_priv(vb->vb2_queue); in pxac_vb2_cleanup() local
1392 dev_dbg(pcdev_to_dev(pcdev), in pxac_vb2_cleanup()
1400 struct pxa_camera_dev *pcdev = vb2_get_drv_priv(vb->vb2_queue); in pxac_vb2_queue() local
1402 dev_dbg(pcdev_to_dev(pcdev), in pxac_vb2_queue()
1404 __func__, vb, pcdev->channels, vb2_get_plane_payload(vb, 0), in pxac_vb2_queue()
1405 pcdev->active); in pxac_vb2_queue()
1407 list_add_tail(&buf->queue, &pcdev->capture); in pxac_vb2_queue()
1409 pxa_dma_add_tail_buf(pcdev, buf); in pxac_vb2_queue()
1420 struct pxa_camera_dev *pcdev = vb2_get_drv_priv(vb->vb2_queue); in pxac_vb2_prepare() local
1424 switch (pcdev->channels) { in pxac_vb2_prepare()
1427 vb2_set_plane_payload(vb, 0, pcdev->current_pix.sizeimage); in pxac_vb2_prepare()
1433 dev_dbg(pcdev_to_dev(pcdev), in pxac_vb2_prepare()
1435 __func__, vb, pcdev->channels, vb2_get_plane_payload(vb, 0)); in pxac_vb2_prepare()
1437 WARN_ON(!pcdev->current_fmt); in pxac_vb2_prepare()
1454 pxa_videobuf_set_actdma(pcdev, buf); in pxac_vb2_prepare()
1461 struct pxa_camera_dev *pcdev = vb2_get_drv_priv(vb->vb2_queue); in pxac_vb2_init() local
1464 dev_dbg(pcdev_to_dev(pcdev), in pxac_vb2_init()
1466 __func__, pcdev->channels); in pxac_vb2_init()
1468 return pxa_buffer_init(pcdev, buf); in pxac_vb2_init()
1476 struct pxa_camera_dev *pcdev = vb2_get_drv_priv(vq); in pxac_vb2_queue_setup() local
1477 int size = pcdev->current_pix.sizeimage; in pxac_vb2_queue_setup()
1479 dev_dbg(pcdev_to_dev(pcdev), in pxac_vb2_queue_setup()
1491 switch (pcdev->channels) { in pxac_vb2_queue_setup()
1508 struct pxa_camera_dev *pcdev = vb2_get_drv_priv(vq); in pxac_vb2_start_streaming() local
1510 dev_dbg(pcdev_to_dev(pcdev), "%s(count=%d) active=%p\n", in pxac_vb2_start_streaming()
1511 __func__, count, pcdev->active); in pxac_vb2_start_streaming()
1513 pcdev->buf_sequence = 0; in pxac_vb2_start_streaming()
1514 if (!pcdev->active) in pxac_vb2_start_streaming()
1515 pxa_camera_start_capture(pcdev); in pxac_vb2_start_streaming()
1522 struct pxa_camera_dev *pcdev = vb2_get_drv_priv(vq); in pxac_vb2_stop_streaming() local
1525 dev_dbg(pcdev_to_dev(pcdev), "%s active=%p\n", in pxac_vb2_stop_streaming()
1526 __func__, pcdev->active); in pxac_vb2_stop_streaming()
1527 pxa_camera_stop_capture(pcdev); in pxac_vb2_stop_streaming()
1529 list_for_each_entry_safe(buf, tmp, &pcdev->capture, queue) in pxac_vb2_stop_streaming()
1530 pxa_camera_wakeup(pcdev, buf, VB2_BUF_STATE_ERROR); in pxac_vb2_stop_streaming()
1545 static int pxa_camera_init_videobuf2(struct pxa_camera_dev *pcdev) in pxa_camera_init_videobuf2() argument
1548 struct vb2_queue *vq = &pcdev->vb2_vq; in pxa_camera_init_videobuf2()
1553 vq->drv_priv = pcdev; in pxa_camera_init_videobuf2()
1556 vq->dev = pcdev->v4l2_dev.dev; in pxa_camera_init_videobuf2()
1560 vq->lock = &pcdev->mlock; in pxa_camera_init_videobuf2()
1563 dev_dbg(pcdev_to_dev(pcdev), in pxa_camera_init_videobuf2()
1572 static int pxa_camera_set_bus_param(struct pxa_camera_dev *pcdev) in pxa_camera_set_bus_param() argument
1575 u32 pixfmt = pcdev->current_fmt->host_fmt->fourcc; in pxa_camera_set_bus_param()
1579 ret = test_platform_param(pcdev, in pxa_camera_set_bus_param()
1580 pcdev->current_fmt->host_fmt->bits_per_sample, in pxa_camera_set_bus_param()
1585 ret = sensor_call(pcdev, video, g_mbus_config, &cfg); in pxa_camera_set_bus_param()
1590 dev_warn(pcdev_to_dev(pcdev), in pxa_camera_set_bus_param()
1601 pcdev->channels = 1; in pxa_camera_set_bus_param()
1606 if (pcdev->platform_flags & PXA_CAMERA_HSP) in pxa_camera_set_bus_param()
1614 if (pcdev->platform_flags & PXA_CAMERA_VSP) in pxa_camera_set_bus_param()
1622 if (pcdev->platform_flags & PXA_CAMERA_PCP) in pxa_camera_set_bus_param()
1629 ret = sensor_call(pcdev, video, s_mbus_config, &cfg); in pxa_camera_set_bus_param()
1631 dev_dbg(pcdev_to_dev(pcdev), in pxa_camera_set_bus_param()
1637 pxa_camera_setup_cicr(pcdev, common_flags, pixfmt); in pxa_camera_set_bus_param()
1642 static int pxa_camera_try_bus_param(struct pxa_camera_dev *pcdev, in pxa_camera_try_bus_param() argument
1647 int ret = test_platform_param(pcdev, buswidth, &bus_flags); in pxa_camera_try_bus_param()
1652 ret = sensor_call(pcdev, video, g_mbus_config, &cfg); in pxa_camera_try_bus_param()
1657 dev_warn(pcdev_to_dev(pcdev), in pxa_camera_try_bus_param()
1694 struct pxa_camera_dev *pcdev = v4l2_dev_to_pcdev(v4l2_dev); in pxa_camera_get_formats() local
1702 ret = sensor_call(pcdev, pad, enum_mbus_code, NULL, &code); in pxa_camera_get_formats()
1709 dev_err(pcdev_to_dev(pcdev), in pxa_camera_get_formats()
1715 ret = pxa_camera_try_bus_param(pcdev, fmt->bits_per_sample); in pxa_camera_get_formats()
1726 dev_dbg(pcdev_to_dev(pcdev), in pxa_camera_get_formats()
1737 dev_dbg(pcdev_to_dev(pcdev), in pxa_camera_get_formats()
1745 dev_dbg(pcdev_to_dev(pcdev), in pxa_camera_get_formats()
1762 static int pxa_camera_build_formats(struct pxa_camera_dev *pcdev) in pxa_camera_build_formats() argument
1766 xlate = pxa_mbus_build_fmts_xlate(&pcdev->v4l2_dev, pcdev->sensor, in pxa_camera_build_formats()
1771 pcdev->user_formats = xlate; in pxa_camera_build_formats()
1775 static void pxa_camera_destroy_formats(struct pxa_camera_dev *pcdev) in pxa_camera_destroy_formats() argument
1777 kfree(pcdev->user_formats); in pxa_camera_destroy_formats()
1791 struct pxa_camera_dev *pcdev = video_drvdata(file); in pxac_vidioc_g_register() local
1796 reg->val = __raw_readl(pcdev->base + reg->reg); in pxac_vidioc_g_register()
1804 struct pxa_camera_dev *pcdev = video_drvdata(file); in pxac_vidioc_s_register() local
1810 __raw_writel(reg->val, pcdev->base + reg->reg); in pxac_vidioc_s_register()
1818 struct pxa_camera_dev *pcdev = video_drvdata(filp); in pxac_vidioc_enum_fmt_vid_cap() local
1822 for (idx = 0; pcdev->user_formats[idx].code; idx++); in pxac_vidioc_enum_fmt_vid_cap()
1826 format = pcdev->user_formats[f->index].host_fmt; in pxac_vidioc_enum_fmt_vid_cap()
1834 struct pxa_camera_dev *pcdev = video_drvdata(filp); in pxac_vidioc_g_fmt_vid_cap() local
1837 pix->width = pcdev->current_pix.width; in pxac_vidioc_g_fmt_vid_cap()
1838 pix->height = pcdev->current_pix.height; in pxac_vidioc_g_fmt_vid_cap()
1839 pix->bytesperline = pcdev->current_pix.bytesperline; in pxac_vidioc_g_fmt_vid_cap()
1840 pix->sizeimage = pcdev->current_pix.sizeimage; in pxac_vidioc_g_fmt_vid_cap()
1841 pix->field = pcdev->current_pix.field; in pxac_vidioc_g_fmt_vid_cap()
1842 pix->pixelformat = pcdev->current_fmt->host_fmt->fourcc; in pxac_vidioc_g_fmt_vid_cap()
1843 pix->colorspace = pcdev->current_pix.colorspace; in pxac_vidioc_g_fmt_vid_cap()
1844 dev_dbg(pcdev_to_dev(pcdev), "current_fmt->fourcc: 0x%08x\n", in pxac_vidioc_g_fmt_vid_cap()
1845 pcdev->current_fmt->host_fmt->fourcc); in pxac_vidioc_g_fmt_vid_cap()
1852 struct pxa_camera_dev *pcdev = video_drvdata(filp); in pxac_vidioc_try_fmt_vid_cap() local
1863 xlate = pxa_mbus_xlate_by_fourcc(pcdev->user_formats, pixfmt); in pxac_vidioc_try_fmt_vid_cap()
1865 dev_warn(pcdev_to_dev(pcdev), "Format %x not found\n", pixfmt); in pxac_vidioc_try_fmt_vid_cap()
1880 ret = sensor_call(pcdev, pad, set_fmt, &pad_cfg, &format); in pxac_vidioc_try_fmt_vid_cap()
1894 dev_err(pcdev_to_dev(pcdev), "Field type %d unsupported.\n", in pxac_vidioc_try_fmt_vid_cap()
1916 struct pxa_camera_dev *pcdev = video_drvdata(filp); in pxac_vidioc_s_fmt_vid_cap() local
1925 dev_dbg(pcdev_to_dev(pcdev), in pxac_vidioc_s_fmt_vid_cap()
1929 spin_lock_irqsave(&pcdev->lock, flags); in pxac_vidioc_s_fmt_vid_cap()
1930 is_busy = pcdev->active || vb2_is_busy(&pcdev->vb2_vq); in pxac_vidioc_s_fmt_vid_cap()
1931 spin_unlock_irqrestore(&pcdev->lock, flags); in pxac_vidioc_s_fmt_vid_cap()
1940 xlate = pxa_mbus_xlate_by_fourcc(pcdev->user_formats, in pxac_vidioc_s_fmt_vid_cap()
1943 ret = sensor_call(pcdev, pad, set_fmt, NULL, &format); in pxac_vidioc_s_fmt_vid_cap()
1945 dev_warn(pcdev_to_dev(pcdev), in pxac_vidioc_s_fmt_vid_cap()
1949 dev_warn(pcdev_to_dev(pcdev), in pxac_vidioc_s_fmt_vid_cap()
1955 pcdev->current_fmt = xlate; in pxac_vidioc_s_fmt_vid_cap()
1956 pcdev->current_pix = *pix; in pxac_vidioc_s_fmt_vid_cap()
1958 ret = pxa_camera_set_bus_param(pcdev); in pxac_vidioc_s_fmt_vid_cap()
2003 struct pxa_camera_dev *pcdev = video_drvdata(filp); in pxac_fops_camera_open() local
2006 mutex_lock(&pcdev->mlock); in pxac_fops_camera_open()
2011 ret = sensor_call(pcdev, core, s_power, 1); in pxac_fops_camera_open()
2015 mutex_unlock(&pcdev->mlock); in pxac_fops_camera_open()
2021 struct pxa_camera_dev *pcdev = video_drvdata(filp); in pxac_fops_camera_release() local
2028 mutex_lock(&pcdev->mlock); in pxac_fops_camera_release()
2029 ret = sensor_call(pcdev, core, s_power, 0); in pxac_fops_camera_release()
2030 mutex_unlock(&pcdev->mlock); in pxac_fops_camera_release()
2089 struct pxa_camera_dev *pcdev = v4l2_dev_to_pcdev(v4l2_dev); in pxa_camera_sensor_bound() local
2090 struct video_device *vdev = &pcdev->vdev; in pxa_camera_sensor_bound()
2091 struct v4l2_pix_format *pix = &pcdev->current_pix; in pxa_camera_sensor_bound()
2097 dev_info(pcdev_to_dev(pcdev), "%s(): trying to bind a device\n", in pxa_camera_sensor_bound()
2099 mutex_lock(&pcdev->mlock); in pxa_camera_sensor_bound()
2102 vdev->lock = &pcdev->mlock; in pxa_camera_sensor_bound()
2103 pcdev->sensor = subdev; in pxa_camera_sensor_bound()
2104 pcdev->vdev.queue = &pcdev->vb2_vq; in pxa_camera_sensor_bound()
2105 pcdev->vdev.v4l2_dev = &pcdev->v4l2_dev; in pxa_camera_sensor_bound()
2106 pcdev->vdev.ctrl_handler = subdev->ctrl_handler; in pxa_camera_sensor_bound()
2107 video_set_drvdata(&pcdev->vdev, pcdev); in pxa_camera_sensor_bound()
2109 err = pxa_camera_build_formats(pcdev); in pxa_camera_sensor_bound()
2111 dev_err(pcdev_to_dev(pcdev), "building formats failed: %d\n", in pxa_camera_sensor_bound()
2116 pcdev->current_fmt = pcdev->user_formats; in pxa_camera_sensor_bound()
2122 pcdev->current_fmt->host_fmt); in pxa_camera_sensor_bound()
2124 pxa_mbus_image_size(pcdev->current_fmt->host_fmt, in pxa_camera_sensor_bound()
2126 pix->pixelformat = pcdev->current_fmt->host_fmt->fourcc; in pxa_camera_sensor_bound()
2127 v4l2_fill_mbus_format(mf, pix, pcdev->current_fmt->code); in pxa_camera_sensor_bound()
2128 err = sensor_call(pcdev, pad, set_fmt, NULL, &format); in pxa_camera_sensor_bound()
2136 err = pxa_camera_init_videobuf2(pcdev); in pxa_camera_sensor_bound()
2140 err = video_register_device(&pcdev->vdev, VFL_TYPE_GRABBER, -1); in pxa_camera_sensor_bound()
2143 pcdev->sensor = NULL; in pxa_camera_sensor_bound()
2145 dev_info(pcdev_to_dev(pcdev), in pxa_camera_sensor_bound()
2150 mutex_unlock(&pcdev->mlock); in pxa_camera_sensor_bound()
2158 struct pxa_camera_dev *pcdev = v4l2_dev_to_pcdev(notifier->v4l2_dev); in pxa_camera_sensor_unbind() local
2160 mutex_lock(&pcdev->mlock); in pxa_camera_sensor_unbind()
2161 dev_info(pcdev_to_dev(pcdev), in pxa_camera_sensor_unbind()
2166 __raw_writel(0x3ff, pcdev->base + CICR0); in pxa_camera_sensor_unbind()
2169 pxa_dma_stop_channels(pcdev); in pxa_camera_sensor_unbind()
2171 pxa_camera_destroy_formats(pcdev); in pxa_camera_sensor_unbind()
2173 if (pcdev->mclk_clk) { in pxa_camera_sensor_unbind()
2174 v4l2_clk_unregister(pcdev->mclk_clk); in pxa_camera_sensor_unbind()
2175 pcdev->mclk_clk = NULL; in pxa_camera_sensor_unbind()
2178 video_unregister_device(&pcdev->vdev); in pxa_camera_sensor_unbind()
2179 pcdev->sensor = NULL; in pxa_camera_sensor_unbind()
2181 mutex_unlock(&pcdev->mlock); in pxa_camera_sensor_unbind()
2189 struct pxa_camera_dev *pcdev = dev_get_drvdata(dev); in pxa_camera_suspend() local
2192 pcdev->save_cicr[i++] = __raw_readl(pcdev->base + CICR0); in pxa_camera_suspend()
2193 pcdev->save_cicr[i++] = __raw_readl(pcdev->base + CICR1); in pxa_camera_suspend()
2194 pcdev->save_cicr[i++] = __raw_readl(pcdev->base + CICR2); in pxa_camera_suspend()
2195 pcdev->save_cicr[i++] = __raw_readl(pcdev->base + CICR3); in pxa_camera_suspend()
2196 pcdev->save_cicr[i++] = __raw_readl(pcdev->base + CICR4); in pxa_camera_suspend()
2198 if (pcdev->sensor) { in pxa_camera_suspend()
2199 ret = sensor_call(pcdev, core, s_power, 0); in pxa_camera_suspend()
2209 struct pxa_camera_dev *pcdev = dev_get_drvdata(dev); in pxa_camera_resume() local
2212 __raw_writel(pcdev->save_cicr[i++] & ~CICR0_ENB, pcdev->base + CICR0); in pxa_camera_resume()
2213 __raw_writel(pcdev->save_cicr[i++], pcdev->base + CICR1); in pxa_camera_resume()
2214 __raw_writel(pcdev->save_cicr[i++], pcdev->base + CICR2); in pxa_camera_resume()
2215 __raw_writel(pcdev->save_cicr[i++], pcdev->base + CICR3); in pxa_camera_resume()
2216 __raw_writel(pcdev->save_cicr[i++], pcdev->base + CICR4); in pxa_camera_resume()
2218 if (pcdev->sensor) { in pxa_camera_resume()
2219 ret = sensor_call(pcdev, core, s_power, 1); in pxa_camera_resume()
2225 if (!ret && pcdev->active) in pxa_camera_resume()
2226 pxa_camera_start_capture(pcdev); in pxa_camera_resume()
2232 struct pxa_camera_dev *pcdev, in pxa_camera_pdata_from_dt() argument
2241 pcdev->platform_flags |= PXA_CAMERA_MCLK_EN; in pxa_camera_pdata_from_dt()
2242 pcdev->mclk = mclk_rate; in pxa_camera_pdata_from_dt()
2259 pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_4; in pxa_camera_pdata_from_dt()
2262 pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_5; in pxa_camera_pdata_from_dt()
2265 pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_8; in pxa_camera_pdata_from_dt()
2268 pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_9; in pxa_camera_pdata_from_dt()
2271 pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_10; in pxa_camera_pdata_from_dt()
2278 pcdev->platform_flags |= PXA_CAMERA_MASTER; in pxa_camera_pdata_from_dt()
2280 pcdev->platform_flags |= PXA_CAMERA_HSP; in pxa_camera_pdata_from_dt()
2282 pcdev->platform_flags |= PXA_CAMERA_VSP; in pxa_camera_pdata_from_dt()
2284 pcdev->platform_flags |= PXA_CAMERA_PCLK_EN | PXA_CAMERA_PCP; in pxa_camera_pdata_from_dt()
2286 pcdev->platform_flags |= PXA_CAMERA_PCLK_EN; in pxa_camera_pdata_from_dt()
2305 struct pxa_camera_dev *pcdev; in pxa_camera_probe() local
2324 pcdev = devm_kzalloc(&pdev->dev, sizeof(*pcdev), GFP_KERNEL); in pxa_camera_probe()
2325 if (!pcdev) { in pxa_camera_probe()
2330 pcdev->clk = devm_clk_get(&pdev->dev, NULL); in pxa_camera_probe()
2331 if (IS_ERR(pcdev->clk)) in pxa_camera_probe()
2332 return PTR_ERR(pcdev->clk); in pxa_camera_probe()
2334 pcdev->res = res; in pxa_camera_probe()
2336 pcdev->pdata = pdev->dev.platform_data; in pxa_camera_probe()
2337 if (&pdev->dev.of_node && !pcdev->pdata) { in pxa_camera_probe()
2338 err = pxa_camera_pdata_from_dt(&pdev->dev, pcdev, &pcdev->asd); in pxa_camera_probe()
2340 pcdev->platform_flags = pcdev->pdata->flags; in pxa_camera_probe()
2341 pcdev->mclk = pcdev->pdata->mclk_10khz * 10000; in pxa_camera_probe()
2342 pcdev->asd.match_type = V4L2_ASYNC_MATCH_I2C; in pxa_camera_probe()
2343 pcdev->asd.match.i2c.adapter_id = in pxa_camera_probe()
2344 pcdev->pdata->sensor_i2c_adapter_id; in pxa_camera_probe()
2345 pcdev->asd.match.i2c.address = pcdev->pdata->sensor_i2c_address; in pxa_camera_probe()
2350 if (!(pcdev->platform_flags & (PXA_CAMERA_DATAWIDTH_8 | in pxa_camera_probe()
2358 pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_10; in pxa_camera_probe()
2360 if (pcdev->platform_flags & PXA_CAMERA_DATAWIDTH_8) in pxa_camera_probe()
2361 pcdev->width_flags = 1 << 7; in pxa_camera_probe()
2362 if (pcdev->platform_flags & PXA_CAMERA_DATAWIDTH_9) in pxa_camera_probe()
2363 pcdev->width_flags |= 1 << 8; in pxa_camera_probe()
2364 if (pcdev->platform_flags & PXA_CAMERA_DATAWIDTH_10) in pxa_camera_probe()
2365 pcdev->width_flags |= 1 << 9; in pxa_camera_probe()
2366 if (!pcdev->mclk) { in pxa_camera_probe()
2370 pcdev->mclk = 20000000; in pxa_camera_probe()
2373 pcdev->mclk_divisor = mclk_get_divisor(pdev, pcdev); in pxa_camera_probe()
2375 INIT_LIST_HEAD(&pcdev->capture); in pxa_camera_probe()
2376 spin_lock_init(&pcdev->lock); in pxa_camera_probe()
2377 mutex_init(&pcdev->mlock); in pxa_camera_probe()
2386 pcdev->irq = irq; in pxa_camera_probe()
2387 pcdev->base = base; in pxa_camera_probe()
2396 pcdev->dma_chans[0] = in pxa_camera_probe()
2399 if (!pcdev->dma_chans[0]) { in pxa_camera_probe()
2405 pcdev->dma_chans[1] = in pxa_camera_probe()
2408 if (!pcdev->dma_chans[1]) { in pxa_camera_probe()
2415 pcdev->dma_chans[2] = in pxa_camera_probe()
2418 if (!pcdev->dma_chans[2]) { in pxa_camera_probe()
2425 config.src_addr = pcdev->res->start + CIBR0 + i * 8; in pxa_camera_probe()
2426 err = dmaengine_slave_config(pcdev->dma_chans[i], &config); in pxa_camera_probe()
2435 err = devm_request_irq(&pdev->dev, pcdev->irq, pxa_camera_irq, 0, in pxa_camera_probe()
2436 PXA_CAM_DRV_NAME, pcdev); in pxa_camera_probe()
2442 tasklet_init(&pcdev->task_eof, pxa_camera_eof, (unsigned long)pcdev); in pxa_camera_probe()
2444 pxa_camera_activate(pcdev); in pxa_camera_probe()
2446 dev_set_drvdata(&pdev->dev, pcdev); in pxa_camera_probe()
2447 err = v4l2_device_register(&pdev->dev, &pcdev->v4l2_dev); in pxa_camera_probe()
2451 pcdev->asds[0] = &pcdev->asd; in pxa_camera_probe()
2452 pcdev->notifier.subdevs = pcdev->asds; in pxa_camera_probe()
2453 pcdev->notifier.num_subdevs = 1; in pxa_camera_probe()
2454 pcdev->notifier.bound = pxa_camera_sensor_bound; in pxa_camera_probe()
2455 pcdev->notifier.unbind = pxa_camera_sensor_unbind; in pxa_camera_probe()
2458 pcdev->asd.match_type = V4L2_ASYNC_MATCH_I2C; in pxa_camera_probe()
2460 err = pxa_camera_init_videobuf2(pcdev); in pxa_camera_probe()
2464 if (pcdev->mclk) { in pxa_camera_probe()
2466 pcdev->asd.match.i2c.adapter_id, in pxa_camera_probe()
2467 pcdev->asd.match.i2c.address); in pxa_camera_probe()
2469 pcdev->mclk_clk = v4l2_clk_register(&pxa_camera_mclk_ops, in pxa_camera_probe()
2471 if (IS_ERR(pcdev->mclk_clk)) { in pxa_camera_probe()
2472 err = PTR_ERR(pcdev->mclk_clk); in pxa_camera_probe()
2477 err = v4l2_async_notifier_register(&pcdev->v4l2_dev, &pcdev->notifier); in pxa_camera_probe()
2483 v4l2_clk_unregister(pcdev->mclk_clk); in pxa_camera_probe()
2485 v4l2_device_unregister(&pcdev->v4l2_dev); in pxa_camera_probe()
2487 dma_release_channel(pcdev->dma_chans[2]); in pxa_camera_probe()
2489 dma_release_channel(pcdev->dma_chans[1]); in pxa_camera_probe()
2491 dma_release_channel(pcdev->dma_chans[0]); in pxa_camera_probe()
2497 struct pxa_camera_dev *pcdev = dev_get_drvdata(&pdev->dev); in pxa_camera_remove() local
2499 pxa_camera_deactivate(pcdev); in pxa_camera_remove()
2500 dma_release_channel(pcdev->dma_chans[0]); in pxa_camera_remove()
2501 dma_release_channel(pcdev->dma_chans[1]); in pxa_camera_remove()
2502 dma_release_channel(pcdev->dma_chans[2]); in pxa_camera_remove()
2504 v4l2_async_notifier_unregister(&pcdev->notifier); in pxa_camera_remove()
2506 if (pcdev->mclk_clk) { in pxa_camera_remove()
2507 v4l2_clk_unregister(pcdev->mclk_clk); in pxa_camera_remove()
2508 pcdev->mclk_clk = NULL; in pxa_camera_remove()
2511 v4l2_device_unregister(&pcdev->v4l2_dev); in pxa_camera_remove()