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 */