<pre>
Hi, Mac:

On Fri, 2023-11-24 at 16:53 +0800, mac.shen wrote:
> Add tee client application, HDCP 1.x and 2.x authentication for
> DisplayPort
> to support the HDCP feature.
>
> Signed-off-by: mac.shen <mac.shen@mediatek.com>
>

[snip]

> +
> +int mdrv_dp_tx_hdcp2_fsm(struct mtk_hdcp_info *hdcp_info)
> +{
> +static u32 timeout_value;
> +static u8 pre_main;
> +static u8 pre_sub;
> +static u32 pre_time;
> +int err_code = HDCP_ERR_NONE;
> +bool stored = false;
> +u32 time;
> +int ret = 0;
> +bool tmp = false;
> +
> +if (pre_main != hdcp_info->hdcp2_info.hdcp_handler.main_state
> ||
> + hdcp_info->hdcp2_info.hdcp_handler.sub_state != pre_sub) {
> +DPTXHDCPMSG("Port(M : S)= (%d, %d)", hdcp_info-
> >hdcp2_info.hdcp_handler.main_state,
> + hdcp_info-
> >hdcp2_info.hdcp_handler.sub_state);
> +pre_main = hdcp_info-
> >hdcp2_info.hdcp_handler.main_state;
> +pre_sub = hdcp_info->hdcp2_info.hdcp_handler.sub_state;
> +}
> +
> +switch (hdcp_info->hdcp2_info.hdcp_handler.main_state) {
> +case HDCP2_MS_H1P1:
> +switch (hdcp_info->hdcp2_info.hdcp_handler.sub_state) {
> +case HDCP2_MSG_ZERO:
> +break;
> +case HDCP2_MSG_AUTH_FAIL:
> +pr_err("HDCP2.x Authentication Fail\n");
> +mdrv_dp_tx_hdcp2_enable_auth(hdcp_info, false);
> +hdcp_info->auth_status = AUTH_FAIL;
> +break;
> +}
> +break;
> +case HDCP2_MS_A0F0:
> +switch (hdcp_info->hdcp2_info.hdcp_handler.sub_state) {
> +case HDCP2_MSG_ZERO:
> +if (hdcp_info->hdcp2_info.enable) {
> +mdrv_dp_tx_hdcp2_init(hdcp_info);
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A1F1,
> + HDCP2_MSG_ZE
> RO);
> +DPTXHDCPMSG("Sink Support Hdcp2x!\n");
> +} else {
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_H1P1,
> + HDCP2_MSG_AU
> TH_FAIL);
> +DPTXHDCPMSG("Sink Doesn't Support
> Hdcp2x!\n");
> +}
> +break;
> +}
> +break;
> +
> +case HDCP2_MS_A1F1:
> +switch (hdcp_info->hdcp2_info.hdcp_handler.sub_state) {
> +case HDCP2_MSG_ZERO:
> +if (hdcp_info->hdcp2_info.retry_count
> +< HDCP2_TX_RETRY_CNT) {
> +hdcp_info->hdcp2_info.retry_count++;
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A1F1,
> + HDCP2_MSG_AK
> E_INIT);
> +} else {
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_H1P1,
> + HDCP2_MSG_AU
> TH_FAIL);
> +pr_err("Try Max Count\n");
> +}
> +break;
> +

I think you could get rid of switch case and add comment or label to
indicate the state like this:

/* HDCP2_MS_A1F1 */
/* HDCP2_MSG_ZERO */
if (hdcp_info->hdcp2_info.retry_count >= HDCP2_TX_RETRY_CNT)
goto HDCP2_MSG_AUTH_FAIL:

hdcp_info->hdcp2_info.retry_count++;

/* HDCP2_MSG_AKE_INIT */


HDCP2_MSG_AUTH_FAIL:


The code looks more clear.

Regards,
CK


> +case HDCP2_MSG_AKE_INIT:
> +tmp = mdrv_dp_tx_hdcp2_write_msg(hdcp_info,
> HDCP2_MSG_AKE_INIT);
> +if (!tmp) {
> +err_code = HDCP_ERR_SEND_MSG_FAIL;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +mdrv_dp_tx_hdcp2_rest_variable(hdcp_info);
> +hdcp_info->hdcp2_info.read_certrx = true;
> +
> +hdcp_info-
> >hdcp2_info.hdcp_handler.send_ake_init = true;
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A1F1,
> + HDCP2_MSG_AKE_SEND_C
> ERT);
> +pre_time = get_system_time();
> +break;
> +
> +case HDCP2_MSG_AKE_SEND_CERT:
> +time = get_time_diff(pre_time);
> +if (time < HDCP2_AKESENDCERT_WDT) {
> +msleep(20);
> +break;
> +}
> +if (hdcp_info->hdcp2_info.read_certrx)
> +mdrv_dp_tx_hdcp2_read_msg(hdcp_info,
> HDCP2_MSG_AKE_SEND_CERT);
> +
> +if (!hdcp_info-
> >hdcp2_info.hdcp_handler.recv_msg)
> +break;
> +
> +ret = tee_ake_certificate(hdcp_info, hdcp_info-
> >hdcp2_info.hdcp_rx.cert,
> + &stored,
> +hdcp_info-
> >hdcp2_info.stored_pairing_info.m,
> +hdcp_info-
> >hdcp2_info.stored_pairing_info.ekh_km);
> +
> +if (ret != RET_COMPARE_PASS) {
> +err_code = HDCP_ERR_PROCESS_FAIL;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +hdcp_info->hdcp2_info.hdcp_handler.stored_km =
> stored;
> +hdcp_info->hdcp2_info.hdcp_handler.recv_msg =
> false;
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A1F1,
> + hdcp_info-
> >hdcp2_info.hdcp_handler.stored_km ?
> +HDCP2_MSG_AKE_STORED_KM :
> +HDCP2_MSG_AKE_NO_STORED_KM);
> +break;
> +
> +case HDCP2_MSG_AKE_NO_STORED_KM:
> +DPTXHDCPMSG("4. Get Km, derive Ekpub(km)\n");
> +
> +tee_enc_rsaes_oaep(hdcp_info, hdcp_info-
> >hdcp2_info.hdcp_tx.ekpub_km);
> +/* Prepare ekpub_km to send */
> +tmp = mdrv_dp_tx_hdcp2_write_msg(hdcp_info,
> + HDCP2_MSG_AKE_
> NO_STORED_KM);
> +if (!tmp) {
> +err_code = HDCP_ERR_SEND_MSG_FAIL;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A1F1,
> + HDCP2_MSG_AKE_SEND_H
> _PRIME);
> +timeout_value =
> HDCP2_AKESENDHPRIME_NO_STORED_WDT;
> +hdcp_info->hdcp2_info.hdcp_handler.recv_msg =
> false;
> +pre_time = get_system_time();
> +break;
> +case HDCP2_MSG_AKE_STORED_KM:
> +/* Prepare ekh_km & M to send */
> +tmp = mdrv_dp_tx_hdcp2_write_msg(hdcp_info,
> HDCP2_MSG_AKE_STORED_KM);
> +if (!tmp) {
> +err_code = HDCP_ERR_SEND_MSG_FAIL;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +err_code = HDCP_ERR_NONE;
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A1F1,
> + HDCP2_MSG_AKE_SEND_H
> _PRIME);
> +timeout_value = HDCP2_AKESENDHPRIME_STORED_WDT;
> +hdcp_info->hdcp2_info.hdcp_handler.recv_msg =
> false;
> +pre_time = get_system_time();
> +break;
> +
> +case HDCP2_MSG_AKE_SEND_H_PRIME:
> +if (hdcp_info->hdcp2_info.read_h_prime) {
> +mdrv_dp_tx_hdcp2_read_msg(hdcp_info,
> + HDCP2_MSG_AKE
> _SEND_H_PRIME);
> +}
> +time = get_time_diff(pre_time);
> +if (time > timeout_value) {
> +err_code = HDCP_ERR_RESPONSE_TIMEROUT;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +if (!hdcp_info-
> >hdcp2_info.hdcp_handler.recv_msg)
> +break;
> +
> +ret = tee_ake_h_prime(hdcp_info, hdcp_info-
> >hdcp2_info.hdcp_tx.rtx,
> + hdcp_info-
> >hdcp2_info.hdcp_rx.rrx,
> +hdcp_info->hdcp2_info.hdcp_rx.rx_caps,
> +hdcp_info->hdcp2_info.hdcp_tx.tx_caps,
> +hdcp_info->hdcp2_info.hdcp_rx.h_prime,
> +HDCP2_HPRIME_SIZE);
> +if (ret != RET_COMPARE_PASS) {
> +if (hdcp_info-
> >hdcp2_info.hdcp_handler.stored_km)
> +tee_clear_paring(hdcp_info);
> +err_code = HDCP_ERR_PROCESS_FAIL;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +if (hdcp_info-
> >hdcp2_info.hdcp_handler.stored_km)
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A2F2,
> + HDCP2_MSG_LC
> _INIT);
> +else
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A1F1,
> + HDCP2_MSG_AK
> E_SEND_PAIRING_INFO);
> +
> +pre_time = get_system_time();
> +hdcp_info->hdcp2_info.hdcp_handler.recv_msg =
> false;
> +break;
> +
> +case HDCP2_MSG_AKE_SEND_PAIRING_INFO:
> +if (hdcp_info->hdcp2_info.read_pairing)
> +mdrv_dp_tx_hdcp2_read_msg(hdcp_info,
> + HDCP2_MSG_AKE
> _SEND_PAIRING_INFO);
> +
> +/* Ekh_Km must be available less than 200ms,
> Give mode time for some Rx */
> +time = get_time_diff(pre_time);
> +if (time >HDCP2_AKESENDPAIRINGINFO_WDT
> * 2) {
> +err_code = HDCP_ERR_RESPONSE_TIMEROUT;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +if (!hdcp_info-
> >hdcp2_info.hdcp_handler.recv_msg)
> +break;
> +
> +/* Store m, km, Ekh(km) */
> +tee_ake_paring(hdcp_info, hdcp_info-
> >hdcp2_info.hdcp_rx.ekh_km);
> +
> +hdcp_info->hdcp2_info.hdcp_handler.send_pair =
> true;
> +hdcp_info->hdcp2_info.hdcp_handler.recv_msg =
> false;
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A2F2, HDCP2_MSG_LC_INIT);
> +pre_time = get_system_time();
> +break;
> +}
> +break;
> +
> +case HDCP2_MS_A2F2:
> +switch (hdcp_info->hdcp2_info.hdcp_handler.sub_state) {
> +case HDCP2_MSG_LC_INIT:
> +/* prepare Rn to send */
> +tmp = mdrv_dp_tx_hdcp2_write_msg(hdcp_info,
> HDCP2_MSG_LC_INIT);
> +if (!tmp) {
> +err_code = HDCP_ERR_SEND_MSG_FAIL;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +hdcp_info->hdcp2_info.hdcp_handler.send_lc_init
> = true;
> +
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A2F2,
> + HDCP2_MSG_LC_SEND_L_
> PRIME);
> +pre_time = get_system_time();
> +break;
> +
> +case HDCP2_MSG_LC_SEND_L_PRIME:
> +time = get_time_diff(pre_time);
> +if (time < HDCP2_LCSENDLPRIME_WDT)
> +break;
> +
> +if (hdcp_info->hdcp2_info.read_l_prime)
> +mdrv_dp_tx_hdcp2_read_msg(hdcp_info,
> + HDCP2_MSG_LC_
> SEND_L_PRIME);
> +
> +if (!hdcp_info-
> >hdcp2_info.hdcp_handler.recv_msg)
> +break;
> +
> +ret = tee_lc_l_prime(hdcp_info, hdcp_info-
> >hdcp2_info.hdcp_tx.rn,
> + hdcp_info-
> >hdcp2_info.hdcp_rx.l_prime,
> +HDCP2_LPRIME_SIZE);
> +if (ret != RET_COMPARE_PASS) {
> +err_code = HDCP_ERR_PROCESS_FAIL;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +DPTXHDCPMSG("L' is PASS!!\n");
> +hdcp_info->hdcp2_info.hdcp_handler.recv_msg =
> false;
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A3F3, HDCP2_MSG_ZERO);
> +pre_time = get_system_time();
> +break;
> +}
> +break;
> +
> +case HDCP2_MS_A3F3:
> +switch (hdcp_info->hdcp2_info.hdcp_handler.sub_state) {
> +case HDCP2_MSG_ZERO:
> +tee_ske_enc_ks(hdcp_info, hdcp_info-
> >hdcp2_info.hdcp_tx.riv,
> + hdcp_info-
> >hdcp2_info.hdcp_tx.eks);
> +
> +tmp = mdrv_dp_tx_hdcp2_write_msg(hdcp_info,
> HDCP2_MSG_SKE_SEND_EKS);
> +if (!tmp) {
> +err_code = HDCP_ERR_SEND_MSG_FAIL;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A3F3,
> + HDCP2_MSG_SKE_SEND_E
> KS);
> +pre_time = get_system_time();
> +break;
> +
> +case HDCP2_MSG_SKE_SEND_EKS:
> +time = get_time_diff(pre_time);
> +if (time >= HDCP2_ENC_EN_TIMER) {
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A4F4,
> + HDCP2_MSG_ZE
> RO);
> +}
> +break;
> +}
> +break;
> +
> +case HDCP2_MS_A4F4:
> +switch (hdcp_info->hdcp2_info.hdcp_handler.sub_state) {
> +case HDCP2_MSG_ZERO:
> +if (!hdcp_info->hdcp2_info.repeater) {
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A5F5,
> + HDCP2_MSG_AU
> TH_DONE);
> +} else {
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A6F6,
> + HDCP2_MSG_RE
> PAUTH_SEND_RECVID_LIST);
> +hdcp_info-
> >hdcp2_info.hdcp_handler.recv_msg = false;
> +pre_time = get_system_time();
> +}
> +break;
> +}
> +break;
> +
> +case HDCP2_MS_A5F5:
> +switch (hdcp_info->hdcp2_info.hdcp_handler.sub_state) {
> +case HDCP2_MSG_ZERO:
> +break;
> +case HDCP2_MSG_AUTH_DONE:
> +DPTXHDCPMSG("HDCP2.x Authentication done.\n");
> +hdcp_info->auth_status = AUTH_PASS;
> +hdcp_info->hdcp2_info.retry_count = 0;
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A5F5, HDCP2_MSG_ZERO);
> +mdrv_dp_tx_hdcp2_enable_auth(hdcp_info, true);
> +break;
> +}
> +break;
> +case HDCP2_MS_A6F6:
> +switch (hdcp_info->hdcp2_info.hdcp_handler.sub_state) {
> +case HDCP2_MSG_REPAUTH_SEND_RECVID_LIST:
> +if (hdcp_info->hdcp2_info.read_v_prime)
> +mdrv_dp_tx_hdcp2_read_msg(hdcp_info,
> + HDCP2_MSG_REP
> AUTH_SEND_RECVID_LIST);
> +
> +time = get_time_diff(pre_time);
> +if (time > HDCP2_REPAUTHSENDRECVID_WDT) {
> +err_code = HDCP_ERR_RESPONSE_TIMEROUT;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +if (!hdcp_info-
> >hdcp2_info.hdcp_handler.recv_msg)
> +break;
> +
> +pre_time = get_system_time();
> +hdcp_info->hdcp2_info.hdcp_handler.recv_msg =
> false;
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A7F7,
> + HDCP2_MSG_REPAUTH_VE
> RIFY_RECVID_LIST);
> +break;
> +}
> +break;
> +
> +case HDCP2_MS_A7F7:
> +switch (hdcp_info->hdcp2_info.hdcp_handler.sub_state) {
> +case HDCP2_MSG_REPAUTH_VERIFY_RECVID_LIST:
> +if ((hdcp_info->hdcp2_info.hdcp_rx.rx_info[1] &
> (BIT(2) | BIT(3))) != 0) {
> +pr_err("DEVS_EXCEEDED or
> CASCADE_EXCEDDED!\n");
> +err_code = HDCP_ERR_PROCESS_FAIL;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +/* check seqNumV here */
> +tmp =
> mdrv_dp_tx_hdcp2_check_seq_num_v(hdcp_info);
> +if (!tmp) {
> +err_code = HDCP_ERR_PROCESS_FAIL;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +tmp =
> mdrv_dp_tx_hdcp2_recv_rep_auth_send_recv_id_list(hdcp_info);
> +if (!tmp) {
> +err_code = HDCP_ERR_PROCESS_FAIL;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A8F8,
> + HDCP2_MSG_REPAUTH_SE
> ND_ACK);
> +break;
> +}
> +break;
> +
> +case HDCP2_MS_A8F8:
> +switch (hdcp_info->hdcp2_info.hdcp_handler.sub_state) {
> +case HDCP2_MSG_REPAUTH_SEND_ACK:
> +tmp = mdrv_dp_tx_hdcp2_write_msg(hdcp_info,
> + HDCP2_MSG_REPA
> UTH_SEND_ACK);
> +if (!tmp) {
> +err_code = HDCP_ERR_SEND_MSG_FAIL;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +time = get_time_diff(pre_time);
> +if (time > HDCP2_REP_SEND_ACK) {
> +err_code = HDCP_ERR_RESPONSE_TIMEROUT;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A9F9,
> + HDCP2_MSG_REPAUTH_ST
> REAM_MANAGE);
> +hdcp_info->hdcp2_info.hdcp_handler.retry_cnt =
> 0;
> +break;
> +}
> +break;
> +
> +case HDCP2_MS_A9F9:
> +switch (hdcp_info->hdcp2_info.hdcp_handler.sub_state) {
> +case HDCP2_MSG_REPAUTH_STREAM_MANAGE:
> +tmp =
> mdrv_dp_tx_hdcp2_process_rep_auth_stream_manage(hdcp_info);
> +if (!tmp) {
> +err_code = HDCP_ERR_PROCESS_FAIL;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +tmp = mdrv_dp_tx_hdcp2_write_msg(hdcp_info,
> + HDCP2_MSG_REPA
> UTH_STREAM_MANAGE);
> +if (!tmp) {
> +err_code = HDCP_ERR_SEND_MSG_FAIL;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +pre_time = get_system_time();
> +hdcp_info->hdcp2_info.hdcp_handler.recv_msg =
> false;
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A9F9,
> + HDCP2_MSG_REPAUTH_ST
> REAM_READY);
> +break;
> +case HDCP2_MSG_REPAUTH_STREAM_READY:
> +time = get_time_diff(pre_time);
> +if (time > HDCP2_REPAUTHSTREAMRDY_WDT / 2)
> +mdrv_dp_tx_hdcp2_read_msg(hdcp_info,
> + HDCP2_MSG_REP
> AUTH_STREAM_READY);
> +else
> +break;
> +
> +time = get_time_diff(pre_time);
> +if (time > HDCP2_REPAUTHSTREAMRDY_WDT) {
> +err_code = HDCP_ERR_RESPONSE_TIMEROUT;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +} else if (!hdcp_info-
> >hdcp2_info.hdcp_handler.recv_msg) {
> +if (hdcp_info-
> >hdcp2_info.hdcp_handler.retry_cnt
> +>=
> HDCP2_STREAM_MANAGE_RETRY_CNT) {
> +err_code =
> HDCP_ERR_RESPONSE_TIMEROUT;
> +mdrv_dp_tx_hdcp2_err_handle(hdc
> p_info, err_code, __LINE__);
> +break;
> +}
> +
> +hdcp_info-
> >hdcp2_info.hdcp_handler.retry_cnt++;
> +
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A9F9,
> + HDCP2_MSG_RE
> PAUTH_STREAM_READY);
> +break;
> +}
> +
> +tmp =
> mdrv_dp_tx_hdcp2_recv_rep_auth_stream_ready(hdcp_info);
> +if (!tmp) {
> +err_code = HDCP_ERR_PROCESS_FAIL;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info,
> err_code, __LINE__);
> +break;
> +}
> +
> +mdrv_dp_tx_hdcp2_set_state(hdcp_info,
> HDCP2_MS_A5F5,
> + HDCP2_MSG_AUTH_DONE)
> ;
> +break;
> +}
> +break;
> +default:
> +err_code = HDCP_ERR_UNKNOWN_STATE;
> +mdrv_dp_tx_hdcp2_err_handle(hdcp_info, err_code,
> __LINE__);
> +break;
> +}
> +
> +return err_code;
> +}
> +

</pre><!--type:text--><!--{--><pre>************* MEDIATEK Confidentiality Notice ********************
The information contained in this e-mail message (including any 
attachments) may be confidential, proprietary, privileged, or otherwise
exempt from disclosure under applicable laws. It is intended to be 
conveyed only to the designated recipient(s). Any use, dissemination, 
distribution, printing, retaining or copying of this e-mail (including its 
attachments) by unintended recipient(s) is strictly prohibited and may 
be unlawful. If you are not an intended recipient of this e-mail, or believe 
that you have received this e-mail in error, please notify the sender 
immediately (by replying to this e-mail), delete any and all copies of 
this e-mail (including any attachments) from your system, and do not
disclose the content of this e-mail to any other person. Thank you!
</pre><!--}-->