video: da8xx-fb: reorganize panel detection

Move panel detection to a separate function, this helps in readability
as well as makes DT support cleaner.

Signed-off-by: Afzal Mohammed <afzal@ti.com>
Signed-off-by: Darren Etheridge <detheridge@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
Afzal Mohammed 2013-08-05 17:02:35 -05:00 committed by Tomi Valkeinen
parent 3a58101da2
commit 2bdff0680f

View File

@ -1253,6 +1253,27 @@ static struct fb_ops da8xx_fb_ops = {
.fb_blank = cfb_blank, .fb_blank = cfb_blank,
}; };
static struct fb_videomode *da8xx_fb_get_videomode(struct platform_device *dev)
{
struct da8xx_lcdc_platform_data *fb_pdata = dev->dev.platform_data;
struct fb_videomode *lcdc_info;
int i;
for (i = 0, lcdc_info = known_lcd_panels;
i < ARRAY_SIZE(known_lcd_panels); i++, lcdc_info++) {
if (strcmp(fb_pdata->type, lcdc_info->name) == 0)
break;
}
if (i == ARRAY_SIZE(known_lcd_panels)) {
dev_err(&dev->dev, "no panel found\n");
return NULL;
}
dev_info(&dev->dev, "found %s panel\n", lcdc_info->name);
return lcdc_info;
}
static int fb_probe(struct platform_device *device) static int fb_probe(struct platform_device *device)
{ {
struct da8xx_lcdc_platform_data *fb_pdata = struct da8xx_lcdc_platform_data *fb_pdata =
@ -1263,7 +1284,7 @@ static int fb_probe(struct platform_device *device)
struct fb_info *da8xx_fb_info; struct fb_info *da8xx_fb_info;
struct clk *fb_clk = NULL; struct clk *fb_clk = NULL;
struct da8xx_fb_par *par; struct da8xx_fb_par *par;
int ret, i; int ret;
unsigned long ulcm; unsigned long ulcm;
if (fb_pdata == NULL) { if (fb_pdata == NULL) {
@ -1271,6 +1292,10 @@ static int fb_probe(struct platform_device *device)
return -ENOENT; return -ENOENT;
} }
lcdc_info = da8xx_fb_get_videomode(device);
if (lcdc_info == NULL)
return -ENODEV;
lcdc_regs = platform_get_resource(device, IORESOURCE_MEM, 0); lcdc_regs = platform_get_resource(device, IORESOURCE_MEM, 0);
da8xx_fb_reg_base = devm_ioremap_resource(&device->dev, lcdc_regs); da8xx_fb_reg_base = devm_ioremap_resource(&device->dev, lcdc_regs);
if (IS_ERR(da8xx_fb_reg_base)) if (IS_ERR(da8xx_fb_reg_base))
@ -1302,21 +1327,6 @@ static int fb_probe(struct platform_device *device)
break; break;
} }
for (i = 0, lcdc_info = known_lcd_panels;
i < ARRAY_SIZE(known_lcd_panels);
i++, lcdc_info++) {
if (strcmp(fb_pdata->type, lcdc_info->name) == 0)
break;
}
if (i == ARRAY_SIZE(known_lcd_panels)) {
dev_err(&device->dev, "GLCD: No valid panel found\n");
ret = -ENODEV;
goto err_pm_runtime_disable;
} else
dev_info(&device->dev, "GLCD: Found %s panel\n",
fb_pdata->type);
lcd_cfg = (struct lcd_ctrl_config *)fb_pdata->controller_data; lcd_cfg = (struct lcd_ctrl_config *)fb_pdata->controller_data;
if (!lcd_cfg) { if (!lcd_cfg) {