diff options
author | sayen mohanty <sayenmohanty@ti.com> | 2011-05-31 09:25:15 +0100 |
---|---|---|
committer | Andy Green <andy.green@linaro.org> | 2011-05-31 11:06:46 +0100 |
commit | 1a8f090d78004b1275cf97d2ecceefdc26467b27 (patch) | |
tree | 2371775910e72c00207697900d5193ad0929661e | |
parent | fc115d5370f5356993a7a6b48a1498ea9b63a1a6 (diff) |
SGX: UDD: Avoid sending a black frame at initialization
This patch removes the fb_set_var used when the flipping is being done
with the DSS APIs. When the UDD initializes it asks the framebuffer
if it can hold certain number of buffers, that call makes a transfer to
the display of whatever contents are in the framebuffer (black at init
time).This patch avoids such transfer.
Change-Id: I04972ce1f9ac8b9b0f1a1232da01e1d68664dc53
Signed-off-by: sayen mohanty <sayenmohanty@ti.com>
Signed-off-by: Gustavo Diaz Prado <x0083741@ti.com>
-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) DESIRED_BPP); } acquire_console_sem(); + + FBSize = (psLINFBInfo->screen_size) != 0 ? + psLINFBInfo->screen_size : psLINFBInfo->fix.smem_len; + psPVRFBInfo->sSysAddr.uiAddr = psLINFBInfo->fix.smem_start; + psPVRFBInfo->sCPUVAddr = psLINFBInfo->screen_base; + psPVRFBInfo->ulWidth = psLINFBInfo->var.xres; + psPVRFBInfo->ulHeight = psLINFBInfo->var.yres; + psPVRFBInfo->ulByteStride = psLINFBInfo->fix.line_length; + psPVRFBInfo->ulFBSize = FBSize; + psPVRFBInfo->ulBufferSize = + psPVRFBInfo->ulHeight * psPVRFBInfo->ulByteStride; + + /* Calculate the buffers according to the flipping technique */ +#if defined(FLIP_TECHNIQUE_FRAMEBUFFER) psLINFBInfo->var.activate = FB_ACTIVATE_FORCE; fb_set_var(psLINFBInfo, &psLINFBInfo->var); buffers_available = psLINFBInfo->var.yres_virtual / psLINFBInfo->var.yres; +#elif defined(FLIP_TECHNIQUE_OVERLAY) + buffers_available = + psPVRFBInfo->ulFBSize / psPVRFBInfo->ulBufferSize; + +#else +#error No flipping technique selected, please define \ + FLIP_TECHNIQUE_FRAMEBUFFER or FLIP_TECHNIQUE_OVERLAY +#endif + if(buffers_available <= 1) { /* @@ -1442,13 +1465,6 @@ static OMAP_ERROR InitDev(OMAPLFB_DEVINFO *psDevInfo, int fb_idx) DEBUG_PRINTK("*Stride (bytes): %u", (unsigned int)psLINFBInfo->fix.line_length); - psPVRFBInfo->sSysAddr.uiAddr = psLINFBInfo->fix.smem_start; - psPVRFBInfo->sCPUVAddr = psLINFBInfo->screen_base; - psPVRFBInfo->ulWidth = psLINFBInfo->var.xres; - psPVRFBInfo->ulHeight = psLINFBInfo->var.yres; - psPVRFBInfo->ulByteStride = psLINFBInfo->fix.line_length; - psPVRFBInfo->ulFBSize = FBSize; - #ifdef CONFIG_TILER_OMAP /* If TILER is being used, use correct physical stride and FB size */ if ((psPVRFBInfo->sSysAddr.uiAddr >= TILER_MIN_PADDR) && @@ -1463,10 +1479,12 @@ static OMAP_ERROR InitDev(OMAPLFB_DEVINFO *psDevInfo, int fb_idx) psPVRFBInfo->ulByteStride = tiler_stride(tiler_naddr); /* Calculate the whole TILER region to map in bytes */ psPVRFBInfo->ulFBSize = max_rows * psPVRFBInfo->ulByteStride; + /* Re-calculate buffer size with previous stride */ + psPVRFBInfo->ulBufferSize = + psPVRFBInfo->ulHeight * psPVRFBInfo->ulByteStride; } #endif - psPVRFBInfo->ulBufferSize = - psPVRFBInfo->ulHeight * psPVRFBInfo->ulByteStride; + /* Get physical display size for DPI calculation */ if (psLINFBInfo->var.width < 0 || psLINFBInfo->var.height < 0) { psDevInfo->sDisplayInfo.ui32PhysicalWidthmm = 0; |