mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 01:11:14 +00:00
62b7f5931c
bcm2708: boot tested on RPi B+ v1.2
bcm2709: boot tested on RPi 3B v1.2 and RPi 4B v1.1 4G
bcm2710: boot tested on RPi 3B v1.2
bcm2711: boot tested on RPi 4B v1.1 4G
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry-picked from commit f07e572f64
)
49 lines
1.5 KiB
Diff
49 lines
1.5 KiB
Diff
From bf722c887dd9d0d24493edd20c61b2fcde5f66dd Mon Sep 17 00:00:00 2001
|
|
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
|
Date: Tue, 19 May 2020 11:46:47 +0100
|
|
Subject: [PATCH] media: bcm2835-unicam: Retain packing information
|
|
on G_FMT
|
|
|
|
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 <dave.stevenson@raspberrypi.com>
|
|
---
|
|
.../media/platform/bcm2835/bcm2835-unicam.c | 19 +++++++++++++++++--
|
|
1 file changed, 17 insertions(+), 2 deletions(-)
|
|
|
|
--- a/drivers/media/platform/bcm2835/bcm2835-unicam.c
|
|
+++ b/drivers/media/platform/bcm2835/bcm2835-unicam.c
|
|
@@ -970,8 +970,23 @@ static int unicam_g_fmt_vid_cap(struct f
|
|
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;
|