Commit 2763ea05 authored by Fabrice Gasnier's avatar Fabrice Gasnier Committed by Jonathan Cameron

iio: adc: stm32: add optional dma support

Add DMA optional support to STM32 ADC, as there is a limited number DMA
channels (request lines) that can be assigned to ADC. This way, driver
may fall back using interrupts when all DMA channels are in use for
other IPs.
Use dma cyclic mode with two periods. Allow to tune period length by
using watermark. Coherent memory is used for dma (max buffer size is
fixed to PAGE_SIZE).
Signed-off-by: default avatarFabrice Gasnier <fabrice.gasnier@st.com>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 122b5f45
...@@ -497,6 +497,7 @@ config ROCKCHIP_SARADC ...@@ -497,6 +497,7 @@ config ROCKCHIP_SARADC
config STM32_ADC_CORE config STM32_ADC_CORE
tristate "STMicroelectronics STM32 adc core" tristate "STMicroelectronics STM32 adc core"
depends on ARCH_STM32 || COMPILE_TEST depends on ARCH_STM32 || COMPILE_TEST
depends on HAS_DMA
depends on OF depends on OF
depends on REGULATOR depends on REGULATOR
select IIO_BUFFER select IIO_BUFFER
......
...@@ -201,6 +201,7 @@ static int stm32_adc_probe(struct platform_device *pdev) ...@@ -201,6 +201,7 @@ static int stm32_adc_probe(struct platform_device *pdev)
priv->common.base = devm_ioremap_resource(&pdev->dev, res); priv->common.base = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(priv->common.base)) if (IS_ERR(priv->common.base))
return PTR_ERR(priv->common.base); return PTR_ERR(priv->common.base);
priv->common.phys_base = res->start;
priv->vref = devm_regulator_get(&pdev->dev, "vref"); priv->vref = devm_regulator_get(&pdev->dev, "vref");
if (IS_ERR(priv->vref)) { if (IS_ERR(priv->vref)) {
......
...@@ -42,10 +42,12 @@ ...@@ -42,10 +42,12 @@
/** /**
* struct stm32_adc_common - stm32 ADC driver common data (for all instances) * struct stm32_adc_common - stm32 ADC driver common data (for all instances)
* @base: control registers base cpu addr * @base: control registers base cpu addr
* @phys_base: control registers base physical addr
* @vref_mv: vref voltage (mv) * @vref_mv: vref voltage (mv)
*/ */
struct stm32_adc_common { struct stm32_adc_common {
void __iomem *base; void __iomem *base;
phys_addr_t phys_base;
int vref_mv; int vref_mv;
}; };
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment