summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorChen Liangjun <b36089@freescale.com>2012-10-26 13:42:35 +0800
committerChen Liangjun <b36089@freescale.com>2012-11-06 13:43:40 +0800
commit07eeb987cd59cecd527ba4658ef8220e8f0c13ad (patch)
treea40c94ca72c3c1e9a445d421346a3794ef8e0bd6 /drivers
parent9ad976c9dfcb9937c71720d21eebe928370dd83b (diff)
ENGR00231773-2 ASRC: add work struct for asrc output data receive
SDMA driver can't promise receive all output data generated. Cause when the data in output FIFO is less than ASRC output FIFO watermark, there would be no DMA request generated and thus no SDMA transfer would happens. In this patch, add work struct to support ASRC driver receive last part of data in OUTPUT FIFO in polling way. Signed-off-by: Chen Liangjun <b36089@freescale.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mxc/asrc/mxc_asrc.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/mxc/asrc/mxc_asrc.c b/drivers/mxc/asrc/mxc_asrc.c
index 13cf635b4f03..8ce2197be9b2 100644
--- a/drivers/mxc/asrc/mxc_asrc.c
+++ b/drivers/mxc/asrc/mxc_asrc.c
@@ -860,9 +860,20 @@ static void asrc_output_dma_callback(void *data)
params->output_counter++;
wake_up_interruptible(&params->output_wait_queue);
spin_unlock_irqrestore(&output_int_lock, lock_flags);
+
+ schedule_work(&params->task_output_work);
return;
}
+static void asrc_output_task_worker(struct work_struct *w)
+{
+ struct asrc_pair_params *params =
+ container_of(w, struct asrc_pair_params, task_output_work);
+
+ /* asrc output work struct */
+}
+
+
static void mxc_free_dma_buf(struct asrc_pair_params *params)
{
if (params->input_dma_total.dma_vaddr != NULL) {
@@ -1140,6 +1151,10 @@ static long asrc_ioctl(struct file *file,
init_waitqueue_head(&params->input_wait_queue);
init_waitqueue_head(&params->output_wait_queue);
+ /* Add work struct to cover the task of
+ * receive last period of output data.*/
+ INIT_WORK(&params->task_output_work,
+ asrc_output_task_worker);
if (copy_to_user
((void __user *)arg, &config,