Jump to content

Recommended Posts

Posted

Hi all,

I created a patch that applies to the mainline kernel v.14-rc6 to enable 32/24bits audio captures for H2+/H3 SoC.

Just wanted to share this with the community.

Kind regards,

Andrea

--- a/sound/soc/sunxi/sun4i-codec.c
+++ b/sound/soc/sunxi/sun4i-codec.c
@@ -346,11 +346,6 @@
                                   0x3 << 8,
                                   0x1 << 8);

-       /* Fill most significant bits with valid data MSB */
-       regmap_field_update_bits(scodec->reg_adc_fifoc,
-                                BIT(SUN4I_CODEC_ADC_FIFOC_RX_FIFO_MODE),
-                                BIT(SUN4I_CODEC_ADC_FIFOC_RX_FIFO_MODE));
-
        return 0;
 }

@@ -490,6 +485,31 @@
                                         BIT(SUN4I_CODEC_ADC_FIFOC_MONO_EN),
                                         0);

+       /* Set the number of sample bits to either 16 or 24 bits */
+       if (hw_param_interval(params, SNDRV_PCM_HW_PARAM_SAMPLE_BITS)->min == 32) {
+               regmap_field_update_bits(scodec->reg_adc_fifoc, SUN4I_CODEC_ADC_FIFOC,
+                                  BIT(SUN4I_CODEC_ADC_FIFOC_RX_SAMPLE_BITS),
+                                  BIT(SUN4I_CODEC_ADC_FIFOC_RX_SAMPLE_BITS));
+
+               
+               regmap_field_update_bits(scodec->reg_adc_fifoc, SUN4I_CODEC_ADC_FIFOC,
+                                  BIT(SUN4I_CODEC_ADC_FIFOC_RX_FIFO_MODE),
+                                  0);
+
+               scodec->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
+       } else {
+               regmap_field_update_bits(scodec->reg_adc_fifoc, SUN4I_CODEC_ADC_FIFOC,
+                                  BIT(SUN4I_CODEC_ADC_FIFOC_RX_SAMPLE_BITS),
+                                  0);
+
+               /* Fill most significant bits with valid data MSB */
+               regmap_field_update_bits(scodec->reg_adc_fifoc, SUN4I_CODEC_ADC_FIFOC,
+                                  BIT(SUN4I_CODEC_ADC_FIFOC_RX_FIFO_MODE),
+                                  BIT(SUN4I_CODEC_ADC_FIFOC_RX_FIFO_MODE));
+
+               scodec->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
+       }
+
        return 0;
 }

 

 

Posted
1 hour ago, Andrea Bondavalli said:

Just wanted to share this with the community.

 

That's nice, but even better would be to send it to upstream. Did you do that?

Posted
3 hours ago, vlad59 said:

Great !

 

Please try to propose it to linux-sunxi or did you take it from there ?

I don’t know the status in linux-sunxi I created the patch by looking at the implementation of the audio playback part in the mainline kernel. I will check and submit it eventually.

 

3 hours ago, jernej said:

 

That's nice, but even better would be to send it to upstream. Did you do that?

No, not yet.

Posted

I expected that the new 4.14 soon-to-be-released was covering that, as Andrea points out though obviously needs some more work.

 

Codekipper probably needs to be aware of this and possibly to include it in the next release if the time window permits, I think we got a couple of RC iterations until conclusion.

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines