Re: [PATCH 3/5] fbdev: sh_mobile_lcdc: increase maximum framebuffer size to support 1080p

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Paul, apart from increasing the fb size to 1080p, this patch also fixes a 
regression, which leads to unusable by applications framebuffer on some 
platforms, including migor. This happens, when one of parameters lies 
outside of limits, being checked in sh_mobile_check_var(). On migor it is

		.left_margin = 0,

Then the fb-console is working, but, e.g., mplayer is not. So, we need 
this patch in 2.6.37 too, please. Unfortunately, it also introduces a 
wrong format printk format, which a later patch of yours fixes, so, you 
might want to push that patch too, although, that's not that important.

Thanks
Guennadi

On Thu, 4 Nov 2010, Guennadi Liakhovetski wrote:

> LCDC hardware can support 1920x1080 formats, adjust the driver to cover them.
> Besides, instead of guessing some "reasonable" validity checks, only verify
> values in .fb_check_var(), that we are sure, we cannot support.
> 
> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@xxxxxx>
> ---
>  drivers/video/sh_mobile_lcdcfb.c |   26 ++++++++------------------
>  1 files changed, 8 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/video/sh_mobile_lcdcfb.c b/drivers/video/sh_mobile_lcdcfb.c
> index a87dace..8e8d698 100644
> --- a/drivers/video/sh_mobile_lcdcfb.c
> +++ b/drivers/video/sh_mobile_lcdcfb.c
> @@ -54,8 +54,8 @@ static int lcdc_shared_regs[] = {
>  };
>  #define NR_SHARED_REGS ARRAY_SIZE(lcdc_shared_regs)
>  
> -#define DEFAULT_XRES 1280
> -#define DEFAULT_YRES 1024
> +#define MAX_XRES 1920
> +#define MAX_YRES 1080
>  
>  static unsigned long lcdc_offs_mainlcd[NR_CH_REGS] = {
>  	[LDDCKPAT1R] = 0x400,
> @@ -914,22 +914,12 @@ static int sh_mobile_check_var(struct fb_var_screeninfo *var, struct fb_info *in
>  {
>  	struct sh_mobile_lcdc_chan *ch = info->par;
>  
> -	if (var->xres < 160 || var->xres > 1920 ||
> -	    var->yres < 120 || var->yres > 1080 ||
> -	    var->left_margin < 32 || var->left_margin > 320 ||
> -	    var->right_margin < 12 || var->right_margin > 240 ||
> -	    var->upper_margin < 12 || var->upper_margin > 120 ||
> -	    var->lower_margin < 1 || var->lower_margin > 64 ||
> -	    var->hsync_len < 32 || var->hsync_len > 240 ||
> -	    var->vsync_len < 2 || var->vsync_len > 64 ||
> -	    var->pixclock < 6000 || var->pixclock > 40000 ||
> +	if (var->xres > MAX_XRES || var->yres > MAX_YRES ||
>  	    var->xres * var->yres * (ch->cfg.bpp / 8) * 2 > info->fix.smem_len) {
> -		dev_warn(info->dev, "Invalid info: %u %u %u %u %u %u %u %u %u!\n",
> -			 var->xres, var->yres,
> -			 var->left_margin, var->right_margin,
> -			 var->upper_margin, var->lower_margin,
> -			 var->hsync_len, var->vsync_len,
> -			 var->pixclock);
> +		dev_warn(info->dev, "Invalid info: %u-%u-%u-%u x %u-%u-%u-%u @ %ukHz!\n",
> +			 var->left_margin, var->xres, var->right_margin, var->hsync_len,
> +			 var->upper_margin, var->yres, var->lower_margin, var->vsync_len,
> +			 PICOS2KHZ(var->pixclock));
>  		return -EINVAL;
>  	}
>  	return 0;
> @@ -1225,7 +1215,7 @@ static int __devinit sh_mobile_lcdc_probe(struct platform_device *pdev)
>  		}
>  
>  		if (!mode)
> -			max_size = DEFAULT_XRES * DEFAULT_YRES;
> +			max_size = MAX_XRES * MAX_YRES;
>  		else if (max_cfg)
>  			dev_dbg(&pdev->dev, "Found largest videomode %ux%u\n",
>  				max_cfg->xres, max_cfg->yres);
> -- 
> 1.7.2.3
> 
> 

---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
--
To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Video for Linux]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Tourism]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux