[RFC v2 0/7] Add STM32 DFSDM support

Arnaud Pouliquen arnaud.pouliquen at st.com
Mon Feb 13 08:38:22 PST 2017


Hello,

This RFC is following first patch-set sent for DFSDM driver
(https://www.spinics.net/lists/arm-kernel/msg557133.html).
AS MFD driver has been rejected, a new way to integrate DFSDM has to 
be defined.

Aim of this RFC is to provide a base to discuss this redesign.

1) DFSDM hardware overview:
-----------------------
The Digital Filter for Sigma Delta  is a module dedicated to interface external sigma 
delta modulators to STM32 micro-controllers. It is targeted for:
	- Audio mode signal with Pulse density modulation (PDM) microphone
	- motor and Sensing mode with sigma delta ADC modulator

Main Features:
 - Up to 8 multiplexed input digital serial channel (SIT)
	. SPI (PDM compatible) or Manchester interface
	.  Slave or master ( one main SPI CLK OUT for all interface) 
 - Alternative inputs for 8 internal digital parallel channels (PIT)
	. 16 bits resolution
	. internal sources: ADC or memory
 - Digital signal processing:
	. 4 instances
	. Sincx filter (x : order 1 to 5) oversampling ratio up to 1024
	. integrator: oversampling ratio up to 256
 - Channel multiplexer
	. allow to connect SIT or PIT to filter
	. channel n can be connected SIT n or SIT n+1
 - up to 24-bit output resolution
 	. signed
        . sampling rate  and resolution depend on filter parameters.
 - data offset correction
 - detector:
	. analog watchdog
	. short circuit detection
	. clock absence detection
	. extremes

For details on DFSDM IP, please refer to STM32F413 data-sheet chapter 15:
http://www.st.com/content/ccc/resource/technical/document/reference_manual/group0/81/ea/88/1f/97/9e/4a/d0/DM00305666/files/DM00305666.pdf/jcr:content/translations/en.DM00305666.pdf

2) SW design proposal:
---------------------
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.

Regards
Arnaud

Arnaud Pouliquen (6):
  iio: Add hardware consumer support
  IIO: Add bindings for simple sigma delta adc
  IIO: ADC: add sigma delta modulator support
  ASoC: stm32: add DFSDM DAI support
  IIO: add bindings for stm32 DFSDM filter
  IIO: ADC: add stm32 DFSDM support

olivier moysan (1):
  ASoC: dmaengine_pcm: add copy support

 .../devicetree/bindings/iio/adc/simple_sd_adc.txt  |  13 +
 .../bindings/iio/adc/st,stm32-dfsdm-adc.txt        | 125 ++++++
 drivers/iio/Kconfig                                |   6 +
 drivers/iio/Makefile                               |   1 +
 drivers/iio/adc/Kconfig                            |  24 +
 drivers/iio/adc/Makefile                           |   2 +
 drivers/iio/adc/simple_sd_adc.c                    | 112 +++++
 drivers/iio/adc/stm32-dfsdm-adc.c                  | 483 +++++++++++++++++++++
 drivers/iio/adc/stm32-dfsdm-core.c                 | 273 ++++++++++++
 drivers/iio/adc/stm32-dfsdm.h                      | 141 ++++++
 drivers/iio/hw_consumer.c                          | 156 +++++++
 include/linux/iio/hw_consumer.h                    |  12 +
 include/sound/dmaengine_pcm.h                      |   3 +
 include/sound/stm32-adfsdm.h                       |  80 ++++
 sound/soc/Kconfig                                  |   1 +
 sound/soc/Makefile                                 |   1 +
 sound/soc/soc-generic-dmaengine-pcm.c              |  37 +-
 sound/soc/stm/Kconfig                              |  10 +
 sound/soc/stm/Makefile                             |   2 +
 sound/soc/stm/stm32_adfsdm.c                       | 365 ++++++++++++++++
 20 files changed, 1845 insertions(+), 2 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/iio/adc/simple_sd_adc.txt
 create mode 100644 Documentation/devicetree/bindings/iio/adc/st,stm32-dfsdm-adc.txt
 create mode 100644 drivers/iio/adc/simple_sd_adc.c
 create mode 100644 drivers/iio/adc/stm32-dfsdm-adc.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/hw_consumer.h
 create mode 100644 include/sound/stm32-adfsdm.h
 create mode 100644 sound/soc/stm/Kconfig
 create mode 100644 sound/soc/stm/Makefile
 create mode 100644 sound/soc/stm/stm32_adfsdm.c

-- 
1.9.1




More information about the linux-arm-kernel mailing list