exynos_func_output.output_set_mode = exynos_output_set_mode;
exynos_func_output.output_get_mode = exynos_output_get_mode;
exynos_func_output.output_create_capture = exynos_output_create_capture;
+ exynos_func_output.output_set_status_handler = exynos_output_set_status_handler;
if (exynos_data->hwc_mode) {
exynos_func_output.output_get_hwc = exynos_output_get_hwc;
tdm_error exynos_output_set_mode(tdm_output *output, const tdm_output_mode *mode);
tdm_error exynos_output_get_mode(tdm_output *output, const tdm_output_mode **mode);
tdm_capture* exynos_output_create_capture(tdm_output *output, tdm_error *error);
+tdm_error exynos_output_set_status_handler(tdm_output *output, tdm_output_status_handler func, void *user_data);
tdm_hwc *exynos_output_get_hwc(tdm_output *output, tdm_error *error);
tdm_error exynos_layer_get_capability(tdm_layer *layer, tdm_caps_layer *caps);
tdm_error exynos_layer_set_property(tdm_layer *layer, unsigned int id, tdm_value value);
return TDM_ERROR_NONE;
}
+tdm_error
+_tdm_exynos_output_update_status(tdm_exynos_output_data *output_data,
+ tdm_output_conn_status status)
+{
+ RETURN_VAL_IF_FAIL(output_data, TDM_ERROR_INVALID_PARAMETER);
+
+ if (output_data->status == status)
+ return TDM_ERROR_NONE;
+
+ output_data->status = status;
+
+ if (output_data->status_func)
+ output_data->status_func(output_data, status,
+ output_data->status_user_data);
+
+ return TDM_ERROR_NONE;
+}
+
static tdm_error
_tdm_exynos_display_do_commit(tdm_exynos_output_data *output_data)
{
}
}
+ if (output_data->mode_changed) {
+ _tdm_exynos_output_update_status(output_data, TDM_OUTPUT_CONN_STATUS_MODE_SETTED);
+ output_data->mode_changed = 0;
+ }
+
TDM_DBG("S3CFB_WIN_CONFIG fd:%d\n", win_data.config[layer_index].fd_idma[0]);
if (ioctl(output_data->fb_fd, S3CFB_WIN_CONFIG, &win_data)) {
return tdm_exynos_capture_create_output(exynos_data, output, error);
}
+tdm_error
+exynos_output_set_status_handler(tdm_output *output,
+ tdm_output_status_handler func,
+ void *user_data)
+{
+ tdm_exynos_output_data *output_data = output;
+
+ RETURN_VAL_IF_FAIL(output_data, TDM_ERROR_INVALID_PARAMETER);
+ RETURN_VAL_IF_FAIL(func, TDM_ERROR_INVALID_PARAMETER);
+
+ output_data->status_func = func;
+ output_data->status_user_data = user_data;
+
+ return TDM_ERROR_NONE;
+}
+
tdm_hwc *
exynos_output_get_hwc(tdm_output *output, tdm_error *error)
{
tdm_output_vblank_handler vblank_func;
tdm_output_commit_handler commit_func;
tdm_output_dpms_handler dpms_func;
+ tdm_output_status_handler status_func;
tdm_output_conn_status status;
-
+ void *status_user_data;
int mode_changed;
const tdm_output_mode *current_mode;