Merge "disp: msm: Ensure clean slate when starting and stopping HDCP"
This commit is contained in:

کامیت شده توسط
Gerrit - the friendly Code Review server

کامیت
e683dcbce3
@@ -387,12 +387,12 @@ static void dp_display_hdcp_cb_work(struct work_struct *work)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dp_display_hdcp_register_streams(dp);
|
dp_display_hdcp_register_streams(dp);
|
||||||
status->hdcp_state = HDCP_STATE_AUTHENTICATING;
|
|
||||||
if (ops && ops->reauthenticate) {
|
if (ops && ops->reauthenticate) {
|
||||||
rc = ops->reauthenticate(data);
|
rc = ops->reauthenticate(data);
|
||||||
if (rc)
|
if (rc)
|
||||||
pr_err("failed rc=%d\n", rc);
|
pr_err("failed rc=%d\n", rc);
|
||||||
}
|
}
|
||||||
|
status->hdcp_state = HDCP_STATE_AUTHENTICATING;
|
||||||
} else {
|
} else {
|
||||||
pr_debug("not reauthenticating, cable disconnected\n");
|
pr_debug("not reauthenticating, cable disconnected\n");
|
||||||
}
|
}
|
||||||
|
@@ -196,16 +196,20 @@ static int dp_hdcp2p2_wakeup(struct hdcp_transport_wakeup_data *data)
|
|||||||
switch (data->cmd) {
|
switch (data->cmd) {
|
||||||
case HDCP_TRANSPORT_CMD_STATUS_SUCCESS:
|
case HDCP_TRANSPORT_CMD_STATUS_SUCCESS:
|
||||||
atomic_set(&ctrl->auth_state, HDCP_STATE_AUTHENTICATED);
|
atomic_set(&ctrl->auth_state, HDCP_STATE_AUTHENTICATED);
|
||||||
|
kfifo_put(&ctrl->cmd_q, data->cmd);
|
||||||
|
wake_up(&ctrl->wait_q);
|
||||||
break;
|
break;
|
||||||
case HDCP_TRANSPORT_CMD_STATUS_FAILED:
|
case HDCP_TRANSPORT_CMD_STATUS_FAILED:
|
||||||
atomic_set(&ctrl->auth_state, HDCP_STATE_AUTH_FAIL);
|
atomic_set(&ctrl->auth_state, HDCP_STATE_AUTH_FAIL);
|
||||||
|
kfifo_put(&ctrl->cmd_q, data->cmd);
|
||||||
|
kthread_park(ctrl->thread);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
kfifo_put(&ctrl->cmd_q, data->cmd);
|
||||||
|
wake_up(&ctrl->wait_q);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
kfifo_put(&ctrl->cmd_q, data->cmd);
|
|
||||||
wake_up(&ctrl->wait_q);
|
|
||||||
exit:
|
exit:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -310,6 +314,8 @@ static int dp_hdcp2p2_authenticate(void *input)
|
|||||||
ctrl->sink_status = SINK_CONNECTED;
|
ctrl->sink_status = SINK_CONNECTED;
|
||||||
atomic_set(&ctrl->auth_state, HDCP_STATE_AUTHENTICATING);
|
atomic_set(&ctrl->auth_state, HDCP_STATE_AUTHENTICATING);
|
||||||
|
|
||||||
|
kthread_park(ctrl->thread);
|
||||||
|
kfifo_reset(&ctrl->cmd_q);
|
||||||
kthread_unpark(ctrl->thread);
|
kthread_unpark(ctrl->thread);
|
||||||
|
|
||||||
cdata.context = input;
|
cdata.context = input;
|
||||||
|
@@ -832,9 +832,16 @@ static int sde_hdcp_2x_wakeup(struct sde_hdcp_2x_wakeup_data *data)
|
|||||||
if (!atomic_cmpxchg(&hdcp->enable_pending, 0, 1)) {
|
if (!atomic_cmpxchg(&hdcp->enable_pending, 0, 1)) {
|
||||||
hdcp->device_type = data->device_type;
|
hdcp->device_type = data->device_type;
|
||||||
kfifo_put(&hdcp->cmd_q, data->cmd);
|
kfifo_put(&hdcp->cmd_q, data->cmd);
|
||||||
|
kthread_unpark(hdcp->thread);
|
||||||
wake_up(&hdcp->wait_q);
|
wake_up(&hdcp->wait_q);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case HDCP_2X_CMD_DISABLE:
|
||||||
|
if (!atomic_xchg(&hdcp->hdcp_off, 1))
|
||||||
|
kfifo_put(&hdcp->cmd_q, HDCP_2X_CMD_STOP);
|
||||||
|
kfifo_put(&hdcp->cmd_q, data->cmd);
|
||||||
|
kthread_park(hdcp->thread);
|
||||||
|
break;
|
||||||
case HDCP_2X_CMD_STOP:
|
case HDCP_2X_CMD_STOP:
|
||||||
atomic_set(&hdcp->hdcp_off, 1);
|
atomic_set(&hdcp->hdcp_off, 1);
|
||||||
|
|
||||||
@@ -929,8 +936,6 @@ static int sde_hdcp_2x_main(void *data)
|
|||||||
atomic_set(&hdcp->enable_pending, 0);
|
atomic_set(&hdcp->enable_pending, 0);
|
||||||
break;
|
break;
|
||||||
case HDCP_2X_CMD_DISABLE:
|
case HDCP_2X_CMD_DISABLE:
|
||||||
if (!atomic_xchg(&hdcp->hdcp_off, 1))
|
|
||||||
sde_hdcp_2x_clean(hdcp);
|
|
||||||
sde_hdcp_2x_disable(hdcp);
|
sde_hdcp_2x_disable(hdcp);
|
||||||
break;
|
break;
|
||||||
case HDCP_2X_CMD_START:
|
case HDCP_2X_CMD_START:
|
||||||
|
مرجع در شماره جدید
Block a user