summaryrefslogtreecommitdiffstats
path: root/drivers/adc/stm32-adc-core.h
diff options
context:
space:
mode:
authorFabrice Gasnier <fabrice.gasnier@st.com>2018-07-24 16:31:31 +0200
committerTom Rini <trini@konsulko.com>2018-08-03 19:53:10 -0400
commita466ecec483a94ac5c66d3ce6793e1575f333d23 (patch)
treec8381d1205420220f91ffd627426b322d35c17d9 /drivers/adc/stm32-adc-core.h
parentfb4e674a4b01d44fe15ea72c31c84598db11ebc1 (diff)
downloadu-boot-a466ecec483a94ac5c66d3ce6793e1575f333d23.tar.gz
u-boot-a466ecec483a94ac5c66d3ce6793e1575f333d23.tar.xz
u-boot-a466ecec483a94ac5c66d3ce6793e1575f333d23.zip
adc: Add driver for STM32 ADC
This patch adds support for STMicroelectronics STM32 ADC (analog to digital converter). It's originally based on Linux kernel v4.18-rcs drivers/iio/adc/stm32-adc*. It's composed of: - core driver (UCLASS_SIMPLE_BUS) manages common resources (clk, regu). - child drivers (UCLASS_ADC) declare each ADC, channels and handle conversions. This driver currently supports STM32H7 and STM32MP1 ADC. Signed-off-by: Fabrice Gasnier <fabrice.gasnier@st.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers/adc/stm32-adc-core.h')
-rw-r--r--drivers/adc/stm32-adc-core.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/drivers/adc/stm32-adc-core.h b/drivers/adc/stm32-adc-core.h
new file mode 100644
index 0000000000..ba0e10e6cc
--- /dev/null
+++ b/drivers/adc/stm32-adc-core.h
@@ -0,0 +1,51 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2018, STMicroelectronics - All Rights Reserved
+ * Author: Fabrice Gasnier <fabrice.gasnier@st.com>.
+ *
+ * Originally based on the Linux kernel v4.18 drivers/iio/adc/stm32-adc-core.h.
+ */
+
+#ifndef __STM32_ADC_H
+#define __STM32_ADC_H
+
+/*
+ * STM32 - ADC global register map
+ * ________________________________________________________
+ * | Offset | Register |
+ * --------------------------------------------------------
+ * | 0x000 | Master ADC1 |
+ * --------------------------------------------------------
+ * | 0x100 | Slave ADC2 |
+ * --------------------------------------------------------
+ * | 0x200 | Slave ADC3 |
+ * --------------------------------------------------------
+ * | 0x300 | Master & Slave common regs |
+ * --------------------------------------------------------
+ */
+#define STM32_ADC_MAX_ADCS 3
+#define STM32_ADCX_COMN_OFFSET 0x300
+
+#include <common.h>
+#include <clk.h>
+#include <dm.h>
+
+/**
+ * struct stm32_adc_common - stm32 ADC driver common data (for all instances)
+ * @base: control registers base cpu addr
+ * @rate: clock rate used for analog circuitry
+ * @aclk: clock for the analog circuitry
+ * @bclk: bus clock common for all ADCs
+ * @vref: regulator reference
+ * @vref_uv: reference supply voltage (uV)
+ */
+struct stm32_adc_common {
+ void __iomem *base;
+ unsigned long rate;
+ struct clk aclk;
+ struct clk bclk;
+ struct udevice *vref;
+ int vref_uv;
+};
+
+#endif