diff options
-rw-r--r-- | drivers/gpu/pvr/omaplfb/omaplfb_displayclass.c | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/drivers/gpu/pvr/omaplfb/omaplfb_displayclass.c b/drivers/gpu/pvr/omaplfb/omaplfb_displayclass.c index 425059c29a4..88f23656f02 100644 --- a/drivers/gpu/pvr/omaplfb/omaplfb_displayclass.c +++ b/drivers/gpu/pvr/omaplfb/omaplfb_displayclass.c | |||
@@ -1386,11 +1386,34 @@ static OMAP_ERROR InitDev(OMAPLFB_DEVINFO *psDevInfo, int fb_idx) | |||
1386 | DESIRED_BPP); | 1386 | DESIRED_BPP); |
1387 | } | 1387 | } |
1388 | acquire_console_sem(); | 1388 | acquire_console_sem(); |
1389 | |||
1390 | FBSize = (psLINFBInfo->screen_size) != 0 ? | ||
1391 | psLINFBInfo->screen_size : psLINFBInfo->fix.smem_len; | ||
1392 | psPVRFBInfo->sSysAddr.uiAddr = psLINFBInfo->fix.smem_start; | ||
1393 | psPVRFBInfo->sCPUVAddr = psLINFBInfo->screen_base; | ||
1394 | psPVRFBInfo->ulWidth = psLINFBInfo->var.xres; | ||
1395 | psPVRFBInfo->ulHeight = psLINFBInfo->var.yres; | ||
1396 | psPVRFBInfo->ulByteStride = psLINFBInfo->fix.line_length; | ||
1397 | psPVRFBInfo->ulFBSize = FBSize; | ||
1398 | psPVRFBInfo->ulBufferSize = | ||
1399 | psPVRFBInfo->ulHeight * psPVRFBInfo->ulByteStride; | ||
1400 | |||
1401 | /* Calculate the buffers according to the flipping technique */ | ||
1402 | #if defined(FLIP_TECHNIQUE_FRAMEBUFFER) | ||
1389 | psLINFBInfo->var.activate = FB_ACTIVATE_FORCE; | 1403 | psLINFBInfo->var.activate = FB_ACTIVATE_FORCE; |
1390 | fb_set_var(psLINFBInfo, &psLINFBInfo->var); | 1404 | fb_set_var(psLINFBInfo, &psLINFBInfo->var); |
1391 | buffers_available = | 1405 | buffers_available = |
1392 | psLINFBInfo->var.yres_virtual / psLINFBInfo->var.yres; | 1406 | psLINFBInfo->var.yres_virtual / psLINFBInfo->var.yres; |
1393 | 1407 | ||
1408 | #elif defined(FLIP_TECHNIQUE_OVERLAY) | ||
1409 | buffers_available = | ||
1410 | psPVRFBInfo->ulFBSize / psPVRFBInfo->ulBufferSize; | ||
1411 | |||
1412 | #else | ||
1413 | #error No flipping technique selected, please define \ | ||
1414 | FLIP_TECHNIQUE_FRAMEBUFFER or FLIP_TECHNIQUE_OVERLAY | ||
1415 | #endif | ||
1416 | |||
1394 | if(buffers_available <= 1) | 1417 | if(buffers_available <= 1) |
1395 | { | 1418 | { |
1396 | /* | 1419 | /* |
@@ -1442,13 +1465,6 @@ static OMAP_ERROR InitDev(OMAPLFB_DEVINFO *psDevInfo, int fb_idx) | |||
1442 | DEBUG_PRINTK("*Stride (bytes): %u", | 1465 | DEBUG_PRINTK("*Stride (bytes): %u", |
1443 | (unsigned int)psLINFBInfo->fix.line_length); | 1466 | (unsigned int)psLINFBInfo->fix.line_length); |
1444 | 1467 | ||
1445 | psPVRFBInfo->sSysAddr.uiAddr = psLINFBInfo->fix.smem_start; | ||
1446 | psPVRFBInfo->sCPUVAddr = psLINFBInfo->screen_base; | ||
1447 | psPVRFBInfo->ulWidth = psLINFBInfo->var.xres; | ||
1448 | psPVRFBInfo->ulHeight = psLINFBInfo->var.yres; | ||
1449 | psPVRFBInfo->ulByteStride = psLINFBInfo->fix.line_length; | ||
1450 | psPVRFBInfo->ulFBSize = FBSize; | ||
1451 | |||
1452 | #ifdef CONFIG_TILER_OMAP | 1468 | #ifdef CONFIG_TILER_OMAP |
1453 | /* If TILER is being used, use correct physical stride and FB size */ | 1469 | /* If TILER is being used, use correct physical stride and FB size */ |
1454 | if ((psPVRFBInfo->sSysAddr.uiAddr >= TILER_MIN_PADDR) && | 1470 | if ((psPVRFBInfo->sSysAddr.uiAddr >= TILER_MIN_PADDR) && |
@@ -1463,10 +1479,12 @@ static OMAP_ERROR InitDev(OMAPLFB_DEVINFO *psDevInfo, int fb_idx) | |||
1463 | psPVRFBInfo->ulByteStride = tiler_stride(tiler_naddr); | 1479 | psPVRFBInfo->ulByteStride = tiler_stride(tiler_naddr); |
1464 | /* Calculate the whole TILER region to map in bytes */ | 1480 | /* Calculate the whole TILER region to map in bytes */ |
1465 | psPVRFBInfo->ulFBSize = max_rows * psPVRFBInfo->ulByteStride; | 1481 | psPVRFBInfo->ulFBSize = max_rows * psPVRFBInfo->ulByteStride; |
1482 | /* Re-calculate buffer size with previous stride */ | ||
1483 | psPVRFBInfo->ulBufferSize = | ||
1484 | psPVRFBInfo->ulHeight * psPVRFBInfo->ulByteStride; | ||
1466 | } | 1485 | } |
1467 | #endif | 1486 | #endif |
1468 | psPVRFBInfo->ulBufferSize = | 1487 | |
1469 | psPVRFBInfo->ulHeight * psPVRFBInfo->ulByteStride; | ||
1470 | /* Get physical display size for DPI calculation */ | 1488 | /* Get physical display size for DPI calculation */ |
1471 | if (psLINFBInfo->var.width < 0 || psLINFBInfo->var.height < 0) { | 1489 | if (psLINFBInfo->var.width < 0 || psLINFBInfo->var.height < 0) { |
1472 | psDevInfo->sDisplayInfo.ui32PhysicalWidthmm = 0; | 1490 | psDevInfo->sDisplayInfo.ui32PhysicalWidthmm = 0; |