diff options
author | Linux Build Service Account <lnxbuild@quicinc.com> | 2017-10-18 04:49:40 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-10-18 04:49:40 -0700 |
commit | 9809437498129d6e06a8aed24ee4f63abbb3af54 (patch) | |
tree | 38834e54f38f9c5361201852738fa667b2bbfbc1 /dsp | |
parent | 22f45372f510eb2337252b3ba5f573001fa76531 (diff) | |
parent | fb90eb6176ec661b489b75859b439bafe8644b04 (diff) | |
download | msm-extra-9809437498129d6e06a8aed24ee4f63abbb3af54.tar.gz |
Merge "dsp: fix reset logic during ADSP SSR for lsm"
Diffstat (limited to 'dsp')
-rw-r--r-- | dsp/q6lsm.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/dsp/q6lsm.c b/dsp/q6lsm.c index adc541ae..848f2cd9 100644 --- a/dsp/q6lsm.c +++ b/dsp/q6lsm.c @@ -148,6 +148,10 @@ static int q6lsm_callback(struct apr_client_data *data, void *priv) __func__, data->opcode, data->reset_event, data->reset_proc); + apr_reset(client->apr); + client->apr = NULL; + atomic_set(&client->cmd_state, CMD_STATE_CLEARED); + wake_up(&client->cmd_wait); cal_utils_clear_cal_block_q6maps(LSM_MAX_CAL_IDX, lsm_common.cal_data); mutex_lock(&lsm_common.cal_data[LSM_CUSTOM_TOP_IDX]->lock); @@ -368,6 +372,11 @@ static int q6lsm_apr_send_pkt(struct lsm_client *client, void *handle, unsigned long flags = 0; struct apr_hdr *msg_hdr = (struct apr_hdr *) data; + if (!handle) { + pr_err("%s: handle is NULL\n", __func__); + return -EINVAL; + } + pr_debug("%s: enter wait %d\n", __func__, wait); if (wait) mutex_lock(&lsm_common.apr_lock); @@ -1341,6 +1350,10 @@ static int q6lsm_mmapcallback(struct apr_client_data *data, void *priv) pr_debug("%s: SSR event received 0x%x, event 0x%x,\n" "proc 0x%x SID 0x%x\n", __func__, data->opcode, data->reset_event, data->reset_proc, sid); + + apr_reset(lsm_common.apr); + lsm_common.apr = NULL; + atomic_set(&lsm_common.apr_users, 0); lsm_common.common_client[sid].lsm_cal_phy_addr = 0; cal_utils_clear_cal_block_q6maps(LSM_MAX_CAL_IDX, lsm_common.cal_data); |