From 54050fcd540fb0e02ac7c58795cc6d6e89e198c7 Mon Sep 17 00:00:00 2001 From: pengcheng chen Date: Wed, 18 Apr 2018 15:53:37 +0800 Subject: [PATCH] osd: fix osd suspend fail issue PD#164508: osd: fix osd suspend fail issue Change-Id: I30c9efd77748a795b341ad4bedafa5f379ae52f1 Signed-off-by: pengcheng chen --- drivers/amlogic/media/osd/osd.h | 2 ++ drivers/amlogic/media/osd/osd_hw.c | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/drivers/amlogic/media/osd/osd.h b/drivers/amlogic/media/osd/osd.h index e8c903cf6253..bad8b45c4edf 100644 --- a/drivers/amlogic/media/osd/osd.h +++ b/drivers/amlogic/media/osd/osd.h @@ -504,6 +504,8 @@ struct hw_para_s { u32 enable[HW_OSD_COUNT]; u32 powered[HW_OSD_COUNT]; u32 reg_status_save; + u32 reg_status_save1; + u32 reg_status_save2; #ifdef FIQ_VSYNC bridge_item_t fiq_handle_item; #endif diff --git a/drivers/amlogic/media/osd/osd_hw.c b/drivers/amlogic/media/osd/osd_hw.c index d3297b008ebd..d3350768cd9c 100644 --- a/drivers/amlogic/media/osd/osd_hw.c +++ b/drivers/amlogic/media/osd/osd_hw.c @@ -6239,6 +6239,17 @@ void osd_suspend_hw(void) notify_to_amvideo(); osd_reg_clr_mask(VPP_MISC, OSD_RELATIVE_BITS); /* VSYNCOSD_CLR_MPEG_REG_MASK(VPP_MISC, OSD_RELATIVE_BITS); */ + } else { + osd_hw.reg_status_save = + osd_reg_read(VIU_OSD_BLEND_CTRL); + osd_hw.reg_status_save1 = + osd_reg_read(OSD1_BLEND_SRC_CTRL); + osd_hw.reg_status_save2 = + osd_reg_read(OSD2_BLEND_SRC_CTRL); + osd_reg_clr_mask(VIU_OSD_BLEND_CTRL, 0xf0000); + osd_reg_clr_mask(OSD1_BLEND_SRC_CTRL, 0xf0f); + osd_reg_clr_mask(OSD2_BLEND_SRC_CTRL, 0xf0f); + } osd_log_info("osd_suspended\n"); } @@ -6270,6 +6281,13 @@ void osd_resume_hw(void) 1 << 0); } notify_to_amvideo(); + } else { + osd_reg_set_mask(VIU_OSD_BLEND_CTRL, + osd_hw.reg_status_save); + osd_reg_set_mask(OSD1_BLEND_SRC_CTRL, + osd_hw.reg_status_save1); + osd_reg_set_mask(OSD2_BLEND_SRC_CTRL, + osd_hw.reg_status_save2); } osd_log_info("osd_resumed\n"); }