libdrm_meson: add cvbs video mute api [1/1]
PD#OTT-58416
Problem:
add cvbs video mute api
Solution:
add cvbs video mute api
Verify:
kernel5.15-AH212
Change-Id: I4c37dc3cd9ec59c6addd80dcab21e24e8625102a
Signed-off-by: chen.wang1 <chen.wang1@amlogic.com>
diff --git a/meson/libdrm_meson_connector.h b/meson/libdrm_meson_connector.h
index cecd8fd..b09a468 100644
--- a/meson/libdrm_meson_connector.h
+++ b/meson/libdrm_meson_connector.h
@@ -17,6 +17,7 @@
#include <unistd.h>
#include <xf86drmMode.h>
#define MESON_DRM_HDMITX_PROP_AVMUTE "MESON_DRM_HDMITX_PROP_AVMUTE"
+#define MESON_DRM_CVBS_PROP_AVMUTE "cvbs_video_mute"
#define MESON_DRM_HDMITX_PROP_EOTF "EOTF"
#define DRM_CONNECTOR_PROP_CONTENT_PROTECTION "Content Protection"
#define DRM_CONNECTOR_PROP_CONTENT_TYPE "HDCP Content Type"
diff --git a/meson/meson_drm_settings.c b/meson/meson_drm_settings.c
index 0e38b98..247d655 100644
--- a/meson/meson_drm_settings.c
+++ b/meson/meson_drm_settings.c
@@ -1214,6 +1214,11 @@
strcpy(propName,DRM_CONNECTOR_DV_MODE);
break;
}
+ case ENUM_MESON_DRM_CVBS_PROP_AVMUTE:
+ {
+ strcpy(propName, MESON_DRM_CVBS_PROP_AVMUTE);
+ break;
+ }
default:
break;
}
@@ -1471,6 +1476,47 @@
return ret;
}
+int meson_drm_setCvbsAVMute(int drmFd, drmModeAtomicReq *req,
+ bool mute, MESON_CONNECTOR_TYPE connType)
+{
+ int ret = -1;
+ int rc = -1;
+ struct mesonConnector* conn = NULL;
+ uint32_t connId = 0;
+ if ( drmFd < 0 || req == NULL) {
+ ERROR(" %s %d invalid parameter return",__FUNCTION__,__LINE__);
+ return ret;
+ }
+ conn = get_current_connector(drmFd, connType);
+ if (conn) {
+ DEBUG("%s %d get current connector success",__FUNCTION__,__LINE__);
+ connId = mesonConnectorGetId(conn);
+ rc = meson_drm_set_property(drmFd, req, connId, DRM_MODE_OBJECT_CONNECTOR,
+ MESON_DRM_CVBS_PROP_AVMUTE, (uint64_t)mute);
+ mesonConnectorDestroy(drmFd,conn);
+ }
+ if (rc >= 0)
+ ret = 0;
+ DEBUG(" %s %d set cvbs mute %d",__FUNCTION__,__LINE__, mute);
+ return ret;
+}
+
+int meson_drm_getCvbsAVMute( int drmFd, MESON_CONNECTOR_TYPE connType )
+{
+ char propName[PROP_NAME_MAX_LEN] = {'\0'};
+ sprintf( propName, "%s", MESON_DRM_CVBS_PROP_AVMUTE);
+ uint32_t value = 0;
+ if ( drmFd < 0) {
+ ERROR("%s %d drmFd < 0",__FUNCTION__,__LINE__);
+ return value;
+ }
+ if ( 0 != meson_drm_get_conn_prop_value( drmFd, connType, propName, &value )) {
+ ERROR("%s %d get connector property value fail",__FUNCTION__,__LINE__);
+ }
+ DEBUG("%s %d get cvbs video mute property %d",__FUNCTION__,__LINE__,value);
+ return value;
+}
+
int meson_drm_getRxSupportedHdcpVersion( int drmFd, MESON_CONNECTOR_TYPE connType )
{
char propName[PROP_NAME_MAX_LEN] = {'\0'};
@@ -1494,4 +1540,3 @@
return prop_value;
}
-
diff --git a/meson/meson_drm_settings.h b/meson/meson_drm_settings.h
index 7d691e7..64f5de1 100644
--- a/meson/meson_drm_settings.h
+++ b/meson/meson_drm_settings.h
@@ -43,7 +43,8 @@
ENUM_MESON_DRM_PROP_VRR_ENABLED,
ENUM_MESON_DRM_PROP_ASPECT_RATIO,
ENUM_MESON_DRM_PROP_TX_HDR_OFF,
- ENUM_MESON_DRM_PROP_DV_MODE
+ ENUM_MESON_DRM_PROP_DV_MODE,
+ ENUM_MESON_DRM_CVBS_PROP_AVMUTE
} ENUM_MESON_DRM_PROP_NAME;
struct video_zpos {
@@ -217,6 +218,9 @@
int meson_drm_getPhysicalSize(int drmFd, uint32_t* width, uint32_t* height, MESON_CONNECTOR_TYPE connType);
int meson_drm_getSignalTimingInfo(int drmFd, uint16_t* htotal, uint16_t* vtotal, uint16_t* hstart,
uint16_t* vstart, MESON_CONNECTOR_TYPE connType);
+int meson_drm_setCvbsAVMute(int drmFd, drmModeAtomicReq *req,bool mute, MESON_CONNECTOR_TYPE connType);
+int meson_drm_getCvbsAVMute( int drmFd, MESON_CONNECTOR_TYPE connType );
+
int meson_drm_getRxSupportedHdcpVersion( int drmFd, MESON_CONNECTOR_TYPE connType );
int meson_open_drm();
diff --git a/meson/meson_drm_settings_test.c b/meson/meson_drm_settings_test.c
index 408518a..bf6e3b2 100644
--- a/meson/meson_drm_settings_test.c
+++ b/meson/meson_drm_settings_test.c
@@ -33,7 +33,7 @@
" 11.prefer mode 12.HDCP Content Type 13.Content Type 14.Dv Enable 15.active "
" 16.vrr Enable 17.AVMute 18.Hdrcap 19.DvCap 20.default modeInfo 21.current aspect ratio value"
" 22.frac rate policy 23.hdr force mode 24.dpms status 25.plane size 26.physical size"
- " 27.Timing information 28.dv mode 29.Rx supported HDCP versions\n");
+ " 27.Timing information 28.dv mode 29.Rx supported HDCP versions 30.cvbs video mute\n");
int get = 0;
int drmFd = meson_open_drm();
int len = scanf("%d", &get);
@@ -245,12 +245,16 @@
printf("\n meson_drm_get_prop fail\n");
}
}
+ } else if (get == 30 && len == 1) {
+ int value = meson_drm_getCvbsAVMute( drmFd, MESON_CONNECTOR_CVBS );
+ printf("\n cvbs video mute value: %d\n",value);
}
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 8.plane mute 9.aspect ratio"
- " 10.frac rate policy 11.hdr force mode 12.dv mode 13.background color\n");
+ " 10.frac rate policy 11.hdr force mode 12.dv mode 13.background color"
+ " 14.cvbs video mute\n");
int set = 0;
int ret = -1;
drmModeAtomicReq * req;
@@ -416,6 +420,16 @@
} else {
printf("\n scanf fail\n");
}
+ } else if(set == 14 && len == 1){
+ printf("\n cvbs video mute:\n");
+ int mute = 0;
+ len = scanf("%d", &mute);
+ if (len == 1) {
+ if (meson_drm_setCvbsAVMute(drmFd, req,mute, MESON_CONNECTOR_CVBS))
+ printf("\n meson_drm_setCvbsAVMute fail\n");
+ } else {
+ printf("\n scanf fail\n");
+ }
}
ret = drmModeAtomicCommit(drmFd, req, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
if (ret) {