* #output_set_dpms_handler, a backend module needs to call the output dpms handler
* to let the TDM frontend know the output DPMS change indeed.
* @param[in] dpms_value DPMS value
+ * @param[out] sync A flag for sync call
* @return #TDM_ERROR_NONE if success. Otherwise, error value.
* @see #output_set_dpms_handler, #TDM_OUTPUT_CAPABILITY_ASYNC_DPMS
* @since 1.7.0
*/
- tdm_error (*output_set_dpms_async)(tdm_output *output, tdm_output_dpms dpms_value);
+ tdm_error (*output_set_dpms_async)(tdm_output *output, tdm_output_dpms dpms_value, int *sync);
/**
* @brief Get a hwc object of a output object
{
tdm_private_module *private_module;
tdm_func_output *func_output;
+ int sync = 0;
OUTPUT_FUNC_ENTRY();
if (!(private_output->caps.capabilities & TDM_OUTPUT_CAPABILITY_ASYNC_DPMS)) {
TDM_INFO("output(%d) dpms async '%s'", private_output->pipe, tdm_dpms_str(dpms_value));
- ret = func_output->output_set_dpms_async(private_output->output_backend, dpms_value);
+ ret = func_output->output_set_dpms_async(private_output->output_backend, dpms_value, &sync);
if (ret == TDM_ERROR_NONE) {
- private_output->waiting_dpms_change = 1;
- TDM_INFO("output(%d) dpms async '%s' waiting", private_output->pipe, tdm_dpms_str(dpms_value));
+ if (sync) {
+ tdm_output_dpms temp = TDM_OUTPUT_DPMS_OFF;
+
+ tdm_output_get_dpms_internal(output, &temp);
+ TDM_INFO("output(%d) dpms async '%s'(%s) done", private_output->pipe, tdm_dpms_str(dpms_value), tdm_dpms_str(temp));
+ } else {
+ private_output->waiting_dpms_change = 1;
+ TDM_INFO("output(%d) dpms async '%s' waiting", private_output->pipe, tdm_dpms_str(dpms_value));
+ }
} else {
tdm_output_dpms temp = TDM_OUTPUT_DPMS_OFF;