summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Barnes <jbarnes@virtuousgeek.org>2014-02-12 15:03:40 -0800
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-02-13 11:52:44 +0100
commit02f5eebb63ad52c832a81109d68718df6cb1155e (patch)
tree6550b15fe54668b182736d330db1cb3d3889f010
parentb45a67157a609da83f6b2e6803296c5ccb2f8c8d (diff)
downloadtalos-obmc-linux-02f5eebb63ad52c832a81109d68718df6cb1155e.tar.gz
talos-obmc-linux-02f5eebb63ad52c832a81109d68718df6cb1155e.zip
drm/i915: don't preserve inherited configs with nothing on v2
It can be corrected later and may be what was actually desired, but generally isn't, so if we find nothing is enabled, let the core DRM fb helper figure something out. v2: free the array too (Jesse) Note that this also undoes any changes in case we bail out due to hw cloning. Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/intel_fbdev.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c
index 25d2746fe695..19be4bfbcc59 100644
--- a/drivers/gpu/drm/i915/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/intel_fbdev.c
@@ -286,7 +286,17 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,
struct drm_display_mode **modes,
bool *enabled, int width, int height)
{
+ struct drm_device *dev = fb_helper->dev;
int i, j;
+ bool *save_enabled;
+ bool any_enabled = false;
+
+ save_enabled = kcalloc(dev->mode_config.num_connector, sizeof(bool),
+ GFP_KERNEL);
+ if (!save_enabled)
+ return false;
+
+ memcpy(save_enabled, enabled, dev->mode_config.num_connector);
for (i = 0; i < fb_helper->connector_count; i++) {
struct drm_fb_helper_connector *fb_conn;
@@ -318,8 +328,10 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,
* match the BIOS.
*/
for (j = 0; j < fb_helper->connector_count; j++) {
- if (crtcs[j] == new_crtc)
- return false;
+ if (crtcs[j] == new_crtc) {
+ any_enabled = false;
+ goto out;
+ }
}
DRM_DEBUG_KMS("looking for cmdline mode on connector %d\n",
@@ -359,8 +371,18 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,
drm_get_connector_name(connector),
encoder->crtc->base.id,
modes[i]->name);
+
+ any_enabled = true;
+ }
+
+out:
+ if (!any_enabled) {
+ memcpy(enabled, save_enabled, dev->mode_config.num_connector);
+ kfree(save_enabled);
+ return false;
}
+ kfree(save_enabled);
return true;
}
OpenPOWER on IntegriCloud