qdsp5: audio: Update encoder drivers to use preproc driver functions

All the preproc(pre processing) functions have been moved to
preproc driver. Update encoder drivers to call preproc driver
functions to establish recording session.

Change-Id: Icca721b37ae84d3959681fea2b53e12c7ba271f8
Signed-off-by: Manish Dewangan <manish@codeaurora.org>
diff --git a/arch/arm/mach-msm/qdsp5/audio_aac_in.c b/arch/arm/mach-msm/qdsp5/audio_aac_in.c
index 99e10a4..4a35939 100644
--- a/arch/arm/mach-msm/qdsp5/audio_aac_in.c
+++ b/arch/arm/mach-msm/qdsp5/audio_aac_in.c
@@ -109,7 +109,6 @@
 	int out_frame_cnt;
 
 	struct msm_adsp_module *audrec;
-	struct msm_adsp_module *audpre;
 
 
 	/* configuration to use on next enable */
@@ -150,6 +149,8 @@
 	struct ion_client *client;
 	struct ion_handle *input_buff_handle;
 	struct ion_handle *output_buff_handle;
+
+	struct audrec_session_info session_info; /*audrec session info*/
 };
 
 struct audio_frame {
@@ -273,6 +274,31 @@
 	return temp;
 }
 
+/* ------------------- dsp --------------------- */
+static void audpre_dsp_event(void *data, unsigned id,  void *event_data)
+{
+
+	uint16_t *msg = event_data;
+
+	if (!msg)
+		return;
+
+	switch (id) {
+	case AUDPREPROC_MSG_CMD_CFG_DONE_MSG:
+		MM_DBG("type %d, status_flag %d\n",\
+			msg[0], msg[1]);
+		break;
+	case AUDPREPROC_MSG_ERROR_MSG_ID:
+		MM_INFO("err_index %d\n", msg[0]);
+		break;
+	case ADSP_MESSAGE_ID:
+		MM_DBG("Received ADSP event: module enable(audpreproctask)\n");
+		break;
+	default:
+		MM_ERR("unknown event %d\n", id);
+	}
+}
+
 /* must be called with audio->lock held */
 static int audaac_in_enable(struct audio_aac_in *audio)
 {
@@ -293,16 +319,24 @@
 		if (rc < 0)
 			return rc;
 
-		if (msm_adsp_enable(audio->audpre)) {
+		if (audpreproc_enable(audio->enc_id,
+				&audpre_dsp_event, audio)) {
+			MM_ERR("msm_adsp_enable(audpreproc) failed\n");
 			audmgr_disable(&audio->audmgr);
-			MM_ERR("msm_adsp_enable(audpre) failed\n");
 			return -ENODEV;
 		}
+
+		/*update aurec session info in audpreproc layer*/
+		audio->session_info.session_id = audio->enc_id;
+		audio->session_info.sampling_freq =
+			convert_samp_index(audio->samp_rate);
+		audpreproc_update_audrec_info(&audio->session_info);
 	}
+
 	if (msm_adsp_enable(audio->audrec)) {
 		if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL) {
+			audpreproc_disable(audio->enc_id, audio);
 			audmgr_disable(&audio->audmgr);
-			msm_adsp_disable(audio->audpre);
 		}
 		MM_ERR("msm_adsp_enable(audrec) failed\n");
 		return -ENODEV;
@@ -328,36 +362,17 @@
 		wake_up(&audio->wait);
 		msm_adsp_disable(audio->audrec);
 		if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL) {
-			msm_adsp_disable(audio->audpre);
+			audpreproc_disable(audio->enc_id, audio);
+			/*reset the sampling frequency information at
+			audpreproc layer*/
+			audio->session_info.sampling_freq = 0;
+			audpreproc_update_audrec_info(&audio->session_info);
 			audmgr_disable(&audio->audmgr);
 		}
 	}
 	return 0;
 }
 
-/* ------------------- dsp --------------------- */
-static void audpre_dsp_event(void *data, unsigned id, size_t len,
-			    void (*getevent)(void *ptr, size_t len))
-{
-	uint16_t msg[2];
-	getevent(msg, sizeof(msg));
-
-	switch (id) {
-	case AUDPREPROC_MSG_CMD_CFG_DONE_MSG:
-		MM_DBG("type %d, status_flag %d\n", msg[0], msg[1]);
-		break;
-	case AUDPREPROC_MSG_ERROR_MSG_ID:
-		MM_ERR("err_index %d\n", msg[0]);
-		break;
-	case ADSP_MESSAGE_ID:
-		MM_DBG("Received ADSP event: module enable(audpreproctask)\n");
-		break;
-	default:
-		MM_ERR("unknown event %d\n", id);
-	}
-}
-
-
 static void audaac_in_get_dsp_frames(struct audio_aac_in *audio)
 {
 	struct audio_frame *frame;
@@ -596,11 +611,7 @@
 	}
 }
 
-struct msm_adsp_ops audpre_aac_adsp_ops = {
-	.event = audpre_dsp_event,
-};
-
-struct msm_adsp_ops audrec_aac_adsp_ops = {
+static struct msm_adsp_ops audrec_aac_adsp_ops = {
 	.event = audrec_dsp_event,
 };
 
@@ -1241,12 +1252,9 @@
 	audaac_in_flush(audio);
 	msm_adsp_put(audio->audrec);
 
-	if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL)
-		msm_adsp_put(audio->audpre);
 
 	audpreproc_aenc_free(audio->enc_id);
 	audio->audrec = NULL;
-	audio->audpre = NULL;
 	audio->opened = 0;
 
 	if ((audio->mode == MSM_AUD_ENC_MODE_NONTUNNEL) && \
@@ -1342,16 +1350,6 @@
 		goto done;
 	}
 
-	if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL) {
-		rc = msm_adsp_get("AUDPREPROCTASK", &audio->audpre,
-				&audpre_aac_adsp_ops, audio);
-		if (rc) {
-			msm_adsp_put(audio->audrec);
-			audpreproc_aenc_free(audio->enc_id);
-			goto done;
-		}
-	}
-
 	audio->dsp_cnt = 0;
 	audio->stopped = 0;
 	audio->wflush = 0;
@@ -1493,8 +1491,6 @@
 	ion_client_destroy(client);
 client_create_error:
 	msm_adsp_put(audio->audrec);
-	if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL)
-		msm_adsp_put(audio->audpre);
 
 	audpreproc_aenc_free(audio->enc_id);
 	mutex_unlock(&audio->lock);
diff --git a/arch/arm/mach-msm/qdsp5/audio_amrnb_in.c b/arch/arm/mach-msm/qdsp5/audio_amrnb_in.c
index 39578c1..05ad373 100644
--- a/arch/arm/mach-msm/qdsp5/audio_amrnb_in.c
+++ b/arch/arm/mach-msm/qdsp5/audio_amrnb_in.c
@@ -114,8 +114,6 @@
 	uint32_t out_frame_cnt;
 
 	struct msm_adsp_module *audrec;
-	struct msm_adsp_module *audpre;
-
 
 	/* configuration to use on next enable */
 	uint32_t samp_rate;
@@ -154,6 +152,7 @@
 	struct ion_client *client;
 	struct ion_handle *input_buff_handle;
 
+	struct audrec_session_info session_info; /*audrec session info*/
 };
 
 struct audio_frame {
@@ -232,6 +231,30 @@
 	}
 }
 
+/* ------------------- dsp --------------------- */
+static void audpre_dsp_event(void *data, unsigned id,  void *event_data)
+{
+
+	uint16_t *msg = event_data;
+
+	if (!msg)
+		return;
+
+	switch (id) {
+	case AUDPREPROC_MSG_CMD_CFG_DONE_MSG:
+		MM_DBG("type %d, status_flag %d\n",\
+			msg[0], msg[1]);
+		break;
+	case AUDPREPROC_MSG_ERROR_MSG_ID:
+		MM_INFO("err_index %d\n", msg[0]);
+		break;
+	case ADSP_MESSAGE_ID:
+		MM_DBG("Received ADSP event: module enable(audpreproctask)\n");
+		break;
+	default:
+		MM_ERR("unknown event %d\n", id);
+	}
+}
 /* must be called with audio->lock held */
 static int audamrnb_in_enable(struct audio_amrnb_in *audio)
 {
@@ -252,16 +275,23 @@
 		if (rc < 0)
 			return rc;
 
-		if (msm_adsp_enable(audio->audpre)) {
+		if (audpreproc_enable(audio->enc_id,
+				&audpre_dsp_event, audio)) {
+			MM_ERR("msm_adsp_enable(audpreproc) failed\n");
 			audmgr_disable(&audio->audmgr);
-			MM_ERR("msm_adsp_enable(audpre) failed\n");
 			return -ENODEV;
 		}
+		/*update aurec session info in audpreproc layer*/
+		audio->session_info.session_id = audio->enc_id;
+		audio->session_info.sampling_freq =
+			convert_samp_index(audio->samp_rate);
+		audpreproc_update_audrec_info(&audio->session_info);
 	}
+
 	if (msm_adsp_enable(audio->audrec)) {
 		if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL) {
+			audpreproc_disable(audio->enc_id, audio);
 			audmgr_disable(&audio->audmgr);
-			msm_adsp_disable(audio->audpre);
 		}
 		MM_ERR("msm_adsp_enable(audrec) failed\n");
 		return -ENODEV;
@@ -286,35 +316,17 @@
 				audio->running == 0, 1*HZ);
 		msm_adsp_disable(audio->audrec);
 		if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL) {
-			msm_adsp_disable(audio->audpre);
+			/*reset the sampling frequency information at
+			audpreproc layer*/
+			audio->session_info.sampling_freq = 0;
+			audpreproc_update_audrec_info(&audio->session_info);
+			audpreproc_disable(audio->enc_id, audio);
 			audmgr_disable(&audio->audmgr);
 		}
 	}
 	return 0;
 }
 
-/* ------------------- dsp --------------------- */
-static void audpre_dsp_event(void *data, unsigned id, size_t len,
-			    void (*getevent)(void *ptr, size_t len))
-{
-	uint16_t msg[2];
-	getevent(msg, sizeof(msg));
-
-	switch (id) {
-	case AUDPREPROC_MSG_CMD_CFG_DONE_MSG:
-		MM_DBG("type %d, status_flag %d\n", msg[0], msg[1]);
-		break;
-	case AUDPREPROC_MSG_ERROR_MSG_ID:
-		MM_ERR("err_index %d\n", msg[0]);
-		break;
-	case ADSP_MESSAGE_ID:
-		MM_DBG("Received ADSP event: module enable(audpreproctask)\n");
-		break;
-	default:
-		MM_ERR("unknown event %d\n", id);
-	}
-}
-
 static void audamrnb_in_get_dsp_frames(struct audio_amrnb_in *audio)
 {
 	struct audio_frame *frame;
@@ -555,10 +567,6 @@
 	}
 }
 
-struct msm_adsp_ops audpre_amrnb_adsp_ops = {
-	.event = audpre_dsp_event,
-};
-
 struct msm_adsp_ops audrec_amrnb_adsp_ops = {
 	.event = audrec_dsp_event,
 };
@@ -1201,12 +1209,8 @@
 	audamrnb_in_flush(audio);
 	msm_adsp_put(audio->audrec);
 
-	if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL)
-		msm_adsp_put(audio->audpre);
-
 	audpreproc_aenc_free(audio->enc_id);
 	audio->audrec = NULL;
-	audio->audpre = NULL;
 	audio->opened = 0;
 	if ((audio->mode == MSM_AUD_ENC_MODE_NONTUNNEL) && \
 	   (audio->out_data)) {
@@ -1304,15 +1308,6 @@
 		goto done;
 	}
 
-	if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL) {
-		rc = msm_adsp_get("AUDPREPROCTASK", &audio->audpre,
-				&audpre_amrnb_adsp_ops, audio);
-		if (rc) {
-			msm_adsp_put(audio->audrec);
-			audpreproc_aenc_free(audio->enc_id);
-			goto done;
-		}
-	}
 	audio->dsp_cnt = 0;
 	audio->stopped = 0;
 	audio->wflush = 0;
@@ -1414,8 +1409,6 @@
 	dma_free_coherent(NULL, dma_size, audio->data, audio->phys);
 evt_error:
 	msm_adsp_put(audio->audrec);
-	if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL)
-		msm_adsp_put(audio->audpre);
 
 	audpreproc_aenc_free(audio->enc_id);
 	mutex_unlock(&audio->lock);
diff --git a/arch/arm/mach-msm/qdsp5/audio_evrc_in.c b/arch/arm/mach-msm/qdsp5/audio_evrc_in.c
index e955c4b..3310743 100644
--- a/arch/arm/mach-msm/qdsp5/audio_evrc_in.c
+++ b/arch/arm/mach-msm/qdsp5/audio_evrc_in.c
@@ -111,7 +111,6 @@
 	int out_frame_cnt;
 
 	struct msm_adsp_module *audrec;
-	struct msm_adsp_module *audpre;
 
 
 	/* configuration to use on next enable */
@@ -154,6 +153,8 @@
 	struct ion_client *client;
 	struct ion_handle *input_buff_handle;
 	struct ion_handle *output_buff_handle;
+
+	struct audrec_session_info session_info; /*audrec session info*/
 };
 
 struct audio_frame {
@@ -232,6 +233,32 @@
 	}
 }
 
+/* ------------------- dsp --------------------- */
+static void audpre_dsp_event(void *data, unsigned id,  void *event_data)
+{
+
+	uint16_t *msg = event_data;
+
+	if (!msg)
+		return;
+
+	switch (id) {
+	case AUDPREPROC_MSG_CMD_CFG_DONE_MSG:
+		MM_DBG("type %d, status_flag %d\n",\
+			msg[0], msg[1]);
+		break;
+	case AUDPREPROC_MSG_ERROR_MSG_ID:
+		MM_INFO("err_index %d\n", msg[0]);
+		break;
+	case ADSP_MESSAGE_ID:
+		MM_DBG("Received ADSP event: module enable(audpreproctask)\n");
+		break;
+	default:
+		MM_ERR("unknown event %d\n", id);
+	}
+}
+
+
 /* must be called with audio->lock held */
 static int audevrc_in_enable(struct audio_evrc_in *audio)
 {
@@ -252,16 +279,24 @@
 		if (rc < 0)
 			return rc;
 
-		if (msm_adsp_enable(audio->audpre)) {
+		if (audpreproc_enable(audio->enc_id,
+				&audpre_dsp_event, audio)) {
+			MM_ERR("msm_adsp_enable(audpreproc) failed\n");
 			audmgr_disable(&audio->audmgr);
-			MM_ERR("msm_adsp_enable(audpre) failed\n");
 			return -ENODEV;
 		}
+
+		/*update aurec session info in audpreproc layer*/
+		audio->session_info.session_id = audio->enc_id;
+		audio->session_info.sampling_freq =
+			convert_samp_index(audio->samp_rate);
+		audpreproc_update_audrec_info(&audio->session_info);
 	}
+
 	if (msm_adsp_enable(audio->audrec)) {
 		if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL) {
+			audpreproc_disable(audio->enc_id, audio);
 			audmgr_disable(&audio->audmgr);
-			msm_adsp_disable(audio->audpre);
 		}
 		MM_ERR("msm_adsp_enable(audrec) failed\n");
 		return -ENODEV;
@@ -288,35 +323,17 @@
 		wake_up(&audio->wait);
 		msm_adsp_disable(audio->audrec);
 		if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL) {
-			msm_adsp_disable(audio->audpre);
+			audpreproc_disable(audio->enc_id, audio);
+			/*reset the sampling frequency information at
+			audpreproc layer*/
+			audio->session_info.sampling_freq = 0;
+			audpreproc_update_audrec_info(&audio->session_info);
 			audmgr_disable(&audio->audmgr);
 		}
 	}
 	return 0;
 }
 
-/* ------------------- dsp --------------------- */
-static void audpre_dsp_event(void *data, unsigned id, size_t len,
-			    void (*getevent)(void *ptr, size_t len))
-{
-	uint16_t msg[2];
-	getevent(msg, sizeof(msg));
-
-	switch (id) {
-	case AUDPREPROC_MSG_CMD_CFG_DONE_MSG:
-		MM_DBG("type %d, status_flag %d\n", msg[0], msg[1]);
-		break;
-	case AUDPREPROC_MSG_ERROR_MSG_ID:
-		MM_ERR("err_index %d\n", msg[0]);
-		break;
-	case ADSP_MESSAGE_ID:
-		MM_DBG("Received ADSP event: module enable(audpreproctask)\n");
-		break;
-	default:
-		MM_ERR("unknown event %d\n", id);
-	}
-}
-
 static void audevrc_in_get_dsp_frames(struct audio_evrc_in *audio)
 {
 	struct audio_frame *frame;
@@ -557,10 +574,6 @@
 	}
 }
 
-static struct msm_adsp_ops audpre_evrc_adsp_ops = {
-	.event = audpre_dsp_event,
-};
-
 static struct msm_adsp_ops audrec_evrc_adsp_ops = {
 	.event = audrec_dsp_event,
 };
@@ -1186,12 +1199,8 @@
 	audevrc_in_flush(audio);
 	msm_adsp_put(audio->audrec);
 
-	if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL)
-		msm_adsp_put(audio->audpre);
-
 	audpreproc_aenc_free(audio->enc_id);
 	audio->audrec = NULL;
-	audio->audpre = NULL;
 	audio->opened = 0;
 	if ((audio->mode == MSM_AUD_ENC_MODE_NONTUNNEL) && \
 	   (audio->out_data)) {
@@ -1282,16 +1291,6 @@
 		goto done;
 	}
 
-	if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL) {
-		rc = msm_adsp_get("AUDPREPROCTASK", &audio->audpre,
-				&audpre_evrc_adsp_ops, audio);
-		if (rc) {
-			msm_adsp_put(audio->audrec);
-			audpreproc_aenc_free(audio->enc_id);
-			goto done;
-		}
-	}
-
 	audio->dsp_cnt = 0;
 	audio->stopped = 0;
 	audio->wflush = 0;
@@ -1429,8 +1428,6 @@
 	ion_client_destroy(client);
 client_create_error:
 	msm_adsp_put(audio->audrec);
-	if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL)
-		msm_adsp_put(audio->audpre);
 
 	audpreproc_aenc_free(audio->enc_id);
 	mutex_unlock(&audio->lock);
diff --git a/arch/arm/mach-msm/qdsp5/audio_pcm_in.c b/arch/arm/mach-msm/qdsp5/audio_pcm_in.c
index 716dbd2..9285b82 100644
--- a/arch/arm/mach-msm/qdsp5/audio_pcm_in.c
+++ b/arch/arm/mach-msm/qdsp5/audio_pcm_in.c
@@ -75,7 +75,6 @@
 	struct mutex read_lock;
 	wait_queue_head_t wait;
 
-	struct msm_adsp_module *audpre;
 	struct msm_adsp_module *audrec;
 	const char *module_name;
 	unsigned queue_ids;
@@ -105,6 +104,7 @@
 	int enabled;
 	int running;
 	int stopped; /* set when stopped, cleared on flush */
+	struct audrec_session_info session_info; /*audrec session info*/
 
 	/* audpre settings */
 	int tx_agc_enable;
@@ -176,6 +176,32 @@
 	}
 }
 
+/* ------------------- dsp --------------------- */
+static void audpre_dsp_event(void *data, unsigned id,  void *event_data)
+{
+
+	uint16_t *msg = event_data;
+
+	if (!msg)
+		return;
+
+	switch (id) {
+	case AUDPREPROC_MSG_CMD_CFG_DONE_MSG:
+		MM_DBG("type %d, status_flag %d\n",\
+			msg[0], msg[1]);
+		break;
+	case AUDPREPROC_MSG_ERROR_MSG_ID:
+		MM_INFO("err_index %d\n", msg[0]);
+		break;
+	case ADSP_MESSAGE_ID:
+		MM_DBG("Received ADSP event: module enable(audpreproctask)\n");
+		break;
+	default:
+		MM_ERR("unknown event %d\n", id);
+	}
+}
+
+
 /* must be called with audio->lock held */
 static int audpcm_in_enable(struct audio_in *audio)
 {
@@ -195,14 +221,15 @@
 	if (rc < 0)
 		return rc;
 
-	if (msm_adsp_enable(audio->audpre)) {
-		MM_ERR("msm_adsp_enable(audpre) failed\n");
+	if (audpreproc_enable(audio->enc_id, &audpre_dsp_event, audio)) {
+		MM_ERR("msm_adsp_enable(audpreproc) failed\n");
 		audmgr_disable(&audio->audmgr);
 		return -ENODEV;
 	}
+
 	if (msm_adsp_enable(audio->audrec)) {
+		audpreproc_disable(audio->enc_id, audio);
 		audmgr_disable(&audio->audmgr);
-		msm_adsp_disable(audio->audpre);
 		MM_ERR("msm_adsp_enable(audrec) failed\n");
 		return -ENODEV;
 	}
@@ -210,6 +237,12 @@
 	audio->enabled = 1;
 	audpcm_in_dsp_enable(audio, 1);
 
+	/*update aurec session info in audpreproc layer*/
+	audio->session_info.session_id = audio->enc_id;
+	audio->session_info.sampling_freq =
+			convert_samp_index(audio->samp_rate);
+	audpreproc_update_audrec_info(&audio->session_info);
+
 	return 0;
 }
 
@@ -225,34 +258,15 @@
 		wake_up(&audio->wait);
 
 		msm_adsp_disable(audio->audrec);
-		msm_adsp_disable(audio->audpre);
+		audpreproc_disable(audio->enc_id, audio);
+		/*reset the sampling frequency information at audpreproc layer*/
+		audio->session_info.sampling_freq = 0;
+		audpreproc_update_audrec_info(&audio->session_info);
 		audmgr_disable(&audio->audmgr);
 	}
 	return 0;
 }
 
-/* ------------------- dsp --------------------- */
-static void audpre_dsp_event(void *data, unsigned id, size_t len,
-			    void (*getevent)(void *ptr, size_t len))
-{
-	uint16_t msg[2];
-	getevent(msg, sizeof(msg));
-
-	switch (id) {
-	case AUDPREPROC_MSG_CMD_CFG_DONE_MSG:
-		MM_INFO("type %d, status_flag %d\n", msg[0], msg[1]);
-		break;
-	case AUDPREPROC_MSG_ERROR_MSG_ID:
-		MM_ERR("err_index %d\n", msg[0]);
-		break;
-	case ADSP_MESSAGE_ID:
-		MM_DBG("Received ADSP event: module enable(audpreproctask)\n");
-		break;
-	default:
-		MM_ERR("unknown event %d\n", id);
-	}
-}
-
 struct audio_frame {
 	uint16_t count_low;
 	uint16_t count_high;
@@ -360,18 +374,10 @@
 	}
 }
 
-static struct msm_adsp_ops audpre_adsp_ops = {
-	.event = audpre_dsp_event,
-};
-
 static struct msm_adsp_ops audrec_adsp_ops = {
 	.event = audrec_dsp_event,
 };
 
-
-#define audio_send_queue_pre(audio, cmd, len) \
-	msm_adsp_write(audio->audpre, QDSP_uPAudPreProcCmdQueue, cmd, len)
-
 #define audio_send_queue_recbs(audio, cmd, len) \
 	msm_adsp_write(audio->audrec, ((audio->queue_ids & 0xFFFF0000) >> 16),\
 			cmd, len)
@@ -420,7 +426,7 @@
 	}
 	cmd = audio->tx_agc_cfg;
 
-	return audio_send_queue_pre(audio, &cmd, sizeof(cmd));
+	return audpreproc_dsp_set_agc(&cmd, sizeof(cmd));
 }
 
 static int audio_enable_tx_agc(struct audio_in *audio, int enable)
@@ -466,7 +472,7 @@
 	}
 	cmd = audio->ns_cfg;
 
-	return audio_send_queue_pre(audio, &cmd, sizeof(cmd));
+	return audpreproc_dsp_set_ns(&cmd, sizeof(cmd));
 }
 
 static int audio_enable_ns(struct audio_in *audio, int enable)
@@ -495,7 +501,7 @@
 
 	cmd = audio->iir_cfg;
 
-	return audio_send_queue_pre(audio, &cmd, sizeof(cmd));
+	return audpreproc_dsp_set_iir(&cmd, sizeof(cmd));
 }
 
 static int audio_enable_iir(struct audio_in *audio, int enable)
@@ -762,9 +768,7 @@
 	audpcm_in_flush(audio);
 	audpreproc_aenc_free(audio->enc_id);
 	msm_adsp_put(audio->audrec);
-	msm_adsp_put(audio->audpre);
 	audio->audrec = NULL;
-	audio->audpre = NULL;
 	audio->opened = 0;
 	if (audio->data) {
 		ion_unmap_kernel(audio->client, audio->output_buff_handle);
@@ -824,14 +828,6 @@
 		goto done;
 	}
 
-	rc = msm_adsp_get("AUDPREPROCTASK", &audio->audpre,
-				&audpre_adsp_ops, audio);
-	if (rc) {
-		msm_adsp_put(audio->audrec);
-		audpreproc_aenc_free(audio->enc_id);
-		goto done;
-	}
-
 	audio->dsp_cnt = 0;
 	audio->stopped = 0;
 
@@ -899,7 +895,6 @@
 	ion_client_destroy(client);
 client_create_error:
 	msm_adsp_put(audio->audrec);
-	msm_adsp_put(audio->audpre);
 	audpreproc_aenc_free(audio->enc_id);
 	mutex_unlock(&audio->lock);
 	return rc;
diff --git a/arch/arm/mach-msm/qdsp5/audio_qcelp_in.c b/arch/arm/mach-msm/qdsp5/audio_qcelp_in.c
index 99a169d..57ae772 100644
--- a/arch/arm/mach-msm/qdsp5/audio_qcelp_in.c
+++ b/arch/arm/mach-msm/qdsp5/audio_qcelp_in.c
@@ -112,7 +112,6 @@
 	int out_frame_cnt;
 
 	struct msm_adsp_module *audrec;
-	struct msm_adsp_module *audpre;
 
 
 	/* configuration to use on next enable */
@@ -155,6 +154,8 @@
 	struct ion_client *client;
 	struct ion_handle *input_buff_handle;
 	struct ion_handle *output_buff_handle;
+
+	struct audrec_session_info session_info; /*audrec session info*/
 };
 
 struct audio_frame {
@@ -233,6 +234,32 @@
 	}
 }
 
+/* ------------------- dsp --------------------- */
+static void audpre_dsp_event(void *data, unsigned id,  void *event_data)
+{
+
+	uint16_t *msg = event_data;
+
+	if (!msg)
+		return;
+
+	switch (id) {
+	case AUDPREPROC_MSG_CMD_CFG_DONE_MSG:
+		MM_DBG("type %d, status_flag %d\n",\
+			msg[0], msg[1]);
+		break;
+	case AUDPREPROC_MSG_ERROR_MSG_ID:
+		MM_INFO("err_index %d\n", msg[0]);
+		break;
+	case ADSP_MESSAGE_ID:
+		MM_DBG("Received ADSP event: module enable(audpreproctask)\n");
+		break;
+	default:
+		MM_ERR("unknown event %d\n", id);
+	}
+}
+
+
 /* must be called with audio->lock held */
 static int audqcelp_in_enable(struct audio_qcelp_in *audio)
 {
@@ -253,16 +280,23 @@
 		if (rc < 0)
 			return rc;
 
-		if (msm_adsp_enable(audio->audpre)) {
+		if (audpreproc_enable(audio->enc_id,
+				&audpre_dsp_event, audio)) {
+			MM_ERR("msm_adsp_enable(audpreproc) failed\n");
 			audmgr_disable(&audio->audmgr);
-			MM_ERR("msm_adsp_enable(audpre) failed\n");
 			return -ENODEV;
 		}
+
+		/*update aurec session info in audpreproc layer*/
+		audio->session_info.session_id = audio->enc_id;
+		audio->session_info.sampling_freq =
+			convert_samp_index(audio->samp_rate);
+		audpreproc_update_audrec_info(&audio->session_info);
 	}
 	if (msm_adsp_enable(audio->audrec)) {
 		if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL) {
+			audpreproc_disable(audio->enc_id, audio);
 			audmgr_disable(&audio->audmgr);
-			msm_adsp_disable(audio->audpre);
 		}
 		MM_ERR("msm_adsp_enable(audrec) failed\n");
 		return -ENODEV;
@@ -288,35 +322,17 @@
 		wake_up(&audio->wait);
 		msm_adsp_disable(audio->audrec);
 		if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL) {
-			msm_adsp_disable(audio->audpre);
+			audpreproc_disable(audio->enc_id, audio);
 			audmgr_disable(&audio->audmgr);
+			/*reset the sampling frequency information at
+			  audpreproc layer*/
+			audio->session_info.sampling_freq = 0;
+			audpreproc_update_audrec_info(&audio->session_info);
 		}
 	}
 	return 0;
 }
 
-/* ------------------- dsp --------------------- */
-static void audpre_dsp_event(void *data, unsigned id, size_t len,
-			    void (*getevent)(void *ptr, size_t len))
-{
-	uint16_t msg[2];
-	getevent(msg, sizeof(msg));
-
-	switch (id) {
-	case AUDPREPROC_MSG_CMD_CFG_DONE_MSG:
-		MM_DBG("type %d, status_flag %d\n", msg[0], msg[1]);
-		break;
-	case AUDPREPROC_MSG_ERROR_MSG_ID:
-		MM_ERR("err_index %d\n", msg[0]);
-		break;
-	case ADSP_MESSAGE_ID:
-		MM_DBG("Received ADSP event: module enable(audpreproctask)\n");
-		break;
-	default:
-		MM_ERR("unknown event %d\n", id);
-	}
-}
-
 static void audqcelp_in_get_dsp_frames(struct audio_qcelp_in *audio)
 {
 	struct audio_frame *frame;
@@ -557,10 +573,6 @@
 	}
 }
 
-static struct msm_adsp_ops audpre_qcelp_adsp_ops = {
-	.event = audpre_dsp_event,
-};
-
 static struct msm_adsp_ops audrec_qcelp_adsp_ops = {
 	.event = audrec_dsp_event,
 };
@@ -1187,12 +1199,8 @@
 	audqcelp_in_flush(audio);
 	msm_adsp_put(audio->audrec);
 
-	if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL)
-		msm_adsp_put(audio->audpre);
-
 	audpreproc_aenc_free(audio->enc_id);
 	audio->audrec = NULL;
-	audio->audpre = NULL;
 	audio->opened = 0;
 
 	if ((audio->mode == MSM_AUD_ENC_MODE_NONTUNNEL) && \
@@ -1285,16 +1293,6 @@
 		goto done;
 	}
 
-	if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL) {
-		rc = msm_adsp_get("AUDPREPROCTASK", &audio->audpre,
-				&audpre_qcelp_adsp_ops, audio);
-		if (rc) {
-			msm_adsp_put(audio->audrec);
-			audpreproc_aenc_free(audio->enc_id);
-			goto done;
-		}
-	}
-
 	audio->dsp_cnt = 0;
 	audio->stopped = 0;
 	audio->wflush = 0;
@@ -1434,8 +1432,6 @@
 	ion_client_destroy(client);
 client_create_error:
 	msm_adsp_put(audio->audrec);
-	if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL)
-		msm_adsp_put(audio->audpre);
 
 	audpreproc_aenc_free(audio->enc_id);
 	mutex_unlock(&audio->lock);