Lines Matching refs:xtpg
131 static void __xtpg_update_pattern_control(struct xtpg_device *xtpg, in __xtpg_update_pattern_control() argument
134 u32 pattern_mask = (1 << (xtpg->pattern->maximum + 1)) - 1; in __xtpg_update_pattern_control()
140 if (xtpg->npads == 1 || !xtpg->has_input) in __xtpg_update_pattern_control()
151 __v4l2_ctrl_modify_range(xtpg->pattern, 0, xtpg->pattern->maximum, in __xtpg_update_pattern_control()
155 static void xtpg_update_pattern_control(struct xtpg_device *xtpg, in xtpg_update_pattern_control() argument
158 mutex_lock(xtpg->ctrl_handler.lock); in xtpg_update_pattern_control()
159 __xtpg_update_pattern_control(xtpg, passthrough, pattern); in xtpg_update_pattern_control()
160 mutex_unlock(xtpg->ctrl_handler.lock); in xtpg_update_pattern_control()
169 struct xtpg_device *xtpg = to_tpg(subdev); in xtpg_s_stream() local
170 unsigned int width = xtpg->formats[0].width; in xtpg_s_stream()
171 unsigned int height = xtpg->formats[0].height; in xtpg_s_stream()
176 xvip_stop(&xtpg->xvip); in xtpg_s_stream()
177 if (xtpg->vtc) in xtpg_s_stream()
178 xvtc_generator_stop(xtpg->vtc); in xtpg_s_stream()
180 xtpg_update_pattern_control(xtpg, true, true); in xtpg_s_stream()
181 xtpg->streaming = false; in xtpg_s_stream()
185 xvip_set_frame_size(&xtpg->xvip, &xtpg->formats[0]); in xtpg_s_stream()
187 if (xtpg->vtc) { in xtpg_s_stream()
198 v4l2_ctrl_g_ctrl(xtpg->hblank) + width); in xtpg_s_stream()
200 v4l2_ctrl_g_ctrl(xtpg->vblank) + height); in xtpg_s_stream()
207 xvtc_generator_start(xtpg->vtc, &config); in xtpg_s_stream()
216 mutex_lock(xtpg->ctrl_handler.lock); in xtpg_s_stream()
218 xvip_clr_and_set(&xtpg->xvip, XTPG_PATTERN_CONTROL, in xtpg_s_stream()
219 XTPG_PATTERN_MASK, xtpg->pattern->cur.val); in xtpg_s_stream()
225 passthrough = xtpg->pattern->cur.val == 0; in xtpg_s_stream()
226 __xtpg_update_pattern_control(xtpg, passthrough, !passthrough); in xtpg_s_stream()
228 xtpg->streaming = true; in xtpg_s_stream()
230 mutex_unlock(xtpg->ctrl_handler.lock); in xtpg_s_stream()
237 : xtpg_get_bayer_phase(xtpg->formats[0].code); in xtpg_s_stream()
238 xvip_write(&xtpg->xvip, XTPG_BAYER_PHASE, bayer_phase); in xtpg_s_stream()
240 if (xtpg->vtmux_gpio) in xtpg_s_stream()
241 gpiod_set_value_cansleep(xtpg->vtmux_gpio, !passthrough); in xtpg_s_stream()
243 xvip_start(&xtpg->xvip); in xtpg_s_stream()
253 __xtpg_get_pad_format(struct xtpg_device *xtpg, in __xtpg_get_pad_format() argument
259 return v4l2_subdev_get_try_format(&xtpg->xvip.subdev, cfg, pad); in __xtpg_get_pad_format()
261 return &xtpg->formats[pad]; in __xtpg_get_pad_format()
271 struct xtpg_device *xtpg = to_tpg(subdev); in xtpg_get_format() local
273 fmt->format = *__xtpg_get_pad_format(xtpg, cfg, fmt->pad, fmt->which); in xtpg_get_format()
282 struct xtpg_device *xtpg = to_tpg(subdev); in xtpg_set_format() local
286 __format = __xtpg_get_pad_format(xtpg, cfg, fmt->pad, fmt->which); in xtpg_set_format()
291 if (xtpg->npads == 2 && fmt->pad == 1) { in xtpg_set_format()
297 if (xtpg->bayer) { in xtpg_set_format()
308 if (xtpg->npads == 2) { in xtpg_set_format()
309 __format = __xtpg_get_pad_format(xtpg, cfg, 1, fmt->which); in xtpg_set_format()
351 struct xtpg_device *xtpg = to_tpg(subdev); in xtpg_open() local
355 *format = xtpg->default_format; in xtpg_open()
357 if (xtpg->npads == 2) { in xtpg_open()
359 *format = xtpg->default_format; in xtpg_open()
372 struct xtpg_device *xtpg = container_of(ctrl->handler, in xtpg_s_ctrl() local
377 xvip_clr_and_set(&xtpg->xvip, XTPG_PATTERN_CONTROL, in xtpg_s_ctrl()
381 xvip_clr_or_set(&xtpg->xvip, XTPG_PATTERN_CONTROL, in xtpg_s_ctrl()
385 xvip_clr_or_set(&xtpg->xvip, XTPG_PATTERN_CONTROL, in xtpg_s_ctrl()
389 xvip_clr_and_set(&xtpg->xvip, XTPG_PATTERN_CONTROL, in xtpg_s_ctrl()
395 xvip_clr_or_set(&xtpg->xvip, XTPG_PATTERN_CONTROL, in xtpg_s_ctrl()
399 xvip_clr_or_set(&xtpg->xvip, XTPG_PATTERN_CONTROL, in xtpg_s_ctrl()
403 xvip_clr_or_set(&xtpg->xvip, XTPG_PATTERN_CONTROL, in xtpg_s_ctrl()
407 xvip_write(&xtpg->xvip, XTPG_MOTION_SPEED, ctrl->val); in xtpg_s_ctrl()
410 xvip_clr_and_set(&xtpg->xvip, XTPG_CROSS_HAIRS, in xtpg_s_ctrl()
415 xvip_clr_and_set(&xtpg->xvip, XTPG_CROSS_HAIRS, in xtpg_s_ctrl()
420 xvip_clr_and_set(&xtpg->xvip, XTPG_ZPLATE_HOR_CONTROL, in xtpg_s_ctrl()
425 xvip_clr_and_set(&xtpg->xvip, XTPG_ZPLATE_HOR_CONTROL, in xtpg_s_ctrl()
430 xvip_clr_and_set(&xtpg->xvip, XTPG_ZPLATE_VER_CONTROL, in xtpg_s_ctrl()
435 xvip_clr_and_set(&xtpg->xvip, XTPG_ZPLATE_VER_CONTROL, in xtpg_s_ctrl()
440 xvip_write(&xtpg->xvip, XTPG_BOX_SIZE, ctrl->val); in xtpg_s_ctrl()
443 xvip_write(&xtpg->xvip, XTPG_BOX_COLOR, ctrl->val); in xtpg_s_ctrl()
446 xvip_write(&xtpg->xvip, XTPG_STUCK_PIXEL_THRESH, ctrl->val); in xtpg_s_ctrl()
449 xvip_write(&xtpg->xvip, XTPG_NOISE_GAIN, ctrl->val); in xtpg_s_ctrl()
688 struct xtpg_device *xtpg = dev_get_drvdata(dev); in xtpg_pm_suspend() local
690 xvip_suspend(&xtpg->xvip); in xtpg_pm_suspend()
697 struct xtpg_device *xtpg = dev_get_drvdata(dev); in xtpg_pm_resume() local
699 xvip_resume(&xtpg->xvip); in xtpg_pm_resume()
708 static int xtpg_parse_of(struct xtpg_device *xtpg) in xtpg_parse_of() argument
710 struct device *dev = xtpg->xvip.dev; in xtpg_parse_of()
711 struct device_node *node = xtpg->xvip.dev->of_node; in xtpg_parse_of()
736 if (!xtpg->vip_format) { in xtpg_parse_of()
737 xtpg->vip_format = format; in xtpg_parse_of()
738 } else if (xtpg->vip_format != format) { in xtpg_parse_of()
760 xtpg->npads = nports; in xtpg_parse_of()
762 xtpg->has_input = true; in xtpg_parse_of()
770 struct xtpg_device *xtpg; in xtpg_probe() local
774 xtpg = devm_kzalloc(&pdev->dev, sizeof(*xtpg), GFP_KERNEL); in xtpg_probe()
775 if (!xtpg) in xtpg_probe()
778 xtpg->xvip.dev = &pdev->dev; in xtpg_probe()
780 ret = xtpg_parse_of(xtpg); in xtpg_probe()
784 ret = xvip_init_resources(&xtpg->xvip); in xtpg_probe()
788 xtpg->vtmux_gpio = devm_gpiod_get_optional(&pdev->dev, "timing", in xtpg_probe()
790 if (IS_ERR(xtpg->vtmux_gpio)) { in xtpg_probe()
791 ret = PTR_ERR(xtpg->vtmux_gpio); in xtpg_probe()
795 xtpg->vtc = xvtc_of_get(pdev->dev.of_node); in xtpg_probe()
796 if (IS_ERR(xtpg->vtc)) { in xtpg_probe()
797 ret = PTR_ERR(xtpg->vtc); in xtpg_probe()
802 xvip_reset(&xtpg->xvip); in xtpg_probe()
807 if (xtpg->npads == 2) { in xtpg_probe()
808 xtpg->pads[0].flags = MEDIA_PAD_FL_SINK; in xtpg_probe()
809 xtpg->pads[1].flags = MEDIA_PAD_FL_SOURCE; in xtpg_probe()
811 xtpg->pads[0].flags = MEDIA_PAD_FL_SOURCE; in xtpg_probe()
815 xtpg->default_format.code = xtpg->vip_format->code; in xtpg_probe()
816 xtpg->default_format.field = V4L2_FIELD_NONE; in xtpg_probe()
817 xtpg->default_format.colorspace = V4L2_COLORSPACE_SRGB; in xtpg_probe()
818 xvip_get_frame_size(&xtpg->xvip, &xtpg->default_format); in xtpg_probe()
820 bayer_phase = xtpg_get_bayer_phase(xtpg->vip_format->code); in xtpg_probe()
822 xtpg->bayer = true; in xtpg_probe()
824 xtpg->formats[0] = xtpg->default_format; in xtpg_probe()
825 if (xtpg->npads == 2) in xtpg_probe()
826 xtpg->formats[1] = xtpg->default_format; in xtpg_probe()
829 subdev = &xtpg->xvip.subdev; in xtpg_probe()
834 v4l2_set_subdevdata(subdev, xtpg); in xtpg_probe()
838 ret = media_entity_pads_init(&subdev->entity, xtpg->npads, xtpg->pads); in xtpg_probe()
842 v4l2_ctrl_handler_init(&xtpg->ctrl_handler, 3 + ARRAY_SIZE(xtpg_ctrls)); in xtpg_probe()
844 xtpg->vblank = v4l2_ctrl_new_std(&xtpg->ctrl_handler, &xtpg_ctrl_ops, in xtpg_probe()
847 xtpg->hblank = v4l2_ctrl_new_std(&xtpg->ctrl_handler, &xtpg_ctrl_ops, in xtpg_probe()
850 xtpg->pattern = v4l2_ctrl_new_std_menu_items(&xtpg->ctrl_handler, in xtpg_probe()
856 v4l2_ctrl_new_custom(&xtpg->ctrl_handler, &xtpg_ctrls[i], NULL); in xtpg_probe()
858 if (xtpg->ctrl_handler.error) { in xtpg_probe()
860 ret = xtpg->ctrl_handler.error; in xtpg_probe()
863 subdev->ctrl_handler = &xtpg->ctrl_handler; in xtpg_probe()
865 xtpg_update_pattern_control(xtpg, true, true); in xtpg_probe()
867 ret = v4l2_ctrl_handler_setup(&xtpg->ctrl_handler); in xtpg_probe()
873 platform_set_drvdata(pdev, xtpg); in xtpg_probe()
875 xvip_print_version(&xtpg->xvip); in xtpg_probe()
886 v4l2_ctrl_handler_free(&xtpg->ctrl_handler); in xtpg_probe()
888 xvtc_put(xtpg->vtc); in xtpg_probe()
890 xvip_cleanup_resources(&xtpg->xvip); in xtpg_probe()
896 struct xtpg_device *xtpg = platform_get_drvdata(pdev); in xtpg_remove() local
897 struct v4l2_subdev *subdev = &xtpg->xvip.subdev; in xtpg_remove()
900 v4l2_ctrl_handler_free(&xtpg->ctrl_handler); in xtpg_remove()
903 xvip_cleanup_resources(&xtpg->xvip); in xtpg_remove()