Lines Matching full:isp

3  * Rockchip ISP1 Driver - ISP Subdevice
27 * This is because ISP Subdev describes not only ISP submodule (input size,
37 * Cropping regions of ISP
61 rkisp1_isp_get_pad_fmt(struct rkisp1_isp *isp, in rkisp1_isp_get_pad_fmt() argument
66 .pads = isp->pad_cfg in rkisp1_isp_get_pad_fmt()
70 return v4l2_subdev_get_try_format(&isp->sd, sd_state, pad); in rkisp1_isp_get_pad_fmt()
72 return v4l2_subdev_get_try_format(&isp->sd, &state, pad); in rkisp1_isp_get_pad_fmt()
76 rkisp1_isp_get_pad_crop(struct rkisp1_isp *isp, in rkisp1_isp_get_pad_crop() argument
81 .pads = isp->pad_cfg in rkisp1_isp_get_pad_crop()
85 return v4l2_subdev_get_try_crop(&isp->sd, sd_state, pad); in rkisp1_isp_get_pad_crop()
87 return v4l2_subdev_get_try_crop(&isp->sd, &state, pad); in rkisp1_isp_get_pad_crop()
99 static void rkisp1_config_ism(struct rkisp1_isp *isp) in rkisp1_config_ism() argument
102 rkisp1_isp_get_pad_crop(isp, NULL, in rkisp1_config_ism()
105 struct rkisp1_device *rkisp1 = isp->rkisp1; in rkisp1_config_ism()
125 * configure ISP blocks with input format, size......
127 static int rkisp1_config_isp(struct rkisp1_isp *isp, in rkisp1_config_isp() argument
130 struct rkisp1_device *rkisp1 = isp->rkisp1; in rkisp1_config_isp()
132 const struct rkisp1_mbus_info *sink_fmt = isp->sink_fmt; in rkisp1_config_isp()
133 const struct rkisp1_mbus_info *src_fmt = isp->src_fmt; in rkisp1_config_isp()
137 sink_frm = rkisp1_isp_get_pad_fmt(isp, NULL, in rkisp1_config_isp()
140 sink_crop = rkisp1_isp_get_pad_crop(isp, NULL, in rkisp1_config_isp()
218 /* ISP Out Area */ in rkisp1_config_isp()
233 src_frm = rkisp1_isp_get_pad_fmt(isp, NULL, in rkisp1_config_isp()
245 static void rkisp1_config_path(struct rkisp1_isp *isp, in rkisp1_config_path() argument
248 struct rkisp1_device *rkisp1 = isp->rkisp1; in rkisp1_config_path()
260 static int rkisp1_config_cif(struct rkisp1_isp *isp, in rkisp1_config_cif() argument
265 ret = rkisp1_config_isp(isp, mbus_type, mbus_flags); in rkisp1_config_cif()
269 rkisp1_config_path(isp, mbus_type); in rkisp1_config_cif()
270 rkisp1_config_ism(isp); in rkisp1_config_cif()
275 static void rkisp1_isp_stop(struct rkisp1_isp *isp) in rkisp1_isp_stop() argument
277 struct rkisp1_device *rkisp1 = isp->rkisp1; in rkisp1_isp_stop()
281 * ISP(mi) stop in mi frame end -> Stop ISP(mipi) -> in rkisp1_isp_stop()
282 * Stop ISP(isp) ->wait for ISP isp off in rkisp1_isp_stop()
284 /* stop and clear MI and ISP interrupts */ in rkisp1_isp_stop()
291 /* stop ISP */ in rkisp1_isp_stop()
309 static void rkisp1_config_clk(struct rkisp1_isp *isp) in rkisp1_config_clk() argument
311 struct rkisp1_device *rkisp1 = isp->rkisp1; in rkisp1_config_clk()
331 static void rkisp1_isp_start(struct rkisp1_isp *isp) in rkisp1_isp_start() argument
333 struct rkisp1_device *rkisp1 = isp->rkisp1; in rkisp1_isp_start()
336 rkisp1_config_clk(isp); in rkisp1_isp_start()
338 /* Activate ISP */ in rkisp1_isp_start()
345 if (isp->src_fmt->pixel_enc != V4L2_PIXEL_ENC_BAYER) in rkisp1_isp_start()
484 static void rkisp1_isp_set_src_fmt(struct rkisp1_isp *isp, in rkisp1_isp_set_src_fmt() argument
496 sink_fmt = rkisp1_isp_get_pad_fmt(isp, sd_state, in rkisp1_isp_set_src_fmt()
498 src_fmt = rkisp1_isp_get_pad_fmt(isp, sd_state, in rkisp1_isp_set_src_fmt()
500 src_crop = rkisp1_isp_get_pad_crop(isp, sd_state, in rkisp1_isp_set_src_fmt()
504 * Media bus code. The ISP can operate in pass-through mode (Bayer in, in rkisp1_isp_set_src_fmt()
548 * ISP is bypassed in that case and passes YUV data through without in rkisp1_isp_set_src_fmt()
553 * hardware blocks are conveyed through the ISP parameters buffer, as in rkisp1_isp_set_src_fmt()
587 isp->src_fmt = src_info; in rkisp1_isp_set_src_fmt()
590 static void rkisp1_isp_set_src_crop(struct rkisp1_isp *isp, in rkisp1_isp_set_src_crop() argument
598 src_crop = rkisp1_isp_get_pad_crop(isp, sd_state, in rkisp1_isp_set_src_crop()
601 sink_crop = rkisp1_isp_get_pad_crop(isp, sd_state, in rkisp1_isp_set_src_crop()
614 src_fmt = rkisp1_isp_get_pad_fmt(isp, sd_state, in rkisp1_isp_set_src_crop()
616 rkisp1_isp_set_src_fmt(isp, sd_state, src_fmt, which); in rkisp1_isp_set_src_crop()
619 static void rkisp1_isp_set_sink_crop(struct rkisp1_isp *isp, in rkisp1_isp_set_sink_crop() argument
626 sink_crop = rkisp1_isp_get_pad_crop(isp, sd_state, in rkisp1_isp_set_sink_crop()
629 sink_fmt = rkisp1_isp_get_pad_fmt(isp, sd_state, in rkisp1_isp_set_sink_crop()
642 src_crop = rkisp1_isp_get_pad_crop(isp, sd_state, in rkisp1_isp_set_sink_crop()
644 rkisp1_isp_set_src_crop(isp, sd_state, src_crop, which); in rkisp1_isp_set_sink_crop()
647 static void rkisp1_isp_set_sink_fmt(struct rkisp1_isp *isp, in rkisp1_isp_set_sink_fmt() argument
657 sink_fmt = rkisp1_isp_get_pad_fmt(isp, sd_state, in rkisp1_isp_set_sink_fmt()
667 isp->sink_fmt = mbus_info; in rkisp1_isp_set_sink_fmt()
709 sink_crop = rkisp1_isp_get_pad_crop(isp, sd_state, in rkisp1_isp_set_sink_fmt()
712 rkisp1_isp_set_sink_crop(isp, sd_state, sink_crop, which); in rkisp1_isp_set_sink_fmt()
719 struct rkisp1_isp *isp = to_rkisp1_isp(sd); in rkisp1_isp_get_fmt() local
721 mutex_lock(&isp->ops_lock); in rkisp1_isp_get_fmt()
722 fmt->format = *rkisp1_isp_get_pad_fmt(isp, sd_state, fmt->pad, in rkisp1_isp_get_fmt()
724 mutex_unlock(&isp->ops_lock); in rkisp1_isp_get_fmt()
732 struct rkisp1_isp *isp = to_rkisp1_isp(sd); in rkisp1_isp_set_fmt() local
734 mutex_lock(&isp->ops_lock); in rkisp1_isp_set_fmt()
736 rkisp1_isp_set_sink_fmt(isp, sd_state, &fmt->format, in rkisp1_isp_set_fmt()
739 rkisp1_isp_set_src_fmt(isp, sd_state, &fmt->format, in rkisp1_isp_set_fmt()
742 fmt->format = *rkisp1_isp_get_pad_fmt(isp, sd_state, fmt->pad, in rkisp1_isp_set_fmt()
745 mutex_unlock(&isp->ops_lock); in rkisp1_isp_set_fmt()
753 struct rkisp1_isp *isp = to_rkisp1_isp(sd); in rkisp1_isp_get_selection() local
760 mutex_lock(&isp->ops_lock); in rkisp1_isp_get_selection()
766 fmt = rkisp1_isp_get_pad_fmt(isp, sd_state, sel->pad, in rkisp1_isp_get_selection()
773 sel->r = *rkisp1_isp_get_pad_crop(isp, sd_state, in rkisp1_isp_get_selection()
779 sel->r = *rkisp1_isp_get_pad_crop(isp, sd_state, sel->pad, in rkisp1_isp_get_selection()
785 mutex_unlock(&isp->ops_lock); in rkisp1_isp_get_selection()
793 struct rkisp1_isp *isp = to_rkisp1_isp(sd); in rkisp1_isp_set_selection() local
799 dev_dbg(isp->rkisp1->dev, "%s: pad: %d sel(%d,%d)/%dx%d\n", __func__, in rkisp1_isp_set_selection()
801 mutex_lock(&isp->ops_lock); in rkisp1_isp_set_selection()
803 rkisp1_isp_set_sink_crop(isp, sd_state, &sel->r, sel->which); in rkisp1_isp_set_selection()
805 rkisp1_isp_set_src_crop(isp, sd_state, &sel->r, sel->which); in rkisp1_isp_set_selection()
809 mutex_unlock(&isp->ops_lock); in rkisp1_isp_set_selection()
838 struct rkisp1_isp *isp = to_rkisp1_isp(sd); in rkisp1_isp_s_stream() local
839 struct rkisp1_device *rkisp1 = isp->rkisp1; in rkisp1_isp_s_stream()
848 rkisp1_isp_stop(isp); in rkisp1_isp_s_stream()
852 sink_pad = &isp->pads[RKISP1_ISP_PAD_SINK_VIDEO]; in rkisp1_isp_s_stream()
855 dev_dbg(rkisp1->dev, "Failed to get source for ISP: %ld\n", in rkisp1_isp_s_stream()
879 isp->frame_sequence = -1; in rkisp1_isp_s_stream()
880 mutex_lock(&isp->ops_lock); in rkisp1_isp_s_stream()
881 ret = rkisp1_config_cif(isp, mbus_type, mbus_flags); in rkisp1_isp_s_stream()
885 rkisp1_isp_start(isp); in rkisp1_isp_s_stream()
889 rkisp1_isp_stop(isp); in rkisp1_isp_s_stream()
894 mutex_unlock(&isp->ops_lock); in rkisp1_isp_s_stream()
933 .pads = rkisp1->isp.pad_cfg in rkisp1_isp_register()
935 struct rkisp1_isp *isp = &rkisp1->isp; in rkisp1_isp_register() local
936 struct media_pad *pads = isp->pads; in rkisp1_isp_register()
937 struct v4l2_subdev *sd = &isp->sd; in rkisp1_isp_register()
940 isp->rkisp1 = rkisp1; in rkisp1_isp_register()
955 isp->sink_fmt = rkisp1_mbus_info_get_by_code(RKISP1_DEF_SINK_PAD_FMT); in rkisp1_isp_register()
956 isp->src_fmt = rkisp1_mbus_info_get_by_code(RKISP1_DEF_SRC_PAD_FMT); in rkisp1_isp_register()
958 mutex_init(&isp->ops_lock); in rkisp1_isp_register()
965 dev_err(rkisp1->dev, "Failed to register isp subdev\n"); in rkisp1_isp_register()
975 mutex_destroy(&isp->ops_lock); in rkisp1_isp_register()
976 isp->sd.v4l2_dev = NULL; in rkisp1_isp_register()
982 struct rkisp1_isp *isp = &rkisp1->isp; in rkisp1_isp_unregister() local
984 if (!isp->sd.v4l2_dev) in rkisp1_isp_unregister()
987 v4l2_device_unregister_subdev(&isp->sd); in rkisp1_isp_unregister()
988 media_entity_cleanup(&isp->sd.entity); in rkisp1_isp_unregister()
989 mutex_destroy(&isp->ops_lock); in rkisp1_isp_unregister()
996 static void rkisp1_isp_queue_event_sof(struct rkisp1_isp *isp) in rkisp1_isp_queue_event_sof() argument
1002 event.u.frame_sync.frame_sequence = isp->frame_sequence; in rkisp1_isp_queue_event_sof()
1003 v4l2_event_queue(isp->sd.devnode, &event); in rkisp1_isp_queue_event_sof()
1020 rkisp1->isp.frame_sequence++; in rkisp1_isp_isr()
1021 rkisp1_isp_queue_event_sof(&rkisp1->isp); in rkisp1_isp_isr()