summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMatt Wagner <mwagner@nvidia.com>2012-08-23 11:32:31 -0700
committerLokesh Pathak <lpathak@nvidia.com>2012-08-28 07:33:49 -0700
commitf0e92d4918fd97a602f10acc2b431045afb4200b (patch)
tree72914bb4ce299f545d56fdacce91c1e2a21bef07 /drivers
parent9397f35e71db2a96de123c109a48d2c6bc610eda (diff)
Revert "video: tegra: hdcp: Fix Locking Issue"
This reverts commit 51f746421b73f8f378bd7908b35fd6c79687e239. Bug 1030468 Bug 1030415 Signed-off-by: Matt Wagner <mwagner@nvidia.com> Change-Id: If9b5febd812e84848913431dcaf0bdefc518e5d1 Reviewed-on: http://git-master/r/126948 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Jon Mayo <jmayo@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/tegra/dc/nvhdcp.c28
1 files changed, 7 insertions, 21 deletions
diff --git a/drivers/video/tegra/dc/nvhdcp.c b/drivers/video/tegra/dc/nvhdcp.c
index b509a6c78499..3566e2bd33b5 100644
--- a/drivers/video/tegra/dc/nvhdcp.c
+++ b/drivers/video/tegra/dc/nvhdcp.c
@@ -78,7 +78,6 @@ struct tegra_nvhdcp {
struct tegra_dc_hdmi_data *hdmi;
struct workqueue_struct *downstream_wq;
struct mutex lock;
- struct mutex state_lock;
struct miscdevice miscdev;
char name[12];
unsigned id;
@@ -981,9 +980,7 @@ static void nvhdcp_downstream_worker(struct work_struct *work)
nvhdcp_vdbg("CRYPT enabled\n");
- mutex_lock(&nvhdcp->state_lock);
nvhdcp->state = STATE_LINK_VERIFY;
- mutex_unlock(&nvhdcp->state_lock);
nvhdcp_info("link verified!\n");
while (1) {
@@ -1010,39 +1007,30 @@ failure:
if(nvhdcp->fail_count > 5) {
nvhdcp_err("nvhdcp failure - too many failures, giving up!\n");
} else {
- if (!nvhdcp_is_plugged(nvhdcp)) {
- nvhdcp_err("nvhdcp failure\n");
- goto lost_hdmi;
- }
nvhdcp_err("nvhdcp failure - renegotiating in 1 second\n");
+ if (!nvhdcp_is_plugged(nvhdcp))
+ goto lost_hdmi;
queue_delayed_work(nvhdcp->downstream_wq, &nvhdcp->work,
msecs_to_jiffies(1000));
}
lost_hdmi:
- mutex_lock(&nvhdcp->state_lock);
nvhdcp->state = STATE_UNAUTHENTICATED;
- mutex_unlock(&nvhdcp->state_lock);
hdcp_ctrl_run(hdmi, 0);
err:
mutex_unlock(&nvhdcp->lock);
return;
disable:
- mutex_lock(&nvhdcp->state_lock);
nvhdcp->state = STATE_OFF;
nvhdcp_set_plugged(nvhdcp, false);
- mutex_unlock(&nvhdcp->state_lock);
mutex_unlock(&nvhdcp->lock);
return;
}
static int tegra_nvhdcp_on(struct tegra_nvhdcp *nvhdcp)
{
- mutex_lock(&nvhdcp->state_lock);
- nvhdcp_set_plugged(nvhdcp, true);
nvhdcp->state = STATE_UNAUTHENTICATED;
- mutex_unlock(&nvhdcp->state_lock);
if (nvhdcp_is_plugged(nvhdcp)) {
nvhdcp->fail_count = 0;
queue_delayed_work(nvhdcp->downstream_wq, &nvhdcp->work,
@@ -1053,10 +1041,10 @@ static int tegra_nvhdcp_on(struct tegra_nvhdcp *nvhdcp)
static int tegra_nvhdcp_off(struct tegra_nvhdcp *nvhdcp)
{
- mutex_lock(&nvhdcp->state_lock);
+ mutex_lock(&nvhdcp->lock);
nvhdcp->state = STATE_OFF;
nvhdcp_set_plugged(nvhdcp, false);
- mutex_unlock(&nvhdcp->state_lock);
+ mutex_unlock(&nvhdcp->lock);
wake_up_interruptible(&wq_worker);
flush_workqueue(nvhdcp->downstream_wq);
return 0;
@@ -1067,6 +1055,7 @@ void tegra_nvhdcp_set_plug(struct tegra_nvhdcp *nvhdcp, bool hpd)
nvhdcp_debug("hdmi hotplug detected (hpd = %d)\n", hpd);
if (hpd) {
+ nvhdcp_set_plugged(nvhdcp, true);
tegra_nvhdcp_on(nvhdcp);
} else {
tegra_nvhdcp_off(nvhdcp);
@@ -1091,9 +1080,9 @@ int tegra_nvhdcp_set_policy(struct tegra_nvhdcp *nvhdcp, int pol)
static int tegra_nvhdcp_renegotiate(struct tegra_nvhdcp *nvhdcp)
{
- mutex_lock(&nvhdcp->state_lock);
+ mutex_lock(&nvhdcp->lock);
nvhdcp->state = STATE_RENEGOTIATE;
- mutex_unlock(&nvhdcp->state_lock);
+ mutex_unlock(&nvhdcp->lock);
tegra_nvhdcp_on(nvhdcp);
return 0;
}
@@ -1212,7 +1201,6 @@ struct tegra_nvhdcp *tegra_nvhdcp_create(struct tegra_dc_hdmi_data *hdmi,
snprintf(nvhdcp->name, sizeof(nvhdcp->name), "nvhdcp%u", id);
nvhdcp->hdmi = hdmi;
mutex_init(&nvhdcp->lock);
- mutex_init(&nvhdcp->state_lock);
strlcpy(nvhdcp->info.type, nvhdcp->name, sizeof(nvhdcp->info.type));
nvhdcp->bus = bus;
@@ -1236,9 +1224,7 @@ struct tegra_nvhdcp *tegra_nvhdcp_create(struct tegra_dc_hdmi_data *hdmi,
goto free_nvhdcp;
}
- mutex_lock(&nvhdcp->state_lock);
nvhdcp->state = STATE_UNAUTHENTICATED;
- mutex_unlock(&nvhdcp->state_lock);
nvhdcp->downstream_wq = create_singlethread_workqueue(nvhdcp->name);
INIT_DELAYED_WORK(&nvhdcp->work, nvhdcp_downstream_worker);