1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * This file is part of STM32 ADC driver 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2016, STMicroelectronics - All Rights Reserved 6*4882a593Smuzhiyun * Author: Fabrice Gasnier <fabrice.gasnier@st.com>. 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifndef __STM32_ADC_H 11*4882a593Smuzhiyun #define __STM32_ADC_H 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun /* 14*4882a593Smuzhiyun * STM32 - ADC global register map 15*4882a593Smuzhiyun * ________________________________________________________ 16*4882a593Smuzhiyun * | Offset | Register | 17*4882a593Smuzhiyun * -------------------------------------------------------- 18*4882a593Smuzhiyun * | 0x000 | Master ADC1 | 19*4882a593Smuzhiyun * -------------------------------------------------------- 20*4882a593Smuzhiyun * | 0x100 | Slave ADC2 | 21*4882a593Smuzhiyun * -------------------------------------------------------- 22*4882a593Smuzhiyun * | 0x200 | Slave ADC3 | 23*4882a593Smuzhiyun * -------------------------------------------------------- 24*4882a593Smuzhiyun * | 0x300 | Master & Slave common regs | 25*4882a593Smuzhiyun * -------------------------------------------------------- 26*4882a593Smuzhiyun */ 27*4882a593Smuzhiyun #define STM32_ADC_MAX_ADCS 3 28*4882a593Smuzhiyun #define STM32_ADC_OFFSET 0x100 29*4882a593Smuzhiyun #define STM32_ADCX_COMN_OFFSET 0x300 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun /* STM32F4 - Registers for each ADC instance */ 32*4882a593Smuzhiyun #define STM32F4_ADC_SR 0x00 33*4882a593Smuzhiyun #define STM32F4_ADC_CR1 0x04 34*4882a593Smuzhiyun #define STM32F4_ADC_CR2 0x08 35*4882a593Smuzhiyun #define STM32F4_ADC_SMPR1 0x0C 36*4882a593Smuzhiyun #define STM32F4_ADC_SMPR2 0x10 37*4882a593Smuzhiyun #define STM32F4_ADC_HTR 0x24 38*4882a593Smuzhiyun #define STM32F4_ADC_LTR 0x28 39*4882a593Smuzhiyun #define STM32F4_ADC_SQR1 0x2C 40*4882a593Smuzhiyun #define STM32F4_ADC_SQR2 0x30 41*4882a593Smuzhiyun #define STM32F4_ADC_SQR3 0x34 42*4882a593Smuzhiyun #define STM32F4_ADC_JSQR 0x38 43*4882a593Smuzhiyun #define STM32F4_ADC_JDR1 0x3C 44*4882a593Smuzhiyun #define STM32F4_ADC_JDR2 0x40 45*4882a593Smuzhiyun #define STM32F4_ADC_JDR3 0x44 46*4882a593Smuzhiyun #define STM32F4_ADC_JDR4 0x48 47*4882a593Smuzhiyun #define STM32F4_ADC_DR 0x4C 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun /* STM32F4 - common registers for all ADC instances: 1, 2 & 3 */ 50*4882a593Smuzhiyun #define STM32F4_ADC_CSR (STM32_ADCX_COMN_OFFSET + 0x00) 51*4882a593Smuzhiyun #define STM32F4_ADC_CCR (STM32_ADCX_COMN_OFFSET + 0x04) 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun /* STM32F4_ADC_SR - bit fields */ 54*4882a593Smuzhiyun #define STM32F4_OVR BIT(5) 55*4882a593Smuzhiyun #define STM32F4_STRT BIT(4) 56*4882a593Smuzhiyun #define STM32F4_EOC BIT(1) 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun /* STM32F4_ADC_CR1 - bit fields */ 59*4882a593Smuzhiyun #define STM32F4_OVRIE BIT(26) 60*4882a593Smuzhiyun #define STM32F4_RES_SHIFT 24 61*4882a593Smuzhiyun #define STM32F4_RES_MASK GENMASK(25, 24) 62*4882a593Smuzhiyun #define STM32F4_SCAN BIT(8) 63*4882a593Smuzhiyun #define STM32F4_EOCIE BIT(5) 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun /* STM32F4_ADC_CR2 - bit fields */ 66*4882a593Smuzhiyun #define STM32F4_SWSTART BIT(30) 67*4882a593Smuzhiyun #define STM32F4_EXTEN_SHIFT 28 68*4882a593Smuzhiyun #define STM32F4_EXTEN_MASK GENMASK(29, 28) 69*4882a593Smuzhiyun #define STM32F4_EXTSEL_SHIFT 24 70*4882a593Smuzhiyun #define STM32F4_EXTSEL_MASK GENMASK(27, 24) 71*4882a593Smuzhiyun #define STM32F4_EOCS BIT(10) 72*4882a593Smuzhiyun #define STM32F4_DDS BIT(9) 73*4882a593Smuzhiyun #define STM32F4_DMA BIT(8) 74*4882a593Smuzhiyun #define STM32F4_ADON BIT(0) 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun /* STM32F4_ADC_CSR - bit fields */ 77*4882a593Smuzhiyun #define STM32F4_OVR3 BIT(21) 78*4882a593Smuzhiyun #define STM32F4_EOC3 BIT(17) 79*4882a593Smuzhiyun #define STM32F4_OVR2 BIT(13) 80*4882a593Smuzhiyun #define STM32F4_EOC2 BIT(9) 81*4882a593Smuzhiyun #define STM32F4_OVR1 BIT(5) 82*4882a593Smuzhiyun #define STM32F4_EOC1 BIT(1) 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /* STM32F4_ADC_CCR - bit fields */ 85*4882a593Smuzhiyun #define STM32F4_ADC_ADCPRE_SHIFT 16 86*4882a593Smuzhiyun #define STM32F4_ADC_ADCPRE_MASK GENMASK(17, 16) 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun /* STM32H7 - Registers for each ADC instance */ 89*4882a593Smuzhiyun #define STM32H7_ADC_ISR 0x00 90*4882a593Smuzhiyun #define STM32H7_ADC_IER 0x04 91*4882a593Smuzhiyun #define STM32H7_ADC_CR 0x08 92*4882a593Smuzhiyun #define STM32H7_ADC_CFGR 0x0C 93*4882a593Smuzhiyun #define STM32H7_ADC_SMPR1 0x14 94*4882a593Smuzhiyun #define STM32H7_ADC_SMPR2 0x18 95*4882a593Smuzhiyun #define STM32H7_ADC_PCSEL 0x1C 96*4882a593Smuzhiyun #define STM32H7_ADC_SQR1 0x30 97*4882a593Smuzhiyun #define STM32H7_ADC_SQR2 0x34 98*4882a593Smuzhiyun #define STM32H7_ADC_SQR3 0x38 99*4882a593Smuzhiyun #define STM32H7_ADC_SQR4 0x3C 100*4882a593Smuzhiyun #define STM32H7_ADC_DR 0x40 101*4882a593Smuzhiyun #define STM32H7_ADC_DIFSEL 0xC0 102*4882a593Smuzhiyun #define STM32H7_ADC_CALFACT 0xC4 103*4882a593Smuzhiyun #define STM32H7_ADC_CALFACT2 0xC8 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun /* STM32H7 - common registers for all ADC instances */ 106*4882a593Smuzhiyun #define STM32H7_ADC_CSR (STM32_ADCX_COMN_OFFSET + 0x00) 107*4882a593Smuzhiyun #define STM32H7_ADC_CCR (STM32_ADCX_COMN_OFFSET + 0x08) 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun /* STM32H7_ADC_ISR - bit fields */ 110*4882a593Smuzhiyun #define STM32MP1_VREGREADY BIT(12) 111*4882a593Smuzhiyun #define STM32H7_OVR BIT(4) 112*4882a593Smuzhiyun #define STM32H7_EOC BIT(2) 113*4882a593Smuzhiyun #define STM32H7_ADRDY BIT(0) 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun /* STM32H7_ADC_IER - bit fields */ 116*4882a593Smuzhiyun #define STM32H7_OVRIE STM32H7_OVR 117*4882a593Smuzhiyun #define STM32H7_EOCIE STM32H7_EOC 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun /* STM32H7_ADC_CR - bit fields */ 120*4882a593Smuzhiyun #define STM32H7_ADCAL BIT(31) 121*4882a593Smuzhiyun #define STM32H7_ADCALDIF BIT(30) 122*4882a593Smuzhiyun #define STM32H7_DEEPPWD BIT(29) 123*4882a593Smuzhiyun #define STM32H7_ADVREGEN BIT(28) 124*4882a593Smuzhiyun #define STM32H7_LINCALRDYW6 BIT(27) 125*4882a593Smuzhiyun #define STM32H7_LINCALRDYW5 BIT(26) 126*4882a593Smuzhiyun #define STM32H7_LINCALRDYW4 BIT(25) 127*4882a593Smuzhiyun #define STM32H7_LINCALRDYW3 BIT(24) 128*4882a593Smuzhiyun #define STM32H7_LINCALRDYW2 BIT(23) 129*4882a593Smuzhiyun #define STM32H7_LINCALRDYW1 BIT(22) 130*4882a593Smuzhiyun #define STM32H7_ADCALLIN BIT(16) 131*4882a593Smuzhiyun #define STM32H7_BOOST BIT(8) 132*4882a593Smuzhiyun #define STM32H7_ADSTP BIT(4) 133*4882a593Smuzhiyun #define STM32H7_ADSTART BIT(2) 134*4882a593Smuzhiyun #define STM32H7_ADDIS BIT(1) 135*4882a593Smuzhiyun #define STM32H7_ADEN BIT(0) 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun /* STM32H7_ADC_CFGR bit fields */ 138*4882a593Smuzhiyun #define STM32H7_EXTEN_SHIFT 10 139*4882a593Smuzhiyun #define STM32H7_EXTEN_MASK GENMASK(11, 10) 140*4882a593Smuzhiyun #define STM32H7_EXTSEL_SHIFT 5 141*4882a593Smuzhiyun #define STM32H7_EXTSEL_MASK GENMASK(9, 5) 142*4882a593Smuzhiyun #define STM32H7_RES_SHIFT 2 143*4882a593Smuzhiyun #define STM32H7_RES_MASK GENMASK(4, 2) 144*4882a593Smuzhiyun #define STM32H7_DMNGT_SHIFT 0 145*4882a593Smuzhiyun #define STM32H7_DMNGT_MASK GENMASK(1, 0) 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun enum stm32h7_adc_dmngt { 148*4882a593Smuzhiyun STM32H7_DMNGT_DR_ONLY, /* Regular data in DR only */ 149*4882a593Smuzhiyun STM32H7_DMNGT_DMA_ONESHOT, /* DMA one shot mode */ 150*4882a593Smuzhiyun STM32H7_DMNGT_DFSDM, /* DFSDM mode */ 151*4882a593Smuzhiyun STM32H7_DMNGT_DMA_CIRC, /* DMA circular mode */ 152*4882a593Smuzhiyun }; 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun /* STM32H7_ADC_CALFACT - bit fields */ 155*4882a593Smuzhiyun #define STM32H7_CALFACT_D_SHIFT 16 156*4882a593Smuzhiyun #define STM32H7_CALFACT_D_MASK GENMASK(26, 16) 157*4882a593Smuzhiyun #define STM32H7_CALFACT_S_SHIFT 0 158*4882a593Smuzhiyun #define STM32H7_CALFACT_S_MASK GENMASK(10, 0) 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun /* STM32H7_ADC_CALFACT2 - bit fields */ 161*4882a593Smuzhiyun #define STM32H7_LINCALFACT_SHIFT 0 162*4882a593Smuzhiyun #define STM32H7_LINCALFACT_MASK GENMASK(29, 0) 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun /* STM32H7_ADC_CSR - bit fields */ 165*4882a593Smuzhiyun #define STM32H7_OVR_SLV BIT(20) 166*4882a593Smuzhiyun #define STM32H7_EOC_SLV BIT(18) 167*4882a593Smuzhiyun #define STM32H7_OVR_MST BIT(4) 168*4882a593Smuzhiyun #define STM32H7_EOC_MST BIT(2) 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun /* STM32H7_ADC_CCR - bit fields */ 171*4882a593Smuzhiyun #define STM32H7_PRESC_SHIFT 18 172*4882a593Smuzhiyun #define STM32H7_PRESC_MASK GENMASK(21, 18) 173*4882a593Smuzhiyun #define STM32H7_CKMODE_SHIFT 16 174*4882a593Smuzhiyun #define STM32H7_CKMODE_MASK GENMASK(17, 16) 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun /** 177*4882a593Smuzhiyun * struct stm32_adc_common - stm32 ADC driver common data (for all instances) 178*4882a593Smuzhiyun * @base: control registers base cpu addr 179*4882a593Smuzhiyun * @phys_base: control registers base physical addr 180*4882a593Smuzhiyun * @rate: clock rate used for analog circuitry 181*4882a593Smuzhiyun * @vref_mv: vref voltage (mv) 182*4882a593Smuzhiyun */ 183*4882a593Smuzhiyun struct stm32_adc_common { 184*4882a593Smuzhiyun void __iomem *base; 185*4882a593Smuzhiyun phys_addr_t phys_base; 186*4882a593Smuzhiyun unsigned long rate; 187*4882a593Smuzhiyun int vref_mv; 188*4882a593Smuzhiyun }; 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun #endif 191