]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: renesas: vsp1: Fix media bus code setup on RWPF source pad
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Tue, 29 Apr 2025 23:28:59 +0000 (02:28 +0300)
committerHans Verkuil <hverkuil@xs4all.nl>
Fri, 2 May 2025 08:16:44 +0000 (10:16 +0200)
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>
drivers/media/platform/renesas/vsp1/vsp1_rwpf.c

index 9d38203e73d00b82a1a7db0353e2f0b5a94084f6..1b4bac7b7cfa1c8e8a876f9035fb2eb96b7ee43e 100644 (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;
        }