AD4130 Mbed IIO Firmware
Dependencies: tempsensors sdp_k1_sdram
app/ad413x.c@2:871d585d96ee, 2022-07-15 (annotated)
- 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?
User | Revision | Line number | New 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, ®_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, ®_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, ®_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 | } |