diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index 2e2ccab3de4c..481498974537 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -4704,7 +4704,12 @@ static int rkcif_queue_setup(struct vb2_queue *queue, for (i = 0; i < cif_fmt->mplanes; i++) { const struct v4l2_plane_pix_format *plane_fmt; - int h = round_up(height, MEMORY_ALIGN_ROUND_UP_HEIGHT); + int h; + + if (dev->chip_id >= CHIP_RK3588_CIF && dev->terminal_sensor.hdmi_input_en) + h = height; + else + h = round_up(height, MEMORY_ALIGN_ROUND_UP_HEIGHT); plane_fmt = &pixm->plane_fmt[i]; sizes[i] = plane_fmt->sizeimage / height * h; @@ -6111,6 +6116,13 @@ int rkcif_update_sensor_info(struct rkcif_stream *stream) } else { terminal_sensor->dsi_mode = 0; } + if (v4l2_subdev_call(terminal_sensor->sd, core, ioctl, RKMODULE_GET_HDMI_MODE, + &terminal_sensor->hdmi_input_en)) { + v4l2_dbg(1, rkcif_debug, &stream->cifdev->v4l2_dev, + "%s: get terminal %s hdmiin, default!\n", + __func__, terminal_sensor->sd->name); + terminal_sensor->hdmi_input_en = 0; + } } else { v4l2_err(&stream->cifdev->v4l2_dev, "%s: stream[%d] get remote terminal sensor failed!\n", diff --git a/drivers/media/platform/rockchip/cif/dev.h b/drivers/media/platform/rockchip/cif/dev.h index 3219f7752b8a..a15e578549b6 100644 --- a/drivers/media/platform/rockchip/cif/dev.h +++ b/drivers/media/platform/rockchip/cif/dev.h @@ -227,6 +227,7 @@ struct rkcif_sensor_info { struct v4l2_subdev_selection selection; int dsi_input_en; int dsi_mode; + int hdmi_input_en; }; enum cif_fmt_type {