]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/tinydrm/mi0283qt: Let the display pipe handle power
authorNoralf Trønnes <noralf@tronnes.org>
Wed, 10 Jan 2018 18:59:38 +0000 (19:59 +0100)
committerNoralf Trønnes <noralf@tronnes.org>
Mon, 15 Jan 2018 14:16:06 +0000 (15:16 +0100)
It's better to leave power handling and controller init to the
modesetting machinery using the simple pipe .enable and .disable
callbacks. Remove unused mipi_dbi_pipe_enable().

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Reviewed-by: David Lechner <david@lechnology.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180110185940.53841-6-noralf@tronnes.org
drivers/gpu/drm/tinydrm/mi0283qt.c
drivers/gpu/drm/tinydrm/mipi-dbi.c
include/drm/tinydrm/mipi-dbi.h

index 1617405faed4bb7d50eaae1a0f9a42f407f25d7b..79cb5af5abacd33f5eca15f24944a62f73e74618 100644 (file)
 #define ILI9341_MADCTL_MX      BIT(6)
 #define ILI9341_MADCTL_MY      BIT(7)
 
-static int mi0283qt_init(struct mipi_dbi *mipi)
+static void mi0283qt_enable(struct drm_simple_display_pipe *pipe,
+                           struct drm_crtc_state *crtc_state)
 {
+       struct tinydrm_device *tdev = pipe_to_tinydrm(pipe);
+       struct mipi_dbi *mipi = mipi_dbi_from_tinydrm(tdev);
        u8 addr_mode;
        int ret;
 
@@ -56,9 +59,9 @@ static int mi0283qt_init(struct mipi_dbi *mipi)
 
        ret = mipi_dbi_poweron_conditional_reset(mipi);
        if (ret < 0)
-               return ret;
+               return;
        if (ret == 1)
-               return 0;
+               goto out_enable;
 
        mipi_dbi_command(mipi, MIPI_DCS_SET_DISPLAY_OFF);
 
@@ -121,19 +124,12 @@ static int mi0283qt_init(struct mipi_dbi *mipi)
        mipi_dbi_command(mipi, MIPI_DCS_SET_DISPLAY_ON);
        msleep(100);
 
-       return 0;
-}
-
-static void mi0283qt_fini(void *data)
-{
-       struct mipi_dbi *mipi = data;
-
-       DRM_DEBUG_KMS("\n");
-       regulator_disable(mipi->regulator);
+out_enable:
+       mipi_dbi_enable_flush(mipi);
 }
 
 static const struct drm_simple_display_pipe_funcs mi0283qt_pipe_funcs = {
-       .enable = mipi_dbi_pipe_enable,
+       .enable = mi0283qt_enable,
        .disable = mipi_dbi_pipe_disable,
        .update = tinydrm_display_pipe_update,
        .prepare_fb = tinydrm_display_pipe_prepare_fb,
@@ -214,17 +210,6 @@ static int mi0283qt_probe(struct spi_device *spi)
        if (ret)
                return ret;
 
-       ret = mi0283qt_init(mipi);
-       if (ret)
-               return ret;
-
-       /* use devres to fini after drm unregister (drv->remove is before) */
-       ret = devm_add_action(dev, mi0283qt_fini, mipi);
-       if (ret) {
-               mi0283qt_fini(mipi);
-               return ret;
-       }
-
        spi_set_drvdata(spi, mipi);
 
        return devm_tinydrm_register(&mipi->tinydrm);
@@ -240,25 +225,13 @@ static void mi0283qt_shutdown(struct spi_device *spi)
 static int __maybe_unused mi0283qt_pm_suspend(struct device *dev)
 {
        struct mipi_dbi *mipi = dev_get_drvdata(dev);
-       int ret;
-
-       ret = drm_mode_config_helper_suspend(mipi->tinydrm.drm);
-       if (ret)
-               return ret;
-
-       mi0283qt_fini(mipi);
 
-       return 0;
+       return drm_mode_config_helper_suspend(mipi->tinydrm.drm);
 }
 
 static int __maybe_unused mi0283qt_pm_resume(struct device *dev)
 {
        struct mipi_dbi *mipi = dev_get_drvdata(dev);
-       int ret;
-
-       ret = mi0283qt_init(mipi);
-       if (ret)
-               return ret;
 
        drm_mode_config_helper_resume(mipi->tinydrm.drm);
 
index 3e879d605ed3559bef815989108168ba604edabe..6798b48374410467bd37702a0c6b0420917208a1 100644 (file)
@@ -290,31 +290,6 @@ void mipi_dbi_enable_flush(struct mipi_dbi *mipi)
 }
 EXPORT_SYMBOL(mipi_dbi_enable_flush);
 
-/**
- * mipi_dbi_pipe_enable - MIPI DBI pipe enable helper
- * @pipe: Display pipe
- * @crtc_state: CRTC state
- *
- * This function enables backlight. Drivers can use this as their
- * &drm_simple_display_pipe_funcs->enable callback.
- */
-void mipi_dbi_pipe_enable(struct drm_simple_display_pipe *pipe,
-                         struct drm_crtc_state *crtc_state)
-{
-       struct tinydrm_device *tdev = pipe_to_tinydrm(pipe);
-       struct mipi_dbi *mipi = mipi_dbi_from_tinydrm(tdev);
-       struct drm_framebuffer *fb = pipe->plane.fb;
-
-       DRM_DEBUG_KMS("\n");
-
-       mipi->enabled = true;
-       if (fb)
-               fb->funcs->dirty(fb, NULL, 0, 0, NULL, 0);
-
-       tinydrm_enable_backlight(mipi->backlight);
-}
-EXPORT_SYMBOL(mipi_dbi_pipe_enable);
-
 static void mipi_dbi_blank(struct mipi_dbi *mipi)
 {
        struct drm_device *drm = mipi->tinydrm.drm;
@@ -336,8 +311,8 @@ static void mipi_dbi_blank(struct mipi_dbi *mipi)
  * mipi_dbi_pipe_disable - MIPI DBI pipe disable helper
  * @pipe: Display pipe
  *
- * This function disables backlight if present or if not the
- * display memory is blanked. Drivers can use this as their
+ * This function disables backlight if present, if not the display memory is
+ * blanked. The regulator is disabled if in use. Drivers can use this as their
  * &drm_simple_display_pipe_funcs->disable callback.
  */
 void mipi_dbi_pipe_disable(struct drm_simple_display_pipe *pipe)
@@ -353,6 +328,9 @@ void mipi_dbi_pipe_disable(struct drm_simple_display_pipe *pipe)
                tinydrm_disable_backlight(mipi->backlight);
        else
                mipi_dbi_blank(mipi);
+
+       if (mipi->regulator)
+               regulator_disable(mipi->regulator);
 }
 EXPORT_SYMBOL(mipi_dbi_pipe_disable);
 
index 795a4a2205bb804a2a6e7b65260c91b2f3b0b9b0..44e824af2ef6c8a057a836b11a8f48d5301fa53a 100644 (file)
@@ -68,8 +68,6 @@ int mipi_dbi_init(struct device *dev, struct mipi_dbi *mipi,
                  struct drm_driver *driver,
                  const struct drm_display_mode *mode, unsigned int rotation);
 void mipi_dbi_enable_flush(struct mipi_dbi *mipi);
-void mipi_dbi_pipe_enable(struct drm_simple_display_pipe *pipe,
-                         struct drm_crtc_state *crtc_state);
 void mipi_dbi_pipe_disable(struct drm_simple_display_pipe *pipe);
 void mipi_dbi_hw_reset(struct mipi_dbi *mipi);
 bool mipi_dbi_display_is_on(struct mipi_dbi *mipi);