On Mon, Jun 03, 2019 at 07:47:34PM +0200, codekipper@xxxxxxxxx wrote: > From: Marcus Cooper <codekipper@xxxxxxxxx> > > Extend the functionality of the driver to include support of 20 and > 24 bits per sample for the earlier SoCs. > > Newer SoCs can also handle 32bit samples. > > Signed-off-by: Marcus Cooper <codekipper@xxxxxxxxx> > --- > sound/soc/sunxi/sun4i-i2s.c | 34 +++++++++++++++++++++++++++++++--- > 1 file changed, 31 insertions(+), 3 deletions(-) > > diff --git a/sound/soc/sunxi/sun4i-i2s.c b/sound/soc/sunxi/sun4i-i2s.c > index 3549a87ed9e9..351b8021173b 100644 > --- a/sound/soc/sunxi/sun4i-i2s.c > +++ b/sound/soc/sunxi/sun4i-i2s.c > @@ -428,6 +428,11 @@ static int sun4i_i2s_hw_params(struct snd_pcm_substream *substream, > case 16: > width = DMA_SLAVE_BUSWIDTH_2_BYTES; > break; > + case 20: > + case 24: > + case 32: > + width = DMA_SLAVE_BUSWIDTH_4_BYTES; > + break; Doesn't this test the physical width? If so, then I'm not sure that 20 even exists, and that we can support 24. > default: > dev_err(dai->dev, "Unsupported physical sample width: %d\n", > params_physical_width(params)); > @@ -440,7 +445,18 @@ static int sun4i_i2s_hw_params(struct snd_pcm_substream *substream, > sr = 0; > wss = 0; > break; > - > + case 20: > + sr = 1; > + wss = 1; > + break; > + case 24: > + sr = 2; > + wss = 2; > + break; > + case 32: > + sr = 4; > + wss = 4; > + break; This doesn't really works, wss being the slot size, and you can have a different slot size and sample size. I have a patch that reworks this, I'll send it. Maxime -- Maxime Ripard, Bootlin Embedded Linux and Kernel engineering https://bootlin.com
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel