AD4130 Mbed IIO Firmware

Dependencies:   tempsensors sdp_k1_sdram

Committer:
MPhalke@MPHALKE-L02.ad.analog.com
Date:
Fri Jul 15 17:47:44 2022 +0530
Revision:
2:871d585d96ee
AD4130 firmware - initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 2 * @file ad413x.c
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 3 * @brief Implementation of AD413X Driver.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 4 * @author Andrei Porumb (andrei.porumb@analog.com)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 5 ********************************************************************************
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 6 * Copyright 2022(c) Analog Devices, Inc.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 7 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 8 * All rights reserved.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 9 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 10 * Redistribution and use in source and binary forms, with or without
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 11 * modification, are permitted provided that the following conditions are met:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 12 * - Redistributions of source code must retain the above copyright
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 13 * notice, this list of conditions and the following disclaimer.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 14 * - Redistributions in binary form must reproduce the above copyright
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 15 * notice, this list of conditions and the following disclaimer in
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 16 * the documentation and/or other materials provided with the
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 17 * distribution.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 18 * - Neither the name of Analog Devices, Inc. nor the names of its
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 19 * contributors may be used to endorse or promote products derived
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 20 * from this software without specific prior written permission.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 21 * - The use of this software may or may not infringe the patent rights
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 22 * of one or more patent holders. This license does not release you
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 23 * from the requirement that you obtain separate licenses from these
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 24 * patent holders to use this software.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 25 * - Use of the software either in source or binary form, must be run
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 26 * on or directly connected to an Analog Devices Inc. component.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 27 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 28 * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 29 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 30 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 31 * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 32 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 33 * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 34 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 35 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 36 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 37 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 38 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 39
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 40 /******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 41 /***************************** Include Files **********************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 42 /******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 43 #include <stdio.h>
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 44 #include <stdlib.h>
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 45 #include "ad413x.h"
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 46 #include "no_os_error.h"
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 47 #include "no_os_irq.h"
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 48 #include "no_os_print_log.h"
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 49 #include "no_os_delay.h"
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 50 #include "no_os_crc8.h"
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 51 #include "no_os_spi.h"
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 52
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 53 NO_OS_DECLARE_CRC8_TABLE(ad413x_crc8);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 54 uint32_t timeout = 0xFFFFFF;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 55
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 56 /******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 57 /************************** Functions Implementation **************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 58 /******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 59
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 60 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 61 * IRQ handler for ADC read.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 62 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 63 static void irq_adc_read(struct ad413x_callback_ctx *ctx)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 64 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 65 struct ad413x_dev *dev = ctx->dev;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 66 timeout = 0xFFFFFF;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 67 if(ctx->buffer_size > 0) {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 68 ad413x_reg_read(ctx->dev, AD413X_REG_DATA, ctx->buffer);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 69 ctx->buffer_size--;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 70 ctx->buffer++;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 71 no_os_irq_enable(dev->irq_desc, dev->rdy_pin);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 72 } else {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 73 no_os_irq_disable(dev->irq_desc, dev->rdy_pin);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 74 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 75 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 76
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 77 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 78 * SPI internal register write to device using a mask.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 79 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 80 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 81 * @param reg_addr - The register address.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 82 * @param data - The register data.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 83 * @param mask - The mask.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 84 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 85 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 86 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 87 int32_t ad413x_reg_write_msk(struct ad413x_dev *dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 88 uint32_t reg_addr,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 89 uint32_t data,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 90 uint32_t mask)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 91 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 92 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 93 uint32_t reg_data;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 94
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 95 ret = ad413x_reg_read(dev, reg_addr, &reg_data);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 96 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 97 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 98 reg_data &= ~mask;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 99 reg_data |= data;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 100 return ad413x_reg_write(dev, reg_addr, reg_data);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 101 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 102
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 103 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 104 * Set the mode of the ADC.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 105 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 106 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 107 * @param mode - The ADC mode
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 108 * Accepted values: AD4110_CONTINOUS_CONV_MODE
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 109 * AD4110_SINGLE_CONV_MODE
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 110 * AD4110_STANDBY_MODE
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 111 * AD4110_PW_DOWN_MODE
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 112 * AD4110_SYS_OFFSET_CAL
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 113 * AD4110_SYS_GAIN_CAL
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 114 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 115 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 116 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 117 int32_t ad413x_set_adc_mode(struct ad413x_dev *dev, enum ad413x_adc_mode mode)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 118 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 119 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 120 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 121 AD413X_REG_ADC_CTRL,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 122 AD413X_ADC_MODE(mode),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 123 AD413X_ADC_MODE(0xF));
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 124 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 125 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 126
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 127 dev->op_mode = mode;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 128
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 129 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 130 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 131
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 132 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 133 * Set the internal reference.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 134 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 135 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 136 * @param int_ref - The internal reference option.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 137 * Accepted values: AD413X_INTREF_DISABLED
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 138 * AD413X_INTREF_2_5V,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 139 * AD413X_INTREF_1_25V
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 140 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 141 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 142 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 143 int32_t ad413x_set_int_ref(struct ad413x_dev *dev, enum ad413x_int_ref int_ref)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 144 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 145 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 146 switch (int_ref) {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 147 case AD413X_INTREF_DISABLED:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 148 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 149 AD413X_REG_ADC_CTRL,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 150 0U,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 151 AD413X_ADC_REF_EN);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 152 break;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 153
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 154 case AD413X_INTREF_2_5V:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 155 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 156 AD413X_REG_ADC_CTRL,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 157 AD413X_ADC_REF_EN,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 158 AD413X_ADC_REF_EN);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 159 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 160 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 161 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 162 AD413X_REG_ADC_CTRL,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 163 0U,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 164 AD413X_ADC_REF_VAL);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 165 break;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 166
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 167 case AD413X_INTREF_1_25V:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 168 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 169 AD413X_REG_ADC_CTRL,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 170 AD413X_ADC_REF_EN,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 171 AD413X_ADC_REF_EN);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 172 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 173 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 174 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 175 AD413X_REG_ADC_CTRL,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 176 AD413X_ADC_REF_VAL,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 177 AD413X_ADC_REF_VAL);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 178 break;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 179
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 180 default:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 181 return -EINVAL;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 182 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 183
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 184 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 185 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 186
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 187 dev->int_ref = int_ref;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 188
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 189 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 190 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 191
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 192 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 193 * Enable/disable DATA_STAT field.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 194 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 195 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 196 * @param enable - 0 DISABLE
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 197 * 1 ENABLE
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 198 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 199 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 200 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 201 int32_t ad413x_data_stat_en(struct ad413x_dev *dev, uint8_t enable)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 202 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 203 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 204 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 205 AD413X_REG_ADC_CTRL,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 206 enable ? AD413X_ADC_DATA_STATUS : 0x0U,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 207 AD413X_ADC_DATA_STATUS);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 208 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 209 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 210
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 211 dev->data_stat = enable;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 212
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 213 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 214 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 215 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 216 * Set the gain from configuration register.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 217 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 218 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 219 * @param gain - The gain value.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 220 * Accepted values: AD413X_GAIN_1
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 221 * AD413X_GAIN_2
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 222 * AD413X_GAIN_4
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 223 * AD413X_GAIN_8
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 224 * AD413X_GAIN_16
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 225 * AD413X_GAIN_32
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 226 * AD413X_GAIN_64
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 227 * AD413X_GAIN_128
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 228 * @param reg_nb - Number of Configuration Register
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 229 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 230 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 231 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 232 int32_t ad413x_set_gain(struct ad413x_dev *dev, enum ad413x_gain gain,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 233 enum ad413x_preset_nb reg_nb)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 234 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 235 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 236
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 237 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 238 AD413X_REG_CONFIG(reg_nb),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 239 AD413X_PGA_N(gain),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 240 AD413X_PGA_N(0xF));
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 241 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 242 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 243
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 244 dev->preset[reg_nb].gain = gain;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 245
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 246 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 247 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 248
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 249 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 250 * Select reference from configuration register.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 251 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 252 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 253 * @param ref - The reference value.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 254 * Accepted values: AD413X_REFIN1
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 255 * AD413X_REFIN2
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 256 * AD413X_REFOUT_AVSS
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 257 * AD413X_AVDD_AVSS
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 258 * @param reg_nb - Number of Configuration Register
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 259 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 260 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 261 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 262 int32_t ad413x_set_ref(struct ad413x_dev *dev, enum ad413x_ref_sel ref,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 263 enum ad413x_preset_nb reg_nb)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 264 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 265 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 266
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 267 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 268 AD413X_REG_CONFIG(reg_nb),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 269 AD413X_REF_SEL_N(ref),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 270 AD413X_REF_SEL_N(0xF));
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 271 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 272 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 273
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 274 dev->preset[reg_nb].ref_sel = ref;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 275
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 276 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 277 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 278
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 279 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 280 * Select the reference buffers.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 281 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 282 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 283 * @param ref_buf - The reference buffer status.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 284 * @param reg_nb - Number of Configuration Register
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 285 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 286 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 287 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 288 int32_t ad413x_set_ref_buf(struct ad413x_dev *dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 289 struct ad413x_ref_buf ref_buf,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 290 enum ad413x_preset_nb reg_nb)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 291 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 292 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 293 uint32_t reg_val;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 294
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 295 reg_val = no_os_field_prep(AD413X_REF_BUFP_N, ref_buf.ref_buf_p_en);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 296 reg_val |= no_os_field_prep(AD413X_REF_BUFM_N, ref_buf.ref_buf_m_en);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 297
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 298 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 299 AD413X_REG_CONFIG(reg_nb),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 300 reg_val,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 301 AD413X_REF_BUF_MSK);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 302 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 303 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 304
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 305 dev->preset[reg_nb].ref_buf = ref_buf;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 306
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 307 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 308 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 309
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 310 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 311 * Select filter from filter register.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 312 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 313 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 314 * @param filter - The filter type.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 315 * Accepted values: AD413X_SYNC4_STANDALONE
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 316 * AD413X_SYNC4_SYNC1
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 317 * AD413X_SYNC3_STANDALONE
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 318 * AD413X_SYNC3_REJ60
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 319 * AD413X_SYNC3_SYNC1
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 320 * AD413X_SYNC3_PF1
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 321 * AD413X_SYNC3_PF2
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 322 * AD413X_SYNC3_PF3
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 323 * AD413X_SYNC3_PF4
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 324 * @param reg_nb - Number of Configuration Register
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 325 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 326 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 327 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 328 int32_t ad413x_set_filter(struct ad413x_dev *dev, enum ad413x_filter filter,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 329 enum ad413x_preset_nb reg_nb)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 330 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 331 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 332
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 333 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 334 AD413X_REG_FILTER(reg_nb),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 335 AD413X_FILTER_MODE_N(filter),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 336 AD413X_FILTER_MODE_N(0xF));
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 337 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 338 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 339
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 340 dev->preset[reg_nb].filter = filter;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 341
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 342 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 343 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 344
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 345 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 346 * Select settle time from filter register.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 347 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 348 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 349 * @param s_time - The settle time value.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 350 * Accepted values: AD413X_32_MCLK
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 351 * AD413X_64_MCLK
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 352 * AD413X_128_MCLK
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 353 * AD413X_256_MCLK
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 354 * AD413X_512_MCLK
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 355 * AD413X_1024_MCLK
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 356 * AD413X_2048_MCLK
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 357 * AD413X_4096_MCLK
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 358 * @param reg_nb - Number of Configuration Register
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 359 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 360 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 361 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 362 int32_t ad413x_set_settle_time(struct ad413x_dev *dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 363 enum ad413x_settle_time s_time,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 364 enum ad413x_preset_nb reg_nb)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 365 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 366 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 367
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 368 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 369 AD413X_REG_FILTER(reg_nb),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 370 AD413X_SETTLE_N(s_time),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 371 AD413X_SETTLE_N(0xFF));
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 372 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 373 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 374
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 375 dev->preset[reg_nb].s_time = s_time;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 376
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 377 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 378 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 379
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 380 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 381 * Select excitation current value from config register.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 382 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 383 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 384 * @param iout0_exc - The Iout0 excitation current value.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 385 * @param iout1_exc - The Iout1 excitation current value.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 386 * Accepted values: AD413X_EXC_OFF
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 387 * AD413X_EXC_10UA
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 388 * AD413X_EXC_20UA
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 389 * AD413X_EXC_50UA
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 390 * AD413X_EXC_100UA
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 391 * AD413X_EXC_150UA
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 392 * AD413X_EXC_200UA
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 393 * AD413X_EXC_100NA
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 394 * @param reg_nb - Number of Configuration Register
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 395 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 396 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 397 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 398 int32_t ad413x_set_exc_current(struct ad413x_dev *dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 399 enum ad413x_exc_current iout0_exc,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 400 enum ad413x_exc_current iout1_exc,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 401 enum ad413x_preset_nb reg_nb)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 402 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 403 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 404
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 405 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 406 AD413X_REG_CONFIG(reg_nb),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 407 AD413X_I_OUT0_N(iout0_exc) | AD413X_I_OUT1_N(iout1_exc),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 408 AD413X_I_OUT_MSK);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 409 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 410 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 411
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 412 dev->preset[reg_nb].iout0_exc_current = iout0_exc;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 413 dev->preset[reg_nb].iout1_exc_current = iout1_exc;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 414
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 415 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 416 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 417
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 418 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 419 * Select preset for adc channel.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 420 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 421 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 422 * @param ch_nb - The channel number.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 423 * @param preset_nb - The preset number.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 424 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 425 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 426 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 427 int32_t ad413x_set_ch_preset(struct ad413x_dev *dev, uint8_t ch_nb,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 428 enum ad413x_preset_nb preset_nb)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 429 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 430 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 431
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 432 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 433 AD413X_REG_CHN(ch_nb),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 434 AD413X_SETUP_M(preset_nb),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 435 AD413X_SETUP_M(0xF));
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 436 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 437 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 438
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 439 dev->ch[ch_nb].preset = preset_nb;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 440
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 441 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 442 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 443
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 444 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 445 * Select the excitation source pins.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 446 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 447 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 448 * @param ch_nb - The channel number.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 449 * @param iout0_exc_inp - IOUT0 excitation input pin.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 450 * @param iout1_exc_inp - IOUT1 excitation input pin.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 451 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 452 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 453 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 454 int32_t ad413x_ch_exc_input(struct ad413x_dev *dev, uint8_t ch_nb,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 455 enum ad413x_input iout0_exc_inp,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 456 enum ad413x_input iout1_exc_inp)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 457 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 458 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 459
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 460 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 461 AD413X_REG_CHN(ch_nb),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 462 AD413X_I_OUT0_CH_M(iout0_exc_inp) |
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 463 AD413X_I_OUT1_CH_M(iout1_exc_inp),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 464 AD413X_I_OUT_CH_MSK);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 465 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 466 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 467
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 468 dev->ch[ch_nb].iout0_exc_input = iout0_exc_inp;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 469 dev->ch[ch_nb].iout1_exc_input = iout1_exc_inp;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 470
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 471 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 472 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 473
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 474 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 475 * Enable/disable channel.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 476 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 477 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 478 * @param ch_nb - The channel number.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 479 * @param enable - Channel status.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 480 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 481 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 482 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 483 int32_t ad413x_ch_en(struct ad413x_dev *dev, uint8_t ch_nb, uint8_t enable)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 484 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 485 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 486
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 487 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 488 AD413X_REG_CHN(ch_nb),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 489 enable ? AD413X_ENABLE_M : 0x0U,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 490 AD413X_ENABLE_M);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 491 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 492 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 493
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 494 dev->ch[ch_nb].enable = enable;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 495
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 496 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 497 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 498
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 499 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 500 * Enable/disable Power-Down Switch (PDSW).
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 501 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 502 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 503 * @param ch_nb - The channel number.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 504 * @param pdsw_en - PDSW status.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 505 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 506 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 507 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 508 int32_t ad413x_pdsw_en(struct ad413x_dev *dev, uint8_t ch_nb, bool pdsw_en)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 509 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 510 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 511
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 512 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 513 AD413X_REG_CHN(ch_nb),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 514 pdsw_en ? AD413X_PDSW_M : 0x0U,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 515 AD413X_PDSW_M);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 516 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 517 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 518
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 519 dev->ch[ch_nb].pdsw_en = pdsw_en;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 520
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 521 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 522 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 523
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 524 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 525 * Enable/disable bipolar data coding.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 526 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 527 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 528 * @param enable - 1 - Bipolar
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 529 * 0 - Unipolar
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 530 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 531 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 532 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 533 int32_t ad413x_adc_bipolar(struct ad413x_dev *dev, uint8_t enable)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 534 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 535 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 536
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 537 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 538 AD413X_REG_ADC_CTRL,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 539 enable ? AD413X_ADC_BIPOLAR : 0x0U,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 540 AD413X_ADC_BIPOLAR);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 541 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 542 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 543
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 544 dev->bipolar = enable;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 545
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 546 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 547 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 548
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 549 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 550 * Set output VBIAS on analog inputs.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 551 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 552 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 553 * @param v_bias_val - V_BIAS control register value
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 554 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 555 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 556 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 557 int32_t ad413x_set_v_bias(struct ad413x_dev *dev, uint16_t v_bias_val)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 558 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 559 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 560
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 561 ret = ad413x_reg_write(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 562 AD413X_REG_VBIAS_CTRL,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 563 v_bias_val);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 564 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 565 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 566
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 567 dev->v_bias = v_bias_val;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 568
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 569 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 570 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 571
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 572 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 573 * Set standby control flags.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 574 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 575 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 576 * @param standby_ctrl - Standby control value
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 577 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 578 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 579 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 580 int32_t ad413x_set_standby_ctrl(struct ad413x_dev *dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 581 struct ad413x_standby_ctrl standby_ctrl)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 582 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 583 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 584 uint32_t reg_val;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 585
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 586 reg_val = no_os_field_prep(AD413X_STBY_INTREF_EN,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 587 standby_ctrl.standby_int_ref_en);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 588 reg_val |= no_os_field_prep(AD413X_STBY_REFHOL_EN,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 589 standby_ctrl.standby_ref_holder_en);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 590 reg_val |= no_os_field_prep(AD413X_STBY_IEXC_EN, standby_ctrl.standby_iexc_en);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 591 reg_val |= no_os_field_prep(AD413X_STBY_VBIAS_EN,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 592 standby_ctrl.standby_vbias_en);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 593 reg_val |= no_os_field_prep(AD413X_STBY_BURNOUT_EN,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 594 standby_ctrl.standby_burnout_en);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 595 reg_val |= no_os_field_prep(AD413X_STBY_PDSW_EN, standby_ctrl.standby_pdsw_en);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 596 reg_val |= no_os_field_prep(AD413X_STBY_GPO_EN, standby_ctrl.standby_gpio_en);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 597 reg_val |= no_os_field_prep(AD413X_STBY_DIAGNOSTICS_EN,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 598 standby_ctrl.standby_diagn_en);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 599 reg_val |= no_os_field_prep(AD413X_STBY_OUT_EN, standby_ctrl.standby_output_en);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 600
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 601 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 602 AD413X_REG_MISC,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 603 reg_val,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 604 AD413X_STBY_CTRL_MSK);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 605 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 606 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 607
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 608 dev->standby_ctrl = standby_ctrl;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 609
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 610 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 611 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 612
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 613 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 614 * Set ADC master clock mode.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 615 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 616 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 617 * @param clk - The clock mode.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 618 * Accepted values: AD413X_INT_76_8_KHZ_OUT_OFF
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 619 * AD413X_INT_76_8_KHZ_OUT_ON
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 620 * AD413X_EXT_76_8KHZ
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 621 * AD413X_EXT_153_6_KHZ_DIV_2
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 622 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 623 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 624 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 625 int32_t ad413x_set_mclk(struct ad413x_dev *dev, enum ad413x_mclk_sel clk)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 626 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 627 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 628 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 629 AD413X_REG_ADC_CTRL,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 630 AD413X_ADC_CNTRL_MCLK(clk),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 631 AD413X_ADC_CNTRL_MCLK(0xF));
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 632 if(ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 633 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 634
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 635 dev->mclk = clk;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 636
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 637 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 638 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 639
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 640 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 641 * Do a SPI software reset.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 642 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 643 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 644 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 645 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 646 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 647 int32_t ad413x_do_soft_reset(struct ad413x_dev *dev)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 648 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 649 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 650 uint8_t buf [ 8 ] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 651
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 652 /* The AD413X can be reset by writing a series of 64 consecutive 1s
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 653 * to the DIN input */
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 654 ret = no_os_spi_write_and_read(dev->spi_dev, buf, 8);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 655 if(ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 656 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 657
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 658 no_os_mdelay(5); // TBD
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 659
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 660 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 661 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 662
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 663 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 664 * SPI internal register write to device.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 665 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 666 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 667 * @param reg_addr - The register address.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 668 * @param reg_data - The register data.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 669 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 670 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 671 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 672 int32_t ad413x_reg_write(struct ad413x_dev *dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 673 uint32_t reg_addr,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 674 uint32_t reg_data)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 675 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 676 uint8_t buf[5];
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 677
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 678 uint8_t data_size = AD413X_TRANSF_LEN(reg_addr);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 679
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 680 buf[0] = AD413X_CMD_WR_COM_REG(reg_addr);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 681
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 682 switch(data_size) {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 683 case 1:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 684 buf[1] = (reg_data & 0xFF);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 685 break;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 686
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 687 case 2:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 688 buf[1] = (reg_data & 0xFF00) >> 8;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 689 buf[2] = (reg_data & 0xFF);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 690 break;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 691
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 692 case 3:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 693 buf[1] = (reg_data & 0xFF0000) >> 16;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 694 buf[2] = (reg_data & 0xFF00) >> 8;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 695 buf[3] = (reg_data & 0xFF);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 696 break;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 697
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 698 default:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 699 return -EINVAL;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 700 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 701
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 702 if (dev->spi_crc_en)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 703 buf[data_size] = no_os_crc8(ad413x_crc8, buf, ++data_size, 0);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 704
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 705 return no_os_spi_write_and_read(dev->spi_dev, buf, data_size + 1);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 706 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 707
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 708 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 709 * SPI internal register read from device.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 710 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 711 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 712 * @param reg_addr - The register address.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 713 * @param reg_data - The register data.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 714 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 715 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 716 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 717 int32_t ad413x_reg_read(struct ad413x_dev *dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 718 uint32_t reg_addr,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 719 uint32_t *reg_data)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 720 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 721 uint8_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 722 uint8_t buf[] = {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA};
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 723 uint32_t data;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 724 uint8_t crc;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 725
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 726 uint8_t data_size = AD413X_TRANSF_LEN(reg_addr);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 727
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 728 buf[0] = AD413X_CMD_RD_COM_REG(reg_addr);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 729
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 730 if ((reg_addr == AD413X_REG_DATA) && (dev->data_stat))
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 731 data_size++;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 732
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 733 if (dev->spi_crc_en)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 734 data_size++;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 735
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 736 ret = no_os_spi_write_and_read(dev->spi_dev, buf, data_size + 1);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 737 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 738 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 739
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 740 if (dev->spi_crc_en) {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 741 buf[0] = AD413X_CMD_RD_COM_REG(reg_addr);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 742 crc = no_os_crc8(ad413x_crc8, buf, data_size, 0);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 743 if (buf[data_size] != crc)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 744 return -EBADMSG;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 745 data_size--;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 746 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 747
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 748 switch (data_size) {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 749 case 1:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 750 data = buf[1];
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 751 break;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 752
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 753 case 2:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 754 data = (buf[1] << 8) | buf[2];
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 755 break;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 756
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 757 case 3:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 758 data = (buf[1] << 16) | (buf[2] << 8) | buf[3];
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 759 break;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 760
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 761 case 4:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 762 data = (buf[1] << 24) | (buf[2] << 16) | (buf[3] << 8) | buf[4];
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 763 break;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 764
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 765 default:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 766 return -EINVAL;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 767 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 768
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 769 *reg_data = data;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 770
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 771 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 772 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 773
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 774 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 775 * Single conversion of each adc active channel.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 776 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 777 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 778 * @param buffer - Buffer to store read data. Buffer size needs to be at
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 779 * least equal to the number of active channels. Results will
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 780 * be stored in consecutive order of the active channels.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 781 * @param ch_nb - Number of active channels.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 782 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 783 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 784 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 785 int32_t ad413x_single_conv(struct ad413x_dev *dev, uint32_t *buffer,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 786 uint8_t ch_nb)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 787 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 788 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 789
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 790 struct ad413x_callback_ctx ctx = {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 791 .dev = dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 792 .buffer = buffer,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 793 .buffer_size = ch_nb
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 794 };
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 795
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 796 struct no_os_callback_desc irq_callback = {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 797 .callback = &irq_adc_read,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 798 .ctx = &ctx
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 799 };
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 800
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 801 ret = no_os_irq_trigger_level_set(dev->irq_desc, dev->rdy_pin,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 802 NO_OS_IRQ_EDGE_FALLING);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 803 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 804 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 805
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 806 ret = no_os_irq_register_callback(dev->irq_desc, dev->rdy_pin, &irq_callback);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 807 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 808 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 809
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 810 ret = no_os_irq_enable(dev->irq_desc, dev->rdy_pin);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 811 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 812 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 813
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 814 ret = ad413x_set_adc_mode(dev, AD413X_SINGLE_CONV_MODE);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 815 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 816 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 817
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 818 while((ctx.buffer_size != 0U) && --timeout) ;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 819
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 820 if (!timeout)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 821 pr_err("Timeout error (%s)\n", __func__);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 822
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 823 ret = no_os_irq_disable(dev->irq_desc, dev->rdy_pin);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 824 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 825 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 826
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 827 return no_os_irq_unregister_callback(dev->irq_desc, dev->rdy_pin,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 828 &irq_callback);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 829 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 830
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 831 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 832 * Continuous conversion of each adc active channel.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 833 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 834 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 835 * @param buffer - Buffer to store read data. Buffer size needs to be at
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 836 * least equal to the number of active channels * samples number.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 837 * Results will be stored in consecutive order of the active
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 838 * channels.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 839 * @param ch_nb - Number of active channels.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 840 * @param sample_nb - Samples number.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 841 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 842 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 843 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 844 int32_t ad413x_continuous_conv(struct ad413x_dev *dev, uint32_t *buffer,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 845 uint8_t ch_nb, uint32_t sample_nb)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 846 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 847 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 848
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 849 struct ad413x_callback_ctx ctx = {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 850 .dev = dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 851 .buffer = buffer,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 852 .buffer_size = ch_nb * sample_nb
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 853 };
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 854
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 855 struct no_os_callback_desc irq_callback = {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 856 .callback = &irq_adc_read,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 857 .ctx = &ctx
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 858 };
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 859
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 860 ret = no_os_irq_trigger_level_set(dev->irq_desc, dev->rdy_pin,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 861 NO_OS_IRQ_EDGE_FALLING);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 862 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 863 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 864
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 865 ret = no_os_irq_register_callback(dev->irq_desc, dev->rdy_pin, &irq_callback);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 866 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 867 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 868
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 869 ret = no_os_irq_enable(dev->irq_desc, dev->rdy_pin);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 870 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 871 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 872
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 873 ret = ad413x_set_adc_mode(dev, AD413X_CONTINOUS_CONV_MODE);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 874 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 875 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 876
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 877 while((ctx.buffer_size != 0U) && --timeout) ;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 878
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 879 if (!timeout)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 880 pr_err("Timeout error (%s)\n", __func__);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 881
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 882 ret = ad413x_set_adc_mode(dev, AD413X_STANDBY_MODE);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 883 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 884 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 885
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 886 return no_os_irq_unregister_callback(dev->irq_desc, dev->rdy_pin,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 887 &irq_callback);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 888 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 889
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 890 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 891 * Store adc channel presets.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 892 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 893 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 894 * @param preset - The structure to be saved as preset.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 895 * @param preset_nb - Preset's number.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 896 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 897 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 898 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 899 int32_t ad413x_preset_store(struct ad413x_dev *dev, struct ad413x_preset preset,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 900 enum ad413x_preset_nb preset_nb)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 901 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 902 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 903
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 904 ret = ad413x_set_gain(dev, preset.gain, preset_nb);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 905 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 906 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 907
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 908 ret = ad413x_set_ref(dev, preset.ref_sel, preset_nb);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 909 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 910 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 911
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 912 ret = ad413x_set_ref_buf(dev, preset.ref_buf, preset_nb);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 913 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 914 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 915
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 916 ret = ad413x_set_settle_time(dev, preset.s_time, preset_nb);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 917 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 918 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 919
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 920 ret = ad413x_set_exc_current(dev, preset.iout0_exc_current,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 921 preset.iout1_exc_current, preset_nb);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 922 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 923 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 924
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 925 return ad413x_set_filter(dev, preset.filter, preset_nb);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 926 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 927
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 928 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 929 * Initialize the device.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 930 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 931 * @param device - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 932 * @param init_param - The structure that contains the device initial
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 933 * parameters.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 934 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 935 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 936 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 937 int32_t ad413x_init(struct ad413x_dev **device,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 938 struct ad413x_init_param init_param)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 939 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 940 struct ad413x_dev *dev;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 941 uint32_t reg_data;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 942 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 943 int32_t i;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 944
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 945 no_os_crc8_populate_msb(ad413x_crc8, AD413X_CRC8_POLY);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 946
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 947 dev = (struct ad413x_dev *)malloc(sizeof(*dev));
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 948 if (!dev)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 949 return -1;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 950
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 951 dev->chip_id = init_param.chip_id;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 952 dev->irq_desc = init_param.irq_desc;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 953 dev->rdy_pin = init_param.rdy_pin;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 954 dev->spi_crc_en = 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 955
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 956 /* SPI */
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 957 ret = no_os_spi_init(&dev->spi_dev, init_param.spi_init);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 958 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 959 goto err_dev;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 960
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 961 /* Device Settings */
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 962 ret = ad413x_do_soft_reset(dev);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 963 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 964 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 965
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 966 /* Reset POR flag */
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 967 ret = ad413x_reg_read(dev, AD413X_REG_STATUS, &reg_data);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 968 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 969 return -1;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 970
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 971 /* Change SPI to 4 wire*/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 972 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 973 AD413X_REG_ADC_CTRL,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 974 AD413X_ADC_CSB_EN,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 975 AD413X_ADC_CSB_EN);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 976 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 977 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 978
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 979 /* TBD - chip ID is 0x00 for now */
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 980 ret = ad413x_reg_read(dev, AD413X_REG_ID, &reg_data);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 981 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 982 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 983
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 984 switch(dev->chip_id) {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 985 case AD4130_8:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 986 if(reg_data != AD4130_8) {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 987 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 988 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 989 break;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 990 default:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 991 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 992 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 993
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 994 ret = ad413x_set_adc_mode(dev, AD413X_STANDBY_MODE);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 995 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 996 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 997
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 998 if (init_param.spi_crc_en) {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 999 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1000 AD413X_REG_ERROR_EN,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1001 AD413X_SPI_CRC_ERR_EN,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1002 AD413X_SPI_CRC_ERR_EN);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1003 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1004 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1005 dev->spi_crc_en = init_param.spi_crc_en;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1006 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1007
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1008 /* Preset configured and saved in dev */
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1009 for (i = 0; i < 8; i++) {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1010 ret = ad413x_preset_store(dev, init_param.preset[i], i);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1011 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1012 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1013 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1014
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1015 /* Channel setup */
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1016 for (i = 0; i < 16; i++) {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1017 ret = ad413x_set_ch_preset(dev, i, init_param.ch[i].preset);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1018 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1019 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1020
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1021 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1022 AD413X_REG_CHN(i),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1023 AD413X_AINP_M(init_param.ch[i].ain_p),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1024 AD413X_AINP_M(0xFF));
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1025 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1026 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1027 dev->ch[i].ain_p = init_param.ch[i].ain_p;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1028
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1029 ret = ad413x_reg_write_msk(dev,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1030 AD413X_REG_CHN(i),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1031 AD413X_AINM_M(init_param.ch[i].ain_m),
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1032 AD413X_AINM_M(0xFF));
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1033 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1034 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1035 dev->ch[i].ain_m = init_param.ch[i].ain_m;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1036
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1037 ret = ad413x_ch_exc_input(dev, i, init_param.ch[i].iout0_exc_input,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1038 init_param.ch[i].iout1_exc_input);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1039 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1040 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1041
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1042 ret = ad413x_pdsw_en(dev, i, init_param.ch[i].pdsw_en);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1043 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1044 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1045
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1046 ret = ad413x_ch_en(dev, i, init_param.ch[i].enable);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1047 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1048 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1049 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1050
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1051 ret = ad413x_set_int_ref(dev, init_param.int_ref);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1052 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1053 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1054
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1055 ret = ad413x_adc_bipolar(dev, init_param.bipolar);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1056 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1057 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1058
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1059 ret = ad413x_set_v_bias(dev, init_param.v_bias);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1060 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1061 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1062
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1063 ret = ad413x_set_standby_ctrl(dev, init_param.standby_ctrl);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1064 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1065 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1066
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1067 ret = ad413x_set_mclk(dev, init_param.mclk);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1068 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1069 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1070
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1071 ret = ad413x_data_stat_en(dev, init_param.data_stat);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1072 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1073 goto err_spi;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1074
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1075 *device = dev;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1076
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1077 pr_info("AD413X successfully initialized\n");
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1078 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1079
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1080 err_spi:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1081 no_os_spi_remove(dev->spi_dev);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1082 err_dev:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1083 free(dev);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1084 pr_err("AD413X initialization error (%d)\n", ret);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1085 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1086 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1087
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1088 /***************************************************************************//**
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1089 * @brief Free the resources allocated by ad413x_init().
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1090 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1091 * @param dev - The device structure.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1092 *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1093 * @return 0 in case of success, negative error code otherwise.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1094 *******************************************************************************/
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1095 int32_t ad413x_remove(struct ad413x_dev *dev)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1096 {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1097 int32_t ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1098
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1099 ret = no_os_spi_remove(dev->spi_dev);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1100 if (ret)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1101 return ret;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1102
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1103 free(dev);
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1104
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1105 return 0;
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1106 }