dsp: Fix wrong payload size in adm_open command

Correcting payload length for adm_cmd_device_open_v8
usage if endpoint_id1 and endpoint_id2 are valid
and this_adm.num_ec_ref_rx_chans is 0.

Change-Id: I82815a2d885cdad5a9427c11eb73224289b158b3
Signed-off-by: Dieter Luecking <dieterl@codeaurora.org>
diff --git a/dsp/q6adm.c b/dsp/q6adm.c
index 3877b1b..85e1b85 100644
--- a/dsp/q6adm.c
+++ b/dsp/q6adm.c
@@ -3069,10 +3069,6 @@
 			open_v8.endpoint_id_2 = 0xFFFF;
 			open_v8.endpoint_id_3 = 0xFFFF;
 
-			if (this_adm.ec_ref_rx && (path != 1)) {
-				open_v8.endpoint_id_2 = this_adm.ec_ref_rx;
-				this_adm.ec_ref_rx = -1;
-			}
 
 			open_v8.topology_id = topology;
 			open_v8.reserved = 0;
@@ -3100,8 +3096,11 @@
 				+ ep1_payload_size;
 			atomic_set(&this_adm.copp.stat[port_idx][copp_idx], -1);
 
-			if ((this_adm.num_ec_ref_rx_chans != 0) && (path != 1)
+			if ((this_adm.num_ec_ref_rx_chans != 0)
+				&& (path != ADM_PATH_PLAYBACK)
 				&& (open_v8.endpoint_id_2 != 0xFFFF)) {
+				open_v8.endpoint_id_2 = this_adm.ec_ref_rx;
+				this_adm.ec_ref_rx = -1;
 				ep2_payload.dev_num_channel =
 					this_adm.num_ec_ref_rx_chans;
 				this_adm.num_ec_ref_rx_chans = 0;
@@ -3138,18 +3137,23 @@
 				param_size += ep2_payload_size;
 			}
 
+			open_v8.hdr.pkt_size = param_size;
 			adm_params = kzalloc(param_size, GFP_KERNEL);
 			if (!adm_params)
 				return -ENOMEM;
-			open_v8.hdr.pkt_size = param_size;
 			memcpy(adm_params, &open_v8, sizeof(open_v8));
 			memcpy(adm_params + sizeof(open_v8),
 					(void *)&ep1_payload,
 					ep1_payload_size);
-			memcpy(adm_params + sizeof(open_v8)
-					+ ep1_payload_size,
-					(void *)&ep2_payload,
-					ep2_payload_size);
+
+			if ((this_adm.num_ec_ref_rx_chans != 0)
+				&& (path != ADM_PATH_PLAYBACK)
+				&& (open_v8.endpoint_id_2 != 0xFFFF)) {
+				memcpy(adm_params + sizeof(open_v8)
+						+ ep1_payload_size,
+						(void *)&ep2_payload,
+						ep2_payload_size);
+			}
 
 			ret = apr_send_pkt(this_adm.apr,
 					(uint32_t *)adm_params);