diff options
-rw-r--r-- | linux-core/drm_crtc_helper.c | 18 | ||||
-rw-r--r-- | linux-core/intel_fb.c | 9 |
2 files changed, 19 insertions, 8 deletions
diff --git a/linux-core/drm_crtc_helper.c b/linux-core/drm_crtc_helper.c index 1b6118de..edb739f5 100644 --- a/linux-core/drm_crtc_helper.c +++ b/linux-core/drm_crtc_helper.c @@ -67,6 +67,7 @@ void drm_helper_probe_single_connector_modes(struct drm_connector *connector, ui struct drm_connector_helper_funcs *connector_funcs = connector->helper_private; int ret; + DRM_DEBUG("%s\n", drm_get_connector_name(connector)); /* set all modes to the unverified state */ list_for_each_entry_safe(mode, t, &connector->modes, head) mode->status = MODE_UNVERIFIED; @@ -186,8 +187,11 @@ void drm_helper_disable_unused_functions(struct drm_device *dev) list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; - if (!crtc->enabled) + crtc->enabled = drm_helper_crtc_in_use(crtc); + if (!crtc->enabled) { crtc_funcs->dpms(crtc, DPMSModeOff); + crtc->fb = NULL; + } } } EXPORT_SYMBOL(drm_helper_disable_unused_functions); @@ -209,6 +213,7 @@ static void drm_pick_crtcs (struct drm_device *dev) struct drm_connector_helper_funcs *connector_funcs; int found; + DRM_DEBUG("\n"); /* clean out all the encoder/crtc combos */ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { encoder->crtc = NULL; @@ -515,8 +520,13 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) /* We should be able to check here if the fb has the same properties * and then just flip_or_move it */ - if (set->crtc->fb != set->fb) - flip_or_move = true; + if (set->crtc->fb != set->fb) { + /* if we have no fb then its a change not a flip */ + if (set->crtc->fb == NULL) + changed = true; + else + flip_or_move = true; + } if (set->x != set->crtc->x || set->y != set->crtc->y) flip_or_move = true; @@ -629,6 +639,8 @@ EXPORT_SYMBOL(drm_crtc_helper_set_config); bool drm_helper_plugged_event(struct drm_device *dev) { + DRM_DEBUG("\n"); + drm_helper_probe_connector_modes(dev, dev->mode_config.max_width, dev->mode_config.max_height); drm_pick_crtcs(dev); diff --git a/linux-core/intel_fb.c b/linux-core/intel_fb.c index b4afb155..5ec5bb8f 100644 --- a/linux-core/intel_fb.c +++ b/linux-core/intel_fb.c @@ -309,11 +309,9 @@ static int intelfb_set_par(struct fb_info *info) int ret; list_for_each_entry(modeset, &par->mode_set_list, head) { - if (modeset->num_connectors) { - ret = modeset->crtc->funcs->set_config(modeset); - if (ret) - return ret; - } + ret = modeset->crtc->funcs->set_config(modeset); + if (ret) + return ret; } return 0; } @@ -782,6 +780,7 @@ static int intelfb_single_fb_probe(struct drm_device *dev) struct intelfb_par *par; struct drm_mode_set *modeset; + DRM_DEBUG("\n"); /* first up get a count of crtcs now in use and new min/maxes width/heights */ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { if (drm_helper_crtc_in_use(crtc)) { |