From a365675d53eada3af6334f08e6a15a352d09f18c Mon Sep 17 00:00:00 2001 From: Wang Panzhenzhuan Date: Wed, 12 Jul 2023 08:19:26 +0000 Subject: [PATCH] video: rockchip: vehicle support drop vop show frames sample usage: cif_sensor: cif_sensor { nvp6324 { ... drop_frames = <4>; //frames to drop ... }; }; Signed-off-by: Wang Panzhenzhuan Change-Id: I7c7ad473471e2b90ab32600a3d7a31511870307d --- drivers/video/rockchip/vehicle/vehicle_ad.h | 1 + drivers/video/rockchip/vehicle/vehicle_ad_nvp6324.c | 1 + drivers/video/rockchip/vehicle/vehicle_cfg.h | 1 + drivers/video/rockchip/vehicle/vehicle_flinger.c | 8 ++++++++ drivers/video/rockchip/vehicle/vehicle_generic_sensor.c | 6 ++++++ 5 files changed, 17 insertions(+) diff --git a/drivers/video/rockchip/vehicle/vehicle_ad.h b/drivers/video/rockchip/vehicle/vehicle_ad.h index 66d156f9e778..a83233b791e0 100644 --- a/drivers/video/rockchip/vehicle/vehicle_ad.h +++ b/drivers/video/rockchip/vehicle/vehicle_ad.h @@ -63,6 +63,7 @@ struct vehicle_ad_dev { u32 channel_reso[PAD_MAX]; u8 detect_status; u8 last_detect_status; + int drop_frames; }; int vehicle_generic_sensor_write(struct vehicle_ad_dev *ad, char reg, char *pval); diff --git a/drivers/video/rockchip/vehicle/vehicle_ad_nvp6324.c b/drivers/video/rockchip/vehicle/vehicle_ad_nvp6324.c index 3f5115fd097c..af9274dd35e7 100644 --- a/drivers/video/rockchip/vehicle/vehicle_ad_nvp6324.c +++ b/drivers/video/rockchip/vehicle/vehicle_ad_nvp6324.c @@ -1950,6 +1950,7 @@ int nvp6324_ad_get_cfg(struct vehicle_cfg **cfg) } nvp6324_g_addev->cfg.ad_ready = true; + nvp6324_g_addev->cfg.drop_frames = nvp6324_g_addev->drop_frames; *cfg = &nvp6324_g_addev->cfg; diff --git a/drivers/video/rockchip/vehicle/vehicle_cfg.h b/drivers/video/rockchip/vehicle/vehicle_cfg.h index b03b6a80b9a3..96241b7b5128 100644 --- a/drivers/video/rockchip/vehicle/vehicle_cfg.h +++ b/drivers/video/rockchip/vehicle/vehicle_cfg.h @@ -139,6 +139,7 @@ struct vehicle_cfg { /*0:no, 1:90; 2:180; 4:270; 0x10:mirror-y; 0x20:mirror-x*/ int rotate_mirror; struct rkmodule_csi_dphy_param *dphy_param; + int drop_frames; }; #endif diff --git a/drivers/video/rockchip/vehicle/vehicle_flinger.c b/drivers/video/rockchip/vehicle/vehicle_flinger.c index ef5c605c4c4d..3aed9a87a7a6 100644 --- a/drivers/video/rockchip/vehicle/vehicle_flinger.c +++ b/drivers/video/rockchip/vehicle/vehicle_flinger.c @@ -1076,6 +1076,7 @@ static void rk_drm_vehicle_commit(struct flinger *flinger, struct graphic_buffer rockchip_drm_direct_show_commit(flinger->drm_dev, &commit_info); } +static int drop_frames_number; static int rk_flinger_vop_show(struct flinger *flinger, struct graphic_buffer *buffer) { @@ -1084,6 +1085,12 @@ static int rk_flinger_vop_show(struct flinger *flinger, VEHICLE_DG("flinger vop show buffer wxh(%zux%zu)\n", buffer->src.w, buffer->src.h); + if (drop_frames_number > 0) { + VEHICLE_INFO("%s discard the frame num(%d)!\n", __func__, drop_frames_number); + drop_frames_number--; + return 0; + } + if (!flinger->running) return 0; @@ -1444,6 +1451,7 @@ int vehicle_flinger_reverse_open(struct vehicle_cfg *v_cfg, flg->cvbs_field_count = 0; memcpy(&flg->v_cfg, v_cfg, sizeof(struct vehicle_cfg)); flg->running = true; + drop_frames_number = v_cfg->drop_frames; return 0; } diff --git a/drivers/video/rockchip/vehicle/vehicle_generic_sensor.c b/drivers/video/rockchip/vehicle/vehicle_generic_sensor.c index bafe0c8fd13b..ccb45fd01051 100644 --- a/drivers/video/rockchip/vehicle/vehicle_generic_sensor.c +++ b/drivers/video/rockchip/vehicle/vehicle_generic_sensor.c @@ -285,6 +285,12 @@ int vehicle_parse_sensor(struct vehicle_ad_dev *ad) if (of_property_read_u32(cp, "mclk_rate", &ad->mclk_rate)) VEHICLE_DGERR("Get %s mclk_rate failed!\n", cp->name); + if (of_property_read_u32(cp, "drop_frames", + &ad->drop_frames)) { + VEHICLE_DGERR("%s:Get sensor, drop-frames failed!\n", __func__); + ad->drop_frames = 0; //default drop frames; + } + if (of_property_read_u32(cp, "rst_active", &ad->rst_active)) VEHICLE_DGERR("Get %s rst_active failed!", cp->name);