Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * This file is part of STM32 ADC driver
0004  *
0005  * Copyright (C) 2016, STMicroelectronics - All Rights Reserved
0006  * Author: Fabrice Gasnier <fabrice.gasnier@st.com>.
0007  *
0008  */
0009 
0010 #ifndef __STM32_ADC_H
0011 #define __STM32_ADC_H
0012 
0013 /*
0014  * STM32 - ADC global register map
0015  * ________________________________________________________
0016  * | Offset |                 Register                    |
0017  * --------------------------------------------------------
0018  * | 0x000  |                Master ADC1                  |
0019  * --------------------------------------------------------
0020  * | 0x100  |                Slave ADC2                   |
0021  * --------------------------------------------------------
0022  * | 0x200  |                Slave ADC3                   |
0023  * --------------------------------------------------------
0024  * | 0x300  |         Master & Slave common regs          |
0025  * --------------------------------------------------------
0026  */
0027 #define STM32_ADC_MAX_ADCS      3
0028 #define STM32_ADC_OFFSET        0x100
0029 #define STM32_ADCX_COMN_OFFSET      0x300
0030 
0031 /* STM32F4 - Registers for each ADC instance */
0032 #define STM32F4_ADC_SR          0x00
0033 #define STM32F4_ADC_CR1         0x04
0034 #define STM32F4_ADC_CR2         0x08
0035 #define STM32F4_ADC_SMPR1       0x0C
0036 #define STM32F4_ADC_SMPR2       0x10
0037 #define STM32F4_ADC_HTR         0x24
0038 #define STM32F4_ADC_LTR         0x28
0039 #define STM32F4_ADC_SQR1        0x2C
0040 #define STM32F4_ADC_SQR2        0x30
0041 #define STM32F4_ADC_SQR3        0x34
0042 #define STM32F4_ADC_JSQR        0x38
0043 #define STM32F4_ADC_JDR1        0x3C
0044 #define STM32F4_ADC_JDR2        0x40
0045 #define STM32F4_ADC_JDR3        0x44
0046 #define STM32F4_ADC_JDR4        0x48
0047 #define STM32F4_ADC_DR          0x4C
0048 
0049 /* STM32F4 - common registers for all ADC instances: 1, 2 & 3 */
0050 #define STM32F4_ADC_CSR         (STM32_ADCX_COMN_OFFSET + 0x00)
0051 #define STM32F4_ADC_CCR         (STM32_ADCX_COMN_OFFSET + 0x04)
0052 
0053 /* STM32F4_ADC_SR - bit fields */
0054 #define STM32F4_OVR         BIT(5)
0055 #define STM32F4_STRT            BIT(4)
0056 #define STM32F4_EOC         BIT(1)
0057 
0058 /* STM32F4_ADC_CR1 - bit fields */
0059 #define STM32F4_OVRIE           BIT(26)
0060 #define STM32F4_RES_SHIFT       24
0061 #define STM32F4_RES_MASK        GENMASK(25, 24)
0062 #define STM32F4_SCAN            BIT(8)
0063 #define STM32F4_EOCIE           BIT(5)
0064 
0065 /* STM32F4_ADC_CR2 - bit fields */
0066 #define STM32F4_SWSTART         BIT(30)
0067 #define STM32F4_EXTEN_SHIFT     28
0068 #define STM32F4_EXTEN_MASK      GENMASK(29, 28)
0069 #define STM32F4_EXTSEL_SHIFT        24
0070 #define STM32F4_EXTSEL_MASK     GENMASK(27, 24)
0071 #define STM32F4_EOCS            BIT(10)
0072 #define STM32F4_DDS         BIT(9)
0073 #define STM32F4_DMA         BIT(8)
0074 #define STM32F4_ADON            BIT(0)
0075 
0076 /* STM32F4_ADC_CSR - bit fields */
0077 #define STM32F4_OVR3            BIT(21)
0078 #define STM32F4_EOC3            BIT(17)
0079 #define STM32F4_OVR2            BIT(13)
0080 #define STM32F4_EOC2            BIT(9)
0081 #define STM32F4_OVR1            BIT(5)
0082 #define STM32F4_EOC1            BIT(1)
0083 
0084 /* STM32F4_ADC_CCR - bit fields */
0085 #define STM32F4_ADC_ADCPRE_SHIFT    16
0086 #define STM32F4_ADC_ADCPRE_MASK     GENMASK(17, 16)
0087 
0088 /* STM32H7 - Registers for each ADC instance */
0089 #define STM32H7_ADC_ISR         0x00
0090 #define STM32H7_ADC_IER         0x04
0091 #define STM32H7_ADC_CR          0x08
0092 #define STM32H7_ADC_CFGR        0x0C
0093 #define STM32H7_ADC_SMPR1       0x14
0094 #define STM32H7_ADC_SMPR2       0x18
0095 #define STM32H7_ADC_PCSEL       0x1C
0096 #define STM32H7_ADC_SQR1        0x30
0097 #define STM32H7_ADC_SQR2        0x34
0098 #define STM32H7_ADC_SQR3        0x38
0099 #define STM32H7_ADC_SQR4        0x3C
0100 #define STM32H7_ADC_DR          0x40
0101 #define STM32H7_ADC_DIFSEL      0xC0
0102 #define STM32H7_ADC_CALFACT     0xC4
0103 #define STM32H7_ADC_CALFACT2        0xC8
0104 
0105 /* STM32MP1 - ADC2 instance option register */
0106 #define STM32MP1_ADC2_OR        0xD0
0107 
0108 /* STM32H7 - common registers for all ADC instances */
0109 #define STM32H7_ADC_CSR         (STM32_ADCX_COMN_OFFSET + 0x00)
0110 #define STM32H7_ADC_CCR         (STM32_ADCX_COMN_OFFSET + 0x08)
0111 
0112 /* STM32H7_ADC_ISR - bit fields */
0113 #define STM32MP1_VREGREADY      BIT(12)
0114 #define STM32H7_OVR         BIT(4)
0115 #define STM32H7_EOC         BIT(2)
0116 #define STM32H7_ADRDY           BIT(0)
0117 
0118 /* STM32H7_ADC_IER - bit fields */
0119 #define STM32H7_OVRIE           STM32H7_OVR
0120 #define STM32H7_EOCIE           STM32H7_EOC
0121 
0122 /* STM32H7_ADC_CR - bit fields */
0123 #define STM32H7_ADCAL           BIT(31)
0124 #define STM32H7_ADCALDIF        BIT(30)
0125 #define STM32H7_DEEPPWD         BIT(29)
0126 #define STM32H7_ADVREGEN        BIT(28)
0127 #define STM32H7_LINCALRDYW6     BIT(27)
0128 #define STM32H7_LINCALRDYW5     BIT(26)
0129 #define STM32H7_LINCALRDYW4     BIT(25)
0130 #define STM32H7_LINCALRDYW3     BIT(24)
0131 #define STM32H7_LINCALRDYW2     BIT(23)
0132 #define STM32H7_LINCALRDYW1     BIT(22)
0133 #define STM32H7_ADCALLIN        BIT(16)
0134 #define STM32H7_BOOST           BIT(8)
0135 #define STM32H7_ADSTP           BIT(4)
0136 #define STM32H7_ADSTART         BIT(2)
0137 #define STM32H7_ADDIS           BIT(1)
0138 #define STM32H7_ADEN            BIT(0)
0139 
0140 /* STM32H7_ADC_CFGR bit fields */
0141 #define STM32H7_EXTEN_SHIFT     10
0142 #define STM32H7_EXTEN_MASK      GENMASK(11, 10)
0143 #define STM32H7_EXTSEL_SHIFT        5
0144 #define STM32H7_EXTSEL_MASK     GENMASK(9, 5)
0145 #define STM32H7_RES_SHIFT       2
0146 #define STM32H7_RES_MASK        GENMASK(4, 2)
0147 #define STM32H7_DMNGT_SHIFT     0
0148 #define STM32H7_DMNGT_MASK      GENMASK(1, 0)
0149 
0150 enum stm32h7_adc_dmngt {
0151     STM32H7_DMNGT_DR_ONLY,      /* Regular data in DR only */
0152     STM32H7_DMNGT_DMA_ONESHOT,  /* DMA one shot mode */
0153     STM32H7_DMNGT_DFSDM,        /* DFSDM mode */
0154     STM32H7_DMNGT_DMA_CIRC,     /* DMA circular mode */
0155 };
0156 
0157 /* STM32H7_ADC_CALFACT - bit fields */
0158 #define STM32H7_CALFACT_D_SHIFT     16
0159 #define STM32H7_CALFACT_D_MASK      GENMASK(26, 16)
0160 #define STM32H7_CALFACT_S_SHIFT     0
0161 #define STM32H7_CALFACT_S_MASK      GENMASK(10, 0)
0162 
0163 /* STM32H7_ADC_CALFACT2 - bit fields */
0164 #define STM32H7_LINCALFACT_SHIFT    0
0165 #define STM32H7_LINCALFACT_MASK     GENMASK(29, 0)
0166 
0167 /* STM32H7_ADC_CSR - bit fields */
0168 #define STM32H7_OVR_SLV         BIT(20)
0169 #define STM32H7_EOC_SLV         BIT(18)
0170 #define STM32H7_OVR_MST         BIT(4)
0171 #define STM32H7_EOC_MST         BIT(2)
0172 
0173 /* STM32H7_ADC_CCR - bit fields */
0174 #define STM32H7_VBATEN          BIT(24)
0175 #define STM32H7_VREFEN          BIT(22)
0176 #define STM32H7_PRESC_SHIFT     18
0177 #define STM32H7_PRESC_MASK      GENMASK(21, 18)
0178 #define STM32H7_CKMODE_SHIFT        16
0179 #define STM32H7_CKMODE_MASK     GENMASK(17, 16)
0180 
0181 /* STM32MP1_ADC2_OR - bit fields */
0182 #define STM32MP1_VDDCOREEN      BIT(0)
0183 
0184 /**
0185  * struct stm32_adc_common - stm32 ADC driver common data (for all instances)
0186  * @base:       control registers base cpu addr
0187  * @phys_base:      control registers base physical addr
0188  * @rate:       clock rate used for analog circuitry
0189  * @vref_mv:        vref voltage (mv)
0190  * @lock:       spinlock
0191  */
0192 struct stm32_adc_common {
0193     void __iomem            *base;
0194     phys_addr_t         phys_base;
0195     unsigned long           rate;
0196     int             vref_mv;
0197     spinlock_t          lock;       /* lock for common register */
0198 };
0199 
0200 #endif