Merge "dsp: Reset core hw vote client handle in SSR"

Cette révision appartient à :
qctecmdr
2019-10-12 08:55:27 -07:00
révisé par Gerrit - the friendly Code Review server
révision d20a882baf

Voir le fichier

@@ -596,6 +596,11 @@ static int32_t afe_callback(struct apr_client_data *data, void *priv)
rtac_set_afe_handle(this_afe.apr);
}
/* Reset the core client handle in SSR/PDR use cases */
mutex_lock(&this_afe.afe_cmd_lock);
this_afe.lpass_hw_core_client_hdl = 0;
mutex_unlock(&this_afe.afe_cmd_lock);
/*
* Pass reset events to proxy driver, if cb is registered
*/
@@ -9058,6 +9063,7 @@ int __init afe_init(void)
this_afe.mmap_handle = 0;
this_afe.vi_tx_port = -1;
this_afe.vi_rx_port = -1;
this_afe.lpass_hw_core_client_hdl = 0;
this_afe.prot_cfg.mode = MSM_SPKR_PROT_DISABLED;
this_afe.th_ftm_cfg.mode = MSM_SPKR_PROT_DISABLED;
this_afe.ex_ftm_cfg.mode = MSM_SPKR_PROT_DISABLED;
@@ -9262,6 +9268,11 @@ int afe_unvote_lpass_core_hw(uint32_t hw_block_id, uint32_t client_handle)
mutex_lock(&this_afe.afe_cmd_lock);
if (!this_afe.lpass_hw_core_client_hdl) {
pr_debug("%s: SSR in progress, return\n", __func__);
goto done;
}
memset(cmd_ptr, 0, sizeof(hw_vote_cfg));
cmd_ptr->hdr.hdr_field = APR_HDR_FIELD(APR_MSG_TYPE_SEQ_CMD,
@@ -9278,6 +9289,12 @@ int afe_unvote_lpass_core_hw(uint32_t hw_block_id, uint32_t client_handle)
pr_debug("%s: lpass core hw unvote opcode[0x%x] hw id[0x%x]\n",
__func__, cmd_ptr->hdr.opcode, cmd_ptr->hw_block_id);
if (cmd_ptr->client_handle <= 0) {
pr_err("%s: invalid client handle\n", __func__);
ret = -EINVAL;
goto done;
}
atomic_set(&this_afe.status, 0);
atomic_set(&this_afe.state, 1);
ret = apr_send_pkt(this_afe.apr, (uint32_t *) cmd_ptr);