fbdev: sh_mobile_lcdc: increase maximum framebuffer size to support 1080p
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@gmx.de> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
Родитель
8c183ecee2
Коммит
d2ecbab596
|
@ -54,8 +54,8 @@ static int lcdc_shared_regs[] = {
|
||||||
};
|
};
|
||||||
#define NR_SHARED_REGS ARRAY_SIZE(lcdc_shared_regs)
|
#define NR_SHARED_REGS ARRAY_SIZE(lcdc_shared_regs)
|
||||||
|
|
||||||
#define DEFAULT_XRES 1280
|
#define MAX_XRES 1920
|
||||||
#define DEFAULT_YRES 1024
|
#define MAX_YRES 1080
|
||||||
|
|
||||||
static unsigned long lcdc_offs_mainlcd[NR_CH_REGS] = {
|
static unsigned long lcdc_offs_mainlcd[NR_CH_REGS] = {
|
||||||
[LDDCKPAT1R] = 0x400,
|
[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;
|
struct sh_mobile_lcdc_chan *ch = info->par;
|
||||||
|
|
||||||
if (var->xres < 160 || var->xres > 1920 ||
|
if (var->xres > MAX_XRES || var->yres > MAX_YRES ||
|
||||||
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 ||
|
|
||||||
var->xres * var->yres * (ch->cfg.bpp / 8) * 2 > info->fix.smem_len) {
|
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",
|
dev_warn(info->dev, "Invalid info: %u-%u-%u-%u x %u-%u-%u-%u @ %ukHz!\n",
|
||||||
var->xres, var->yres,
|
var->left_margin, var->xres, var->right_margin, var->hsync_len,
|
||||||
var->left_margin, var->right_margin,
|
var->upper_margin, var->yres, var->lower_margin, var->vsync_len,
|
||||||
var->upper_margin, var->lower_margin,
|
PICOS2KHZ(var->pixclock));
|
||||||
var->hsync_len, var->vsync_len,
|
|
||||||
var->pixclock);
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1226,7 +1216,7 @@ static int __devinit sh_mobile_lcdc_probe(struct platform_device *pdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mode)
|
if (!mode)
|
||||||
max_size = DEFAULT_XRES * DEFAULT_YRES;
|
max_size = MAX_XRES * MAX_YRES;
|
||||||
else if (max_cfg)
|
else if (max_cfg)
|
||||||
dev_dbg(&pdev->dev, "Found largest videomode %ux%u\n",
|
dev_dbg(&pdev->dev, "Found largest videomode %ux%u\n",
|
||||||
max_cfg->xres, max_cfg->yres);
|
max_cfg->xres, max_cfg->yres);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче