On Sun, 29 Sep 2024 23:06:03 +1300 Ryan Walklin <ryan@xxxxxxxxxxxxx> wrote: > From: Marcus Cooper <codekipper@xxxxxxxxx> > > Some devices only have the playback side of the codec implemented > so add a quirk to check for this. That's odd, is this really the only place where we need to consider the lack of sampling functionality? I mean it just prevents the fields to be populated in our internal struct, how does the rest of the kernel know that there is no capture? Is that magically achieved by those fields being zero now? Cheers, Andre > Signed-off-by: Marcus Cooper <codekipper@xxxxxxxxx> > Signed-off-by: Ryan Walklin <ryan@xxxxxxxxxxxxx> > --- > sound/soc/sunxi/sun4i-codec.c | 12 ++++++++---- > 1 file changed, 8 insertions(+), 4 deletions(-) > > diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c > index 37f5678b55291..312d2655c3f4e 100644 > --- a/sound/soc/sunxi/sun4i-codec.c > +++ b/sound/soc/sunxi/sun4i-codec.c > @@ -1571,6 +1571,7 @@ struct sun4i_codec_quirks { > unsigned int reg_dac_txdata; /* TX FIFO offset for DMA config */ > unsigned int reg_adc_rxdata; /* RX FIFO offset for DMA config */ > bool has_reset; > + bool playback_only; > }; > > static const struct sun4i_codec_quirks sun4i_codec_quirks = { > @@ -1779,10 +1780,13 @@ static int sun4i_codec_probe(struct platform_device *pdev) > scodec->playback_dma_data.maxburst = 8; > scodec->playback_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES; > > - /* DMA configuration for RX FIFO */ > - scodec->capture_dma_data.addr = res->start + quirks->reg_adc_rxdata; > - scodec->capture_dma_data.maxburst = 8; > - scodec->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES; > + if (!quirks->playback_only) { > + /* DMA configuration for RX FIFO */ > + scodec->capture_dma_data.addr = res->start + > + quirks->reg_adc_rxdata; > + scodec->capture_dma_data.maxburst = 8; > + scodec->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES; > + } > > ret = devm_snd_soc_register_component(&pdev->dev, quirks->codec, > &sun4i_codec_dai, 1);