Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / video / exynos / exynos_mipi_dsi.c
index 557091dc0e97382bcab08baa165d21ea6b5ff8f8..9908e75ae761e625dd2944207007c702efce1960 100644 (file)
@@ -58,7 +58,7 @@ static struct mipi_dsim_platform_data *to_dsim_plat(struct platform_device
 }
 
 static struct regulator_bulk_data supplies[] = {
-       { .supply = "vdd10", },
+       { .supply = "vdd11", },
        { .supply = "vdd18", },
 };
 
@@ -102,9 +102,11 @@ static void exynos_mipi_update_cfg(struct mipi_dsim_device *dsim)
        /* set display timing. */
        exynos_mipi_dsi_set_display_mode(dsim, dsim->dsim_config);
 
+       exynos_mipi_dsi_init_interrupt(dsim);
+
        /*
         * data from Display controller(FIMD) is transferred in video mode
-        * but in case of command mode, all settigs is updated to registers.
+        * but in case of command mode, all settings are updated to registers.
         */
        exynos_mipi_dsi_stand_by(dsim, 1);
 }
@@ -413,27 +415,30 @@ static int exynos_mipi_dsi_probe(struct platform_device *pdev)
                goto err_platform_get_irq;
        }
 
+       init_completion(&dsim_wr_comp);
+       init_completion(&dsim_rd_comp);
+       platform_set_drvdata(pdev, dsim);
+
        ret = request_irq(dsim->irq, exynos_mipi_dsi_interrupt_handler,
-                       IRQF_SHARED, pdev->name, dsim);
+                       IRQF_SHARED, dev_name(&pdev->dev), dsim);
        if (ret != 0) {
                dev_err(&pdev->dev, "failed to request dsim irq\n");
                ret = -EINVAL;
                goto err_bind;
        }
 
-       init_completion(&dsim_wr_comp);
-       init_completion(&dsim_rd_comp);
-
-       /* enable interrupt */
+       /* enable interrupts */
        exynos_mipi_dsi_init_interrupt(dsim);
 
        /* initialize mipi-dsi client(lcd panel). */
        if (dsim_ddi->dsim_lcd_drv && dsim_ddi->dsim_lcd_drv->probe)
                dsim_ddi->dsim_lcd_drv->probe(dsim_ddi->dsim_lcd_dev);
 
-       /* in case that mipi got enabled at bootloader. */
-       if (dsim_pd->enabled)
-               goto out;
+       /* in case mipi-dsi has been enabled by bootloader */
+       if (dsim_pd->enabled) {
+               exynos_mipi_regulator_enable(dsim);
+               goto done;
+       }
 
        /* lcd panel power on. */
        if (dsim_ddi->dsim_lcd_drv && dsim_ddi->dsim_lcd_drv->power_on)
@@ -453,12 +458,11 @@ static int exynos_mipi_dsi_probe(struct platform_device *pdev)
 
        dsim->suspended = false;
 
-out:
+done:
        platform_set_drvdata(pdev, dsim);
 
-       dev_dbg(&pdev->dev, "mipi-dsi driver(%s mode) has been probed.\n",
-               (dsim_config->e_interface == DSIM_COMMAND) ?
-                       "CPU" : "RGB");
+       dev_dbg(&pdev->dev, "%s() completed sucessfuly (%s mode)\n", __func__,
+               dsim_config->e_interface == DSIM_COMMAND ? "CPU" : "RGB");
 
        return 0;
 
@@ -515,10 +519,10 @@ static int __devexit exynos_mipi_dsi_remove(struct platform_device *pdev)
        return 0;
 }
 
-#ifdef CONFIG_PM
-static int exynos_mipi_dsi_suspend(struct platform_device *pdev,
-               pm_message_t state)
+#ifdef CONFIG_PM_SLEEP
+static int exynos_mipi_dsi_suspend(struct device *dev)
 {
+       struct platform_device *pdev = to_platform_device(dev);
        struct mipi_dsim_device *dsim = platform_get_drvdata(pdev);
        struct mipi_dsim_lcd_driver *client_drv = dsim->dsim_lcd_drv;
        struct mipi_dsim_lcd_device *client_dev = dsim->dsim_lcd_dev;
@@ -544,8 +548,9 @@ static int exynos_mipi_dsi_suspend(struct platform_device *pdev,
        return 0;
 }
 
-static int exynos_mipi_dsi_resume(struct platform_device *pdev)
+static int exynos_mipi_dsi_resume(struct device *dev)
 {
+       struct platform_device *pdev = to_platform_device(dev);
        struct mipi_dsim_device *dsim = platform_get_drvdata(pdev);
        struct mipi_dsim_lcd_driver *client_drv = dsim->dsim_lcd_drv;
        struct mipi_dsim_lcd_device *client_dev = dsim->dsim_lcd_dev;
@@ -577,19 +582,19 @@ static int exynos_mipi_dsi_resume(struct platform_device *pdev)
 
        return 0;
 }
-#else
-#define exynos_mipi_dsi_suspend NULL
-#define exynos_mipi_dsi_resume NULL
 #endif
 
+static const struct dev_pm_ops exynos_mipi_dsi_pm_ops = {
+       SET_SYSTEM_SLEEP_PM_OPS(exynos_mipi_dsi_suspend, exynos_mipi_dsi_resume)
+};
+
 static struct platform_driver exynos_mipi_dsi_driver = {
        .probe = exynos_mipi_dsi_probe,
        .remove = __devexit_p(exynos_mipi_dsi_remove),
-       .suspend = exynos_mipi_dsi_suspend,
-       .resume = exynos_mipi_dsi_resume,
        .driver = {
                   .name = "exynos-mipi-dsim",
                   .owner = THIS_MODULE,
+                  .pm = &exynos_mipi_dsi_pm_ops,
        },
 };