[alsa-devel] [PATCH] vwsnd: Fix setting of cfgval and ctlval in li_setup_dma()

Takashi Iwai tiwai at suse.de
Wed Aug 26 12:43:59 CEST 2009


At Wed, 26 Aug 2009 12:01:20 +0200,
Roel Kluin wrote:
> 
> Since !LI_CCFG_* evaluates to 0, this did not change anything to
> cfgval and ctlval.
> 
> Signed-off-by: Roel Kluin <roel.kluin at gmail.com>

Applied now.  Thanks.

> ---
> // 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

> diff --git a/sound/oss/vwsnd.c b/sound/oss/vwsnd.c
> index 187f727..6713110 100644
> --- a/sound/oss/vwsnd.c
> +++ b/sound/oss/vwsnd.c
> @@ -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));
>  
> 


More information about the Alsa-devel mailing list