brcm2708: update to latest patches from RPi foundation
[openwrt/openwrt.git] / target / linux / brcm2708 / patches-4.19 / 950-0238-staging-vc04_services-Support-sending-data-to-MMAL-p.patch
diff --git a/target/linux/brcm2708/patches-4.19/950-0238-staging-vc04_services-Support-sending-data-to-MMAL-p.patch b/target/linux/brcm2708/patches-4.19/950-0238-staging-vc04_services-Support-sending-data-to-MMAL-p.patch
new file mode 100644 (file)
index 0000000..9688bc8
--- /dev/null
@@ -0,0 +1,42 @@
+From 483bef9dcddc4bcb9f4e250d91b31361a919b7ed Mon Sep 17 00:00:00 2001
+From: Dave Stevenson <dave.stevenson@raspberrypi.org>
+Date: Mon, 24 Sep 2018 18:26:02 +0100
+Subject: [PATCH] staging: vc04_services: Support sending data to MMAL
+ ports
+
+Add the ability to send data to ports. This only supports
+zero copy mode as the required bulk transfer setup calls
+are not done.
+
+Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
+---
+ .../vc04_services/vchiq-mmal/mmal-vchiq.c      | 18 +++++++++++++-----
+ 1 file changed, 13 insertions(+), 5 deletions(-)
+
+--- a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
++++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
+@@ -428,11 +428,19 @@ buffer_from_host(struct vchiq_mmal_insta
+       m.u.buffer_from_host.buffer_header.data =
+               (u32)(unsigned long)buf->buffer;
+       m.u.buffer_from_host.buffer_header.alloc_size = buf->buffer_size;
+-      m.u.buffer_from_host.buffer_header.length = 0;  /* nothing used yet */
+-      m.u.buffer_from_host.buffer_header.offset = 0;  /* no offset */
+-      m.u.buffer_from_host.buffer_header.flags = 0;   /* no flags */
+-      m.u.buffer_from_host.buffer_header.pts = MMAL_TIME_UNKNOWN;
+-      m.u.buffer_from_host.buffer_header.dts = MMAL_TIME_UNKNOWN;
++      if (port->type == MMAL_PORT_TYPE_OUTPUT) {
++              m.u.buffer_from_host.buffer_header.length = 0;
++              m.u.buffer_from_host.buffer_header.offset = 0;
++              m.u.buffer_from_host.buffer_header.flags = 0;
++              m.u.buffer_from_host.buffer_header.pts = MMAL_TIME_UNKNOWN;
++              m.u.buffer_from_host.buffer_header.dts = MMAL_TIME_UNKNOWN;
++      } else {
++              m.u.buffer_from_host.buffer_header.length = buf->length;
++              m.u.buffer_from_host.buffer_header.offset = 0;
++              m.u.buffer_from_host.buffer_header.flags = buf->mmal_flags;
++              m.u.buffer_from_host.buffer_header.pts = buf->pts;
++              m.u.buffer_from_host.buffer_header.dts = buf->dts;
++      }
+       /* clear buffer type sepecific data */
+       memset(&m.u.buffer_from_host.buffer_header_type_specific, 0,