Title: [3882] trunk/sound/soc/blackfin: bug[#3597]
revert the hooking tx dummy buffer way to former version one
- Revision
- 3882
- Author
- cliff
- Date
- 2007-11-16 00:55:34 -0600 (Fri, 16 Nov 2007)
Log Message
bug[#3597] revert the hooking tx dummy buffer way to former version one
Diffstat
bf5xx-pcm.c | 4 ----
bf5xx-sport.c | 42 +++++++++++++++++++-----------------------
bf5xx-sport.h | 4 ----
3 files changed, 19 insertions(+), 31 deletions(-)
Modified Paths
Diff
Modified: trunk/sound/soc/blackfin/bf5xx-pcm.c (3881 => 3882)
--- trunk/sound/soc/blackfin/bf5xx-pcm.c 2007-11-16 04:57:56 UTC (rev 3881)
+++ trunk/sound/soc/blackfin/bf5xx-pcm.c 2007-11-16 06:55:34 UTC (rev 3882)
@@ -75,10 +75,6 @@
struct sport_device *sport = runtime->private_data;
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
- /*Don't re-config descriptor when it is to be hooked to dummy*/
- if (sport->wait_dummy_tx == 1) {
- return 0;
- }
sport_set_tx_callback(sport, bf5xx_dma_irq, substream);
sport_config_tx_dma(sport, runtime->dma_area, runtime->periods,
runtime->period_size * sizeof(struct ac97_frame));
Modified: trunk/sound/soc/blackfin/bf5xx-sport.c (3881 => 3882)
--- trunk/sound/soc/blackfin/bf5xx-sport.c 2007-11-16 04:57:56 UTC (rev 3881)
+++ trunk/sound/soc/blackfin/bf5xx-sport.c 2007-11-16 06:55:34 UTC (rev 3882)
@@ -165,11 +165,6 @@
disable_dma(sport->dma_rx_chan);
disable_dma(sport->dma_tx_chan);
- if (sport->bak_tx_desc_p) {
- *sport->bak_tx_desc_p = sport->bak_tx_desc;
- sport->bak_tx_desc_p = NULL;
- }
- sport->wait_dummy_tx = 0;
return 0;
}
@@ -296,24 +291,32 @@
static inline int sport_hook_tx_dummy(struct sport_device *sport)
{
- struct dmasg *desc;
+ struct dmasg *desc, temp_desc;
unsigned long flags;
BUG_ON(sport->dummy_tx_desc == NULL);
+ BUG_ON(sport->curr_tx_desc == sport->dummy_tx_desc);
+
sport->dummy_tx_desc->next_desc_addr = \
(unsigned long)sport->dummy_tx_desc;
+
/* Shorten the time on last normal descriptor */
local_irq_save(flags);
desc = (struct dmasg *)get_dma_next_desc_ptr(sport->dma_tx_chan);
- sport->bak_tx_desc_p = desc;
- sport->bak_tx_desc = *desc;
- desc->x_count = 0xa;
- desc->start_addr = sport->dummy_tx_desc->start_addr;
/* Store the descriptor which will be damaged */
+ temp_desc = *desc;
+ desc->x_count = 0xa;
+ desc->y_count = 0;
desc->next_desc_addr = (unsigned long)(sport->dummy_tx_desc);
local_irq_restore(flags);
/* Waiting for dummy buffer descriptor is already hooked*/
- sport->wait_dummy_tx = 1;
+ while ((get_dma_curr_desc_ptr(sport->dma_tx_chan) - \
+ sizeof(struct dmasg)) != \
+ (unsigned long)sport->dummy_tx_desc) {}
+ sport->curr_tx_desc = sport->dummy_tx_desc;
+ /* Restore the damaged descriptor */
+ *desc = temp_desc;
+
return 0;
}
@@ -326,10 +329,14 @@
return -EBUSY;
if (sport->rx_run) {
+ BUG_ON(sport->dma_tx_desc == NULL);
+ BUG_ON(sport->curr_tx_desc != sport->dummy_tx_desc);
+ /* Hook the normal buffer descriptor */
local_irq_save(flags);
sport->dummy_tx_desc->next_desc_addr = \
- (unsigned long)(sport->dma_tx_desc);
+ (unsigned long)(sport->dma_tx_desc);
local_irq_restore(flags);
+ sport->curr_tx_desc = sport->dma_tx_desc;
} else {
sport_tx_dma_start(sport, 0);
/* Let rx dma run the dummy buffer */
@@ -699,17 +706,6 @@
return IRQ_HANDLED;
}
- if (sport->wait_dummy_tx) {
- ptr = get_dma_next_desc_ptr(sport->dma_tx_chan);
- if (ptr == (unsigned long)sport->dummy_tx_desc) {
- if (sport->bak_tx_desc_p) {
- *sport->bak_tx_desc_p = sport->bak_tx_desc;
- sport->bak_tx_desc_p = NULL;
- sport->wait_dummy_tx = 0;
- }
- }
- }
-
if (sport->tx_callback) {
sport->tx_callback(sport->tx_data);
return IRQ_HANDLED;
Modified: trunk/sound/soc/blackfin/bf5xx-sport.h (3881 => 3882)
--- trunk/sound/soc/blackfin/bf5xx-sport.h 2007-11-16 04:57:56 UTC (rev 3881)
+++ trunk/sound/soc/blackfin/bf5xx-sport.h 2007-11-16 06:55:34 UTC (rev 3882)
@@ -115,10 +115,6 @@
void (*err_callback)(void *data);
void *err_data;
- struct dmasg *bak_tx_desc_p;
- struct dmasg bak_tx_desc;
- unsigned int wait_dummy_tx:1;
-
void *private_data;
};
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
http://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits