Skip to contentSkip to conversation

vwsnd: Fix setting of cfgval and ctlval in li_setup_dma()

PATCH In review Roel Kluin 2 participants 2 messages Aug 26, 2009 Sound

lore
Share & tools
lore

Roel Kluin

author
#0 lore raw

PATCH 1/1 vwsnd: Fix setting of cfgval and ctlval in li_setup_dma()

Since !LI_CCFG_* evaluates to 0, this did not change anything to cfgval and ctlval.

---
// vi sound/oss/vwsnd.c +392

# define LI_CCTL_RESET		 0x80000000
...
# define LI_CCTL_DMA_ENABLE	 0x08000000
...
# define LI_CCFG_LOCK		 0x00008000

I am not sure this is what was intended, does anyone have the specs?

sound/oss/vwsnd.c +3 -3
index 187f727..6713110 100644
@@ -628,7 +628,7 @@ static void li_setup_dma(dma_chan_t *chan,
 	ASSERT(!(buffer_paddr & 0xFF));
 	chan->baseval = (buffer_paddr >> 8) | 1 << (37 - 8);
 
-	chan->cfgval = (!LI_CCFG_LOCK |
+	chan->cfgval = ((chan->cfgval & ~LI_CCFG_LOCK) |
 			SHIFT_FIELD(desc->ad1843_slot, LI_CCFG_SLOT) |
 			desc->direction |
 			mode |
@@ -638,9 +638,9 @@ static void li_setup_dma(dma_chan_t *chan,
 	tmask = 13 - fragshift;		/* See Lithium DMA Notes above. */
 	ASSERT(size >= 2 && size <= 7);
 	ASSERT(tmask >= 1 && tmask <= 7);
-	chan->ctlval = (!LI_CCTL_RESET |
+	chan->ctlval = ((chan->ctlval & ~LI_CCTL_RESET) |
 			SHIFT_FIELD(size, LI_CCTL_SIZE) |
-			!LI_CCTL_DMA_ENABLE |
+			(chan->ctlval & ~LI_CCTL_DMA_ENABLE) |
 			SHIFT_FIELD(tmask, LI_CCTL_TMASK) |
 			SHIFT_FIELD(0, LI_CCTL_TPTR));
#1 lore raw

At Wed, 26 Aug 2009 12:01:20 +0200,

Quoted 5 lines · Roel Kluin

Since !LI_CCFG_* evaluates to 0, this did not change anything to cfgval and ctlval.

Applied now. Thanks.

Quoted 10 lines

---
// vi sound/oss/vwsnd.c +392

# define LI_CCTL_RESET		 0x80000000
...
# define LI_CCTL_DMA_ENABLE	 0x08000000
...
# define LI_CCFG_LOCK		 0x00008000

I am not sure this is what was intended, does anyone have the specs?

Your fix must be correct, judging from the code. But, I have also no spec, so cannot guarantee it ;)

Takashi

Quoted 26 lines
sound/oss/vwsnd.c +3 -3
index 187f727..6713110 100644
@@ -628,7 +628,7 @@ static void li_setup_dma(dma_chan_t *chan,
 	ASSERT(!(buffer_paddr & 0xFF));
 	chan->baseval = (buffer_paddr >> 8) | 1 << (37 - 8);
 
-	chan->cfgval = (!LI_CCFG_LOCK |
+	chan->cfgval = ((chan->cfgval & ~LI_CCFG_LOCK) |
 			SHIFT_FIELD(desc->ad1843_slot, LI_CCFG_SLOT) |
 			desc->direction |
 			mode |
@@ -638,9 +638,9 @@ static void li_setup_dma(dma_chan_t *chan,
 	tmask = 13 - fragshift;		/* See Lithium DMA Notes above. */
 	ASSERT(size >= 2 && size <= 7);
 	ASSERT(tmask >= 1 && tmask <= 7);
-	chan->ctlval = (!LI_CCTL_RESET |
+	chan->ctlval = ((chan->ctlval & ~LI_CCTL_RESET) |
 			SHIFT_FIELD(size, LI_CCTL_SIZE) |
-			!LI_CCTL_DMA_ENABLE |
+			(chan->ctlval & ~LI_CCTL_DMA_ENABLE) |
 			SHIFT_FIELD(tmask, LI_CCTL_TMASK) |
 			SHIFT_FIELD(0, LI_CCTL_TPTR));