[PATCH v3 00/11] Add STM32 DFSDM support

Arnaud Pouliquen arnaud.pouliquen at st.com
Fri Mar 17 09:36:37 PDT 2017


Oops stupid guy i am...I have forgotten to tag the series as [RFC]
instead of [PATCH] in subjects.
Apologize for any inconvenience caused.

Regards
Arnaud

On 03/17/2017 03:08 PM, Arnaud POULIQUEN wrote:
> Hello,
> 
> I kept it as RFC as i reworked the global design (but also because not full validated...).
> Regarding Mark and Jonathan's comments, I decided to  try an implementation 
> with DMA support in IIO instead of handling it in ASOC.
> Solution seems more straightforward but as DMA cyclic mode and associated buffer
> block API is not part of IIO today, I still need some hacks...
> To be honest, I tried to integrate DMA cyclic management and associated buffer block 
> Consumer API. but no enough expertise on IIO to success... :(
> 
> Advantage vs V2:
> 	- No more data processing need in ASoC , done in IIO
>         - ASoC uses IIO consumer interface ( except for buffer callback)
> Drawback :
> 	- Need to create a "SPI bus" trigger to allo to use Buffer consumer API
>         	=> Need to find a solution to set this trigger by default in IIO audio driver
>         - No standard buffer management
>         	- Implement DMA cyclic in DFSDM IIO driver.
>                 - Define specific API to handle  buffer callback per period instead of 
>                   callback per samples generated by iio_push_to_buffers_with_timestamp.
>  
> V2-V3 delta:
> 	- New patches to support ASoC DMA codec in DT 
>   		- ASoC: Add Bindins for DMIC codec driver.
>   		- ASoC: codec: add DT support in dmic codec.
>         - New patches to allow in-kernel set of IIO buffer size and watermark   
>   		- IIO: consumer: allow to set buffer sizes.
> 	- IIO DFSDM drivers
>         	- Split audio and ADC support in 2 drivers.
>                 - Implement DMA cyclic mode.
>                 - Add SPI bus Trigger for buffer management.
>                 
> 	- IIO sigma delta adc drivers
>         	-  Suppress "simple and rename driver.
>          
>          - ASoC driver
>          	- Suppress DMA engine.
>                 - Suppress copy ops.
>                 - Use IIO consmumer interface to enable/Disable DFSDM.        
> 
> Regards,
> 
> Arnaud
> 
> Arnaud Pouliquen (11):
>   iio: Add hardware consumer support
>   IIO: Add DT bindings for sigma delta adc modulator
>   IIO: ADC: add sigma delta modulator support
>   IIO: add DT bindings for stm32 DFSDM filter
>   IIO: ADC: add stm32 DFSDM support for Sigma delta ADC
>   IIO: ADC: add stm32 DFSDM support for PDM microphone
>   IIO: consumer: allow to set buffer sizes
>   ASoC: Add Bindins for DMIC codec driver
>   ASoC: codec: add DT support in dmic codec
>   ASoC: add bindings for stm32 DFSDM filter
>   ASoC: stm32: add DFSDM DAI support
> 
>  .../bindings/iio/adc/sigma-delta-modulator.txt     |  13 +
>  .../bindings/iio/adc/st,stm32-dfsdm-adc.txt        | 120 ++++
>  Documentation/devicetree/bindings/sound/dmic.txt   |  11 +
>  .../devicetree/bindings/sound/st,stm32-adfsdm.txt  |  41 ++
>  drivers/iio/Kconfig                                |   6 +
>  drivers/iio/Makefile                               |   1 +
>  drivers/iio/adc/Kconfig                            |  50 ++
>  drivers/iio/adc/Makefile                           |   4 +
>  drivers/iio/adc/sd_adc_modulator.c                 |  98 +++
>  drivers/iio/adc/stm32-dfsdm-adc.c                  | 419 ++++++++++++
>  drivers/iio/adc/stm32-dfsdm-audio.c                | 720 +++++++++++++++++++++
>  drivers/iio/adc/stm32-dfsdm-core.c                 | 658 +++++++++++++++++++
>  drivers/iio/adc/stm32-dfsdm.h                      | 372 +++++++++++
>  drivers/iio/buffer/industrialio-buffer-cb.c        |  12 +
>  drivers/iio/hw_consumer.c                          | 156 +++++
>  include/linux/iio/adc/stm32-dfsdm-audio.h          |  41 ++
>  include/linux/iio/consumer.h                       |  13 +
>  include/linux/iio/hw_consumer.h                    |  12 +
>  sound/soc/Kconfig                                  |   1 +
>  sound/soc/Makefile                                 |   1 +
>  sound/soc/codecs/dmic.c                            |   8 +
>  sound/soc/stm/Kconfig                              |  10 +
>  sound/soc/stm/Makefile                             |   2 +
>  sound/soc/stm/stm32_adfsdm.c                       | 362 +++++++++++
>  24 files changed, 3131 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/iio/adc/sigma-delta-modulator.txt
>  create mode 100644 Documentation/devicetree/bindings/iio/adc/st,stm32-dfsdm-adc.txt
>  create mode 100644 Documentation/devicetree/bindings/sound/dmic.txt
>  create mode 100644 Documentation/devicetree/bindings/sound/st,stm32-adfsdm.txt
>  create mode 100644 drivers/iio/adc/sd_adc_modulator.c
>  create mode 100644 drivers/iio/adc/stm32-dfsdm-adc.c
>  create mode 100644 drivers/iio/adc/stm32-dfsdm-audio.c
>  create mode 100644 drivers/iio/adc/stm32-dfsdm-core.c
>  create mode 100644 drivers/iio/adc/stm32-dfsdm.h
>  create mode 100644 drivers/iio/hw_consumer.c
>  create mode 100644 include/linux/iio/adc/stm32-dfsdm-audio.h
>  create mode 100644 include/linux/iio/hw_consumer.h
>  create mode 100644 sound/soc/stm/Kconfig
>  create mode 100644 sound/soc/stm/Makefile
>  create mode 100644 sound/soc/stm/stm32_adfsdm.c
> 
> V2:
> 
> Patch-set associated to this RFC proposes an implementation of the
> DFSDM features shared between ASoC and IIO frameworks.
> 
> Patch-set is only a Skeleton of the drivers, so a base to discuss and validate a design. 
> It contains minimum code to allow probing (with DT) and to expose the ASoC and IIO ABI.
> Hope that is sufficent in a first step to allow to focus on APIs.
> 
> In this patch-set there are two new APIs used:
> 	- IIO in-kern API: based on hw_customer API proposed by Lars
>  	- ASOC <-> IIO API inspired by API defined for hdmi-codec for ASoC/DRM interconnect. 
>    	  API is dedicated to DFSDM only.
> 
> Notice also that this design is based on following assumption:
> 	- Audio stream ABI interface is ASoC, no access to data through IIO ABI for PDM. 
> 	- ASoC DMA should be used for audio transfer as designed for real time stream.
> 	- Need some runtime parameters exchange between ASoC and IIO
> 	  due to the correlation between the sample frequency, the DFSDM decimation 
>           factor and the associated scaling.
> 
> - "ASoC: dmaengine_pcm: add copy support" patch:
>  I added a patch in ASoC that allows to implement a copy function to process data 
>  after DMA transfer. Requested, as DFSDM samples captured contain channel ID 
>  on 8-LSB bits and need also a potential rescale to present DAT on 24-bits.  	
> 
> - "IIO: ADC: add sigma delta modulator support" patch:
> Simple dummy driver created to support external Sigma delta modulator. 
> It is binded to DFSDM driver through hw_customer API.
> 
> 
> - 
> 1.9.1
> 



More information about the linux-arm-kernel mailing list