aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/ast/ast_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/ast/ast_main.c')
-rw-r--r--drivers/gpu/drm/ast/ast_main.c32
1 files changed, 29 insertions, 3 deletions
diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
index fd167008be31..8e8c0310245f 100644
--- a/drivers/gpu/drm/ast/ast_main.c
+++ b/drivers/gpu/drm/ast/ast_main.c
@@ -142,7 +142,10 @@ static int ast_detect_chip(struct drm_device *dev, bool *need_post)
142 ast->chip = AST1100; 142 ast->chip = AST1100;
143 DRM_INFO("AST 1180 detected\n"); 143 DRM_INFO("AST 1180 detected\n");
144 } else { 144 } else {
145 if (dev->pdev->revision >= 0x30) { 145 if (dev->pdev->revision >= 0x40) {
146 ast->chip = AST2500;
147 DRM_INFO("AST 2500 detected\n");
148 } else if (dev->pdev->revision >= 0x30) {
146 ast->chip = AST2400; 149 ast->chip = AST2400;
147 DRM_INFO("AST 2400 detected\n"); 150 DRM_INFO("AST 2400 detected\n");
148 } else if (dev->pdev->revision >= 0x20) { 151 } else if (dev->pdev->revision >= 0x20) {
@@ -196,6 +199,9 @@ static int ast_detect_chip(struct drm_device *dev, bool *need_post)
196 if (ast->chip == AST2400 && 199 if (ast->chip == AST2400 &&
197 (scu_rev & 0x300) == 0x100) /* ast1400 */ 200 (scu_rev & 0x300) == 0x100) /* ast1400 */
198 ast->support_wide_screen = true; 201 ast->support_wide_screen = true;
202 if (ast->chip == AST2500 &&
203 scu_rev == 0x100) /* ast2510 */
204 ast->support_wide_screen = true;
199 } 205 }
200 break; 206 break;
201 } 207 }
@@ -291,7 +297,10 @@ static int ast_get_dram_info(struct drm_device *dev)
291 default: 297 default:
292 ast->dram_bus_width = 16; 298 ast->dram_bus_width = 16;
293 ast->dram_type = AST_DRAM_1Gx16; 299 ast->dram_type = AST_DRAM_1Gx16;
294 ast->mclk = 396; 300 if (ast->chip == AST2500)
301 ast->mclk = 800;
302 else
303 ast->mclk = 396;
295 return 0; 304 return 0;
296 } 305 }
297 306
@@ -300,7 +309,23 @@ static int ast_get_dram_info(struct drm_device *dev)
300 else 309 else
301 ast->dram_bus_width = 32; 310 ast->dram_bus_width = 32;
302 311
303 if (ast->chip == AST2300 || ast->chip == AST2400) { 312 if (ast->chip == AST2500) {
313 switch (mcr_cfg & 0x03) {
314 case 0:
315 ast->dram_type = AST_DRAM_1Gx16;
316 break;
317 default:
318 case 1:
319 ast->dram_type = AST_DRAM_2Gx16;
320 break;
321 case 2:
322 ast->dram_type = AST_DRAM_4Gx16;
323 break;
324 case 3:
325 ast->dram_type = AST_DRAM_8Gx16;
326 break;
327 }
328 } else if (ast->chip == AST2300 || ast->chip == AST2400) {
304 switch (mcr_cfg & 0x03) { 329 switch (mcr_cfg & 0x03) {
305 case 0: 330 case 0:
306 ast->dram_type = AST_DRAM_512Mx16; 331 ast->dram_type = AST_DRAM_512Mx16;
@@ -523,6 +548,7 @@ int ast_driver_load(struct drm_device *dev, unsigned long flags)
523 ast->chip == AST2200 || 548 ast->chip == AST2200 ||
524 ast->chip == AST2300 || 549 ast->chip == AST2300 ||
525 ast->chip == AST2400 || 550 ast->chip == AST2400 ||
551 ast->chip == AST2500 ||
526 ast->chip == AST1180) { 552 ast->chip == AST1180) {
527 dev->mode_config.max_width = 1920; 553 dev->mode_config.max_width = 1920;
528 dev->mode_config.max_height = 2048; 554 dev->mode_config.max_height = 2048;