From 97bb7dfb09b9e4b0bcfd9751554375fafc90f007 Mon Sep 17 00:00:00 2001 From: yicheng shen Date: Tue, 8 Jan 2019 06:02:09 -0500 Subject: [PATCH] hdmirx: close hdcp2.2 when shut down. [4/4] PD#SWPL-3828 Problem: hdcp22 access ddr when power shutdown Solution: need notify hdcp22 close when power shutdown Verify: Local Change-Id: Iffead6b2dfdd97e6e7ad16e856cb09b42e3783d1 Signed-off-by: yicheng shen --- .../media/vin/tvin/hdmirx/hdmi_rx_drv.c | 7 ++-- .../media/vin/tvin/hdmirx/hdmi_rx_drv.h | 2 +- .../media/vin/tvin/hdmirx/hdmi_rx_hw.c | 36 +++++++++---------- .../media/vin/tvin/hdmirx/hdmi_rx_hw.h | 4 +-- 4 files changed, 24 insertions(+), 25 deletions(-) diff --git a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.c b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.c index 18b32111421d..ade925174bb0 100644 --- a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.c +++ b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.c @@ -2450,11 +2450,10 @@ static int aml_hdcp22_pm_notify(struct notifier_block *nb, rx_pr("hdcp22 kill ok!\n"); else rx_pr("hdcp22 kill timeout!\n"); - hdcp22_kill_esm = 0; - hdcp22_suspend(); + hdcp_22_off(); } else if ((event == PM_POST_SUSPEND) && hdcp22_on) { rx_pr("PM_POST_SUSPEND\n"); - hdcp22_resume(); + hdcp_22_on(); } return NOTIFY_OK; } @@ -2505,7 +2504,7 @@ static void hdmirx_shutdown(struct platform_device *pdev) /* phy powerdown */ rx_phy_power_on(0); if (hdcp22_on) - hdcp22_clk_en(0); + hdcp_22_off(); rx_pr("[hdmirx]: shutdown success\n"); } diff --git a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.h b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.h index d2a2ba1c154b..0b2174ee4ea4 100644 --- a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.h +++ b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.h @@ -41,7 +41,7 @@ * * */ -#define RX_VER1 "ver.2018/12/27" +#define RX_VER1 "ver.2019/01/08" /* * * diff --git a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.c b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.c index e51e231fc28f..485e0cb0c732 100644 --- a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.c +++ b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.c @@ -1754,28 +1754,28 @@ hdmirx_wr_dwc(DWC_HDCP22_CONTROL, data32); } /* -* hdcp22_suspend - suspend flow of hdcp2.2 -*/ -void hdcp22_suspend(void) + * hdcp_22_off + */ +void hdcp_22_off(void) { -hdcp22_clk_en(0); -/* note: can't pull down hpd before enter suspend */ -/* it will stop cec wake up func if EE domain still working */ -/* rx_set_cur_hpd(0); */ -hpd_to_esm = 0; -hdmirx_wr_dwc(DWC_HDCP22_CONTROL, - 0x0); -if (hdcp22_kill_esm == 0) - /* rx_pr("kill = 1\n"); */ - hdmirx_hdcp22_esm_rst(); - /* msleep(20); */ -rx_pr("hdcp22 off\n"); + hdcp22_clk_en(0); + /* note: can't pull down hpd before enter suspend */ + /* it will stop cec wake up func if EE domain still working */ + /* rx_set_cur_hpd(0); */ + hpd_to_esm = 0; + hdmirx_wr_dwc(DWC_HDCP22_CONTROL, + 0x0); + if (hdcp22_kill_esm == 0) + hdmirx_hdcp22_esm_rst(); + else + hdcp22_kill_esm = 0; + rx_pr("hdcp22 off\n"); } /* -* hdcp22_resume - resume flow of hdcp2.2 -*/ -void hdcp22_resume(void) + * hdcp_22_on + */ +void hdcp_22_on(void) { hdcp22_kill_esm = 0; /* switch_set_state(&rx.hpd_sdev, 0x0); */ diff --git a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.h b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.h index d406fa17a8da..49cd59be9dc6 100644 --- a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.h +++ b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.h @@ -1170,8 +1170,8 @@ extern void hdcp22_clk_en(bool en); extern void hdmirx_hdcp22_esm_rst(void); extern unsigned int rx_sec_set_duk(bool repeater); extern void hdmirx_hdcp22_init(void); -extern void hdcp22_suspend(void); -extern void hdcp22_resume(void); +extern void hdcp_22_off(void); +extern void hdcp_22_on(void); extern void hdmirx_hdcp22_hpd(bool value); extern void esm_set_reset(bool reset); extern void esm_set_stable(bool stable);