#include <linux/dmaengine.h>
#include <linux/dma-mapping.h>
#include <linux/iio/adc/stm32-dfsdm-adc.h>
#include <linux/iio/backend.h>
#include <linux/iio/buffer.h>
#include <linux/iio/hw-consumer.h>
#include <linux/iio/sysfs.h>
#include <linux/iio/timer/stm32-lptim-trigger.h>
#include <linux/iio/timer/stm32-timer-trigger.h>
#include <linux/iio/trigger.h>
#include <linux/iio/trigger_consumer.h>
#include <linux/iio/triggered_buffer.h>
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_platform.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <linux/slab.h>
#include "stm32-dfsdm.h"
#define DFSDM_DMA_BUFFER_SIZE …
#define DFSDM_TIMEOUT_US …
#define DFSDM_TIMEOUT …
#define DFSDM_DEFAULT_OVERSAMPLING …
#define DFSDM_MAX_INT_OVERSAMPLING …
#define DFSDM_MAX_FL_OVERSAMPLING …
#define DFSDM_DATA_MAX …
#define DFSDM_DATA_RES …
#define DFSDM_CR1_CFG_MASK …
enum sd_converter_type { … };
struct stm32_dfsdm_dev_data { … };
struct stm32_dfsdm_adc { … };
struct stm32_dfsdm_str2field { … };
static const struct stm32_dfsdm_str2field stm32_dfsdm_chan_type[] = …;
static const struct stm32_dfsdm_str2field stm32_dfsdm_chan_src[] = …;
static int stm32_dfsdm_str2val(const char *str,
const struct stm32_dfsdm_str2field *list)
{ … }
struct stm32_dfsdm_trig_info { … };
enum stm32_dfsdm_jexten { … };
static const struct stm32_dfsdm_trig_info stm32_dfsdm_trigs[] = …;
static int stm32_dfsdm_get_jextsel(struct iio_dev *indio_dev,
struct iio_trigger *trig)
{ … }
static int stm32_dfsdm_compute_osrs(struct stm32_dfsdm_filter *fl,
unsigned int fast, unsigned int oversamp)
{ … }
static int stm32_dfsdm_compute_all_osrs(struct iio_dev *indio_dev,
unsigned int oversamp)
{ … }
static int stm32_dfsdm_start_channel(struct iio_dev *indio_dev)
{ … }
static void stm32_dfsdm_stop_channel(struct iio_dev *indio_dev)
{ … }
static int stm32_dfsdm_chan_configure(struct stm32_dfsdm *dfsdm,
struct stm32_dfsdm_channel *ch)
{ … }
static int stm32_dfsdm_start_filter(struct stm32_dfsdm_adc *adc,
unsigned int fl_id,
struct iio_trigger *trig)
{ … }
static void stm32_dfsdm_stop_filter(struct stm32_dfsdm *dfsdm,
unsigned int fl_id)
{ … }
static int stm32_dfsdm_filter_set_trig(struct iio_dev *indio_dev,
unsigned int fl_id,
struct iio_trigger *trig)
{ … }
static int stm32_dfsdm_channels_configure(struct iio_dev *indio_dev,
unsigned int fl_id,
struct iio_trigger *trig)
{ … }
static int stm32_dfsdm_filter_configure(struct iio_dev *indio_dev,
unsigned int fl_id,
struct iio_trigger *trig)
{ … }
static int stm32_dfsdm_channel_parse_of(struct stm32_dfsdm *dfsdm,
struct iio_dev *indio_dev,
struct iio_chan_spec *ch)
{ … }
static int stm32_dfsdm_generic_channel_parse_of(struct stm32_dfsdm *dfsdm,
struct iio_dev *indio_dev,
struct iio_chan_spec *ch,
struct fwnode_handle *node)
{ … }
static ssize_t dfsdm_adc_audio_get_spiclk(struct iio_dev *indio_dev,
uintptr_t priv,
const struct iio_chan_spec *chan,
char *buf)
{ … }
static int dfsdm_adc_set_samp_freq(struct iio_dev *indio_dev,
unsigned int sample_freq,
unsigned int spi_freq)
{ … }
static ssize_t dfsdm_adc_audio_set_spiclk(struct iio_dev *indio_dev,
uintptr_t priv,
const struct iio_chan_spec *chan,
const char *buf, size_t len)
{ … }
static int stm32_dfsdm_start_conv(struct iio_dev *indio_dev,
struct iio_trigger *trig)
{ … }
static void stm32_dfsdm_stop_conv(struct iio_dev *indio_dev)
{ … }
static int stm32_dfsdm_set_watermark(struct iio_dev *indio_dev,
unsigned int val)
{ … }
static unsigned int stm32_dfsdm_adc_dma_residue(struct stm32_dfsdm_adc *adc)
{ … }
static inline void stm32_dfsdm_process_data(struct stm32_dfsdm_adc *adc,
s32 *buffer)
{ … }
static void stm32_dfsdm_dma_buffer_done(void *data)
{ … }
static int stm32_dfsdm_adc_dma_start(struct iio_dev *indio_dev)
{ … }
static void stm32_dfsdm_adc_dma_stop(struct iio_dev *indio_dev)
{ … }
static int stm32_dfsdm_update_scan_mode(struct iio_dev *indio_dev,
const unsigned long *scan_mask)
{ … }
static int stm32_dfsdm_postenable(struct iio_dev *indio_dev)
{ … }
static int stm32_dfsdm_predisable(struct iio_dev *indio_dev)
{ … }
static const struct iio_buffer_setup_ops stm32_dfsdm_buffer_setup_ops = …;
int stm32_dfsdm_get_buff_cb(struct iio_dev *iio_dev,
int (*cb)(const void *data, size_t size,
void *private),
void *private)
{ … }
EXPORT_SYMBOL_GPL(…);
int stm32_dfsdm_release_buff_cb(struct iio_dev *iio_dev)
{ … }
EXPORT_SYMBOL_GPL(…);
static int stm32_dfsdm_single_conv(struct iio_dev *indio_dev,
const struct iio_chan_spec *chan, int *res)
{ … }
static int stm32_dfsdm_write_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan,
int val, int val2, long mask)
{ … }
static int stm32_dfsdm_read_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan, int *val,
int *val2, long mask)
{ … }
static int stm32_dfsdm_validate_trigger(struct iio_dev *indio_dev,
struct iio_trigger *trig)
{ … }
static const struct iio_info stm32_dfsdm_info_audio = …;
static const struct iio_info stm32_dfsdm_info_adc = …;
static irqreturn_t stm32_dfsdm_irq(int irq, void *arg)
{ … }
static const struct iio_chan_spec_ext_info dfsdm_adc_audio_ext_info[] = …;
static void stm32_dfsdm_dma_release(struct iio_dev *indio_dev)
{ … }
static int stm32_dfsdm_dma_request(struct device *dev,
struct iio_dev *indio_dev)
{ … }
static int stm32_dfsdm_adc_chan_init_one(struct iio_dev *indio_dev, struct iio_chan_spec *ch,
struct fwnode_handle *child)
{ … }
static int stm32_dfsdm_chan_init(struct iio_dev *indio_dev, struct iio_chan_spec *channels)
{ … }
static int stm32_dfsdm_generic_chan_init(struct iio_dev *indio_dev, struct iio_chan_spec *channels)
{ … }
static int stm32_dfsdm_audio_init(struct device *dev, struct iio_dev *indio_dev)
{ … }
static int stm32_dfsdm_adc_init(struct device *dev, struct iio_dev *indio_dev)
{ … }
static const struct stm32_dfsdm_dev_data stm32h7_dfsdm_adc_data = …;
static const struct stm32_dfsdm_dev_data stm32h7_dfsdm_audio_data = …;
static const struct of_device_id stm32_dfsdm_adc_match[] = …;
MODULE_DEVICE_TABLE(of, stm32_dfsdm_adc_match);
static int stm32_dfsdm_adc_probe(struct platform_device *pdev)
{ … }
static void stm32_dfsdm_adc_remove(struct platform_device *pdev)
{ … }
static int stm32_dfsdm_adc_suspend(struct device *dev)
{ … }
static int stm32_dfsdm_adc_resume(struct device *dev)
{ … }
static DEFINE_SIMPLE_DEV_PM_OPS(stm32_dfsdm_adc_pm_ops,
stm32_dfsdm_adc_suspend,
stm32_dfsdm_adc_resume);
static struct platform_driver stm32_dfsdm_adc_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;
MODULE_IMPORT_NS(…);