Lines Matching refs:ccp2

68 static void ccp2_print_status(struct isp_ccp2_device *ccp2)
70 struct isp_device *isp = to_isp_device(ccp2);
108 * @ccp2: pointer to ISP CCP2 device
110 static void ccp2_reset(struct isp_ccp2_device *ccp2)
112 struct isp_device *isp = to_isp_device(ccp2);
123 "omap3_isp: timeout waiting for ccp2 reset\n");
131 * @ccp2: pointer to ISP CCP2 device
133 static void ccp2_pwr_cfg(struct isp_ccp2_device *ccp2)
135 struct isp_device *isp = to_isp_device(ccp2);
145 * @ccp2: pointer to ISP CCP2 device
148 static int ccp2_if_enable(struct isp_ccp2_device *ccp2, u8 enable)
150 struct isp_device *isp = to_isp_device(ccp2);
154 if (enable && ccp2->vdds_csib) {
155 ret = regulator_enable(ccp2->vdds_csib);
166 /* Enable/Disable ccp2 interface in ccp2 mode */
171 if (!enable && ccp2->vdds_csib)
172 regulator_disable(ccp2->vdds_csib);
179 * @ccp2: pointer to ISP CCP2 device
182 static void ccp2_mem_enable(struct isp_ccp2_device *ccp2, u8 enable)
184 struct isp_device *isp = to_isp_device(ccp2);
187 ccp2_if_enable(ccp2, 0);
189 /* Enable/Disable ccp2 interface in ccp2 mode */
200 * @ccp2: Pointer to ISP CCP2 device
207 static int ccp2_phyif_config(struct isp_ccp2_device *ccp2,
210 struct isp_device *isp = to_isp_device(ccp2);
240 * @ccp2: Pointer to ISP CCP2 device
252 static void ccp2_vp_config(struct isp_ccp2_device *ccp2,
255 struct isp_device *isp = to_isp_device(ccp2);
278 * @ccp2: Pointer to ISP CCP2 device
285 static void ccp2_lcx_config(struct isp_ccp2_device *ccp2,
288 struct isp_device *isp = to_isp_device(ccp2);
343 * ccp2_if_configure - Configure ccp2 with data from sensor
344 * @ccp2: Pointer to ISP CCP2 device
348 static int ccp2_if_configure(struct isp_ccp2_device *ccp2)
350 struct isp_pipeline *pipe = to_isp_pipeline(&ccp2->subdev.entity);
358 ccp2_pwr_cfg(ccp2);
360 pad = media_pad_remote_pad_first(&ccp2->pads[CCP2_PAD_SINK]);
366 ret = ccp2_phyif_config(ccp2, &buscfg->bus.ccp2);
370 ccp2_vp_config(ccp2, buscfg->bus.ccp2.vpclk_div + 1);
374 format = &ccp2->formats[CCP2_PAD_SINK];
376 ccp2->if_cfg.data_start = lines;
377 ccp2->if_cfg.crc = buscfg->bus.ccp2.crc;
378 ccp2->if_cfg.format = format->code;
379 ccp2->if_cfg.data_size = format->height;
381 ccp2_lcx_config(ccp2, &ccp2->if_cfg);
386 static int ccp2_adjust_bandwidth(struct isp_ccp2_device *ccp2)
388 struct isp_pipeline *pipe = to_isp_pipeline(&ccp2->subdev.entity);
389 struct isp_device *isp = to_isp_device(ccp2);
390 const struct v4l2_mbus_framefmt *ofmt = &ccp2->formats[CCP2_PAD_SOURCE];
427 * @ccp2: Pointer to ISP CCP2 device
434 static void ccp2_mem_configure(struct isp_ccp2_device *ccp2,
437 struct isp_device *isp = to_isp_device(ccp2);
438 u32 sink_pixcode = ccp2->formats[CCP2_PAD_SINK].code;
439 u32 source_pixcode = ccp2->formats[CCP2_PAD_SOURCE].code;
447 ccp2_pwr_cfg(ccp2);
458 if (ccp2->video_in.bpl_padding == 0)
461 config->src_ofst = ccp2->video_in.bpl_value;
507 ccp2_vp_config(ccp2, ccp2_adjust_bandwidth(ccp2));
522 * @ccp2: Pointer to ISP CCP2 device
527 static void ccp2_set_inaddr(struct isp_ccp2_device *ccp2, u32 addr)
529 struct isp_device *isp = to_isp_device(ccp2);
538 static void ccp2_isr_buffer(struct isp_ccp2_device *ccp2)
540 struct isp_pipeline *pipe = to_isp_pipeline(&ccp2->subdev.entity);
543 buffer = omap3isp_video_buffer_next(&ccp2->video_in);
545 ccp2_set_inaddr(ccp2, buffer->dma);
549 if (ccp2->state == ISP_PIPELINE_STREAM_SINGLESHOT) {
558 * @ccp2: Pointer to ISP CCP2 device
562 void omap3isp_ccp2_isr(struct isp_ccp2_device *ccp2)
564 struct isp_pipeline *pipe = to_isp_pipeline(&ccp2->subdev.entity);
565 struct isp_device *isp = to_isp_device(ccp2);
597 if (omap3isp_module_sync_is_stopping(&ccp2->wait, &ccp2->stopping))
602 ccp2_isr_buffer(ccp2);
615 * __ccp2_get_format - helper function for getting ccp2 format
616 * @ccp2 : Pointer to ISP CCP2 device
623 __ccp2_get_format(struct isp_ccp2_device *ccp2,
630 return &ccp2->formats[pad];
635 * @ccp2 : Pointer to ISP CCP2 device
641 static void ccp2_try_format(struct isp_ccp2_device *ccp2,
654 if (ccp2->input == CCP2_INPUT_SENSOR) {
661 } else if (ccp2->input == CCP2_INPUT_MEMORY) {
677 format = __ccp2_get_format(ccp2, sd_state, CCP2_PAD_SINK,
699 struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
711 format = __ccp2_get_format(ccp2, sd_state, CCP2_PAD_SINK,
723 struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
732 ccp2_try_format(ccp2, sd_state, fse->pad, &format, fse->which);
742 ccp2_try_format(ccp2, sd_state, fse->pad, &format, fse->which);
760 struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
763 format = __ccp2_get_format(ccp2, sd_state, fmt->pad, fmt->which);
782 struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
785 format = __ccp2_get_format(ccp2, sd_state, fmt->pad, fmt->which);
789 ccp2_try_format(ccp2, sd_state, fmt->pad, &fmt->format, fmt->which);
794 format = __ccp2_get_format(ccp2, sd_state, CCP2_PAD_SOURCE,
797 ccp2_try_format(ccp2, sd_state, CCP2_PAD_SOURCE, format,
829 * ccp2_s_stream - Enable/Disable streaming on ccp2 subdev
836 struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
837 struct isp_device *isp = to_isp_device(ccp2);
838 struct device *dev = to_device(ccp2);
841 if (ccp2->state == ISP_PIPELINE_STREAM_STOPPED) {
844 atomic_set(&ccp2->stopping, 0);
849 if (ccp2->phy) {
850 ret = omap3isp_csiphy_acquire(ccp2->phy, &sd->entity);
855 ccp2_if_configure(ccp2);
856 ccp2_print_status(ccp2);
859 ret = ccp2_if_enable(ccp2, 1);
861 if (ccp2->phy)
862 omap3isp_csiphy_release(ccp2->phy);
868 if (ccp2->state != ISP_PIPELINE_STREAM_SINGLESHOT) {
871 format = &ccp2->formats[CCP2_PAD_SINK];
873 ccp2->mem_cfg.hsize_count = format->width;
874 ccp2->mem_cfg.vsize_count = format->height;
875 ccp2->mem_cfg.src_ofst = 0;
877 ccp2_mem_configure(ccp2, &ccp2->mem_cfg);
879 ccp2_print_status(ccp2);
881 ccp2_mem_enable(ccp2, 1);
885 if (omap3isp_module_sync_idle(&sd->entity, &ccp2->wait,
886 &ccp2->stopping))
888 if (ccp2->input == CCP2_INPUT_MEMORY) {
889 ccp2_mem_enable(ccp2, 0);
891 } else if (ccp2->input == CCP2_INPUT_SENSOR) {
893 ccp2_if_enable(ccp2, 0);
894 if (ccp2->phy)
895 omap3isp_csiphy_release(ccp2->phy);
900 ccp2->state = enable;
929 * ISP ccp2 video device node
940 struct isp_ccp2_device *ccp2 = &video->isp->isp_ccp2;
942 ccp2_set_inaddr(ccp2, buffer->dma);
955 * ccp2_link_setup - Setup ccp2 connections.
967 struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
978 if (ccp2->input == CCP2_INPUT_SENSOR)
980 ccp2->input = CCP2_INPUT_MEMORY;
982 if (ccp2->input == CCP2_INPUT_MEMORY)
983 ccp2->input = CCP2_INPUT_NONE;
990 if (ccp2->input == CCP2_INPUT_MEMORY)
992 ccp2->input = CCP2_INPUT_SENSOR;
994 if (ccp2->input == CCP2_INPUT_SENSOR)
995 ccp2->input = CCP2_INPUT_NONE;
1001 ccp2->output = CCP2_OUTPUT_CCDC;
1003 ccp2->output = CCP2_OUTPUT_NONE;
1021 * @ccp2: Pointer to ISP CCP2 device
1023 void omap3isp_ccp2_unregister_entities(struct isp_ccp2_device *ccp2)
1025 v4l2_device_unregister_subdev(&ccp2->subdev);
1026 omap3isp_video_unregister(&ccp2->video_in);
1031 * @ccp2: Pointer to ISP CCP2 device
1036 int omap3isp_ccp2_register_entities(struct isp_ccp2_device *ccp2,
1042 ccp2->subdev.dev = vdev->mdev->dev;
1043 ret = v4l2_device_register_subdev(vdev, &ccp2->subdev);
1047 ret = omap3isp_video_register(&ccp2->video_in, vdev);
1054 omap3isp_ccp2_unregister_entities(ccp2);
1059 * ISP ccp2 initialisation and cleanup
1063 * ccp2_init_entities - Initialize ccp2 subdev and media entity.
1064 * @ccp2: Pointer to ISP CCP2 device
1067 static int ccp2_init_entities(struct isp_ccp2_device *ccp2)
1069 struct v4l2_subdev *sd = &ccp2->subdev;
1070 struct media_pad *pads = ccp2->pads;
1074 ccp2->input = CCP2_INPUT_NONE;
1075 ccp2->output = CCP2_OUTPUT_NONE;
1081 v4l2_set_subdevdata(sd, ccp2);
1106 ccp2->video_in.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
1107 ccp2->video_in.bpl_alignment = 32;
1108 ccp2->video_in.bpl_max = 0xffffffe0;
1109 ccp2->video_in.isp = to_isp_device(ccp2);
1110 ccp2->video_in.ops = &ccp2_video_ops;
1111 ccp2->video_in.capture_mem = PAGE_ALIGN(4096 * 4096) * 3;
1113 ret = omap3isp_video_init(&ccp2->video_in, "CCP2");
1120 media_entity_cleanup(&ccp2->subdev.entity);
1131 struct isp_ccp2_device *ccp2 = &isp->isp_ccp2;
1134 init_waitqueue_head(&ccp2->wait);
1148 ccp2->vdds_csib = devm_regulator_get(isp->dev, "vdds_csib");
1149 if (IS_ERR(ccp2->vdds_csib)) {
1150 if (PTR_ERR(ccp2->vdds_csib) == -EPROBE_DEFER) {
1157 ccp2->vdds_csib = NULL;
1159 ccp2->phy = &isp->isp_csiphy2;
1161 ccp2->phy = &isp->isp_csiphy1;
1164 ret = ccp2_init_entities(ccp2);
1168 ccp2_reset(ccp2);
1178 struct isp_ccp2_device *ccp2 = &isp->isp_ccp2;
1180 omap3isp_video_cleanup(&ccp2->video_in);
1181 media_entity_cleanup(&ccp2->subdev.entity);