drm: add mute plane interface [2/3]

PD#SWPL-143936

Problem:
show or hide video does not work

Solution:
add mute plane interface

Verify:
ap222

Test:
DRM-OSD-111

Change-Id: Ib7dd3d7f4c4ca355ac27729be83921428d19fa2a
Signed-off-by: linfang.zhao <linfang.zhao@amlogic.com>
diff --git a/meson/meson_drm_settings.c b/meson/meson_drm_settings.c
index 5a847e9..3835dfa 100644
--- a/meson/meson_drm_settings.c
+++ b/meson/meson_drm_settings.c
@@ -1013,3 +1013,22 @@
     }
     return ret;
 }

+

+int meson_drm_setPlaneMute(int drmFd, unsigned int plane_type, unsigned int plane_mute)

+{

+    int ret = -1;

+    struct drm_meson_plane_mute plane_info;

+    if (drmFd < 0) {

+        ERROR("%s  %d drmFd < 0",__FUNCTION__,__LINE__);

+        return ret;

+    }

+

+    plane_info.plane_type = plane_type;

+    plane_info.plane_mute = plane_mute;

+    ret = drmIoctl(drmFd, DRM_IOCTL_MESON_MUTE_PLANE, &plane_info);

+    if (ret)

+        ERROR("\n failed to mute plane[%s].\n",strerror(errno));

+

+    return ret;

+}

+

diff --git a/meson/meson_drm_settings.h b/meson/meson_drm_settings.h
index bc8eb38..ba57595 100644
--- a/meson/meson_drm_settings.h
+++ b/meson/meson_drm_settings.h
@@ -159,6 +159,7 @@
 int meson_drm_getHdrCap( int drmFd, MESON_CONNECTOR_TYPE connType );
 int meson_drm_getDvCap( int drmFd, MESON_CONNECTOR_TYPE connType );
 int meson_drm_setVideoZorder(int drmFd, unsigned int index, unsigned int zorder, unsigned int flag);

+int meson_drm_setPlaneMute(int drmFd, unsigned int plane_type, unsigned int plane_mute);

 
 int meson_open_drm();
 void meson_close_drm(int drmFd);
diff --git a/meson/meson_drm_settings_test.c b/meson/meson_drm_settings_test.c
index 5efb491..0c776d4 100644
--- a/meson/meson_drm_settings_test.c
+++ b/meson/meson_drm_settings_test.c
@@ -161,7 +161,7 @@
         meson_close_drm(drmFd);
     } else if (select_s_g == 0 && select_len == 1) {
         printf("set value:1.av mute 2.HDMI HDCP enable  3.HDCP Content Type "
-             " 4.DvEnable 5.active 6.vrr Enable 7.video zorder \n");
+             " 4.DvEnable 5.active 6.vrr Enable 7.video zorder 8.plane mute\n");
         int set = 0;
         int ret = -1;
         drmModeAtomicReq * req;
@@ -250,6 +250,18 @@
                 } else {
                     printf("\n \ scanf fail \n");
                 }
+        } else if (set == 8 && len == 1) {
+            printf("\n please enter the parameters in order(plane_type plane_mute): \n");
+            int plane_type = 0;
+            int plane_mute = 0;
+            len = scanf("%d %d",&plane_type,&plane_mute);
+            if (len == 2) {
+                int ret = meson_drm_setPlaneMute(drmFd, plane_type, plane_mute);
+                if (ret)
+                    printf("\n meson_drm_setPlaneMute fail:\n");
+            } else {
+                    printf("\n \ scanf fail \n");
+            }
         }
         ret = drmModeAtomicCommit(drmFd, req, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
         if (ret) {
diff --git a/meson_drm.h b/meson_drm.h
index e7ce079..96c46bd 100644
--- a/meson_drm.h
+++ b/meson_drm.h
@@ -37,11 +37,16 @@
 	__u32 handle;
 };
 
-struct drm_meson_video_zpos_target {
+struct drm_meson_video_zpos_target {

 	__u32 index;
 	__u32 zpos;
 	__u32 flag;
 };
+

+struct drm_meson_plane_mute {

+	int plane_type; /* 0:osd plane, 1:video plane */

+	int plane_mute; /* 0:umute plane, 1:mute plane */

+};

 
 /*Memory related.*/
 #define DRM_IOCTL_MESON_GEM_CREATE		DRM_IOWR(DRM_COMMAND_BASE + \
@@ -52,8 +57,10 @@
 /*KMS related.*/
 #define DRM_IOCTL_MESON_ASYNC_ATOMIC	DRM_IOWR(DRM_COMMAND_BASE + \
 		0x10, struct drm_mode_atomic)
-
+

 #define DRM_IOCTL_MESON_SET_VIDEO_ZPOS		DRM_IOWR(DRM_COMMAND_BASE + \
 		0x11, struct drm_meson_video_zpos_target)
+#define DRM_IOCTL_MESON_MUTE_PLANE	DRM_IOWR(DRM_COMMAND_BASE + \

+		0x12, struct drm_meson_plane_mute)

 

 #endif /* _MESON_DRM_H */