void audio_commit_pending_pp_params(void *priv, unsigned id, uint16_t *msg) { struct audio_copp *audio_copp = priv; if (audio_copp == NULL) { MM_ERR("NULL audio copp pointer\n"); return; } if (AUDPP_MSG_CFG_MSG == id && msg[0] == AUDPP_MSG_ENA_DIS) return; if (!audio_copp->status) return; if (!is_acdb_enabled()) { audpp_dsp_set_mbadrc(COMMON_OBJ_ID, audio_copp->mbadrc_enable, &audio_copp->mbadrc); audpp_dsp_set_eq(COMMON_OBJ_ID, audio_copp->eq_enable, &audio_copp->eq); audpp_dsp_set_rx_iir(COMMON_OBJ_ID, audio_copp->rx_iir_enable, &audio_copp->iir); audpp_dsp_set_vol_pan(COMMON_OBJ_ID, &audio_copp->vol_pan); audpp_dsp_set_qconcert_plus(COMMON_OBJ_ID, audio_copp->qconcert_plus_enable, &audio_copp->qconcert_plus); } audio_enable_srs_trumedia(audio_copp, true); }
static long audpre_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { struct audio_in *audio = file->private_data; int rc = 0, enable; uint16_t enable_mask; #if DEBUG int i; #endif mutex_lock(&audio->lock); switch (cmd) { case AUDIO_ENABLE_AUDPRE: { if (is_acdb_enabled()) { MM_INFO("Audpp is supported via acdb\n"); rc = -EFAULT; break; } if (copy_from_user(&enable_mask, (void *) arg, sizeof(enable_mask))) goto out_fault; enable = (enable_mask & AGC_ENABLE) ? 1 : 0; audio_enable_tx_agc(audio, enable); enable = (enable_mask & NS_ENABLE) ? 1 : 0; audio_enable_ns(audio, enable); enable = (enable_mask & TX_IIR_ENABLE) ? 1 : 0; audio_enable_iir(audio, enable); break; } case AUDIO_SET_AGC: { if (copy_from_user(&audio->agc, (void *) arg, sizeof(audio->agc))) goto out_fault; #if DEBUG MM_AUD_INFO("set agc\n"); for (i = 0; i < AGC_PARAM_SIZE; i++) \ MM_AUD_INFO("agc_params[%d] = 0x%04x\n", i, audio->agc.agc_params[i]); #endif break; } case AUDIO_SET_NS: { if (copy_from_user(&audio->ns, (void *) arg, sizeof(audio->ns))) goto out_fault; #if DEBUG MM_AUD_INFO("set ns\n"); for (i = 0; i < NS_PARAM_SIZE; i++) \ MM_AUD_INFO("ns_params[%d] = 0x%04x\n", i, audio->ns.ns_params[i]); #endif break; } case AUDIO_SET_TX_IIR: { if (copy_from_user(&audio->iir, (void *) arg, sizeof(audio->iir))) goto out_fault; #if DEBUG MM_AUD_INFO("set iir\n"); MM_AUD_INFO("iir.num_bands = 0x%04x\n", audio->iir.num_bands); for (i = 0; i < IIR_PARAM_SIZE; i++) \ MM_AUD_INFO("iir_params[%d] = 0x%04x\n", i, audio->iir.iir_params[i]); #endif break; } default: rc = -EINVAL; } goto out; out_fault: rc = -EFAULT; out: mutex_unlock(&audio->lock); return rc; }
static void audrec_dsp_event(void *data, unsigned id, size_t len, void (*getevent)(void *ptr, size_t len)) { struct audio_in *audio = NULL; uint16_t msg[3]; if (data) audio = data; else { MM_AUD_ERR("invalid data for event %x\n", id); return; } getevent(msg, sizeof(msg)); switch (id) { case AUDREC_MSG_CMD_CFG_DONE_MSG: { if (msg[0] & AUDREC_MSG_CFG_DONE_ENC_ENA) { audio->audrec_obj_idx = msg[1]; MM_AUD_INFO("audpre: CFG ENABLED\n"); audpcm_in_encmem_config(audio); } else { MM_AUD_INFO("audrec: CFG SLEEP\n"); audio->running = 0; audio->tx_agc_enable = 0; audio->ns_enable = 0; audio->iir_enable = 0; } break; } case AUDREC_MSG_CMD_AREC_MEM_CFG_DONE_MSG: { MM_AUD_DBG("audrec: AREC_MEM_CFG_DONE_MSG\n"); audpcm_in_encparam_config(audio); break; } case AUDREC_MSG_CMD_AREC_PARAM_CFG_DONE_MSG: { MM_AUD_INFO("audrec: PARAM CFG DONE\n"); audio->running = 1; if (is_acdb_enabled()) break; audio_dsp_set_tx_agc(audio); audio_dsp_set_ns(audio); audio_dsp_set_iir(audio); break; } case AUDREC_MSG_NO_EXT_PKT_AVAILABLE_MSG: { MM_AUD_ERR("audrec: ERROR %x\n", msg[0]); break; } case AUDREC_MSG_PACKET_READY_MSG: { struct audrec_msg_packet_ready_msg pkt_ready_msg; getevent(&pkt_ready_msg, AUDREC_MSG_PACKET_READY_MSG_LEN); MM_AUD_DBG("UP_PACKET_READY_MSG: write cnt msw %d \ write cnt lsw %d read cnt msw %d read cnt lsw %d \n",\ pkt_ready_msg.pkt_counter_msw, \ pkt_ready_msg.pkt_counter_lsw, \ pkt_ready_msg.pkt_read_cnt_msw, \ pkt_ready_msg.pkt_read_cnt_lsw); audpcm_in_get_dsp_frames(audio); break; } case ADSP_MESSAGE_ID: { MM_AUD_INFO("audrec: module enabled\n"); break; } default: MM_AUD_ERR("audrec: unknown event %d\n", id); } }