forked from Minki/linux
iio: adc: ti_am335x_tscadc: Improve accuracy of measurement
When performing single ended measurements with TSCADC, its recommended to set negative input (SEL_INM_SWC_3_0) of ADC step to ADC's VREFN in the corresponding STEP_CONFIGx register. Also, the positive(SEL_RFP_SWC_2_0) and negative(SEL_RFM_SWC_1_0) reference voltage for ADC step needs to be set to VREFP and VREFN respectively in STEP_CONFIGx register. Without these changes, there may be variation of as much as ~2% in the ADC's digital output which is bad for precise measurement. Signed-off-by: Vignesh R <vigneshr@ti.com> Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Lee Jones <lee.jones@linaro.org>
This commit is contained in:
parent
b40ee006fe
commit
4b3ab9372f
@ -142,7 +142,10 @@ static void tiadc_step_config(struct iio_dev *indio_dev)
|
||||
stepconfig |= STEPCONFIG_MODE_SWCNT;
|
||||
|
||||
tiadc_writel(adc_dev, REG_STEPCONFIG(steps),
|
||||
stepconfig | STEPCONFIG_INP(chan));
|
||||
stepconfig | STEPCONFIG_INP(chan) |
|
||||
STEPCONFIG_INM_ADCREFM |
|
||||
STEPCONFIG_RFP_VREFP |
|
||||
STEPCONFIG_RFM_VREFN);
|
||||
|
||||
if (adc_dev->open_delay[i] > STEPDELAY_OPEN_MASK) {
|
||||
dev_warn(dev, "chan %d open delay truncating to 0x3FFFF\n",
|
||||
|
@ -78,6 +78,8 @@
|
||||
#define STEPCONFIG_YNN BIT(8)
|
||||
#define STEPCONFIG_XNP BIT(9)
|
||||
#define STEPCONFIG_YPN BIT(10)
|
||||
#define STEPCONFIG_RFP(val) ((val) << 12)
|
||||
#define STEPCONFIG_RFP_VREFP (0x3 << 12)
|
||||
#define STEPCONFIG_INM_MASK (0xF << 15)
|
||||
#define STEPCONFIG_INM(val) ((val) << 15)
|
||||
#define STEPCONFIG_INM_ADCREFM STEPCONFIG_INM(8)
|
||||
@ -86,6 +88,8 @@
|
||||
#define STEPCONFIG_INP_AN4 STEPCONFIG_INP(4)
|
||||
#define STEPCONFIG_INP_ADCREFM STEPCONFIG_INP(8)
|
||||
#define STEPCONFIG_FIFO1 BIT(26)
|
||||
#define STEPCONFIG_RFM(val) ((val) << 23)
|
||||
#define STEPCONFIG_RFM_VREFN (0x3 << 23)
|
||||
|
||||
/* Delay register */
|
||||
#define STEPDELAY_OPEN_MASK (0x3FFFF << 0)
|
||||
|
Loading…
Reference in New Issue
Block a user