diff options
Diffstat (limited to 'drivers/gpu/drm/omapdrm/dss/dispc.c')
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/dispc.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c index 5554b72cf56a..d956e6266368 100644 --- a/drivers/gpu/drm/omapdrm/dss/dispc.c +++ b/drivers/gpu/drm/omapdrm/dss/dispc.c | |||
@@ -2506,6 +2506,25 @@ static int dispc_ovl_calc_scaling_44xx(unsigned long pclk, unsigned long lclk, | |||
2506 | return -EINVAL; | 2506 | return -EINVAL; |
2507 | } | 2507 | } |
2508 | 2508 | ||
2509 | if (*decim_x > 4 && color_mode != OMAP_DSS_COLOR_NV12) { | ||
2510 | /* | ||
2511 | * Let's disable all scaling that requires horizontal | ||
2512 | * decimation with higher factor than 4, until we have | ||
2513 | * better estimates of what we can and can not | ||
2514 | * do. However, NV12 color format appears to work Ok | ||
2515 | * with all decimation factors. | ||
2516 | * | ||
2517 | * When decimating horizontally by more that 4 the dss | ||
2518 | * is not able to fetch the data in burst mode. When | ||
2519 | * this happens it is hard to tell if there enough | ||
2520 | * bandwidth. Despite what theory says this appears to | ||
2521 | * be true also for 16-bit color formats. | ||
2522 | */ | ||
2523 | DSSERR("Not enough bandwidth, too much downscaling (x-decimation factor %d > 4)", *decim_x); | ||
2524 | |||
2525 | return -EINVAL; | ||
2526 | } | ||
2527 | |||
2509 | *core_clk = dispc.feat->calc_core_clk(pclk, in_width, in_height, | 2528 | *core_clk = dispc.feat->calc_core_clk(pclk, in_width, in_height, |
2510 | out_width, out_height, mem_to_mem); | 2529 | out_width, out_height, mem_to_mem); |
2511 | return 0; | 2530 | return 0; |