ASoC: msm: set AFE_LOOPBACK_TX port id to EC ref port
Set AFE_LOOPBACK_TX be dai port id to playback port
id to get EC reference. Add session type support in
creating new COPP and while checking for existing COPP.
CRs-Fixed: 2080421
Change-Id: I979f3ce1009cc18ff14130bebb8bd51a78fbe5ac
Signed-off-by: Surendar karka <sukark@codeaurora.org>
Signed-off-by: Sachin Mohan Gadag <sgadag@codeaurora.org>
diff --git a/dsp/q6adm.c b/dsp/q6adm.c
index 48e4b16..74a9244 100644
--- a/dsp/q6adm.c
+++ b/dsp/q6adm.c
@@ -66,6 +66,7 @@
atomic_t channels[AFE_MAX_PORTS][MAX_COPPS_PER_PORT];
atomic_t app_type[AFE_MAX_PORTS][MAX_COPPS_PER_PORT];
atomic_t acdb_id[AFE_MAX_PORTS][MAX_COPPS_PER_PORT];
+ atomic_t session_type[AFE_MAX_PORTS][MAX_COPPS_PER_PORT];
wait_queue_head_t wait[AFE_MAX_PORTS][MAX_COPPS_PER_PORT];
wait_queue_head_t adm_delay_wait[AFE_MAX_PORTS][MAX_COPPS_PER_PORT];
atomic_t adm_delay_stat[AFE_MAX_PORTS][MAX_COPPS_PER_PORT];
@@ -267,7 +268,8 @@
}
static int adm_get_idx_if_copp_exists(int port_idx, int topology, int mode,
- int rate, int bit_width, int app_type)
+ int rate, int bit_width, int app_type,
+ int session_type)
{
int idx;
@@ -281,6 +283,9 @@
(rate == atomic_read(&this_adm.copp.rate[port_idx][idx])) &&
(bit_width ==
atomic_read(&this_adm.copp.bit_width[port_idx][idx])) &&
+ (session_type ==
+ atomic_read(
+ &this_adm.copp.session_type[port_idx][idx])) &&
(app_type ==
atomic_read(&this_adm.copp.app_type[port_idx][idx])))
return idx;
@@ -1468,6 +1473,8 @@
&this_adm.copp.app_type[i][j], 0);
atomic_set(
&this_adm.copp.acdb_id[i][j], 0);
+ atomic_set(
+ &this_adm.copp.session_type[i][j], 0);
this_adm.copp.adm_status[i][j] =
ADM_STATUS_CALIBRATION_REQUIRED;
}
@@ -2560,7 +2567,8 @@
* Returns 0 on success or error on failure
*/
int adm_open(int port_id, int path, int rate, int channel_mode, int topology,
- int perf_mode, uint16_t bit_width, int app_type, int acdb_id)
+ int perf_mode, uint16_t bit_width, int app_type, int acdb_id,
+ int session_type)
{
struct adm_cmd_device_open_v5 open;
struct adm_cmd_device_open_v6 open_v6;
@@ -2629,7 +2637,7 @@
copp_idx = adm_get_idx_if_copp_exists(port_idx, topology,
perf_mode,
rate, bit_width,
- app_type);
+ app_type, session_type);
if (copp_idx < 0) {
copp_idx = adm_get_next_available_copp(port_idx);
@@ -2653,6 +2661,8 @@
app_type);
atomic_set(&this_adm.copp.acdb_id[port_idx][copp_idx],
acdb_id);
+ atomic_set(&this_adm.copp.session_type[port_idx][copp_idx],
+ session_type);
set_bit(ADM_STATUS_CALIBRATION_REQUIRED,
(void *)&this_adm.copp.adm_status[port_idx][copp_idx]);
if ((path != ADM_PATH_COMPRESSED_RX) &&
@@ -2703,7 +2713,8 @@
open.endpoint_id_1 = tmp_port;
open.endpoint_id_2 = 0xFFFF;
- if (this_adm.ec_ref_rx && (path != 1)) {
+ if (this_adm.ec_ref_rx && (path != 1) &&
+ (afe_get_port_type(tmp_port) == MSM_AFE_PORT_TYPE_TX)) {
open.endpoint_id_2 = this_adm.ec_ref_rx;
this_adm.ec_ref_rx = -1;
}
@@ -3252,6 +3263,7 @@
atomic_set(&this_adm.copp.channels[port_idx][copp_idx], 0);
atomic_set(&this_adm.copp.bit_width[port_idx][copp_idx], 0);
atomic_set(&this_adm.copp.app_type[port_idx][copp_idx], 0);
+ atomic_set(&this_adm.copp.session_type[port_idx][copp_idx], 0);
clear_bit(ADM_STATUS_CALIBRATION_REQUIRED,
(void *)&this_adm.copp.adm_status[port_idx][copp_idx]);
@@ -5243,6 +5255,7 @@
atomic_set(&this_adm.copp.bit_width[i][j], 0);
atomic_set(&this_adm.copp.app_type[i][j], 0);
atomic_set(&this_adm.copp.acdb_id[i][j], 0);
+ atomic_set(&this_adm.copp.session_type[i][j], 0);
init_waitqueue_head(&this_adm.copp.wait[i][j]);
atomic_set(&this_adm.copp.adm_delay_stat[i][j], 0);
init_waitqueue_head(