@@ -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;
}