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
