meson-display: add frac mode and frac rate policy API [1/1]
PD#SWPL-175406
Problem:
add frac mode and frac rate policy API
Solution:
add frac mode and frac rate policy API
Verify:
AH212.
Change-Id: Ic7675cd040297b6f83e945acd12c800d07a23962
Signed-off-by: chen.wang1 <chen.wang1@amlogic.com>
diff --git a/display_framework/src/extension/display_settings/display_settings.h b/display_framework/src/extension/display_settings/display_settings.h
index 9442a77..3a8bc12 100644
--- a/display_framework/src/extension/display_settings/display_settings.h
+++ b/display_framework/src/extension/display_settings/display_settings.h
@@ -174,7 +174,8 @@
int getDisplayPhysicalSize( int* width, int* height, DISPLAY_CONNECTOR_TYPE connType );
int getDisplaySignalTimingInfo(uint16_t* htotal, uint16_t* vtotal, uint16_t* hstart,
uint16_t* vstart, DISPLAY_CONNECTOR_TYPE connType);
-int setDisplayFracMode(int value, DISPLAY_CONNECTOR_TYPE connType);
+int setDisplayFracRatePolicy(int value, DISPLAY_CONNECTOR_TYPE connType);
+int setDisplayFracMode(DisplayModeInfo* modeInfo, int value, DISPLAY_CONNECTOR_TYPE connType);
int getDisplayCvbsAVMute( );
int setDisplayCvbsAVMute(bool mute);
int getDisplayIsBestMode(int* value);
diff --git a/display_framework/src/extension/display_settings/displayattribute/display_attribute.c b/display_framework/src/extension/display_settings/displayattribute/display_attribute.c
index 2915c6b..b76f5be 100644
--- a/display_framework/src/extension/display_settings/displayattribute/display_attribute.c
+++ b/display_framework/src/extension/display_settings/displayattribute/display_attribute.c
@@ -196,7 +196,7 @@
ERROR("%s %d get modeInfo fail",__FUNCTION__,__LINE__);
}
meson_close_drm(fd);
- DEBUG("%s %d modeInfo: %dx%d%s%dhz",__FUNCTION__,__LINE__, modeInfo->w, modeInfo->h,
+ DEBUG("%s %d modeInfo: %s %dx%d%s%dhz",__FUNCTION__,__LINE__, modeInfo->name, modeInfo->w, modeInfo->h,
(modeInfo->interlace == 0 ?"p":"i"), modeInfo->vrefresh);
return ret;
}
diff --git a/display_framework/src/extension/display_settings/westeros/westeros_settings.c b/display_framework/src/extension/display_settings/westeros/westeros_settings.c
index 8b41d8a..c87d781 100644
--- a/display_framework/src/extension/display_settings/westeros/westeros_settings.c
+++ b/display_framework/src/extension/display_settings/westeros/westeros_settings.c
@@ -563,6 +563,62 @@
return ret;
}
+int setDisplayFracRatePolicy(int value, DISPLAY_CONNECTOR_TYPE connType) {
+ int ret = -1;
+ int rc = -1;
+ int connId = -1;
+ char cmdBuf[CMDBUF_SIZE] = {'\0'};
+ char* prop_name = NULL;
+ char resp[OUTPUT_SIZE] = {'\0'};
+ connId = meson_drm_GetConnectorId(connType);
+ DEBUG(" %s %d westeros set frac rate policy %d connId %d connType %d",__FUNCTION__,__LINE__,
+ value, connId, connType);
+ if (connId > 0) {
+ prop_name = meson_drm_GetPropName(ENUM_MESON_DRM_CONNECTOR_FRAC_RATE_POLICY);
+ if (prop_name == NULL) {
+ ERROR("%s %d meson_drm_GetPropName return NULL",__FUNCTION__,__LINE__);
+ goto out;
+ }
+ DEBUG("%s %d get prop name %s",__FUNCTION__,__LINE__, prop_name);
+ snprintf(cmdBuf, sizeof(cmdBuf)-1, "set property -s %d:%s:%d", connId, prop_name, value);
+ rc = wstDisplaySendMessage(cmdBuf,resp);
+ if (rc >= 0) {
+ ret = 0;
+ } else {
+ ERROR("%s %d send message fail",__FUNCTION__,__LINE__);
+ }
+ } else {
+ ERROR("%s %d meson_drm_GetConnectorId return fail",__FUNCTION__,__LINE__);
+ }
+out:
+ if (prop_name) {
+ free(prop_name);
+ }
+ return ret;
+}
+
+int setDisplayFracMode(DisplayModeInfo* modeInfo, int value, DISPLAY_CONNECTOR_TYPE connType) {
+ int ret = -1;
+ char modeSet[CMDBUF_SIZE] = {'\0'};
+ int rc = -1;
+ char resp[OUTPUT_SIZE] = {'\0'};
+ if (modeInfo == NULL) {
+ ERROR("%s %d invalid parameter return",__FUNCTION__,__LINE__);
+ return ret;
+ }
+ DEBUG("%s %d westeros set modeInfo %dx%d%s%dhz frac rate policy %d",__FUNCTION__,__LINE__, modeInfo->w,
+ modeInfo->h, (modeInfo->interlace == 0? "p":"i") , modeInfo->vrefresh, value);
+ snprintf(modeSet, sizeof(modeSet)-1, "set mode %dx%d%s%d -frac_mode %d", modeInfo->w, modeInfo->h,
+ (modeInfo->interlace == 0? "p":"i"), modeInfo->vrefresh,value);
+ rc = wstDisplaySendMessage(modeSet,resp);
+ if ( rc >= 0 ) {
+ ret = 0;
+ } else {
+ ERROR("%s %d send message fail",__FUNCTION__,__LINE__);
+ }
+ return ret;
+}
+
int setDisplayCvbsAVMute(bool mute) {
int ret = -1;
int connId = -1;
diff --git a/display_framework/src/extension/display_settings/westeros/westeros_settings_Test.c b/display_framework/src/extension/display_settings/westeros/westeros_settings_Test.c
index 7ddca8b..e70cc94 100644
--- a/display_framework/src/extension/display_settings/westeros/westeros_settings_Test.c
+++ b/display_framework/src/extension/display_settings/westeros/westeros_settings_Test.c
@@ -45,7 +45,7 @@
if (select_s == 0 && select_len == 1) {
printf("set:0->hdmi mode 1->cvbs mode 2->hdr policy 3->av mute 4->HDMI HDCP enable 5-><colorDepth, colorSpace>"
"6->HDCP Content Type 7->DvEnable 8->active 9->vrr Enable 10->auto mode 11->dummy mode 12->aspect ratio"
- " 13->scaling 14->the status of display 15->dv mode 16->cvbs video mute\n");
+ " 13->scaling 14->the status of display 15->dv mode 16->cvbs video mute 17->frac rate policy 18->fracmode\n");
len = scanf("%d",&set);
if (set == 0 && len == 1) {
printf("please input modeInfo:interlace, w, h, vrefresh\n");
@@ -241,6 +241,27 @@
} else {
printf("\n scanf fail\n");
}
+ } else if (set == 17 && len == 1) {
+ printf("frac rate policy value: \n");
+ int fracrate = -1;
+ scanf("%d", &fracrate);
+ if (setDisplayFracRatePolicy(fracrate,DISPLAY_CONNECTOR_HDMIA) == 0) {
+ printf("\n setDisplayFracRatePolicy Success\n");
+ }else{
+ printf("setDisplayFracRatePolicy Fail\n");
+ }
+ } else if (set == 18 && len == 1) {
+ printf("please input modeInfo:interlace, w, h, vrefresh and frac rate policy value \n");
+ int fracrate = -1;
+ scanf("%d %d %d %d %d",&modeInfo->interlace,&modeInfo->w, &modeInfo->h,&modeInfo->vrefresh,&fracrate);
+ if (setDisplayFracMode(modeInfo, fracrate, DISPLAY_CONNECTOR_HDMIA) == 0) {
+ printf("\n modeInfoļ¼%d %d %d %d fracrate %d\n",modeInfo->interlace,modeInfo->w, modeInfo->h, modeInfo->vrefresh,fracrate);
+ }else{
+ printf("setDisplayFracMode Fail\n");
+ }
+ if (modeInfo) {
+ free(modeInfo);
+ }
}
}
else if(select_s == 1 && select_len == 1) {
diff --git a/display_framework/src/extension/display_settings/weston/weston_settings.c b/display_framework/src/extension/display_settings/weston/weston_settings.c
index 37c2ce8..9291dc7 100644
--- a/display_framework/src/extension/display_settings/weston/weston_settings.c
+++ b/display_framework/src/extension/display_settings/weston/weston_settings.c
@@ -389,8 +389,7 @@
}
}
-
-int setDisplayFracMode(int value, DISPLAY_CONNECTOR_TYPE connType) {
+int setDisplayFracRatePolicy(int value, DISPLAY_CONNECTOR_TYPE connType) {
int ret = -1;
int connId = -1;
int rc = -1;
@@ -424,7 +423,6 @@
return ret;
}
-
int setDisplayColorSpacedDepth(uint32_t colorDepth, ENUM_DISPLAY_COLOR_SPACE colorSpace,
DISPLAY_CONNECTOR_TYPE connType) {
int ret = -1;
@@ -584,6 +582,50 @@
return ret;
}
+int setDisplayFracMode(DisplayModeInfo* modeInfo, int value, DISPLAY_CONNECTOR_TYPE connType) {
+ int ret = -1;
+ char modeSet[CMDBUF_SIZE] = {'\0'};
+ int count = 0;
+ int rc = -1;
+ int connId = -1;
+ char cmdBuf[CMDBUF_SIZE] = {'\0'};
+ char resp[CMDBUF_SIZE] = {'\0'};
+ char* prop_name = NULL;
+ int fd = meson_open_drm();
+ if (modeInfo == NULL) {
+ ERROR("%s %d invalid parameter return",__FUNCTION__,__LINE__);
+ goto out;
+ }
+ connId = meson_drm_GetConnectorId(connType);
+ DEBUG("%s %d weston set modeInfo %dx%d%c%dhz frac rate policy %d",__FUNCTION__,__LINE__, modeInfo->w,
+ modeInfo->h, (modeInfo->interlace == 0? 'p':'i') , modeInfo->vrefresh, value);
+ if (connId > 0) {
+ prop_name = meson_drm_GetPropName(ENUM_MESON_DRM_CONNECTOR_FRAC_RATE_POLICY);
+ if (prop_name == NULL) {
+ ERROR("%s %d meson_drm_GetPropName return NULL",__FUNCTION__,__LINE__);
+ goto out;
+ }
+ DEBUG("%s %d get prop name %s",__FUNCTION__,__LINE__, prop_name);
+
+ snprintf(modeSet, sizeof(modeSet)-1, "-r \"set mode %dx%d%c@%d properties %s=%d\"", modeInfo->w, modeInfo->h,
+ (modeInfo->interlace == 0? 'p':'i'), modeInfo->vrefresh, prop_name,value);
+ rc = wstDisplaySendMessage(modeSet,resp);
+ if (rc >= 0) {
+ ret = 0;
+ } else {
+ ERROR("%s %d send message fail",__FUNCTION__,__LINE__);
+ }
+ } else {
+ ERROR("%s %d meson_drm_GetConnectorId return fail",__FUNCTION__,__LINE__);
+ }
+out:
+ if (prop_name) {
+ free(prop_name);
+ }
+ meson_close_drm(fd);
+ return ret;
+}
+
int setDisplayModeAttr(DisplayModeInfo* modeInfo,uint32_t colorDepth,
ENUM_DISPLAY_COLOR_SPACE colorSpace,DISPLAY_CONNECTOR_TYPE connType) {
return 0;
diff --git a/display_framework/src/extension/display_settings/weston/weston_settings_Test.c b/display_framework/src/extension/display_settings/weston/weston_settings_Test.c
index d860c45..bc9d7f7 100644
--- a/display_framework/src/extension/display_settings/weston/weston_settings_Test.c
+++ b/display_framework/src/extension/display_settings/weston/weston_settings_Test.c
@@ -45,7 +45,7 @@
if (select_s == 0 && select_len == 1) {
printf("set:0->hdmi mode 1->cvbs mode 2->hdr policy 3->av mute 4->HDMI HDCP enable 5-><colorDepth, colorSpace>"
"6->HDCP Content Type 7->DvEnable 8->active 9->vrr Enable 10->auto mode 11->dummy mode 12->aspect ratio 13->mode attr"
- "14->dv mode 15->cvbs video mute 16->frac rate policy 17->scaling 18->auto-frm-mode\n");
+ "14->dv mode 15->cvbs video mute 16->frac rate policy 17->scaling 18->auto-frm-mode 19->frac mode\n");
len = scanf("%d",&set);
if (set == 0 && len == 1) {
printf("please input modeInfo: interlace, w, h, vrefresh\n");
@@ -230,10 +230,10 @@
printf("frac rate policy value: \n");
int fracrate = -1;
scanf("%d", &fracrate);
- if (setDisplayFracMode(fracrate,DISPLAY_CONNECTOR_HDMIA) == 0) {
- printf("\n setDisplayFracMode Success\n");
+ if (setDisplayFracRatePolicy(fracrate,DISPLAY_CONNECTOR_HDMIA) == 0) {
+ printf("\n setDisplayFracRatePolicy Success\n");
}else{
- printf("setDisplayFracMode Fail\n");
+ printf("setDisplayFracRatePolicy Fail\n");
}
} else if (set == 17 && len == 1) {
printf("please input value(value must be greater than 60 and less than or equal to 100 (percent)): \n");
@@ -253,6 +253,19 @@
} else {
printf("setDisplayAutoFrmMode Fail\n");
}
+ } else if (set == 19 && len == 1) {
+ printf("please input modeInfo:interlace, w, h, vrefresh and frac rate policy value \n");
+ int fracrate = -1;
+ scanf("%d %d %d %d %d",&modeInfo->interlace,&modeInfo->w, &modeInfo->h,&modeInfo->vrefresh,&fracrate);
+ if (setDisplayFracMode(modeInfo, fracrate, DISPLAY_CONNECTOR_HDMIA) == 0) {
+ printf("\n modeInfoļ¼%d %d %d %d fracrate %d\n",modeInfo->interlace,modeInfo->w,modeInfo->h,
+ modeInfo->vrefresh,fracrate);
+ } else {
+ printf("setDisplayFracMode Fail\n");
+ }
+ if (modeInfo) {
+ free(modeInfo);
+ }
}
}
else if(select_s == 1 && select_len == 1) {
@@ -525,8 +538,8 @@
int value = getDisplayCvbsAVMute( DISPLAY_CONNECTOR_CVBS );
printf("\n cvbs video mute:%d\n",value);
} else if (get == 34 && len == 1) {
- int value = getDisplayCvbsAVMute( DISPLAY_CONNECTOR_CVBS );
- printf("\n cvbs video mute:%d\n",value);
+ int value = getDisplayFracRatePolicy( DISPLAY_CONNECTOR_HDMIA );
+ printf("\n frac rate policy value:%d\n",value);
} else if (get == 35 && len == 1) {
int value = getDisplayHdcpTopoInfo(DISPLAY_CONNECTOR_HDMIA );
printf("\n get hdcp topo info: %d\n",value);