aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorPer Persson <per.xb.persson@stericsson.com>2011-06-07 10:37:21 +0200
committersaid m bagheri <ebgheri@steludxu2848.(none)>2011-06-17 13:42:11 +0200
commitadbbe0a5e7a5e73a38565e391b90cbaca0897a2c (patch)
tree090e8b0355c9575900447c56935b8655144b5984 /drivers
parent84c9f56f6620304925fbcefa0c100f6f9a4f93dc (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.c52
-rw-r--r--drivers/video/mcde/display-av8100.c12
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)