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) {