Commit f730eceb authored by Noralf Trønnes's avatar Noralf Trønnes

drm/tinydrm/mi0283qt: Let the display pipe handle power

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: default avatarNoralf Trønnes <noralf@tronnes.org>
Reviewed-by: default avatarDavid Lechner <david@lechnology.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180110185940.53841-6-noralf@tronnes.org
parent 070ab128
...@@ -47,8 +47,11 @@ ...@@ -47,8 +47,11 @@
#define ILI9341_MADCTL_MX BIT(6) #define ILI9341_MADCTL_MX BIT(6)
#define ILI9341_MADCTL_MY BIT(7) #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; u8 addr_mode;
int ret; int ret;
...@@ -56,9 +59,9 @@ static int mi0283qt_init(struct mipi_dbi *mipi) ...@@ -56,9 +59,9 @@ static int mi0283qt_init(struct mipi_dbi *mipi)
ret = mipi_dbi_poweron_conditional_reset(mipi); ret = mipi_dbi_poweron_conditional_reset(mipi);
if (ret < 0) if (ret < 0)
return ret; return;
if (ret == 1) if (ret == 1)
return 0; goto out_enable;
mipi_dbi_command(mipi, MIPI_DCS_SET_DISPLAY_OFF); mipi_dbi_command(mipi, MIPI_DCS_SET_DISPLAY_OFF);
...@@ -121,19 +124,12 @@ static int mi0283qt_init(struct mipi_dbi *mipi) ...@@ -121,19 +124,12 @@ static int mi0283qt_init(struct mipi_dbi *mipi)
mipi_dbi_command(mipi, MIPI_DCS_SET_DISPLAY_ON); mipi_dbi_command(mipi, MIPI_DCS_SET_DISPLAY_ON);
msleep(100); msleep(100);
return 0; out_enable:
} mipi_dbi_enable_flush(mipi);
static void mi0283qt_fini(void *data)
{
struct mipi_dbi *mipi = data;
DRM_DEBUG_KMS("\n");
regulator_disable(mipi->regulator);
} }
static const struct drm_simple_display_pipe_funcs mi0283qt_pipe_funcs = { static const struct drm_simple_display_pipe_funcs mi0283qt_pipe_funcs = {
.enable = mipi_dbi_pipe_enable, .enable = mi0283qt_enable,
.disable = mipi_dbi_pipe_disable, .disable = mipi_dbi_pipe_disable,
.update = tinydrm_display_pipe_update, .update = tinydrm_display_pipe_update,
.prepare_fb = tinydrm_display_pipe_prepare_fb, .prepare_fb = tinydrm_display_pipe_prepare_fb,
...@@ -214,17 +210,6 @@ static int mi0283qt_probe(struct spi_device *spi) ...@@ -214,17 +210,6 @@ static int mi0283qt_probe(struct spi_device *spi)
if (ret) if (ret)
return 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); spi_set_drvdata(spi, mipi);
return devm_tinydrm_register(&mipi->tinydrm); return devm_tinydrm_register(&mipi->tinydrm);
...@@ -240,25 +225,13 @@ static void mi0283qt_shutdown(struct spi_device *spi) ...@@ -240,25 +225,13 @@ static void mi0283qt_shutdown(struct spi_device *spi)
static int __maybe_unused mi0283qt_pm_suspend(struct device *dev) static int __maybe_unused mi0283qt_pm_suspend(struct device *dev)
{ {
struct mipi_dbi *mipi = dev_get_drvdata(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 drm_mode_config_helper_suspend(mipi->tinydrm.drm);
return 0;
} }
static int __maybe_unused mi0283qt_pm_resume(struct device *dev) static int __maybe_unused mi0283qt_pm_resume(struct device *dev)
{ {
struct mipi_dbi *mipi = dev_get_drvdata(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); drm_mode_config_helper_resume(mipi->tinydrm.drm);
......
...@@ -290,31 +290,6 @@ void mipi_dbi_enable_flush(struct mipi_dbi *mipi) ...@@ -290,31 +290,6 @@ void mipi_dbi_enable_flush(struct mipi_dbi *mipi)
} }
EXPORT_SYMBOL(mipi_dbi_enable_flush); 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) static void mipi_dbi_blank(struct mipi_dbi *mipi)
{ {
struct drm_device *drm = mipi->tinydrm.drm; struct drm_device *drm = mipi->tinydrm.drm;
...@@ -336,8 +311,8 @@ static void mipi_dbi_blank(struct mipi_dbi *mipi) ...@@ -336,8 +311,8 @@ static void mipi_dbi_blank(struct mipi_dbi *mipi)
* mipi_dbi_pipe_disable - MIPI DBI pipe disable helper * mipi_dbi_pipe_disable - MIPI DBI pipe disable helper
* @pipe: Display pipe * @pipe: Display pipe
* *
* This function disables backlight if present or if not the * This function disables backlight if present, if not the display memory is
* display memory is blanked. Drivers can use this as their * blanked. The regulator is disabled if in use. Drivers can use this as their
* &drm_simple_display_pipe_funcs->disable callback. * &drm_simple_display_pipe_funcs->disable callback.
*/ */
void mipi_dbi_pipe_disable(struct drm_simple_display_pipe *pipe) 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) ...@@ -353,6 +328,9 @@ void mipi_dbi_pipe_disable(struct drm_simple_display_pipe *pipe)
tinydrm_disable_backlight(mipi->backlight); tinydrm_disable_backlight(mipi->backlight);
else else
mipi_dbi_blank(mipi); mipi_dbi_blank(mipi);
if (mipi->regulator)
regulator_disable(mipi->regulator);
} }
EXPORT_SYMBOL(mipi_dbi_pipe_disable); EXPORT_SYMBOL(mipi_dbi_pipe_disable);
......
...@@ -68,8 +68,6 @@ int mipi_dbi_init(struct device *dev, struct mipi_dbi *mipi, ...@@ -68,8 +68,6 @@ int mipi_dbi_init(struct device *dev, struct mipi_dbi *mipi,
struct drm_driver *driver, struct drm_driver *driver,
const struct drm_display_mode *mode, unsigned int rotation); const struct drm_display_mode *mode, unsigned int rotation);
void mipi_dbi_enable_flush(struct mipi_dbi *mipi); 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_pipe_disable(struct drm_simple_display_pipe *pipe);
void mipi_dbi_hw_reset(struct mipi_dbi *mipi); void mipi_dbi_hw_reset(struct mipi_dbi *mipi);
bool mipi_dbi_display_is_on(struct mipi_dbi *mipi); bool mipi_dbi_display_is_on(struct mipi_dbi *mipi);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment