Skip to content

Commit

Permalink
OMAP: DSS2: move enable/disable/suspend/resume
Browse files Browse the repository at this point in the history
Move enable/disable/suspend/resume from omap_dss_device to
omap_dss_driver.

This is part of a larger patch-set, which moves the control from omapdss
driver to the display driver.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
  • Loading branch information
Tomi Valkeinen committed Feb 24, 2010
1 parent 18946f6 commit 37ac60e
Show file tree
Hide file tree
Showing 15 changed files with 465 additions and 538 deletions.
18 changes: 11 additions & 7 deletions arch/arm/plat-omap/include/plat/display.h
Original file line number Diff line number Diff line change
Expand Up @@ -462,12 +462,6 @@ struct omap_dss_device {

enum omap_dss_display_state state;

int (*enable)(struct omap_dss_device *dssdev);
void (*disable)(struct omap_dss_device *dssdev);

int (*suspend)(struct omap_dss_device *dssdev);
int (*resume)(struct omap_dss_device *dssdev);

int (*check_timings)(struct omap_dss_device *dssdev,
struct omap_video_timings *timings);
void (*set_timings)(struct omap_dss_device *dssdev,
Expand Down Expand Up @@ -571,11 +565,21 @@ int omap_dsi_update(struct omap_dss_device *dssdev,
u16 x, u16 y, u16 w, u16 h,
void (*callback)(int, void *), void *data);

int omapdss_dsi_display_enable(struct omap_dss_device *dssdev);
void omapdss_dsi_display_disable(struct omap_dss_device *dssdev);

int omapdss_dpi_display_enable(struct omap_dss_device *dssdev);
void omapdss_dpi_display_disable(struct omap_dss_device *dssdev);

int omapdss_sdi_display_enable(struct omap_dss_device *dssdev);
void omapdss_sdi_display_disable(struct omap_dss_device *dssdev);

int omapdss_rfbi_display_enable(struct omap_dss_device *dssdev);
void omapdss_rfbi_display_disable(struct omap_dss_device *dssdev);
int omap_rfbi_prepare_update(struct omap_dss_device *dssdev,
u16 *x, u16 *y, u16 *w, u16 *h);
int omap_rfbi_update(struct omap_dss_device *dssdev,
u16 x, u16 y, u16 w, u16 h,
void (*callback)(void *), void *data);


#endif
56 changes: 49 additions & 7 deletions drivers/video/omap2/displays/panel-generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,35 @@ static struct omap_video_timings generic_panel_timings = {
.vbp = 7,
};

static int generic_panel_power_on(struct omap_dss_device *dssdev)
{
int r;

r = omapdss_dpi_display_enable(dssdev);
if (r)
goto err0;

if (dssdev->platform_enable) {
r = dssdev->platform_enable(dssdev);
if (r)
goto err1;
}

return 0;
err1:
omapdss_dpi_display_disable(dssdev);
err0:
return r;
}

static void generic_panel_power_off(struct omap_dss_device *dssdev)
{
if (dssdev->platform_disable)
dssdev->platform_disable(dssdev);

omapdss_dpi_display_disable(dssdev);
}

static int generic_panel_probe(struct omap_dss_device *dssdev)
{
dssdev->panel.config = OMAP_DSS_LCD_TFT;
Expand All @@ -51,27 +80,40 @@ static int generic_panel_enable(struct omap_dss_device *dssdev)
{
int r = 0;

if (dssdev->platform_enable)
r = dssdev->platform_enable(dssdev);
r = generic_panel_power_on(dssdev);
if (r)
return r;

return r;
dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;

return 0;
}

static void generic_panel_disable(struct omap_dss_device *dssdev)
{
if (dssdev->platform_disable)
dssdev->platform_disable(dssdev);
generic_panel_power_off(dssdev);

dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
}

static int generic_panel_suspend(struct omap_dss_device *dssdev)
{
generic_panel_disable(dssdev);
generic_panel_power_off(dssdev);
dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED;
return 0;
}

static int generic_panel_resume(struct omap_dss_device *dssdev)
{
return generic_panel_enable(dssdev);
int r = 0;

r = generic_panel_power_on(dssdev);
if (r)
return r;

dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;

return 0;
}

static struct omap_dss_driver generic_driver = {
Expand Down
67 changes: 53 additions & 14 deletions drivers/video/omap2/displays/panel-sharp-lq043t1dg01.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,41 @@ static struct omap_video_timings sharp_lq_timings = {
.vbp = 2,
};

static int sharp_lq_panel_power_on(struct omap_dss_device *dssdev)
{
int r;

r = omapdss_dpi_display_enable(dssdev);
if (r)
goto err0;

/* wait couple of vsyncs until enabling the LCD */
msleep(50);

if (dssdev->platform_enable) {
r = dssdev->platform_enable(dssdev);
if (r)
goto err1;
}

return 0;
err1:
omapdss_dpi_display_disable(dssdev);
err0:
return r;
}

static void sharp_lq_panel_power_off(struct omap_dss_device *dssdev)
{
if (dssdev->platform_disable)
dssdev->platform_disable(dssdev);

/* wait at least 5 vsyncs after disabling the LCD */
msleep(100);

omapdss_dpi_display_disable(dssdev);
}

static int sharp_lq_panel_probe(struct omap_dss_device *dssdev)
{

Expand All @@ -58,36 +93,40 @@ static int sharp_lq_panel_enable(struct omap_dss_device *dssdev)
{
int r = 0;

r = sharp_lq_panel_power_on(dssdev);
if (r)
return r;

/* wait couple of vsyncs until enabling the LCD */
msleep(50);

if (dssdev->platform_enable)
r = dssdev->platform_enable(dssdev);
dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;

return r;
return 0;
}

static void sharp_lq_panel_disable(struct omap_dss_device *dssdev)
{
sharp_lq_panel_power_off(dssdev);

if (dssdev->platform_disable)
dssdev->platform_disable(dssdev);

/* wait at least 5 vsyncs after disabling the LCD */

msleep(100);
dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
}

static int sharp_lq_panel_suspend(struct omap_dss_device *dssdev)
{
sharp_lq_panel_disable(dssdev);
sharp_lq_panel_power_off(dssdev);
dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED;
return 0;
}

static int sharp_lq_panel_resume(struct omap_dss_device *dssdev)
{
return sharp_lq_panel_enable(dssdev);
int r = 0;

r = sharp_lq_panel_power_on(dssdev);
if (r)
return r;

dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;

return 0;
}

static struct omap_dss_driver sharp_lq_driver = {
Expand Down
42 changes: 36 additions & 6 deletions drivers/video/omap2/displays/panel-sharp-ls037v7dw01.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
#include <linux/module.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/regulator/consumer.h>
#include <linux/err.h>

#include <plat/display.h>
Expand Down Expand Up @@ -54,38 +53,69 @@ static void sharp_ls_panel_remove(struct omap_dss_device *dssdev)
{
}

static int sharp_ls_panel_enable(struct omap_dss_device *dssdev)
static int sharp_ls_power_on(struct omap_dss_device *dssdev)
{
int r = 0;

r = omapdss_dpi_display_enable(dssdev);
if (r)
goto err0;

/* wait couple of vsyncs until enabling the LCD */
msleep(50);

if (dssdev->platform_enable)
if (dssdev->platform_enable) {
r = dssdev->platform_enable(dssdev);
if (r)
goto err1;
}

return 0;
err1:
omapdss_dpi_display_disable(dssdev);
err0:
return r;
}

static void sharp_ls_panel_disable(struct omap_dss_device *dssdev)
static void sharp_ls_power_off(struct omap_dss_device *dssdev)
{
if (dssdev->platform_disable)
dssdev->platform_disable(dssdev);

/* wait at least 5 vsyncs after disabling the LCD */

msleep(100);

omapdss_dpi_display_disable(dssdev);
}

static int sharp_ls_panel_enable(struct omap_dss_device *dssdev)
{
int r;
r = sharp_ls_power_on(dssdev);
dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
return r;
}

static void sharp_ls_panel_disable(struct omap_dss_device *dssdev)
{
sharp_ls_power_off(dssdev);
dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
}

static int sharp_ls_panel_suspend(struct omap_dss_device *dssdev)
{
sharp_ls_panel_disable(dssdev);
sharp_ls_power_off(dssdev);
dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED;
return 0;
}

static int sharp_ls_panel_resume(struct omap_dss_device *dssdev)
{
return sharp_ls_panel_enable(dssdev);
int r;
r = sharp_ls_power_on(dssdev);
dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
return r;
}

static struct omap_dss_driver sharp_ls_driver = {
Expand Down
Loading

0 comments on commit 37ac60e

Please sign in to comment.