minigbm: passthrough SENSOR_DIRECT_DATA via gbm frontend

BUG=b:238609372
TEST=vts -m VtsHalSensorsV2_1TargetTest

Change-Id: I37834f80d71e453e6e29b88198efc1584c109456
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/minigbm/+/3773926
Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org>
Commit-Queue: Jason Macnak <natsu@google.com>
Tested-by: Jason Macnak <natsu@google.com>
diff --git a/amdgpu.c b/amdgpu.c
index 4d86e1f..5c891de 100644
--- a/amdgpu.c
+++ b/amdgpu.c
@@ -425,7 +425,8 @@
 	 */
 	drv_modify_combination(drv, DRM_FORMAT_R8, &metadata,
 			       BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE | BO_USE_HW_VIDEO_DECODER |
-				   BO_USE_HW_VIDEO_ENCODER | BO_USE_GPU_DATA_BUFFER);
+				   BO_USE_HW_VIDEO_ENCODER | BO_USE_GPU_DATA_BUFFER |
+				   BO_USE_SENSOR_DIRECT_DATA);
 
 	/*
 	 * The following formats will be allocated by the DRI backend and may be potentially tiled.
diff --git a/dumb_driver.c b/dumb_driver.c
index bbe6fce..f337e8b 100644
--- a/dumb_driver.c
+++ b/dumb_driver.c
@@ -41,7 +41,7 @@
 	drv_modify_combination(drv, DRM_FORMAT_R8, &LINEAR_METADATA,
 			       BO_USE_HW_VIDEO_ENCODER | BO_USE_HW_VIDEO_DECODER |
 				   BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE |
-				   BO_USE_GPU_DATA_BUFFER);
+				   BO_USE_GPU_DATA_BUFFER | BO_USE_SENSOR_DIRECT_DATA);
 	drv_modify_combination(drv, DRM_FORMAT_NV12, &LINEAR_METADATA,
 			       BO_USE_HW_VIDEO_ENCODER | BO_USE_HW_VIDEO_DECODER |
 				   BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE);
diff --git a/gbm.h b/gbm.h
index cbfffdd..7fae11c 100644
--- a/gbm.h
+++ b/gbm.h
@@ -300,6 +300,11 @@
     * object.
     */
    GBM_BO_USE_GPU_DATA_BUFFER = (1 << 18),
+
+   /**
+    * The buffer will be used as a sensor direct report output.
+    */
+   GBM_BO_USE_SENSOR_DIRECT_DATA = (1 << 19),
 };
 
 int
diff --git a/gbm_helpers.c b/gbm_helpers.c
index 0eed886..e5bcb40 100644
--- a/gbm_helpers.c
+++ b/gbm_helpers.c
@@ -48,6 +48,8 @@
 		use_flags |= BO_USE_FRONT_RENDERING;
 	if (usage & GBM_BO_USE_GPU_DATA_BUFFER)
 		use_flags |= BO_USE_GPU_DATA_BUFFER;
+	if (usage & GBM_BO_USE_SENSOR_DIRECT_DATA)
+		use_flags |= BO_USE_SENSOR_DIRECT_DATA;
 
 	return use_flags;
 }
diff --git a/i915.c b/i915.c
index d2b3d19..9eae9aa 100644
--- a/i915.c
+++ b/i915.c
@@ -235,7 +235,8 @@
 	 */
 	drv_modify_combination(drv, DRM_FORMAT_R8, &metadata_linear,
 			       BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE | BO_USE_HW_VIDEO_DECODER |
-				   BO_USE_HW_VIDEO_ENCODER | BO_USE_GPU_DATA_BUFFER);
+				   BO_USE_HW_VIDEO_ENCODER | BO_USE_GPU_DATA_BUFFER |
+				   BO_USE_SENSOR_DIRECT_DATA);
 
 	const uint64_t render_not_linear = unset_flags(render, linear_mask);
 	const uint64_t scanout_and_render_not_linear = render_not_linear | BO_USE_SCANOUT;
diff --git a/mediatek.c b/mediatek.c
index 34ffa13..ccf0131 100644
--- a/mediatek.c
+++ b/mediatek.c
@@ -110,7 +110,7 @@
 	drv_modify_combination(drv, DRM_FORMAT_R8, &metadata,
 			       BO_USE_HW_VIDEO_DECODER | BO_USE_HW_VIDEO_ENCODER |
 				   BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE |
-				   BO_USE_GPU_DATA_BUFFER);
+				   BO_USE_GPU_DATA_BUFFER | BO_USE_SENSOR_DIRECT_DATA);
 
 	/* NV12 format for encoding and display. */
 	drv_modify_combination(drv, DRM_FORMAT_NV12, &metadata,
diff --git a/msm.c b/msm.c
index 93a5cb4..27f85d9 100644
--- a/msm.c
+++ b/msm.c
@@ -260,7 +260,8 @@
 	 */
 	drv_modify_combination(drv, DRM_FORMAT_R8, &LINEAR_METADATA,
 			       BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE | BO_USE_HW_VIDEO_DECODER |
-				   BO_USE_HW_VIDEO_ENCODER | BO_USE_GPU_DATA_BUFFER);
+				   BO_USE_HW_VIDEO_ENCODER | BO_USE_GPU_DATA_BUFFER |
+				   BO_USE_SENSOR_DIRECT_DATA);
 
 	/*
 	 * Android also frequently requests YV12 formats for some camera implementations
diff --git a/rockchip.c b/rockchip.c
index 3ccfe45..17478f3 100644
--- a/rockchip.c
+++ b/rockchip.c
@@ -108,7 +108,7 @@
 	drv_add_combination(drv, DRM_FORMAT_R8, &metadata,
 			    BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE | BO_USE_SW_MASK |
 				BO_USE_LINEAR | BO_USE_HW_VIDEO_DECODER | BO_USE_HW_VIDEO_ENCODER |
-				BO_USE_GPU_DATA_BUFFER);
+				BO_USE_GPU_DATA_BUFFER | BO_USE_SENSOR_DIRECT_DATA);
 
 	return 0;
 }