summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/mxc/asrc/mxc_asrc.c72
-rw-r--r--include/linux/mxc_asrc.h6
2 files changed, 6 insertions, 72 deletions
diff --git a/drivers/mxc/asrc/mxc_asrc.c b/drivers/mxc/asrc/mxc_asrc.c
index 62d7ceb0e04f..13cf635b4f03 100644
--- a/drivers/mxc/asrc/mxc_asrc.c
+++ b/drivers/mxc/asrc/mxc_asrc.c
@@ -843,7 +843,6 @@ static void asrc_input_dma_callback(void *data)
params = data;
spin_lock_irqsave(&input_int_lock, lock_flags);
- params->input_queue_empty--;
params->input_counter++;
wake_up_interruptible(&params->input_wait_queue);
spin_unlock_irqrestore(&input_int_lock, lock_flags);
@@ -858,7 +857,6 @@ static void asrc_output_dma_callback(void *data)
params = data;
spin_lock_irqsave(&output_int_lock, lock_flags);
- params->output_queue_empty--;
params->output_counter++;
wake_up_interruptible(&params->output_wait_queue);
spin_unlock_irqrestore(&output_int_lock, lock_flags);
@@ -1140,12 +1138,6 @@ static long asrc_ioctl(struct file *file,
break;
}
- params->input_queue_empty = 0;
- params->output_queue_empty = 0;
- INIT_LIST_HEAD(&params->input_queue);
- INIT_LIST_HEAD(&params->input_done_queue);
- INIT_LIST_HEAD(&params->output_queue);
- INIT_LIST_HEAD(&params->output_done_queue);
init_waitqueue_head(&params->input_wait_queue);
init_waitqueue_head(&params->output_wait_queue);
@@ -1214,22 +1206,6 @@ static long asrc_ioctl(struct file *file,
break;
}
- spin_lock_irqsave(&input_int_lock, lock_flags);
- params->input_dma[buf.index].index = buf.index;
- params->input_dma[buf.index].length = buf.length;
- list_add_tail(&params->input_dma[buf.index].
- queue, &params->input_queue);
- if (!list_empty(&params->input_queue)) {
- block =
- list_entry(params->input_queue.next,
- struct dma_block, queue);
-
- params->input_queue_empty++;
- list_del(params->input_queue.next);
- list_add_tail(&block->queue,
- &params->input_done_queue);
- }
- spin_unlock_irqrestore(&input_int_lock, lock_flags);
break;
}
case ASRC_DQ_INBUF:{
@@ -1268,11 +1244,8 @@ static long asrc_ioctl(struct file *file,
}
spin_lock_irqsave(&input_int_lock, lock_flags);
params->input_counter--;
- block =
- list_entry(params->input_done_queue.next,
- struct dma_block, queue);
- list_del(params->input_done_queue.next);
spin_unlock_irqrestore(&input_int_lock, lock_flags);
+ block = &params->input_dma[0];
buf.index = block->index;
buf.length = block->length;
buf.buf_valid = ASRC_BUF_AV;
@@ -1294,22 +1267,6 @@ static long asrc_ioctl(struct file *file,
break;
}
- spin_lock_irqsave(&output_int_lock, lock_flags);
- params->output_dma[buf.index].index = buf.index;
- params->output_dma[buf.index].length = buf.length;
- list_add_tail(&params->output_dma[buf.index].
- queue, &params->output_queue);
- if (!list_empty(&params->output_queue)) {
- block =
- list_entry(params->output_queue.
- next, struct dma_block, queue);
- list_del(params->output_queue.next);
- list_add_tail(&block->queue,
- &params->output_done_queue);
- params->output_queue_empty++;
- }
-
- spin_unlock_irqrestore(&output_int_lock, lock_flags);
break;
}
case ASRC_DQ_OUTBUF:{
@@ -1348,11 +1305,9 @@ static long asrc_ioctl(struct file *file,
}
spin_lock_irqsave(&output_int_lock, lock_flags);
params->output_counter--;
- block =
- list_entry(params->output_done_queue.next,
- struct dma_block, queue);
- list_del(params->output_done_queue.next);
+
spin_unlock_irqrestore(&output_int_lock, lock_flags);
+ block = &params->output_dma[0];
buf.index = block->index;
buf.length = block->length;
buf.buf_valid = ASRC_BUF_AV;
@@ -1372,14 +1327,7 @@ static long asrc_ioctl(struct file *file,
err = -EFAULT;
break;
}
- spin_lock_irqsave(&input_int_lock, lock_flags);
- if (params->input_queue_empty == 0) {
- err = -EFAULT;
- pr_info
- ("ASRC_START_CONV - no block available\n");
- break;
- }
- spin_unlock_irqrestore(&input_int_lock, lock_flags);
+
params->asrc_active = 1;
dmaengine_submit(params->desc_in);
dmaengine_submit(params->desc_out);
@@ -1423,22 +1371,14 @@ static long asrc_ioctl(struct file *file,
u32 rx_id, tx_id;
char *rx_name, *tx_name;
spin_lock_irqsave(&input_int_lock, lock_flags);
- while (!list_empty(&params->input_queue))
- list_del(params->input_queue.next);
- while (!list_empty(&params->input_done_queue))
- list_del(params->input_done_queue.next);
+
params->input_counter = 0;
- params->input_queue_empty = 0;
spin_unlock_irqrestore(&input_int_lock, lock_flags);
/* flush output dma buffer */
spin_lock_irqsave(&output_int_lock, lock_flags);
- while (!list_empty(&params->output_queue))
- list_del(params->output_queue.next);
- while (!list_empty(&params->output_done_queue))
- list_del(params->output_done_queue.next);
+
params->output_counter = 0;
- params->output_queue_empty = 0;
spin_unlock_irqrestore(&output_int_lock, lock_flags);
/* release DMA and request again */
diff --git a/include/linux/mxc_asrc.h b/include/linux/mxc_asrc.h
index 081fafa65ab0..638d401256d7 100644
--- a/include/linux/mxc_asrc.h
+++ b/include/linux/mxc_asrc.h
@@ -197,16 +197,10 @@ struct asrc_p2p_params {
struct asrc_pair_params {
enum asrc_pair_index index;
- struct list_head input_queue;
- struct list_head input_done_queue;
- struct list_head output_queue;
- struct list_head output_done_queue;
wait_queue_head_t input_wait_queue;
wait_queue_head_t output_wait_queue;
unsigned int input_counter;
unsigned int output_counter;
- unsigned int input_queue_empty;
- unsigned int output_queue_empty;
struct dma_chan *input_dma_channel;
struct dma_chan *output_dma_channel;
unsigned int input_buffer_size;