media: renesas: vsp1: Fix media bus code setup on RWPF source pad

The RWPF source pad media bus code can only be different from the sink
pad code when enabling color space conversion, which can only convert
between RGB and YUV. If the sink pad code is HSV, no conversion is
possible. Fix the pad set format handler to reflect this hardware
limitation.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>
Link: https://lore.kernel.org/r/20250429232904.26413-5-laurent.pinchart+renesas@ideasonboard.com
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
This commit is contained in:
Laurent Pinchart
2025-04-30 02:28:59 +03:00
committed by Hans Verkuil
parent 687dae9eed
commit b6e57605ef

View File

@@ -76,11 +76,20 @@ static int vsp1_rwpf_set_format(struct v4l2_subdev *subdev,
format = v4l2_subdev_state_get_format(state, fmt->pad);
if (fmt->pad == RWPF_PAD_SOURCE) {
const struct v4l2_mbus_framefmt *sink_format =
v4l2_subdev_state_get_format(state, RWPF_PAD_SINK);
/*
* The RWPF performs format conversion but can't scale, only the
* format code can be changed on the source pad.
* format code can be changed on the source pad when converting
* between RGB and YUV.
*/
format->code = fmt->format.code;
if (sink_format->code != MEDIA_BUS_FMT_AHSV8888_1X32 &&
fmt->format.code != MEDIA_BUS_FMT_AHSV8888_1X32)
format->code = fmt->format.code;
else
format->code = sink_format->code;
fmt->format = *format;
goto done;
}