aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
commitc71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch)
treeecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
parentea53c912f8a86a8567697115b6a0d8152beee5c8 (diff)
parent6a00f206debf8a5c8899055726ad127dbeeed098 (diff)
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts: litmus/sched_cedf.c
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c')
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c33
1 files changed, 22 insertions, 11 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
index 11cb39e3accb..b3a2cd5118d7 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
@@ -345,7 +345,7 @@ static enum drm_connector_status
345 return connector_status_disconnected; 345 return connector_status_disconnected;
346} 346}
347 347
348static struct drm_display_mode vmw_ldu_connector_builtin[] = { 348static const struct drm_display_mode vmw_ldu_connector_builtin[] = {
349 /* 640x480@60Hz */ 349 /* 640x480@60Hz */
350 { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656, 350 { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656,
351 752, 800, 0, 480, 489, 492, 525, 0, 351 752, 800, 0, 480, 489, 492, 525, 0,
@@ -427,6 +427,7 @@ static int vmw_ldu_connector_fill_modes(struct drm_connector *connector,
427{ 427{
428 struct vmw_legacy_display_unit *ldu = vmw_connector_to_ldu(connector); 428 struct vmw_legacy_display_unit *ldu = vmw_connector_to_ldu(connector);
429 struct drm_device *dev = connector->dev; 429 struct drm_device *dev = connector->dev;
430 struct vmw_private *dev_priv = vmw_priv(dev);
430 struct drm_display_mode *mode = NULL; 431 struct drm_display_mode *mode = NULL;
431 struct drm_display_mode prefmode = { DRM_MODE("preferred", 432 struct drm_display_mode prefmode = { DRM_MODE("preferred",
432 DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED, 433 DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
@@ -443,22 +444,32 @@ static int vmw_ldu_connector_fill_modes(struct drm_connector *connector,
443 mode->hdisplay = ldu->pref_width; 444 mode->hdisplay = ldu->pref_width;
444 mode->vdisplay = ldu->pref_height; 445 mode->vdisplay = ldu->pref_height;
445 mode->vrefresh = drm_mode_vrefresh(mode); 446 mode->vrefresh = drm_mode_vrefresh(mode);
446 drm_mode_probed_add(connector, mode); 447 if (vmw_kms_validate_mode_vram(dev_priv, mode->hdisplay * 2,
448 mode->vdisplay)) {
449 drm_mode_probed_add(connector, mode);
447 450
448 if (ldu->pref_mode) { 451 if (ldu->pref_mode) {
449 list_del_init(&ldu->pref_mode->head); 452 list_del_init(&ldu->pref_mode->head);
450 drm_mode_destroy(dev, ldu->pref_mode); 453 drm_mode_destroy(dev, ldu->pref_mode);
451 } 454 }
452 455
453 ldu->pref_mode = mode; 456 ldu->pref_mode = mode;
457 }
454 } 458 }
455 459
456 for (i = 0; vmw_ldu_connector_builtin[i].type != 0; i++) { 460 for (i = 0; vmw_ldu_connector_builtin[i].type != 0; i++) {
457 if (vmw_ldu_connector_builtin[i].hdisplay > max_width || 461 const struct drm_display_mode *bmode;
458 vmw_ldu_connector_builtin[i].vdisplay > max_height) 462
463 bmode = &vmw_ldu_connector_builtin[i];
464 if (bmode->hdisplay > max_width ||
465 bmode->vdisplay > max_height)
466 continue;
467
468 if (!vmw_kms_validate_mode_vram(dev_priv, bmode->hdisplay * 2,
469 bmode->vdisplay))
459 continue; 470 continue;
460 471
461 mode = drm_mode_duplicate(dev, &vmw_ldu_connector_builtin[i]); 472 mode = drm_mode_duplicate(dev, bmode);
462 if (!mode) 473 if (!mode)
463 return 0; 474 return 0;
464 mode->vrefresh = drm_mode_vrefresh(mode); 475 mode->vrefresh = drm_mode_vrefresh(mode);
@@ -547,7 +558,7 @@ int vmw_kms_init_legacy_display_system(struct vmw_private *dev_priv)
547 return -EINVAL; 558 return -EINVAL;
548 } 559 }
549 560
550 dev_priv->ldu_priv = kmalloc(GFP_KERNEL, sizeof(*dev_priv->ldu_priv)); 561 dev_priv->ldu_priv = kmalloc(sizeof(*dev_priv->ldu_priv), GFP_KERNEL);
551 562
552 if (!dev_priv->ldu_priv) 563 if (!dev_priv->ldu_priv)
553 return -ENOMEM; 564 return -ENOMEM;