diff --git a/src/backends/native/meta-crtc-kms.c b/src/backends/native/meta-crtc-kms.c index 10d344e62..de49d6180 100644 --- a/src/backends/native/meta-crtc-kms.c +++ b/src/backends/native/meta-crtc-kms.c @@ -154,9 +154,17 @@ meta_crtc_kms_set_mode (MetaCrtc *crtc, connectors = generate_crtc_connector_list (gpu, crtc); if (connectors) - mode = crtc->current_mode->driver_private; + { + mode = crtc->current_mode->driver_private; + + g_debug ("Setting CRTC (%ld) mode to %s", crtc->crtc_id, mode->name); + } else - mode = NULL; + { + mode = NULL; + + g_debug ("Unsetting CRTC (%ld) mode", crtc->crtc_id); + } meta_kms_update_mode_set (kms_update, meta_crtc_kms_get_kms_crtc (crtc), diff --git a/src/backends/native/meta-monitor-manager-kms.c b/src/backends/native/meta-monitor-manager-kms.c index 58fd93fcc..7f094ab42 100644 --- a/src/backends/native/meta-monitor-manager-kms.c +++ b/src/backends/native/meta-monitor-manager-kms.c @@ -383,6 +383,68 @@ meta_monitor_manager_kms_get_crtc_gamma (MetaMonitorManager *manager, drmModeFreeCrtc (kms_crtc); } +static char * +generate_gamma_ramp_string (size_t size, + unsigned short *red, + unsigned short *green, + unsigned short *blue) +{ + GString *string; + int color; + + string = g_string_new ("["); + for (color = 0; color < 3; color++) + { + unsigned short **color_ptr; + char color_char; + size_t i; + + switch (color) + { + case 0: + color_ptr = &red; + color_char = 'r'; + break; + case 1: + color_ptr = &green; + color_char = 'g'; + break; + case 2: + color_ptr = &blue; + color_char = 'b'; + break; + } + + g_string_append_printf (string, " %c: ", color_char); + for (i = 0; i < MIN (4, size); i++) + { + int j; + + if (size > 4) + { + if (i == 2) + g_string_append (string, ",..."); + + if (i >= 2) + j = i + (size - 4); + else + j = i; + } + else + { + j = i; + } + g_string_append_printf (string, "%s%hu", + j == 0 ? "" : ",", + (*color_ptr)[i]); + } + } + + g_string_append (string, " ]"); + + return g_string_free (string, FALSE); +} + static void meta_monitor_manager_kms_set_crtc_gamma (MetaMonitorManager *manager, MetaCrtc *crtc, @@ -393,8 +455,18 @@ meta_monitor_manager_kms_set_crtc_gamma (MetaMonitorManager *manager, { MetaGpu *gpu = meta_crtc_get_gpu (crtc); int kms_fd = meta_gpu_kms_get_fd (META_GPU_KMS (gpu)); + g_autofree char *gamma_ramp_string = NULL; + int ret; - drmModeCrtcSetGamma (kms_fd, crtc->crtc_id, size, red, green, blue); + gamma_ramp_string = generate_gamma_ramp_string (size, red, green, blue); + g_debug ("Setting CRTC (%ld) gamma to %s", crtc->crtc_id, gamma_ramp_string); + + ret = drmModeCrtcSetGamma (kms_fd, crtc->crtc_id, size, red, green, blue); + if (ret != 0) + { + g_warning ("Failed to set CRTC (%ld) Gamma: %s", + crtc->crtc_id, g_strerror (-ret)); + } } static void diff --git a/src/backends/native/meta-output-kms.c b/src/backends/native/meta-output-kms.c index 42633702c..1ec17b9f9 100644 --- a/src/backends/native/meta-output-kms.c +++ b/src/backends/native/meta-output-kms.c @@ -69,6 +69,11 @@ meta_output_kms_set_underscan (MetaOutput *output, crtc = meta_output_get_assigned_crtc (output); hborder = MIN (128, (uint64_t) round (crtc->current_mode->width * 0.05)); vborder = MIN (128, (uint64_t) round (crtc->current_mode->height * 0.05)); + + g_debug ("Setting underscan of connector %s to %lu x %lu", + meta_kms_connector_get_name (output_kms->kms_connector), + hborder, vborder); + meta_kms_connector_set_underscanning (output_kms->kms_connector, kms_update, hborder, @@ -76,6 +81,9 @@ meta_output_kms_set_underscan (MetaOutput *output, } else { + g_debug ("Unsetting underscan of connector %s", + meta_kms_connector_get_name (output_kms->kms_connector)); + meta_kms_connector_unset_underscanning (output_kms->kms_connector, kms_update); } @@ -96,6 +104,10 @@ meta_output_kms_set_power_save_mode (MetaOutput *output, { MetaOutputKms *output_kms = output->driver_private; + g_debug ("Setting DPMS state of connector %s to %lu", + meta_kms_connector_get_name (output_kms->kms_connector), + dpms_state); + meta_kms_connector_update_set_dpms_state (output_kms->kms_connector, kms_update, dpms_state);