0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef __STM32_ADC_H
0011 #define __STM32_ADC_H
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 #define STM32_ADC_MAX_ADCS 3
0028 #define STM32_ADC_OFFSET 0x100
0029 #define STM32_ADCX_COMN_OFFSET 0x300
0030
0031
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
0050 #define STM32F4_ADC_CSR (STM32_ADCX_COMN_OFFSET + 0x00)
0051 #define STM32F4_ADC_CCR (STM32_ADCX_COMN_OFFSET + 0x04)
0052
0053
0054 #define STM32F4_OVR BIT(5)
0055 #define STM32F4_STRT BIT(4)
0056 #define STM32F4_EOC BIT(1)
0057
0058
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
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
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
0085 #define STM32F4_ADC_ADCPRE_SHIFT 16
0086 #define STM32F4_ADC_ADCPRE_MASK GENMASK(17, 16)
0087
0088
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
0106 #define STM32MP1_ADC2_OR 0xD0
0107
0108
0109 #define STM32H7_ADC_CSR (STM32_ADCX_COMN_OFFSET + 0x00)
0110 #define STM32H7_ADC_CCR (STM32_ADCX_COMN_OFFSET + 0x08)
0111
0112
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
0119 #define STM32H7_OVRIE STM32H7_OVR
0120 #define STM32H7_EOCIE STM32H7_EOC
0121
0122
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
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,
0152 STM32H7_DMNGT_DMA_ONESHOT,
0153 STM32H7_DMNGT_DFSDM,
0154 STM32H7_DMNGT_DMA_CIRC,
0155 };
0156
0157
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
0164 #define STM32H7_LINCALFACT_SHIFT 0
0165 #define STM32H7_LINCALFACT_MASK GENMASK(29, 0)
0166
0167
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
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
0182 #define STM32MP1_VDDCOREEN BIT(0)
0183
0184
0185
0186
0187
0188
0189
0190
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;
0198 };
0199
0200 #endif