aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.4/950-0918-staging-vc04_services-isp-Rework-lens-shading-to-tak.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-5.4/950-0918-staging-vc04_services-isp-Rework-lens-shading-to-tak.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.4/950-0918-staging-vc04_services-isp-Rework-lens-shading-to-tak.patch87
1 files changed, 87 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.4/950-0918-staging-vc04_services-isp-Rework-lens-shading-to-tak.patch b/target/linux/bcm27xx/patches-5.4/950-0918-staging-vc04_services-isp-Rework-lens-shading-to-tak.patch
new file mode 100644
index 0000000000..8748214797
--- /dev/null
+++ b/target/linux/bcm27xx/patches-5.4/950-0918-staging-vc04_services-isp-Rework-lens-shading-to-tak.patch
@@ -0,0 +1,87 @@
+From 7504f92483407233d9093e164d8f001db5c374e5 Mon Sep 17 00:00:00 2001
+From: Dave Stevenson <dave.stevenson@raspberrypi.com>
+Date: Fri, 8 May 2020 22:05:29 +0100
+Subject: [PATCH] staging: vc04_services: isp: Rework lens shading to
+ take a dmabuf
+
+This removes the need for the client to use vcsm at all.
+
+Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
+---
+ .../bcm2835-isp/bcm2835-v4l2-isp.c | 36 +++++++++++++++++--
+ include/uapi/linux/bcm2835-isp.h | 4 +--
+ 2 files changed, 35 insertions(+), 5 deletions(-)
+
+--- a/drivers/staging/vc04_services/bcm2835-isp/bcm2835-v4l2-isp.c
++++ b/drivers/staging/vc04_services/bcm2835-isp/bcm2835-v4l2-isp.c
+@@ -21,6 +21,8 @@
+ #include "vchiq-mmal/mmal-parameters.h"
+ #include "vchiq-mmal/mmal-vchiq.h"
+
++#include "vc-sm-cma/vc_sm_knl.h"
++
+ #include "bcm2835_isp_ctrls.h"
+ #include "bcm2835_isp_fmts.h"
+
+@@ -722,10 +724,38 @@ static int bcm2835_isp_s_ctrl(struct v4l
+ sizeof(struct bcm2835_isp_custom_ccm));
+ break;
+ case V4L2_CID_USER_BCM2835_ISP_LENS_SHADING:
+- ret = set_isp_param(node, MMAL_PARAMETER_LENS_SHADING_OVERRIDE,
+- ctrl->p_new.p_u8,
+- sizeof(struct bcm2835_isp_lens_shading));
++ {
++ struct bcm2835_isp_lens_shading ls;
++ struct dma_buf *dmabuf;
++ void *vcsm_handle;
++
++ memcpy(&ls, ctrl->p_new.p_u8,
++ sizeof(struct bcm2835_isp_lens_shading));
++
++ dmabuf = dma_buf_get(ls.dmabuf);
++ if (!dmabuf)
++ return -EINVAL;
++
++ ret = vc_sm_cma_import_dmabuf(dmabuf,
++ &vcsm_handle);
++ if (ret) {
++ dma_buf_put(dmabuf);
++ return -EINVAL;
++ }
++
++ ls.dmabuf = vc_sm_cma_int_handle(vcsm_handle);
++ if (ls.dmabuf)
++ ret = set_isp_param(node,
++ MMAL_PARAMETER_LENS_SHADING_OVERRIDE,
++ &ls,
++ sizeof(struct bcm2835_isp_lens_shading));
++ else
++ ret = -EINVAL;
++
++ vc_sm_cma_free(vcsm_handle);
++ dma_buf_put(dmabuf);
+ break;
++ }
+ case V4L2_CID_USER_BCM2835_ISP_BLACK_LEVEL:
+ ret = set_isp_param(node, MMAL_PARAMETER_BLACK_LEVEL,
+ ctrl->p_new.p_u8,
+--- a/include/uapi/linux/bcm2835-isp.h
++++ b/include/uapi/linux/bcm2835-isp.h
+@@ -108,7 +108,7 @@ enum bcm2835_isp_gain_format {
+ * @grid_stride: Row to row distance (in grid cells) between grid cells
+ * in the same horizontal location.
+ * @grid_height: Height of lens shading tables in grid cells.
+- * @mem_handle_table: Memory handle to the tables.
++ * @dmabuf: dmabuf file handle containing the table.
+ * @ref_transform: Reference transform - unsupported, please pass zero.
+ * @corner_sampled: Whether the gains are sampled at the corner points
+ * of the grid cells or in the cell centres.
+@@ -120,7 +120,7 @@ struct bcm2835_isp_lens_shading {
+ __u32 grid_width;
+ __u32 grid_stride;
+ __u32 grid_height;
+- __u32 mem_handle_table;
++ __s32 dmabuf;
+ __u32 ref_transform;
+ __u32 corner_sampled;
+ __u32 gain_format;