static bool tdm_output_init_modes(struct ds_tdm_output *output);
static void tdm_output_destroy(struct ds_tdm_output *output);
static void tdm_output_init_hwc(struct ds_tdm_output *output);
+static bool tdm_output_update_mode(struct ds_tdm_output *output);
struct ds_tdm_output *
create_tdm_output(struct ds_tdm_backend *tdm, tdm_output *tdm_output)
output = tdm_output_from_output(ds_output);
+ if (ds_output->pending.committed & DS_OUTPUT_STATE_MODE) {
+ if (!tdm_output_update_mode(output)) {
+ ds_err("Could not update TDM mode");
+ return false;
+ }
+ }
+
ds_buffer = ds_output->pending.buffer;
buffer = get_or_create_tdm_buffer(output->backend, ds_buffer);
if (!buffer)
return false;
}
- err = tdm_hwc_commit(output->tdm.hwc, 0, tdm_output_hwc_commit_handler, output);
+ err = tdm_hwc_commit(output->tdm.hwc, 0, tdm_output_hwc_commit_handler,
+ output);
if (err != TDM_ERROR_NONE) {
ds_err("Could not hwc commit");
ds_buffer_unlock(buffer->buffer);
if (tdm_mode->type & TDM_OUTPUT_MODE_TYPE_PREFERRED)
mode->base.preferred = true;
- ds_inf(" %dx%d@%d %s", mode->base.width, mode->base.height,
+ ds_dbg(" %dx%d@%d %s", mode->base.width, mode->base.height,
mode->base.refresh,
mode->base.preferred ? "(preferred)" : "");
wl_list_insert(&output->base.modes, &mode->base.link);
else
wl_list_insert(output->base.modes.prev, &mode->base.link);
-
- // FIXME
- if (mode->base.preferred) {
- err = tdm_output_set_mode(output->tdm.output, tdm_mode);
- if (err != TDM_ERROR_NONE) {
- ds_err("Could not set mode");
- }
- }
}
return true;
return;
}
}
+
+static bool
+tdm_output_update_mode(struct ds_tdm_output *output)
+{
+ const struct ds_tdm_output_mode *mode;
+ tdm_error err;
+
+ mode = (struct ds_tdm_output_mode *)output->base.pending.mode;
+
+ ds_inf("TDM output(%p) set mode %dx%d %d mHz", output,
+ mode->base.width, mode->base.height, mode->base.refresh);
+
+ err = tdm_output_set_mode(output->tdm.output, mode->tdm_mode);
+ if (err != TDM_ERROR_NONE)
+ return false;
+
+ return true;
+}