Lines Matching +full:q6adm +full:- +full:routing
1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (c) 2011-2017, The Linux Foundation. All rights reserved.
5 #include <dt-bindings/sound/qcom,q6asm.h>
6 #include <dt-bindings/sound/qcom,q6afe.h>
17 #include <sound/soc-dapm.h>
24 #include "q6adm.h"
27 #define DRV_NAME "q6routing-component"
352 * q6routing_stream_open() - Register a new stream for route setup
371 pr_err("Routing driver not yet ready\n"); in q6routing_stream_open()
372 return -EINVAL; in q6routing_stream_open()
375 session = &routing_data->sessions[stream_id - 1]; in q6routing_stream_open()
376 if (session->port_id < 0) { in q6routing_stream_open()
377 dev_err(routing_data->dev, "Routing not setup for MultiMedia%d Session\n", in q6routing_stream_open()
378 session->fedai_id); in q6routing_stream_open()
379 return -EINVAL; in q6routing_stream_open()
382 pdata = &routing_data->port_data[session->port_id]; in q6routing_stream_open()
384 mutex_lock(&routing_data->lock); in q6routing_stream_open()
385 session->fedai_id = fedai_id; in q6routing_stream_open()
387 session->path_type = pdata->path_type; in q6routing_stream_open()
388 session->sample_rate = pdata->sample_rate; in q6routing_stream_open()
389 session->channels = pdata->channels; in q6routing_stream_open()
390 session->bits_per_sample = pdata->bits_per_sample; in q6routing_stream_open()
394 copp = q6adm_open(routing_data->dev, session->port_id, in q6routing_stream_open()
395 session->path_type, session->sample_rate, in q6routing_stream_open()
396 session->channels, topology, perf_mode, in q6routing_stream_open()
397 session->bits_per_sample, 0, 0); in q6routing_stream_open()
400 mutex_unlock(&routing_data->lock); in q6routing_stream_open()
401 return -EINVAL; in q6routing_stream_open()
405 set_bit(copp_idx, &session->copp_map); in q6routing_stream_open()
406 session->copps[copp_idx] = copp; in q6routing_stream_open()
408 for_each_set_bit(j, &session->copp_map, MAX_COPPS_PER_PORT) { in q6routing_stream_open()
409 payload.port_id[num_copps] = session->port_id; in q6routing_stream_open()
417 q6adm_matrix_map(routing_data->dev, session->path_type, in q6routing_stream_open()
420 mutex_unlock(&routing_data->lock); in q6routing_stream_open()
432 if (fedai_id == data->sessions[i].fedai_id) in get_session_from_id()
433 return &data->sessions[i]; in get_session_from_id()
440 * q6routing_stream_close() - Deregister a stream
456 for_each_set_bit(idx, &session->copp_map, MAX_COPPS_PER_PORT) { in q6routing_stream_close()
457 if (session->copps[idx]) { in q6routing_stream_close()
458 q6adm_close(routing_data->dev, session->copps[idx]); in q6routing_stream_close()
459 session->copps[idx] = NULL; in q6routing_stream_close()
463 session->fedai_id = -1; in q6routing_stream_close()
464 session->copp_map = 0; in q6routing_stream_close()
474 (struct soc_mixer_control *)kcontrol->private_value; in msm_routing_get_audio_mixer()
475 int session_id = mc->shift; in msm_routing_get_audio_mixer()
477 struct msm_routing_data *priv = dev_get_drvdata(c->dev); in msm_routing_get_audio_mixer()
478 struct session_data *session = &priv->sessions[session_id]; in msm_routing_get_audio_mixer()
480 if (session->port_id == mc->reg) in msm_routing_get_audio_mixer()
481 ucontrol->value.integer.value[0] = 1; in msm_routing_get_audio_mixer()
483 ucontrol->value.integer.value[0] = 0; in msm_routing_get_audio_mixer()
494 struct msm_routing_data *data = dev_get_drvdata(c->dev); in msm_routing_put_audio_mixer()
496 (struct soc_mixer_control *)kcontrol->private_value; in msm_routing_put_audio_mixer()
498 int be_id = mc->reg; in msm_routing_put_audio_mixer()
499 int session_id = mc->shift; in msm_routing_put_audio_mixer()
500 struct session_data *session = &data->sessions[session_id]; in msm_routing_put_audio_mixer()
502 if (ucontrol->value.integer.value[0]) { in msm_routing_put_audio_mixer()
503 if (session->port_id == be_id) in msm_routing_put_audio_mixer()
506 session->port_id = be_id; in msm_routing_put_audio_mixer()
509 if (session->port_id == -1 || session->port_id != be_id) in msm_routing_put_audio_mixer()
512 session->port_id = -1; in msm_routing_put_audio_mixer()
1060 struct msm_routing_data *data = dev_get_drvdata(component->dev); in routing_hw_params()
1061 unsigned int be_id = snd_soc_rtd_to_cpu(rtd, 0)->id; in routing_hw_params()
1065 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) in routing_hw_params()
1071 return -EINVAL; in routing_hw_params()
1073 session = &data->port_data[be_id]; in routing_hw_params()
1075 mutex_lock(&data->lock); in routing_hw_params()
1077 session->path_type = path_type; in routing_hw_params()
1078 session->sample_rate = params_rate(params); in routing_hw_params()
1079 session->channels = params_channels(params); in routing_hw_params()
1083 session->bits_per_sample = 16; in routing_hw_params()
1086 session->bits_per_sample = 24; in routing_hw_params()
1092 mutex_unlock(&data->lock); in routing_hw_params()
1101 routing_data->sessions[i].port_id = -1; in msm_routing_probe()
1102 routing_data->sessions[i].fedai_id = -1; in msm_routing_probe()
1136 struct device *dev = &pdev->dev; in q6pcm_routing_probe()
1140 return -ENOMEM; in q6pcm_routing_probe()
1142 routing_data->dev = dev; in q6pcm_routing_probe()
1144 mutex_init(&routing_data->lock); in q6pcm_routing_probe()
1159 { .compatible = "qcom,q6adm-routing" },
1175 MODULE_DESCRIPTION("Q6 Routing platform");