diff --git a/frameworks/services/systemcontrol/DisplayMode.cpp b/frameworks/services/systemcontrol/DisplayMode.cpp index c18e6c74..42aa0adc 100644 --- a/frameworks/services/systemcontrol/DisplayMode.cpp +++ b/frameworks/services/systemcontrol/DisplayMode.cpp @@ -701,8 +701,34 @@ void DisplayMode::setSourceOutputMode(const char* outputmode) { #ifndef RECOVERY_MODE AutoMutex _l( mLock ); #endif - setSourceOutputMode(outputmode, OUPUT_MODE_STATE_SWITCH); - return; + //Vas added to control HDMI output + if (!strcmp(outputmode, "displayon")) { + if (isDisplayOn == true) return; + pSysWrite->writeSysfs(DISPLAY_HDMI_STOP_HPD, "0"); + isDisplayOn = true; + return; + } else if (!strcmp(outputmode, "displayoff")) { + if (isDisplayOn == false) return; + pSysWrite->writeSysfs(DISPLAY_HDMI_PHY, "0"); + usleep(50000); + pSysWrite->writeSysfs(DISPLAY_HDMI_STOP_HPD, "1"); + usleep(50000); + isDisplayOn = false; + return; + } + + // When user switch outputmode, store bestmode + if (!strcmp(outputmode, "auto")) { + hdmi_data_t data; + + SYS_LOGI("outputmode is [auto] mode, need find the best mode\n"); + setBootEnv(UBOOTENV_ISBESTMODE, "true"); + getHdmiData(&data); + getHdmiOutputMode((char *)outputmode, &data); + } else { + SYS_LOGI("outputmode is not auto\n"); + setBootEnv(UBOOTENV_ISBESTMODE, "false"); + } //1. get hdmi data mHdmidata.state = OUPUT_MODE_STATE_SWITCH; @@ -1009,36 +1035,6 @@ void DisplayMode::setSourceOutputMode(const char* outputmode, output_mode_state bool cvbsMode = false; char tmpMode[MODE_LEN] = {0}; - //Vas added to control HDMI output - if (!strcmp(outputmode, "displayon")) { - if (isDisplayOn == true) return; - pSysWrite->writeSysfs(DISPLAY_HDMI_STOP_HPD, "0"); - isDisplayOn = true; - return; - } else if (!strcmp(outputmode, "displayoff")) { - if (isDisplayOn == false) return; - pSysWrite->writeSysfs(DISPLAY_HDMI_PHY, "0"); - usleep(50000); - pSysWrite->writeSysfs(DISPLAY_HDMI_STOP_HPD, "1"); - usleep(50000); - isDisplayOn = false; - return; - } - - // When user switch outputmode, store bestmode - if (OUPUT_MODE_STATE_SWITCH == state) { - if (!strcmp(outputmode, "auto")) { - hdmi_data_t data; - - SYS_LOGI("outputmode is [auto] mode, need find the best mode\n"); - setBootEnv(UBOOTENV_ISBESTMODE, "true"); - getHdmiData(&data); - getHdmiOutputMode((char *)outputmode, &data); - } else { - SYS_LOGI("outputmode is not auto\n"); - setBootEnv(UBOOTENV_ISBESTMODE, "false"); - } - } bool deepColorEnabled = pSysWrite->getPropertyBoolean(PROP_DEEPCOLOR, true); pSysWrite->readSysfs(HDMI_TX_FRAMRATE_POLICY, value); @@ -1155,24 +1151,6 @@ void DisplayMode::setSourceOutputMode(const char* outputmode, output_mode_state } } else { initHdrSdrMode(); - char hdrmode[MODE_LEN] = {0}; - pSysWrite->getPropertyString("persist.vendor.sys.hdrmode", hdrmode, "0"); - if (strstr(hdrmode, "0")) // hdr off - { - pSysWrite->writeSysfs(HDR_FORCE_OUTPUT, HDR_FORCE_OUTPUT_ON); - pSysWrite->writeSysfs(HDR_POLICY, HDR_POLICY_DISABLE); - SYS_LOGI("hdrmode off\n"); - }else if (strstr(hdrmode, "1")) // hdr on (sink) - { - pSysWrite->writeSysfs(HDR_FORCE_OUTPUT, HDR_FORCE_OUTPUT_OFF); - pSysWrite->writeSysfs(HDR_POLICY, HDR_POLICY_SINK); - SYS_LOGI("hdrmode from sink\n"); - }else if (strstr(hdrmode, "2")) // hdr on (source) - { - pSysWrite->writeSysfs(HDR_FORCE_OUTPUT, HDR_FORCE_OUTPUT_OFF); - pSysWrite->writeSysfs(HDR_POLICY, HDR_POLICY_SOURCE); - SYS_LOGI("hdrmode from source\n"); - } } } @@ -3403,6 +3381,22 @@ void DisplayMode::initHdrSdrMode() { pSysWrite->getPropertyString(PROP_SDR_MODE_STATE, mode, flag ? SDR_MODE_AUTO : SDR_MODE_OFF); } setSdrMode(mode); + + char hdrmode[MODE_LEN] = {0}; + pSysWrite->getPropertyString("persist.vendor.sys.hdrmode", hdrmode, "0"); + if (strstr(hdrmode, "0")) {// hdr off + pSysWrite->writeSysfs(HDR_FORCE_OUTPUT, HDR_FORCE_OUTPUT_ON); + pSysWrite->writeSysfs(HDR_POLICY, HDR_POLICY_DISABLE); + SYS_LOGI("hdrmode off\n"); + } else if (strstr(hdrmode, "1")) {// hdr on (sink) + pSysWrite->writeSysfs(HDR_FORCE_OUTPUT, HDR_FORCE_OUTPUT_OFF); + pSysWrite->writeSysfs(HDR_POLICY, HDR_POLICY_SINK); + SYS_LOGI("hdrmode from sink\n"); + } else if (strstr(hdrmode, "2")) {// hdr on (source) + pSysWrite->writeSysfs(HDR_FORCE_OUTPUT, HDR_FORCE_OUTPUT_OFF); + pSysWrite->writeSysfs(HDR_POLICY, HDR_POLICY_SOURCE); + SYS_LOGI("hdrmode from source\n"); + } } int DisplayMode::modeToIndex(const char *mode) {