Lines Matching refs:cap

68 	void (*config)(struct rkisp1_capture *cap);
69 void (*stop)(struct rkisp1_capture *cap);
70 void (*enable)(struct rkisp1_capture *cap);
71 void (*disable)(struct rkisp1_capture *cap);
72 void (*set_data_path)(struct rkisp1_capture *cap);
73 bool (*is_stopped)(struct rkisp1_capture *cap);
420 int rkisp1_cap_enum_mbus_codes(struct rkisp1_capture *cap,
423 const struct rkisp1_capture_fmt_cfg *fmts = cap->config->fmts;
431 for (i = 0; i < cap->config->fmt_size; i++) {
448 static void rkisp1_mi_config_ctrl(struct rkisp1_capture *cap)
450 u32 mi_ctrl = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL);
461 rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl);
477 static void rkisp1_irq_frame_end_enable(struct rkisp1_capture *cap)
479 u32 mi_imsc = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_IMSC);
481 mi_imsc |= RKISP1_CIF_MI_FRAME(cap);
482 rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_IMSC, mi_imsc);
485 static void rkisp1_mp_config(struct rkisp1_capture *cap)
487 const struct v4l2_pix_format_mplane *pixm = &cap->pix.fmt;
488 struct rkisp1_device *rkisp1 = cap->rkisp1;
491 rkisp1_write(rkisp1, cap->config->mi.y_size_init,
493 rkisp1_write(rkisp1, cap->config->mi.cb_size_init,
495 rkisp1_write(rkisp1, cap->config->mi.cr_size_init,
499 rkisp1_write(rkisp1, RKISP1_CIF_MI_MP_Y_LLENGTH, cap->stride);
503 cap->stride * pixm->height);
506 rkisp1_irq_frame_end_enable(cap);
509 if (cap->pix.info->comp_planes == 2) {
511 if (cap->pix.cfg->uv_swap)
525 if (cap->pix.cfg->yc_swap || cap->pix.cfg->byte_swap)
534 cap->pix.cfg->output_format);
537 rkisp1_mi_config_ctrl(cap);
541 reg |= cap->pix.cfg->write_format;
549 static void rkisp1_sp_config(struct rkisp1_capture *cap)
551 const struct v4l2_pix_format_mplane *pixm = &cap->pix.fmt;
552 struct rkisp1_device *rkisp1 = cap->rkisp1;
555 rkisp1_write(rkisp1, cap->config->mi.y_size_init,
557 rkisp1_write(rkisp1, cap->config->mi.cb_size_init,
559 rkisp1_write(rkisp1, cap->config->mi.cr_size_init,
562 rkisp1_write(rkisp1, RKISP1_CIF_MI_SP_Y_LLENGTH, cap->stride);
566 cap->stride * pixm->height);
568 rkisp1_irq_frame_end_enable(cap);
571 if (cap->pix.info->comp_planes == 2) {
573 if (cap->pix.cfg->uv_swap)
587 if (cap->pix.cfg->yc_swap)
594 rkisp1_mi_config_ctrl(cap);
598 mi_ctrl |= cap->pix.cfg->write_format |
600 cap->pix.cfg->output_format |
605 static void rkisp1_mp_disable(struct rkisp1_capture *cap)
607 u32 mi_ctrl = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL);
611 rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl);
614 static void rkisp1_sp_disable(struct rkisp1_capture *cap)
616 u32 mi_ctrl = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL);
619 rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl);
622 static void rkisp1_mp_enable(struct rkisp1_capture *cap)
626 rkisp1_mp_disable(cap);
628 mi_ctrl = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL);
629 if (v4l2_is_format_bayer(cap->pix.info))
635 rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl);
638 static void rkisp1_sp_enable(struct rkisp1_capture *cap)
640 u32 mi_ctrl = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL);
643 rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl);
646 static void rkisp1_mp_sp_stop(struct rkisp1_capture *cap)
648 if (!cap->is_streaming)
650 rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_ICR, RKISP1_CIF_MI_FRAME(cap));
651 cap->ops->disable(cap);
654 static bool rkisp1_mp_is_stopped(struct rkisp1_capture *cap)
659 return !(rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL_SHD) & en);
662 static bool rkisp1_sp_is_stopped(struct rkisp1_capture *cap)
664 return !(rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL_SHD) &
668 static void rkisp1_mp_set_data_path(struct rkisp1_capture *cap)
670 u32 dpcl = rkisp1_read(cap->rkisp1, RKISP1_CIF_VI_DPCL);
674 rkisp1_write(cap->rkisp1, RKISP1_CIF_VI_DPCL, dpcl);
677 static void rkisp1_sp_set_data_path(struct rkisp1_capture *cap)
679 u32 dpcl = rkisp1_read(cap->rkisp1, RKISP1_CIF_VI_DPCL);
682 rkisp1_write(cap->rkisp1, RKISP1_CIF_VI_DPCL, dpcl);
707 static int rkisp1_dummy_buf_create(struct rkisp1_capture *cap)
709 const struct v4l2_pix_format_mplane *pixm = &cap->pix.fmt;
710 struct rkisp1_dummy_buffer *dummy_buf = &cap->buf.dummy;
717 dummy_buf->vaddr = dma_alloc_attrs(cap->rkisp1->dev,
728 static void rkisp1_dummy_buf_destroy(struct rkisp1_capture *cap)
730 dma_free_attrs(cap->rkisp1->dev,
731 cap->buf.dummy.size, cap->buf.dummy.vaddr,
732 cap->buf.dummy.dma_addr, DMA_ATTR_NO_KERNEL_MAPPING);
735 static void rkisp1_set_next_buf(struct rkisp1_capture *cap)
737 u8 shift = rkisp1_has_feature(cap->rkisp1, DMA_34BIT) ? 2 : 0;
739 cap->buf.curr = cap->buf.next;
740 cap->buf.next = NULL;
742 if (!list_empty(&cap->buf.queue)) {
745 cap->buf.next = list_first_entry(&cap->buf.queue, struct rkisp1_buffer, queue);
746 list_del(&cap->buf.next->queue);
748 buff_addr = cap->buf.next->buff_addr;
750 rkisp1_write(cap->rkisp1, cap->config->mi.y_base_ad_init,
757 if (cap->pix.cfg->fourcc == V4L2_PIX_FMT_GREY) {
758 rkisp1_write(cap->rkisp1,
759 cap->config->mi.cb_base_ad_init,
760 cap->buf.dummy.dma_addr >> shift);
761 rkisp1_write(cap->rkisp1,
762 cap->config->mi.cr_base_ad_init,
763 cap->buf.dummy.dma_addr >> shift);
765 rkisp1_write(cap->rkisp1,
766 cap->config->mi.cb_base_ad_init,
768 rkisp1_write(cap->rkisp1,
769 cap->config->mi.cr_base_ad_init,
777 rkisp1_write(cap->rkisp1, cap->config->mi.y_base_ad_init,
778 cap->buf.dummy.dma_addr >> shift);
779 rkisp1_write(cap->rkisp1, cap->config->mi.cb_base_ad_init,
780 cap->buf.dummy.dma_addr >> shift);
781 rkisp1_write(cap->rkisp1, cap->config->mi.cr_base_ad_init,
782 cap->buf.dummy.dma_addr >> shift);
786 rkisp1_write(cap->rkisp1, cap->config->mi.y_offs_cnt_init, 0);
787 rkisp1_write(cap->rkisp1, cap->config->mi.cb_offs_cnt_init, 0);
788 rkisp1_write(cap->rkisp1, cap->config->mi.cr_offs_cnt_init, 0);
796 static void rkisp1_handle_buffer(struct rkisp1_capture *cap)
798 struct rkisp1_isp *isp = &cap->rkisp1->isp;
801 spin_lock(&cap->buf.lock);
802 curr_buf = cap->buf.curr;
810 cap->rkisp1->debug.frame_drop[cap->id]++;
813 rkisp1_set_next_buf(cap);
814 spin_unlock(&cap->buf.lock);
835 struct rkisp1_capture *cap = &rkisp1->capture_devs[i];
837 if (!(status & RKISP1_CIF_MI_FRAME(cap)))
839 if (!cap->is_stopping) {
840 rkisp1_handle_buffer(cap);
851 if (!cap->ops->is_stopped(cap)) {
852 cap->ops->stop(cap);
855 cap->is_stopping = false;
856 cap->is_streaming = false;
857 wake_up(&cap->done);
873 struct rkisp1_capture *cap = queue->drv_priv;
874 const struct v4l2_pix_format_mplane *pixm = &cap->pix.fmt;
898 struct rkisp1_capture *cap = vb->vb2_queue->drv_priv;
899 const struct v4l2_pix_format_mplane *pixm = &cap->pix.fmt;
920 if (cap->pix.info->comp_planes == 3 && cap->pix.cfg->uv_swap)
931 struct rkisp1_capture *cap = vb->vb2_queue->drv_priv;
933 spin_lock_irq(&cap->buf.lock);
934 list_add_tail(&ispbuf->queue, &cap->buf.queue);
935 spin_unlock_irq(&cap->buf.lock);
940 struct rkisp1_capture *cap = vb->vb2_queue->drv_priv;
943 for (i = 0; i < cap->pix.fmt.num_planes; i++) {
944 unsigned long size = cap->pix.fmt.plane_fmt[i].sizeimage;
947 dev_err(cap->rkisp1->dev,
958 static void rkisp1_return_all_buffers(struct rkisp1_capture *cap,
963 spin_lock_irq(&cap->buf.lock);
964 if (cap->buf.curr) {
965 vb2_buffer_done(&cap->buf.curr->vb.vb2_buf, state);
966 cap->buf.curr = NULL;
968 if (cap->buf.next) {
969 vb2_buffer_done(&cap->buf.next->vb.vb2_buf, state);
970 cap->buf.next = NULL;
972 while (!list_empty(&cap->buf.queue)) {
973 buf = list_first_entry(&cap->buf.queue,
978 spin_unlock_irq(&cap->buf.lock);
987 static void rkisp1_cap_stream_enable(struct rkisp1_capture *cap)
989 struct rkisp1_device *rkisp1 = cap->rkisp1;
990 struct rkisp1_capture *other = &rkisp1->capture_devs[cap->id ^ 1];
993 cap->ops->set_data_path(cap);
994 cap->ops->config(cap);
997 spin_lock_irq(&cap->buf.lock);
998 rkisp1_set_next_buf(cap);
999 cap->ops->enable(cap);
1034 rkisp1_set_next_buf(cap);
1036 spin_unlock_irq(&cap->buf.lock);
1037 cap->is_streaming = true;
1040 static void rkisp1_cap_stream_disable(struct rkisp1_capture *cap)
1045 cap->is_stopping = true;
1046 ret = wait_event_timeout(cap->done,
1047 !cap->is_streaming,
1050 cap->rkisp1->debug.stop_timeout[cap->id]++;
1051 cap->ops->stop(cap);
1052 cap->is_stopping = false;
1053 cap->is_streaming = false;
1064 static void rkisp1_pipeline_stream_disable(struct rkisp1_capture *cap)
1065 __must_hold(&cap->rkisp1->stream_lock)
1067 struct rkisp1_device *rkisp1 = cap->rkisp1;
1069 rkisp1_cap_stream_disable(cap);
1078 v4l2_subdev_call(&rkisp1->resizer_devs[cap->id].sd, video, s_stream,
1088 static int rkisp1_pipeline_stream_enable(struct rkisp1_capture *cap)
1089 __must_hold(&cap->rkisp1->stream_lock)
1091 struct rkisp1_device *rkisp1 = cap->rkisp1;
1094 rkisp1_cap_stream_enable(cap);
1096 ret = v4l2_subdev_call(&rkisp1->resizer_devs[cap->id].sd, video,
1115 v4l2_subdev_call(&rkisp1->resizer_devs[cap->id].sd, video, s_stream,
1118 rkisp1_cap_stream_disable(cap);
1125 struct rkisp1_capture *cap = queue->drv_priv;
1126 struct rkisp1_vdev_node *node = &cap->vnode;
1127 struct rkisp1_device *rkisp1 = cap->rkisp1;
1130 mutex_lock(&cap->rkisp1->stream_lock);
1132 rkisp1_pipeline_stream_disable(cap);
1134 rkisp1_return_all_buffers(cap, VB2_BUF_STATE_ERROR);
1141 rkisp1_dummy_buf_destroy(cap);
1145 mutex_unlock(&cap->rkisp1->stream_lock);
1151 struct rkisp1_capture *cap = queue->drv_priv;
1152 struct media_entity *entity = &cap->vnode.vdev.entity;
1155 mutex_lock(&cap->rkisp1->stream_lock);
1157 ret = video_device_pipeline_start(&cap->vnode.vdev, &cap->rkisp1->pipe);
1159 dev_err(cap->rkisp1->dev, "start pipeline failed %d\n", ret);
1163 ret = rkisp1_dummy_buf_create(cap);
1167 ret = pm_runtime_resume_and_get(cap->rkisp1->dev);
1169 dev_err(cap->rkisp1->dev, "power up failed %d\n", ret);
1174 dev_err(cap->rkisp1->dev, "open cif pipeline failed %d\n", ret);
1178 ret = rkisp1_pipeline_stream_enable(cap);
1182 mutex_unlock(&cap->rkisp1->stream_lock);
1189 pm_runtime_put(cap->rkisp1->dev);
1191 rkisp1_dummy_buf_destroy(cap);
1193 video_device_pipeline_stop(&cap->vnode.vdev);
1195 rkisp1_return_all_buffers(cap, VB2_BUF_STATE_QUEUED);
1196 mutex_unlock(&cap->rkisp1->stream_lock);
1217 rkisp1_fill_pixfmt(const struct rkisp1_capture *cap,
1236 if (cap->id == RKISP1_SELFPATH ||
1237 rkisp1_has_feature(cap->rkisp1, MAIN_STRIDE))
1270 rkisp1_find_fmt_cfg(const struct rkisp1_capture *cap, const u32 pixelfmt)
1272 bool yc_swap_support = rkisp1_has_feature(cap->rkisp1, MAIN_STRIDE);
1275 for (i = 0; i < cap->config->fmt_size; i++) {
1276 const struct rkisp1_capture_fmt_cfg *fmt = &cap->config->fmts[i];
1280 return &cap->config->fmts[i];
1285 static void rkisp1_try_fmt(const struct rkisp1_capture *cap,
1290 const struct rkisp1_capture_config *config = cap->config;
1300 fmt = rkisp1_find_fmt_cfg(cap, pixm->pixelformat);
1307 RKISP1_RSZ_SRC_MIN_WIDTH, max_widths[cap->id]);
1309 RKISP1_RSZ_SRC_MIN_HEIGHT, max_heights[cap->id]);
1316 info = rkisp1_fill_pixfmt(cap, pixm);
1324 static void rkisp1_set_fmt(struct rkisp1_capture *cap,
1327 rkisp1_try_fmt(cap, pixm, &cap->pix.cfg, &cap->pix.info);
1329 cap->pix.fmt = *pixm;
1330 cap->stride = pixm->plane_fmt[0].bytesperline / cap->pix.info->bpp[0];
1336 struct rkisp1_capture *cap = video_drvdata(file);
1338 rkisp1_try_fmt(cap, &f->fmt.pix_mp, NULL, NULL);
1346 struct rkisp1_capture *cap = video_drvdata(file);
1348 bool yc_swap_support = rkisp1_has_feature(cap->rkisp1, MAIN_STRIDE);
1351 if (f->index >= cap->config->fmt_size)
1355 fmt = &cap->config->fmts[f->index];
1360 for (i = 0; i < cap->config->fmt_size; i++) {
1361 fmt = &cap->config->fmts[i];
1388 struct rkisp1_capture *cap = video_drvdata(file);
1396 fsize->stepwise.max_width = max_widths[cap->id];
1400 fsize->stepwise.max_height = max_heights[cap->id];
1409 struct rkisp1_capture *cap = video_drvdata(file);
1411 rkisp1_vdev_to_node(&cap->vnode.vdev);
1416 rkisp1_set_fmt(cap, &f->fmt.pix_mp);
1424 struct rkisp1_capture *cap = video_drvdata(file);
1426 f->fmt.pix_mp = cap->pix.fmt;
1432 rkisp1_querycap(struct file *file, void *priv, struct v4l2_capability *cap)
1434 strscpy(cap->driver, RKISP1_DRIVER_NAME, sizeof(cap->driver));
1435 strscpy(cap->card, RKISP1_DRIVER_NAME, sizeof(cap->card));
1436 strscpy(cap->bus_info, RKISP1_BUS_INFO, sizeof(cap->bus_info));
1467 struct rkisp1_capture *cap = video_get_drvdata(vdev);
1469 rkisp1_find_fmt_cfg(cap, cap->pix.fmt.pixelformat);
1480 if (sd_fmt.format.height != cap->pix.fmt.height ||
1481 sd_fmt.format.width != cap->pix.fmt.width ||
1483 dev_dbg(cap->rkisp1->dev,
1488 sd_fmt.format.height, fmt->mbus, cap->pix.fmt.width,
1489 cap->pix.fmt.height);
1512 static void rkisp1_unregister_capture(struct rkisp1_capture *cap)
1514 if (!video_is_registered(&cap->vnode.vdev))
1517 media_entity_cleanup(&cap->vnode.vdev.entity);
1518 vb2_video_unregister_device(&cap->vnode.vdev);
1519 mutex_destroy(&cap->vnode.vlock);
1531 static int rkisp1_register_capture(struct rkisp1_capture *cap)
1536 struct v4l2_device *v4l2_dev = &cap->rkisp1->v4l2_dev;
1537 struct video_device *vdev = &cap->vnode.vdev;
1542 strscpy(vdev->name, dev_names[cap->id], sizeof(vdev->name));
1555 video_set_drvdata(vdev, cap);
1562 q->drv_priv = cap;
1569 q->dev = cap->rkisp1->dev;
1572 dev_err(cap->rkisp1->dev,
1585 dev_err(cap->rkisp1->dev,
1604 struct rkisp1_capture *cap = &rkisp1->capture_devs[id];
1607 memset(cap, 0, sizeof(*cap));
1608 cap->id = id;
1609 cap->rkisp1 = rkisp1;
1611 INIT_LIST_HEAD(&cap->buf.queue);
1612 init_waitqueue_head(&cap->done);
1613 spin_lock_init(&cap->buf.lock);
1614 if (cap->id == RKISP1_SELFPATH) {
1615 cap->ops = &rkisp1_capture_ops_sp;
1616 cap->config = &rkisp1_capture_config_sp;
1618 cap->ops = &rkisp1_capture_ops_mp;
1619 cap->config = &rkisp1_capture_config_mp;
1622 cap->is_streaming = false;
1628 rkisp1_set_fmt(cap, &pixm);
1638 struct rkisp1_capture *cap = &rkisp1->capture_devs[i];
1642 ret = rkisp1_register_capture(cap);