diff options
Diffstat (limited to 'drivers/gpu/drm/mgag200/mgag200_mode.c')
| -rw-r--r-- | drivers/gpu/drm/mgag200/mgag200_mode.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c index d3d99a28ddef..a274b9906ef8 100644 --- a/drivers/gpu/drm/mgag200/mgag200_mode.c +++ b/drivers/gpu/drm/mgag200/mgag200_mode.c | |||
| @@ -1406,6 +1406,14 @@ static int mga_vga_get_modes(struct drm_connector *connector) | |||
| 1406 | static int mga_vga_mode_valid(struct drm_connector *connector, | 1406 | static int mga_vga_mode_valid(struct drm_connector *connector, |
| 1407 | struct drm_display_mode *mode) | 1407 | struct drm_display_mode *mode) |
| 1408 | { | 1408 | { |
| 1409 | struct drm_device *dev = connector->dev; | ||
| 1410 | struct mga_device *mdev = (struct mga_device*)dev->dev_private; | ||
| 1411 | struct mga_fbdev *mfbdev = mdev->mfbdev; | ||
| 1412 | struct drm_fb_helper *fb_helper = &mfbdev->helper; | ||
| 1413 | struct drm_fb_helper_connector *fb_helper_conn = NULL; | ||
| 1414 | int bpp = 32; | ||
| 1415 | int i = 0; | ||
| 1416 | |||
| 1409 | /* FIXME: Add bandwidth and g200se limitations */ | 1417 | /* FIXME: Add bandwidth and g200se limitations */ |
| 1410 | 1418 | ||
| 1411 | if (mode->crtc_hdisplay > 2048 || mode->crtc_hsync_start > 4096 || | 1419 | if (mode->crtc_hdisplay > 2048 || mode->crtc_hsync_start > 4096 || |
| @@ -1415,6 +1423,25 @@ static int mga_vga_mode_valid(struct drm_connector *connector, | |||
| 1415 | return MODE_BAD; | 1423 | return MODE_BAD; |
| 1416 | } | 1424 | } |
| 1417 | 1425 | ||
| 1426 | /* Validate the mode input by the user */ | ||
| 1427 | for (i = 0; i < fb_helper->connector_count; i++) { | ||
| 1428 | if (fb_helper->connector_info[i]->connector == connector) { | ||
| 1429 | /* Found the helper for this connector */ | ||
| 1430 | fb_helper_conn = fb_helper->connector_info[i]; | ||
| 1431 | if (fb_helper_conn->cmdline_mode.specified) { | ||
| 1432 | if (fb_helper_conn->cmdline_mode.bpp_specified) { | ||
| 1433 | bpp = fb_helper_conn->cmdline_mode.bpp; | ||
| 1434 | } | ||
| 1435 | } | ||
| 1436 | } | ||
| 1437 | } | ||
| 1438 | |||
| 1439 | if ((mode->hdisplay * mode->vdisplay * (bpp/8)) > mdev->mc.vram_size) { | ||
| 1440 | if (fb_helper_conn) | ||
| 1441 | fb_helper_conn->cmdline_mode.specified = false; | ||
| 1442 | return MODE_BAD; | ||
| 1443 | } | ||
| 1444 | |||
| 1418 | return MODE_OK; | 1445 | return MODE_OK; |
| 1419 | } | 1446 | } |
| 1420 | 1447 | ||
