aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/samsung/tvout/hw_if/hdcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/samsung/tvout/hw_if/hdcp.c')
-rw-r--r--drivers/media/video/samsung/tvout/hw_if/hdcp.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/drivers/media/video/samsung/tvout/hw_if/hdcp.c b/drivers/media/video/samsung/tvout/hw_if/hdcp.c
index 569de28..41caf19 100644
--- a/drivers/media/video/samsung/tvout/hw_if/hdcp.c
+++ b/drivers/media/video/samsung/tvout/hw_if/hdcp.c
@@ -379,7 +379,9 @@ static int s5p_hdcp_read_bcaps(void)
if (s5p_ddc_read(HDCP_Bcaps, BCAPS_SIZE, &bcaps) < 0)
goto bcaps_read_err;
- if (s5p_hdmi_ctrl_status() == false || !s5p_hdmi_reg_get_hpd_status() || on_stop_process)
+ if (s5p_hdmi_ctrl_status() == false ||
+ !s5p_hdmi_reg_get_hpd_status() ||
+ on_stop_process)
goto bcaps_read_err;
writeb(bcaps, hdmi_base + S5P_HDMI_HDCP_BCAPS);
@@ -532,7 +534,8 @@ static void s5p_hdcp_reset_auth(void)
unsigned long spin_flags;
if (s5p_hdmi_ctrl_status() == false ||
- !s5p_hdmi_reg_get_hpd_status() || on_stop_process)
+ !s5p_hdmi_reg_get_hpd_status() ||
+ on_stop_process)
return;
spin_lock_irqsave(&hdcp_info.reset_lock, spin_flags);
@@ -956,9 +959,12 @@ check_ri_err:
static void s5p_hdcp_work(void *arg)
{
+ s5p_tvout_mutex_lock();
if (!hdcp_info.hdcp_enable || s5p_hdmi_ctrl_status() == false ||
- !s5p_hdmi_reg_get_hpd_status() || on_stop_process)
+ !s5p_hdmi_reg_get_hpd_status() || on_stop_process) {
+ s5p_tvout_mutex_unlock();
return;
+ }
if (hdcp_info.event & HDCP_EVENT_READ_BKSV_START) {
if (s5p_hdcp_bksv() < 0)
@@ -987,13 +993,16 @@ static void s5p_hdcp_work(void *arg)
else
hdcp_info.event &= ~HDCP_EVENT_CHECK_RI_START;
}
+ s5p_tvout_mutex_unlock();
return;
work_err:
if (!hdcp_info.hdcp_enable || s5p_hdmi_ctrl_status() == false ||
!s5p_hdmi_reg_get_hpd_status() || on_stop_process) {
+ s5p_tvout_mutex_unlock();
return;
}
s5p_hdcp_reset_auth();
+ s5p_tvout_mutex_unlock();
}
irqreturn_t s5p_hdcp_irq_handler(int irq, void *dev_id)
@@ -1121,3 +1130,8 @@ int s5p_hdcp_encrypt_stop(bool on)
return 0;
}
+
+void s5p_hdcp_flush_work(void)
+{
+ flush_workqueue(hdcp_wq);
+}