mbox series

[v3,0/3] ASoC: mchp-pdmc: fix poc noises when starting capture

Message ID 20230228110145.3770525-1-claudiu.beznea@microchip.com (mailing list archive)
Headers show
Series ASoC: mchp-pdmc: fix poc noises when starting capture | expand

Message

Claudiu Beznea Feb. 28, 2023, 11:01 a.m. UTC
To start capture on Microchip PDMC the enable bits for each supported
microphone need to be set. After this bit is set the PDMC starts to
receive data from microphones and it considers this data as valid data.
Thus if microphones are not ready the PDMC captures anyway data from its
lines. This data is interpreted by the human ear as poc noises.

To avoid this the following software workaround need to be applied when
starting capture:
1/ enable PDMC channel
2/ wait 150ms
3/ execute 16 dummy reads from RHR
4/ clear interrupts
5/ enable interrupts
6/ enable DMA channel

For this workaround to work step 6 need to be executed at the end.
For step 6 was added patch 1/3 from this series. With this, component
DAI driver sets its struct snd_soc_component_driver::start_dma_last = 1
and proper action is taken based on this flag when starting DAI trigger
vs DMA.

Thank you,
Claudiu Beznea

Changes in v3:
- update the commit message of patch 2/3 to be more descriptive
- in patch 3/3 initialize dd->startup_delay_us before calling
  of_property_read_u32() and don't check its return value; property is optional
  and the the default value is 150ms 

Changes in v2:
- patch 1/3 from v1 is now "ASoC: soc-pcm: add option to start DMA after DAI"
- pass start_dma_last from component DAI driver object
  (struct snd_soc_component_driver::start_dma_last); adapt patch 3/3 after this;
- in patch 1/3 s/Do we need to start dma first/Do we need to start dma last
  in comment from soc_pcm_trigger()
- collect review tag from Krzysztof

Claudiu Beznea (3):
  ASoC: soc-pcm: add option to start DMA after DAI
  ASoC: dt-bindings: sama7g5-pdmc: add microchip,startup-delay-us
    binding
  ASoC: mchp-pdmc: fix poc noise at capture startup


Claudiu Beznea (3):
  ASoC: soc-pcm: add option to start DMA after DAI
  ASoC: dt-bindings: sama7g5-pdmc: add microchip,startup-delay-us
    binding
  ASoC: mchp-pdmc: fix poc noise at capture startup

 .../sound/microchip,sama7g5-pdmc.yaml         |  6 +++
 include/sound/soc-component.h                 |  2 +
 sound/soc/atmel/mchp-pdmc.c                   | 53 +++++++++++++++++--
 sound/soc/soc-pcm.c                           | 27 ++++++++--
 4 files changed, 78 insertions(+), 10 deletions(-)

Comments

Mark Brown Feb. 28, 2023, 6 p.m. UTC | #1
On Tue, 28 Feb 2023 13:01:42 +0200, Claudiu Beznea wrote:
> To start capture on Microchip PDMC the enable bits for each supported
> microphone need to be set. After this bit is set the PDMC starts to
> receive data from microphones and it considers this data as valid data.
> Thus if microphones are not ready the PDMC captures anyway data from its
> lines. This data is interpreted by the human ear as poc noises.
> 
> To avoid this the following software workaround need to be applied when
> starting capture:
> 1/ enable PDMC channel
> 2/ wait 150ms
> 3/ execute 16 dummy reads from RHR
> 4/ clear interrupts
> 5/ enable interrupts
> 6/ enable DMA channel
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/3] ASoC: soc-pcm: add option to start DMA after DAI
      commit: 54fc4b72b630e1cb92a21140084c6852babbb234
[2/3] ASoC: dt-bindings: sama7g5-pdmc: add microchip,startup-delay-us binding
      commit: 143a2f011c4471511887807822d3fd71f25f5169
[3/3] ASoC: mchp-pdmc: fix poc noise at capture startup
      commit: c5682e2ba1327d08987a7cabc7b5b40bf3bc131f

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark