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

Signed-off-by: Afzal Mohammed <af...@ti.com>
---
 drivers/video/da8xx-fb.c |   42 ++++++++++++++++++++++++++----------------
 1 file changed, 26 insertions(+), 16 deletions(-)

diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
index 32ce385..991d9e3 100644
--- a/drivers/video/da8xx-fb.c
+++ b/drivers/video/da8xx-fb.c
@@ -1257,6 +1257,27 @@ static struct fb_ops da8xx_fb_ops = {
        .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 __devinit fb_probe(struct platform_device *device)
 {
        struct da8xx_lcdc_platform_data *fb_pdata =
@@ -1266,7 +1287,7 @@ static int __devinit fb_probe(struct platform_device 
*device)
        struct fb_info *da8xx_fb_info;
        struct clk *fb_clk = NULL;
        struct da8xx_fb_par *par;
-       int ret, i;
+       int ret;
        unsigned long ulcm;
 
        if (fb_pdata == NULL) {
@@ -1274,6 +1295,10 @@ static int __devinit fb_probe(struct platform_device 
*device)
                return -ENOENT;
        }
 
+       lcdc_info = da8xx_fb_get_videomode(device);
+       if (lcdc_info == NULL)
+               return -ENODEV;
+
        lcdc_regs = platform_get_resource(device, IORESOURCE_MEM, 0);
        da8xx_fb_reg_base = devm_request_and_ioremap(&device->dev, lcdc_regs);
        if (!da8xx_fb_reg_base) {
@@ -1307,21 +1332,6 @@ static int __devinit fb_probe(struct platform_device 
*device)
                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;
 
        if (!lcd_cfg) {
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to