From 6c493994f59428c672b0ee7fcfe79a263d4a8ac4 Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Tue, 19 May 2020 11:46:47 +0100 Subject: [PATCH] media: bcm2835-unicam: Retain packing information on G_FMT raspberrypi inclusion category: feature bugzilla: 50432 -------------------------------- The change to retrieve the pixel format always on g_fmt didn't check whether the native or unpacked version of the format had been requested, and always returned the packed one. Correct this so that the packing setting is retained whereever possible. Fixes "9d59e89 media: bcm2835-unicam: Re-fetch mbus code from subdev on a g_fmt call" Signed-off-by: Dave Stevenson Signed-off-by: Fang Yafen Signed-off-by: Zheng Zengkai --- .../media/platform/bcm2835/bcm2835-unicam.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/bcm2835/bcm2835-unicam.c b/drivers/media/platform/bcm2835/bcm2835-unicam.c index 7dc96c3e8e83..98ae97c367ea 100644 --- a/drivers/media/platform/bcm2835/bcm2835-unicam.c +++ b/drivers/media/platform/bcm2835/bcm2835-unicam.c @@ -980,8 +980,23 @@ static int unicam_g_fmt_vid_cap(struct file *file, void *priv, if (!fmt) return -EINVAL; - node->fmt = fmt; - node->v_fmt.fmt.pix.pixelformat = fmt->fourcc; + if (node->fmt != fmt) { + /* + * The sensor format has changed so the pixelformat needs to + * be updated. Try and retain the packed/unpacked choice if + * at all possible. + */ + if (node->fmt->repacked_fourcc == + node->v_fmt.fmt.pix.pixelformat) + /* Using the repacked format */ + node->v_fmt.fmt.pix.pixelformat = fmt->repacked_fourcc; + else + /* Using the native format */ + node->v_fmt.fmt.pix.pixelformat = fmt->fourcc; + + node->fmt = fmt; + } + *f = node->v_fmt; return 0; -- GitLab