libdrm_meson: provide a display interface to set the BkgrdColor [1/1]

PD#OTT-57773

Problem:
provide a display interface to set the BkgrdColor

Solution:
provide a display interface to set the BkgrdColor

Verify:
BG201

Change-Id: I20986fb6d70fab72cb25314c45bcc64c55e90478
Signed-off-by: chen.wang1 <chen.wang1@amlogic.com>
diff --git a/meson/libdrm_meson_connector.h b/meson/libdrm_meson_connector.h
index f502434..cecd8fd 100644
--- a/meson/libdrm_meson_connector.h
+++ b/meson/libdrm_meson_connector.h
@@ -39,6 +39,7 @@
 #define DRM_CONNECTOR_PROP_TX_HDR_OFF      "force_output"
 #define DRM_CONNECTOR_DV_MODE       "dv_mode"
 #define DRM_CONNECTOR_PROP_DPMS       "DPMS"
+#define DRM_CONNECTOR_PROP_BACKGROUND_COLOR     "BACKGROUND_COLOR"
 
 struct mesonPrimaryPlane;
 struct mesonConnector;
diff --git a/meson/meson_drm_settings.c b/meson/meson_drm_settings.c
index 821366f..0e38b98 100644
--- a/meson/meson_drm_settings.c
+++ b/meson/meson_drm_settings.c
@@ -1360,6 +1360,30 @@
     return value;
 }
 
+int meson_drm_setBackGroundColor(int drmFd, drmModeAtomicReq *req, uint64_t backgroundColor,
+                           MESON_CONNECTOR_TYPE connType) {
+    int ret = -1;
+    int rc = -1;
+    struct mesonConnector* conn = NULL;
+    uint32_t crtcId = 0;
+    DEBUG("%s %d set background current color %llx",__FUNCTION__,__LINE__,backgroundColor);
+    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__);
+        crtcId = mesonConnectorGetCRTCId(conn);
+        rc = meson_drm_set_property(drmFd, req, crtcId, DRM_MODE_OBJECT_CRTC,
+                       DRM_CONNECTOR_PROP_BACKGROUND_COLOR, backgroundColor);
+        mesonConnectorDestroy(drmFd,conn);
+    }
+    if (rc >= 0)
+        ret = 0;
+    return ret;
+}
+
 int meson_drm_getGraphicPlaneSize(int drmFd, uint32_t* width, uint32_t* height) {
     int ret = -1;
     struct mesonPrimaryPlane* planesize = NULL;
diff --git a/meson/meson_drm_settings.h b/meson/meson_drm_settings.h
index 55e038b..7d691e7 100644
--- a/meson/meson_drm_settings.h
+++ b/meson/meson_drm_settings.h
@@ -212,6 +212,8 @@
 int meson_drm_setDvMode(int drmFd, drmModeAtomicReq *req, int dvMode, MESON_CONNECTOR_TYPE connType);
 int meson_drm_getDvMode( int drmFd, MESON_CONNECTOR_TYPE connType );
 int meson_drm_getGraphicPlaneSize(int drmFd, uint32_t* width, uint32_t* height);
+int meson_drm_setBackGroundColor(int drmFd, drmModeAtomicReq *req,uint64_t backgroundColor,
+                                  MESON_CONNECTOR_TYPE connType);
 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);
diff --git a/meson/meson_drm_settings_test.c b/meson/meson_drm_settings_test.c
index ebdf389..408518a 100644
--- a/meson/meson_drm_settings_test.c
+++ b/meson/meson_drm_settings_test.c
@@ -250,7 +250,7 @@
     } 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\n");
+        " 10.frac rate policy 11.hdr force mode 12.dv mode 13.background color\n");
         int set = 0;
         int ret = -1;
         drmModeAtomicReq * req;
@@ -402,6 +402,20 @@
                 } else {
                     printf("\n scanf fail\n");
                 }
+        } else if (set == 13 && len == 1) {
+            printf("\n please input backgroundColor:\n");
+            uint64_t backgroundColor = 0;
+            len = scanf("%llx", &backgroundColor);
+            printf("\n backgroundColor %llu\n",backgroundColor);
+            if (len == 1) {
+                if (meson_drm_setBackGroundColor( drmFd, req, backgroundColor, MESON_CONNECTOR_HDMIA)) {
+                    printf("\n meson_drm_setBackGroundColor fail\n");
+                } else {
+                    printf("\n meson_drm_setBackGroundColor SUCCESS\n");
+                }
+             } else {
+                printf("\n scanf fail\n");
+             }
         }
         ret = drmModeAtomicCommit(drmFd, req, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
         if (ret) {