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: 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
This commit is contained in:
parent
070ab1283a
commit
f730eceb42
@ -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)
|
|||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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);
|
return drm_mode_config_helper_suspend(mipi->tinydrm.drm);
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
mi0283qt_fini(mipi);
|
|
||||||
|
|
||||||
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)
|
|||||||
}
|
}
|
||||||
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)
|
|||||||
* 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)
|
|||||||
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,
|
|||||||
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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user