Naresh,

> -----Original Message-----
> From: davinci-linux-open-source-
> [EMAIL PROTECTED] [mailto:davinci-linux-
> [EMAIL PROTECTED] On Behalf Of
> Medisetty, Naresh
> Sent: Friday, October 31, 2008 1:29 PM
> To: [email protected]
> Cc: Medisetty, Naresh
> Subject: [PATCH] ARM: DaVinci: Audio: Fix the audio stall problem when
> doing full-duplex
> 
> From: Naresh Medisetty <[EMAIL PROTECTED]>
> 
> Fixes the audio stall problem when doing playback and capture at the same
> time.
> 
> Signed-off-by: Naresh Medisetty <[EMAIL PROTECTED]>
> ---
>  sound/soc/davinci/davinci-i2s.c |   35 ++++++++++++++++++++++++----------
> -
>  1 files changed, 24 insertions(+), 11 deletions(-)
> 
> diff --git a/sound/soc/davinci/davinci-i2s.c b/sound/soc/davinci/davinci-
> i2s.c
> index d8279ad..8b29463 100644
> --- a/sound/soc/davinci/davinci-i2s.c
> +++ b/sound/soc/davinci/davinci-i2s.c
> @@ -262,17 +262,30 @@ static int davinci_i2s_hw_params(struct
> snd_pcm_substream *substream,
>       u32 w;
> 
>       /* general line settings */
> -     davinci_mcbsp_write_reg(dev, DAVINCI_MCBSP_SPCR_REG,
> -                             DAVINCI_MCBSP_SPCR_RINTM(3) |
> -                             DAVINCI_MCBSP_SPCR_XINTM(3) |
> -                             DAVINCI_MCBSP_SPCR_FREE);
> -     davinci_mcbsp_write_reg(dev, DAVINCI_MCBSP_RCR_REG,
> -                             DAVINCI_MCBSP_RCR_RFRLEN1(1) |
> -                             DAVINCI_MCBSP_RCR_RDATDLY(1));
> -     davinci_mcbsp_write_reg(dev, DAVINCI_MCBSP_XCR_REG,
> -                             DAVINCI_MCBSP_XCR_XFRLEN1(1) |
> -                             DAVINCI_MCBSP_XCR_XDATDLY(1) |
> -                             DAVINCI_MCBSP_XCR_XFIG);
> +     if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
> +
> +             w = davinci_mcbsp_read_reg(dev, DAVINCI_MCBSP_SPCR_REG);
> +             w |= (DAVINCI_MCBSP_SPCR_RINTM(3) | DAVINCI_MCBSP_SPCR_FREE);
> +             davinci_mcbsp_write_reg(dev, DAVINCI_MCBSP_SPCR_REG, w);
> +
> +             w = davinci_mcbsp_read_reg(dev, DAVINCI_MCBSP_RCR_REG);
> +             w |= (DAVINCI_MCBSP_RCR_RFRLEN1(1) |
> +                                     DAVINCI_MCBSP_RCR_RDATDLY(1));
> +             davinci_mcbsp_write_reg(dev, DAVINCI_MCBSP_RCR_REG, w);
> +
> +     } else {
> +
> +             w = davinci_mcbsp_read_reg(dev, DAVINCI_MCBSP_SPCR_REG);
> +             w |= DAVINCI_MCBSP_SPCR_XINTM(3) | DAVINCI_MCBSP_SPCR_FREE;
> +             davinci_mcbsp_write_reg(dev, DAVINCI_MCBSP_SPCR_REG, w);
> +
> +             w = davinci_mcbsp_read_reg(dev, DAVINCI_MCBSP_XCR_REG);
> +             w |= (DAVINCI_MCBSP_XCR_XFRLEN1(1) |
> +                                     DAVINCI_MCBSP_XCR_XDATDLY(1) |
> +                                     DAVINCI_MCBSP_XCR_XFIG);
> +             davinci_mcbsp_write_reg(dev, DAVINCI_MCBSP_XCR_REG, w);
> +
> +     }

The first statement inside if and else is the same. This can be moved out.

Also, I think, there is some portion of the code at the end, in the same 
function (davinci_i2s_hw_params), which requires conditional check as above.

Regards, Sudhakar
> 
>       i = hw_param_interval(params, SNDRV_PCM_HW_PARAM_SAMPLE_BITS);
>       w = davinci_mcbsp_read_reg(dev, DAVINCI_MCBSP_SRGR_REG);
> --
> 1.5.4.1
> 
> _______________________________________________
> Davinci-linux-open-source mailing list
> [email protected]
> http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to