diff options
author | Álvaro Fernández Rojas <noltari@gmail.com> | 2016-12-02 11:50:26 +0100 |
---|---|---|
committer | Álvaro Fernández Rojas <noltari@gmail.com> | 2016-12-04 12:32:04 +0100 |
commit | 011f2c26f1b62e309f2eac6a3101bfe0a3c76c7e (patch) | |
tree | be53d4f11f7625508ee3aea9889e854ab5b5f263 /target/linux/brcm2708/patches-4.4/0374-BCM2835-V4L2-Correct-handling-for-BGR24-vs-RGB24.patch | |
parent | 4257f6548b9480cdb436115b63d5c134c5e91303 (diff) | |
download | upstream-011f2c26f1b62e309f2eac6a3101bfe0a3c76c7e.tar.gz upstream-011f2c26f1b62e309f2eac6a3101bfe0a3c76c7e.tar.bz2 upstream-011f2c26f1b62e309f2eac6a3101bfe0a3c76c7e.zip |
brcm2708: update linux 4.4 patches to latest version
As usual these patches were extracted and rebased from the raspberry pi repo:
https://github.com/raspberrypi/linux/tree/rpi-4.4.y
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Diffstat (limited to 'target/linux/brcm2708/patches-4.4/0374-BCM2835-V4L2-Correct-handling-for-BGR24-vs-RGB24.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.4/0374-BCM2835-V4L2-Correct-handling-for-BGR24-vs-RGB24.patch | 170 |
1 files changed, 0 insertions, 170 deletions
diff --git a/target/linux/brcm2708/patches-4.4/0374-BCM2835-V4L2-Correct-handling-for-BGR24-vs-RGB24.patch b/target/linux/brcm2708/patches-4.4/0374-BCM2835-V4L2-Correct-handling-for-BGR24-vs-RGB24.patch deleted file mode 100644 index 2b262f27f1..0000000000 --- a/target/linux/brcm2708/patches-4.4/0374-BCM2835-V4L2-Correct-handling-for-BGR24-vs-RGB24.patch +++ /dev/null @@ -1,170 +0,0 @@ -From 1fa221e0909bc0052bdc8b458fb31e8a088e7723 Mon Sep 17 00:00:00 2001 -From: Dave Stevenson <6by9@users.noreply.github.com> -Date: Wed, 25 May 2016 23:25:36 +0100 -Subject: [PATCH] BCM2835-V4L2: Correct handling for BGR24 vs RGB24. - -There was a bug in the GPU firmware that had reversed these -two formats. -Detect the old firmware, and reverse the formats if necessary. - -Signed-off-by: Dave Stevenson <6by9@users.noreply.github.com> ---- - drivers/media/platform/bcm2835/bcm2835-camera.c | 69 ++++++++++++++++++------- - drivers/media/platform/bcm2835/bcm2835-camera.h | 1 + - 2 files changed, 52 insertions(+), 18 deletions(-) - ---- a/drivers/media/platform/bcm2835/bcm2835-camera.c -+++ b/drivers/media/platform/bcm2835/bcm2835-camera.c -@@ -115,7 +115,7 @@ static struct mmal_fmt formats[] = { - .name = "RGB24 (LE)", - .fourcc = V4L2_PIX_FMT_RGB24, - .flags = 0, -- .mmal = MMAL_ENCODING_BGR24, -+ .mmal = MMAL_ENCODING_RGB24, - .depth = 24, - .mmal_component = MMAL_COMPONENT_CAMERA, - .ybbp = 3, -@@ -187,7 +187,7 @@ static struct mmal_fmt formats[] = { - .name = "RGB24 (BE)", - .fourcc = V4L2_PIX_FMT_BGR24, - .flags = 0, -- .mmal = MMAL_ENCODING_RGB24, -+ .mmal = MMAL_ENCODING_BGR24, - .depth = 24, - .mmal_component = MMAL_COMPONENT_CAMERA, - .ybbp = 3, -@@ -1059,6 +1059,13 @@ static int mmal_setup_components(struct - else - camera_port->format.encoding = mfmt->mmal; - -+ if (dev->rgb_bgr_swapped) { -+ if (camera_port->format.encoding == MMAL_ENCODING_RGB24) -+ camera_port->format.encoding = MMAL_ENCODING_BGR24; -+ else if (camera_port->format.encoding == MMAL_ENCODING_BGR24) -+ camera_port->format.encoding = MMAL_ENCODING_RGB24; -+ } -+ - camera_port->format.encoding_variant = 0; - camera_port->es.video.width = f->fmt.pix.width; - camera_port->es.video.height = f->fmt.pix.height; -@@ -1569,12 +1576,17 @@ static int set_camera_parameters(struct - return ret; - } - -+#define MAX_SUPPORTED_ENCODINGS 20 -+ - /* MMAL instance and component init */ - static int __init mmal_init(struct bm2835_mmal_dev *dev) - { - int ret; - struct mmal_es_format *format; - u32 bool_true = 1; -+ u32 supported_encodings[MAX_SUPPORTED_ENCODINGS]; -+ int param_size; -+ struct vchiq_mmal_component *camera; - - ret = vchiq_mmal_init(&dev->instance); - if (ret < 0) -@@ -1586,21 +1598,48 @@ static int __init mmal_init(struct bm283 - if (ret < 0) - goto unreg_mmal; - -- if (dev->component[MMAL_COMPONENT_CAMERA]->outputs < -- MMAL_CAMERA_PORT_COUNT) { -+ camera = dev->component[MMAL_COMPONENT_CAMERA]; -+ if (camera->outputs < MMAL_CAMERA_PORT_COUNT) { - ret = -EINVAL; - goto unreg_camera; - } - - ret = set_camera_parameters(dev->instance, -- dev->component[MMAL_COMPONENT_CAMERA], -+ camera, - dev); - if (ret < 0) - goto unreg_camera; - -- format = -- &dev->component[MMAL_COMPONENT_CAMERA]-> -- output[MMAL_CAMERA_PORT_PREVIEW].format; -+ /* There was an error in the firmware that meant the camera component -+ * produced BGR instead of RGB. -+ * This is now fixed, but in order to support the old firmwares, we -+ * have to check. -+ */ -+ dev->rgb_bgr_swapped = true; -+ param_size = sizeof(supported_encodings); -+ ret = vchiq_mmal_port_parameter_get(dev->instance, -+ &camera->output[MMAL_CAMERA_PORT_CAPTURE], -+ MMAL_PARAMETER_SUPPORTED_ENCODINGS, -+ &supported_encodings, -+ ¶m_size); -+ if (ret == 0) { -+ int i; -+ -+ for (i = 0; i < param_size/sizeof(u32); i++) { -+ if (supported_encodings[i] == MMAL_ENCODING_BGR24) { -+ /* Found BGR24 first - old firmware. */ -+ break; -+ } -+ if (supported_encodings[i] == MMAL_ENCODING_RGB24) { -+ /* Found RGB24 first -+ * new firmware, so use RGB24. -+ */ -+ dev->rgb_bgr_swapped = false; -+ break; -+ } -+ } -+ } -+ format = &camera->output[MMAL_CAMERA_PORT_PREVIEW].format; - - format->encoding = MMAL_ENCODING_OPAQUE; - format->encoding_variant = MMAL_ENCODING_I420; -@@ -1614,9 +1653,7 @@ static int __init mmal_init(struct bm283 - format->es->video.frame_rate.num = 0; /* Rely on fps_range */ - format->es->video.frame_rate.den = 1; - -- format = -- &dev->component[MMAL_COMPONENT_CAMERA]-> -- output[MMAL_CAMERA_PORT_VIDEO].format; -+ format = &camera->output[MMAL_CAMERA_PORT_VIDEO].format; - - format->encoding = MMAL_ENCODING_OPAQUE; - format->encoding_variant = MMAL_ENCODING_I420; -@@ -1631,14 +1668,11 @@ static int __init mmal_init(struct bm283 - format->es->video.frame_rate.den = 1; - - vchiq_mmal_port_parameter_set(dev->instance, -- &dev->component[MMAL_COMPONENT_CAMERA]-> -- output[MMAL_CAMERA_PORT_VIDEO], -+ &camera->output[MMAL_CAMERA_PORT_VIDEO], - MMAL_PARAMETER_NO_IMAGE_PADDING, - &bool_true, sizeof(bool_true)); - -- format = -- &dev->component[MMAL_COMPONENT_CAMERA]-> -- output[MMAL_CAMERA_PORT_CAPTURE].format; -+ format = &camera->output[MMAL_CAMERA_PORT_CAPTURE].format; - - format->encoding = MMAL_ENCODING_OPAQUE; - -@@ -1660,8 +1694,7 @@ static int __init mmal_init(struct bm283 - dev->capture.enc_level = V4L2_MPEG_VIDEO_H264_LEVEL_4_0; - - vchiq_mmal_port_parameter_set(dev->instance, -- &dev->component[MMAL_COMPONENT_CAMERA]-> -- output[MMAL_CAMERA_PORT_CAPTURE], -+ &camera->output[MMAL_CAMERA_PORT_CAPTURE], - MMAL_PARAMETER_NO_IMAGE_PADDING, - &bool_true, sizeof(bool_true)); - ---- a/drivers/media/platform/bcm2835/bcm2835-camera.h -+++ b/drivers/media/platform/bcm2835/bcm2835-camera.h -@@ -109,6 +109,7 @@ struct bm2835_mmal_dev { - unsigned int camera_num; - unsigned int max_width; - unsigned int max_height; -+ unsigned int rgb_bgr_swapped; - }; - - int bm2835_mmal_init_controls( |