Loading sound/soc/msm/qdsp6v2/msm-pcm-q6-noirq.c +183 −0 Original line number Diff line number Diff line Loading @@ -836,6 +836,182 @@ static int msm_pcm_add_fe_topology_control(struct snd_soc_pcm_runtime *rtd) return ret; } static int msm_pcm_playback_app_type_cfg_ctl_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { u64 fe_id = kcontrol->private_value; int session_type = SESSION_TYPE_RX; int be_id = ucontrol->value.integer.value[3]; int ret = 0; int app_type; int acdb_dev_id; int sample_rate = 48000; app_type = ucontrol->value.integer.value[0]; acdb_dev_id = ucontrol->value.integer.value[1]; if (ucontrol->value.integer.value[2] != 0) sample_rate = ucontrol->value.integer.value[2]; ret = msm_pcm_routing_reg_stream_app_type_cfg(fe_id, session_type, be_id, app_type, acdb_dev_id, sample_rate); if (ret < 0) pr_err("%s: msm_pcm_playback_app_type_cfg_ctl_put failed, err %d\n", __func__, ret); pr_debug("%s: fe_id- %llu session_type- %d be_id- %d app_type- %d acdb_dev_id- %d sample_rate- %d\n", __func__, fe_id, session_type, be_id, app_type, acdb_dev_id, sample_rate); return ret; } static int msm_pcm_playback_app_type_cfg_ctl_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { u64 fe_id = kcontrol->private_value; int session_type = SESSION_TYPE_RX; int be_id = ucontrol->value.integer.value[3]; int ret = 0; int app_type; int acdb_dev_id; int sample_rate; ret = msm_pcm_routing_get_stream_app_type_cfg(fe_id, session_type, be_id, &app_type, &acdb_dev_id, &sample_rate); if (ret < 0) { pr_err("%s: msm_pcm_playback_app_type_cfg_ctl_get failed, err: %d\n", __func__, ret); goto done; } ucontrol->value.integer.value[0] = app_type; ucontrol->value.integer.value[1] = acdb_dev_id; ucontrol->value.integer.value[2] = sample_rate; pr_debug("%s: fedai_id %llu, session_type %d, be_id %d, app_type %d, acdb_dev_id %d, sample_rate %d\n", __func__, fe_id, session_type, be_id, app_type, acdb_dev_id, sample_rate); done: return ret; } static int msm_pcm_capture_app_type_cfg_ctl_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { u64 fe_id = kcontrol->private_value; int session_type = SESSION_TYPE_TX; int be_id = ucontrol->value.integer.value[3]; int ret = 0; int app_type; int acdb_dev_id; int sample_rate = 48000; app_type = ucontrol->value.integer.value[0]; acdb_dev_id = ucontrol->value.integer.value[1]; if (ucontrol->value.integer.value[2] != 0) sample_rate = ucontrol->value.integer.value[2]; ret = msm_pcm_routing_reg_stream_app_type_cfg(fe_id, session_type, be_id, app_type, acdb_dev_id, sample_rate); if (ret < 0) pr_err("%s: msm_pcm_capture_app_type_cfg_ctl_put failed, err: %d\n", __func__, ret); pr_debug("%s: fe_id- %llu session_type- %d be_id- %d app_type- %d acdb_dev_id- %d sample_rate- %d\n", __func__, fe_id, session_type, be_id, app_type, acdb_dev_id, sample_rate); return ret; } static int msm_pcm_capture_app_type_cfg_ctl_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { u64 fe_id = kcontrol->private_value; int session_type = SESSION_TYPE_TX; int be_id = ucontrol->value.integer.value[3]; int ret = 0; int app_type; int acdb_dev_id; int sample_rate; ret = msm_pcm_routing_get_stream_app_type_cfg(fe_id, session_type, be_id, &app_type, &acdb_dev_id, &sample_rate); if (ret < 0) { pr_err("%s: msm_pcm_capture_app_type_cfg_ctl_get failed, err: %d\n", __func__, ret); goto done; } ucontrol->value.integer.value[0] = app_type; ucontrol->value.integer.value[1] = acdb_dev_id; ucontrol->value.integer.value[2] = sample_rate; pr_debug("%s: fedai_id %llu, session_type %d, be_id %d, app_type %d, acdb_dev_id %d, sample_rate %d\n", __func__, fe_id, session_type, be_id, app_type, acdb_dev_id, sample_rate); done: return ret; } static int msm_pcm_add_app_type_controls(struct snd_soc_pcm_runtime *rtd) { struct snd_pcm *pcm = rtd->pcm; struct snd_pcm_usr *app_type_info; struct snd_kcontrol *kctl; const char *playback_mixer_ctl_name = "Audio Stream"; const char *capture_mixer_ctl_name = "Audio Stream Capture"; const char *deviceNo = "NN"; const char *suffix = "App Type Cfg"; int ctl_len, ret = 0; if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) { ctl_len = strlen(playback_mixer_ctl_name) + 1 + strlen(deviceNo) + 1 + strlen(suffix) + 1; pr_debug("%s: Playback app type cntrl add\n", __func__); ret = snd_pcm_add_usr_ctls(pcm, SNDRV_PCM_STREAM_PLAYBACK, NULL, 1, ctl_len, rtd->dai_link->id, &app_type_info); if (ret < 0) { pr_err("%s: playback app type cntrl add failed, err: %d\n", __func__, ret); return ret; } kctl = app_type_info->kctl; snprintf(kctl->id.name, ctl_len, "%s %d %s", playback_mixer_ctl_name, rtd->pcm->device, suffix); kctl->put = msm_pcm_playback_app_type_cfg_ctl_put; kctl->get = msm_pcm_playback_app_type_cfg_ctl_get; } if (pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream) { ctl_len = strlen(capture_mixer_ctl_name) + 1 + strlen(deviceNo) + 1 + strlen(suffix) + 1; pr_debug("%s: Capture app type cntrl add\n", __func__); ret = snd_pcm_add_usr_ctls(pcm, SNDRV_PCM_STREAM_CAPTURE, NULL, 1, ctl_len, rtd->dai_link->id, &app_type_info); if (ret < 0) { pr_err("%s: capture app type cntrl add failed, err: %d\n", __func__, ret); return ret; } kctl = app_type_info->kctl; snprintf(kctl->id.name, ctl_len, "%s %d %s", capture_mixer_ctl_name, rtd->pcm->device, suffix); kctl->put = msm_pcm_capture_app_type_cfg_ctl_put; kctl->get = msm_pcm_capture_app_type_cfg_ctl_get; } return 0; } static int msm_asoc_pcm_new(struct snd_soc_pcm_runtime *rtd) { struct snd_card *card = rtd->card->snd_card; Loading @@ -862,6 +1038,13 @@ static int msm_asoc_pcm_new(struct snd_soc_pcm_runtime *rtd) pr_err("%s: Could not add pcm topology control %d\n", __func__, ret); } ret = msm_pcm_add_app_type_controls(rtd); if (ret) { pr_err("%s: Could not add app type controls failed %d\n", __func__, ret); } pcm->nonatomic = true; exit: return ret; Loading Loading
sound/soc/msm/qdsp6v2/msm-pcm-q6-noirq.c +183 −0 Original line number Diff line number Diff line Loading @@ -836,6 +836,182 @@ static int msm_pcm_add_fe_topology_control(struct snd_soc_pcm_runtime *rtd) return ret; } static int msm_pcm_playback_app_type_cfg_ctl_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { u64 fe_id = kcontrol->private_value; int session_type = SESSION_TYPE_RX; int be_id = ucontrol->value.integer.value[3]; int ret = 0; int app_type; int acdb_dev_id; int sample_rate = 48000; app_type = ucontrol->value.integer.value[0]; acdb_dev_id = ucontrol->value.integer.value[1]; if (ucontrol->value.integer.value[2] != 0) sample_rate = ucontrol->value.integer.value[2]; ret = msm_pcm_routing_reg_stream_app_type_cfg(fe_id, session_type, be_id, app_type, acdb_dev_id, sample_rate); if (ret < 0) pr_err("%s: msm_pcm_playback_app_type_cfg_ctl_put failed, err %d\n", __func__, ret); pr_debug("%s: fe_id- %llu session_type- %d be_id- %d app_type- %d acdb_dev_id- %d sample_rate- %d\n", __func__, fe_id, session_type, be_id, app_type, acdb_dev_id, sample_rate); return ret; } static int msm_pcm_playback_app_type_cfg_ctl_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { u64 fe_id = kcontrol->private_value; int session_type = SESSION_TYPE_RX; int be_id = ucontrol->value.integer.value[3]; int ret = 0; int app_type; int acdb_dev_id; int sample_rate; ret = msm_pcm_routing_get_stream_app_type_cfg(fe_id, session_type, be_id, &app_type, &acdb_dev_id, &sample_rate); if (ret < 0) { pr_err("%s: msm_pcm_playback_app_type_cfg_ctl_get failed, err: %d\n", __func__, ret); goto done; } ucontrol->value.integer.value[0] = app_type; ucontrol->value.integer.value[1] = acdb_dev_id; ucontrol->value.integer.value[2] = sample_rate; pr_debug("%s: fedai_id %llu, session_type %d, be_id %d, app_type %d, acdb_dev_id %d, sample_rate %d\n", __func__, fe_id, session_type, be_id, app_type, acdb_dev_id, sample_rate); done: return ret; } static int msm_pcm_capture_app_type_cfg_ctl_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { u64 fe_id = kcontrol->private_value; int session_type = SESSION_TYPE_TX; int be_id = ucontrol->value.integer.value[3]; int ret = 0; int app_type; int acdb_dev_id; int sample_rate = 48000; app_type = ucontrol->value.integer.value[0]; acdb_dev_id = ucontrol->value.integer.value[1]; if (ucontrol->value.integer.value[2] != 0) sample_rate = ucontrol->value.integer.value[2]; ret = msm_pcm_routing_reg_stream_app_type_cfg(fe_id, session_type, be_id, app_type, acdb_dev_id, sample_rate); if (ret < 0) pr_err("%s: msm_pcm_capture_app_type_cfg_ctl_put failed, err: %d\n", __func__, ret); pr_debug("%s: fe_id- %llu session_type- %d be_id- %d app_type- %d acdb_dev_id- %d sample_rate- %d\n", __func__, fe_id, session_type, be_id, app_type, acdb_dev_id, sample_rate); return ret; } static int msm_pcm_capture_app_type_cfg_ctl_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { u64 fe_id = kcontrol->private_value; int session_type = SESSION_TYPE_TX; int be_id = ucontrol->value.integer.value[3]; int ret = 0; int app_type; int acdb_dev_id; int sample_rate; ret = msm_pcm_routing_get_stream_app_type_cfg(fe_id, session_type, be_id, &app_type, &acdb_dev_id, &sample_rate); if (ret < 0) { pr_err("%s: msm_pcm_capture_app_type_cfg_ctl_get failed, err: %d\n", __func__, ret); goto done; } ucontrol->value.integer.value[0] = app_type; ucontrol->value.integer.value[1] = acdb_dev_id; ucontrol->value.integer.value[2] = sample_rate; pr_debug("%s: fedai_id %llu, session_type %d, be_id %d, app_type %d, acdb_dev_id %d, sample_rate %d\n", __func__, fe_id, session_type, be_id, app_type, acdb_dev_id, sample_rate); done: return ret; } static int msm_pcm_add_app_type_controls(struct snd_soc_pcm_runtime *rtd) { struct snd_pcm *pcm = rtd->pcm; struct snd_pcm_usr *app_type_info; struct snd_kcontrol *kctl; const char *playback_mixer_ctl_name = "Audio Stream"; const char *capture_mixer_ctl_name = "Audio Stream Capture"; const char *deviceNo = "NN"; const char *suffix = "App Type Cfg"; int ctl_len, ret = 0; if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) { ctl_len = strlen(playback_mixer_ctl_name) + 1 + strlen(deviceNo) + 1 + strlen(suffix) + 1; pr_debug("%s: Playback app type cntrl add\n", __func__); ret = snd_pcm_add_usr_ctls(pcm, SNDRV_PCM_STREAM_PLAYBACK, NULL, 1, ctl_len, rtd->dai_link->id, &app_type_info); if (ret < 0) { pr_err("%s: playback app type cntrl add failed, err: %d\n", __func__, ret); return ret; } kctl = app_type_info->kctl; snprintf(kctl->id.name, ctl_len, "%s %d %s", playback_mixer_ctl_name, rtd->pcm->device, suffix); kctl->put = msm_pcm_playback_app_type_cfg_ctl_put; kctl->get = msm_pcm_playback_app_type_cfg_ctl_get; } if (pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream) { ctl_len = strlen(capture_mixer_ctl_name) + 1 + strlen(deviceNo) + 1 + strlen(suffix) + 1; pr_debug("%s: Capture app type cntrl add\n", __func__); ret = snd_pcm_add_usr_ctls(pcm, SNDRV_PCM_STREAM_CAPTURE, NULL, 1, ctl_len, rtd->dai_link->id, &app_type_info); if (ret < 0) { pr_err("%s: capture app type cntrl add failed, err: %d\n", __func__, ret); return ret; } kctl = app_type_info->kctl; snprintf(kctl->id.name, ctl_len, "%s %d %s", capture_mixer_ctl_name, rtd->pcm->device, suffix); kctl->put = msm_pcm_capture_app_type_cfg_ctl_put; kctl->get = msm_pcm_capture_app_type_cfg_ctl_get; } return 0; } static int msm_asoc_pcm_new(struct snd_soc_pcm_runtime *rtd) { struct snd_card *card = rtd->card->snd_card; Loading @@ -862,6 +1038,13 @@ static int msm_asoc_pcm_new(struct snd_soc_pcm_runtime *rtd) pr_err("%s: Could not add pcm topology control %d\n", __func__, ret); } ret = msm_pcm_add_app_type_controls(rtd); if (ret) { pr_err("%s: Could not add app type controls failed %d\n", __func__, ret); } pcm->nonatomic = true; exit: return ret; Loading