static void audrec_dsp_event(void *data, unsigned id, size_t len, void (*getevent)(void *ptr, size_t len)) { struct audio_in *audio = data; uint16_t msg[3]; getevent(msg, sizeof(msg)); switch (id) { case AUDREC_MSG_CMD_CFG_DONE_MSG: if (msg[0] & AUDREC_MSG_CFG_DONE_TYPE_0_UPDATE) { if (msg[0] & AUDREC_MSG_CFG_DONE_TYPE_0_ENA) { MM_INFO("CFG ENABLED\n"); audio_in_encoder_config(audio); } else { MM_INFO("CFG SLEEP\n"); audio->running = 0; audio->tx_agc_enable = 0; audio->ns_enable = 0; audio->iir_enable = 0; } } else { MM_INFO("CMD_CFG_DONE %x\n", msg[0]); } break; case AUDREC_MSG_CMD_AREC_PARAM_CFG_DONE_MSG: { MM_INFO("PARAM CFG DONE\n"); audio->running = 1; audio_dsp_set_tx_agc(audio); audio_dsp_set_ns(audio); audio_dsp_set_iir(audio); break; } case AUDREC_MSG_FATAL_ERR_MSG: MM_ERR("ERROR %x\n", msg[0]); break; case AUDREC_MSG_PACKET_READY_MSG: /* REC_DBG("type %x, count %d", msg[0], (msg[1] | (msg[2] << 16))); */ audio_in_get_dsp_frames(audio); break; case ADSP_MESSAGE_ID: MM_DBG("Received ADSP event: module \ enable/disable(audrectask)\n"); break; default: MM_ERR("unknown event %d\n", id); } }
static void audrec_dsp_event(void *data, unsigned id, size_t len, void (*getevent)(void *ptr, size_t len)) { struct audio_in *audio = data; uint16_t msg[3]; getevent(msg, sizeof(msg)); switch (id) { case AUDREC_MSG_CMD_CFG_DONE_MSG: if (msg[0] & AUDREC_MSG_CFG_DONE_TYPE_0_UPDATE) { if (msg[0] & AUDREC_MSG_CFG_DONE_TYPE_0_ENA) { pr_info("audpre: CFG ENABLED\n"); audio_dsp_set_agc(audio); audio_dsp_set_ns(audio); audio_dsp_set_tx_iir(audio); audio_in_encoder_config(audio); } else { pr_info("audrec: CFG SLEEP\n"); audio->running = 0; } } else { pr_info("audrec: CMD_CFG_DONE %x\n", msg[0]); } break; case AUDREC_MSG_CMD_AREC_PARAM_CFG_DONE_MSG: { pr_info("audrec: PARAM CFG DONE\n"); audio->running = 1; break; } case AUDREC_MSG_FATAL_ERR_MSG: pr_err("audrec: ERROR %x\n", msg[0]); break; case AUDREC_MSG_PACKET_READY_MSG: /*REC_DBG("type %x, count %d", msg[0], (msg[1] | (msg[2] << 16)));*/ audio_in_get_dsp_frames(audio); break; case ADSP_MESSAGE_ID: pr_info("audrec: module enabled\n"); break; default: pr_err("audrec: unknown event %d\n", id); } }
void q6asm_in_cb(uint32_t opcode, uint32_t token, uint32_t *payload, void *priv) { struct q6audio_in *audio = (struct q6audio_in *)priv; unsigned long flags; pr_debug("%s:session id %d: opcode[0x%x]\n", __func__, audio->ac->session, opcode); spin_lock_irqsave(&audio->dsp_lock, flags); switch (opcode) { case ASM_DATA_EVENT_READ_DONE_V2: audio_in_get_dsp_frames(audio, token, payload); break; case ASM_DATA_EVENT_WRITE_DONE_V2: atomic_inc(&audio->in_count); wake_up(&audio->write_wait); break; case ASM_DATA_EVENT_RENDERED_EOS: audio->eos_rsp = 1; wake_up(&audio->read_wait); break; case ASM_STREAM_CMDRSP_GET_PP_PARAMS_V2: break; case ASM_SESSION_EVENTX_OVERFLOW: pr_err("%s:session id %d: ASM_SESSION_EVENT_TX_OVERFLOW\n", __func__, audio->ac->session); break; case RESET_EVENTS: pr_debug("%s:received RESET EVENTS\n", __func__); audio->enabled = 0; audio->stopped = 1; audio->event_abort = 1; audio->reset_event = true; wake_up(&audio->read_wait); wake_up(&audio->write_wait); break; default: pr_debug("%s:session id %d: Ignore opcode[0x%x]\n", __func__, audio->ac->session, opcode); break; } spin_unlock_irqrestore(&audio->dsp_lock, flags); }
void q6asm_amrnb_in_cb(uint32_t opcode, uint32_t token, uint32_t *payload, void *priv) { struct q6audio_in * audio = (struct q6audio_in *)priv; unsigned long flags; pr_debug("%s:session id %d: opcode - %d\n", __func__, audio->ac->session, opcode); spin_lock_irqsave(&audio->dsp_lock, flags); switch (opcode) { case ASM_DATA_EVENT_EOS: audio->eos_ack = 1; break; case ASM_DATA_EVENT_READ_DONE: audio_in_get_dsp_frames(audio, token, payload); break; case ASM_DATA_EVENT_WRITE_DONE: atomic_inc(&audio->in_count); wake_up(&audio->write_wait); break; case ASM_DATA_CMDRSP_EOS: audio->eos_rsp = 1; wake_up(&audio->read_wait); break; case ASM_STREAM_CMDRSP_GET_ENCDEC_PARAM: break; case ASM_STREAM_CMDRSP_GET_PP_PARAMS: break; case ASM_SESSION_EVENT_TX_OVERFLOW: pr_err("%s:session id %d: ASM_SESSION_EVENT_TX_OVERFLOW\n", __func__, audio->ac->session); break; default: pr_err("%s:session id %d: Ignore opcode[0x%x]\n", __func__, audio->ac->session, opcode); break; } spin_unlock_irqrestore(&audio->dsp_lock, flags); }