diff options
author | Per Persson <per.xb.persson@stericsson.com> | 2011-06-07 10:37:21 +0200 |
---|---|---|
committer | said m bagheri <ebgheri@steludxu2848.(none)> | 2011-06-17 13:42:11 +0200 |
commit | adbbe0a5e7a5e73a38565e391b90cbaca0897a2c (patch) | |
tree | 090e8b0355c9575900447c56935b8655144b5984 /drivers | |
parent | 84c9f56f6620304925fbcefa0c100f6f9a4f93dc (diff) |
video: av8100: Add suspend resume
Parts of suspend/resume handling are moved from display
driver to av8100 driver.
ST-Ericsson ID: 326691
ST-Ericsson Linux next: Not tested, ER 282779
ST-Ericsson FOSS-OUT ID: Trivial
Change-Id: I9a6ac38c138bfea4cf07d3b38d16d4ac95d05a84
Signed-off-by: Per Persson <per.xb.persson@stericsson.com>
Change-Id: Ib5e293629bd01b731c9761da3ed5115cdb74752d
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/24315
Reviewed-by: Jimmy RUBIN <jimmy.rubin@stericsson.com>
Reviewed-by: Per-Daniel OLSSON <per-daniel.olsson@stericsson.com>
Reviewed-by: QATOOLS
Reviewed-by: Linus WALLEIJ <linus.walleij@stericsson.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/video/av8100/av8100.c | 52 | ||||
-rw-r--r-- | drivers/video/mcde/display-av8100.c | 12 |
2 files changed, 52 insertions, 12 deletions
diff --git a/drivers/video/av8100/av8100.c b/drivers/video/av8100/av8100.c index 1e17256194c..39d32ba5cb6 100644 --- a/drivers/video/av8100/av8100.c +++ b/drivers/video/av8100/av8100.c @@ -476,9 +476,60 @@ static const struct i2c_device_id av8100_id[] = { { } }; +#ifdef CONFIG_PM +static int av8100_suspend(struct i2c_client *i2c_client, pm_message_t state) +{ + int ret; + + dev_dbg(av8100dev, "%s\n", __func__); + + ret = av8100_powerdown(); + if (ret) + dev_err(av8100dev, "av8100_powerdown failed\n"); + + return ret; +} + +static int av8100_resume(struct i2c_client *i2c_client) +{ + int ret; + u8 hpds = 0; + + dev_dbg(av8100dev, "%s\n", __func__); + + ret = av8100_powerup(); + if (ret) { + dev_err(av8100dev, "av8100_powerup failed\n"); + return ret; + } + + /* Check HDMI plug status */ + if (av8100_reg_stby_r(NULL, NULL, &hpds, NULL, NULL)) { + dev_warn(av8100dev, "av8100_reg_stby_r failed\n"); + goto av8100_resume_end; + } + + if (hpds) + set_plug_status(AV8100_HDMI_PLUGIN); /* Plugged*/ + else + clr_plug_status(AV8100_HDMI_PLUGIN); /* Unplugged*/ + + av8100_globals->hpdm = AV8100_STANDBY_INTERRUPT_MASK_HPDM_HIGH; + av8100_enable_interrupt(); + +av8100_resume_end: + return 0; +} +#else +#define av8100_suspend NULL +#define av8100_resume NULL +#endif + static struct i2c_driver av8100_driver = { .probe = av8100_probe, .remove = av8100_remove, + .suspend = av8100_suspend, + .resume = av8100_resume, .driver = { .name = "av8100", }, @@ -538,7 +589,6 @@ static int av8100_int_event_handle(void) } if (hpdi & av8100_globals->hpdm) { - /* HDMI plugin change */ if (hpds) { /* Plugged */ diff --git a/drivers/video/mcde/display-av8100.c b/drivers/video/mcde/display-av8100.c index 9134e4bf33f..99070b6071f 100644 --- a/drivers/video/mcde/display-av8100.c +++ b/drivers/video/mcde/display-av8100.c @@ -1253,13 +1253,6 @@ static int hdmi_set_power_mode(struct mcde_display_device *ddev, return ret; } - ret = av8100_powerup(); - if (ret) { - dev_err(&ddev->dev, "av8100_powerup failed\n"); - return ret; - } - av8100_enable_interrupt(); - /* * the regulator for analog TV out is only enabled here, * this means that one needs to switch to the OFF state @@ -1292,10 +1285,7 @@ static int hdmi_set_power_mode(struct mcde_display_device *ddev, if (ddev->power_mode == MCDE_DISPLAY_PM_STANDBY && power_mode == MCDE_DISPLAY_PM_OFF) { memset(&(ddev->video_mode), 0, sizeof(struct mcde_video_mode)); - ret = av8100_powerdown(); - if (ret) - dev_err(&ddev->dev, "%s:av8100_powerdown failed\n" - , __func__); + if (ddev->platform_disable) { ret = ddev->platform_disable(ddev); if (ret) |