no-OS
Macros | Functions
ad74416h.c File Reference

Source file of AD74416H Driver. More...

#include "ad74416h.h"
#include "no_os_crc8.h"
#include "no_os_delay.h"
#include "no_os_error.h"
#include "no_os_util.h"
#include "no_os_alloc.h"
Include dependency graph for ad74416h.c:

Macros

#define AD74416H_CRC_POLYNOMIAL   0x7
 
#define AD74416H_DIN_DEBOUNCE_LEN   NO_OS_BIT(5)
 
#define AD77416H_DEV_ADDRESS_MSK   NO_OS_GENMASK(5, 4)
 

Functions

 NO_OS_DECLARE_CRC8_TABLE (_crc_table)
 
int ad74416h_dac_voltage_to_code (struct ad74416h_desc *desc, int32_t mvolts, uint16_t *code, uint32_t ch)
 Converts a millivolt value in the corresponding DAC 16 bit code. More...
 
int ad74416h_dac_current_to_code (struct ad74416h_desc *desc, uint32_t uamps, uint16_t *code)
 Convers a microamp value in the corresponding DAC 16 bit code. More...
 
int ad74416h_reg_read_raw (struct ad74416h_desc *desc, uint32_t addr, uint8_t *val)
 Read a raw communication frame. More...
 
int ad74416h_reg_write (struct ad74416h_desc *desc, uint32_t addr, uint16_t val)
 Write a register's value. More...
 
int ad74416h_reg_read (struct ad74416h_desc *desc, uint32_t addr, uint16_t *val)
 Read a register's value. More...
 
int ad74416h_reg_update (struct ad74416h_desc *desc, uint32_t addr, uint16_t mask, uint16_t val)
 Update a register's field. More...
 
int ad74416h_nb_active_channels (struct ad74416h_desc *desc, uint8_t *nb_channels)
 Get the number of active channels. More...
 
int ad74416h_get_raw_adc_result (struct ad74416h_desc *desc, uint32_t ch, uint32_t *val)
 Read the raw ADC raw conversion value. More...
 
int ad74416h_set_adc_channel_enable (struct ad74416h_desc *desc, uint32_t ch, bool status)
 Enable/disable a specific ADC channel. More...
 
int ad74416h_set_diag_channel_enable (struct ad74416h_desc *desc, uint32_t ch, bool status)
 Enable conversions on a diagnostic register. More...
 
int ad74416h_get_adc_range (struct ad74416h_desc *desc, uint32_t ch, uint16_t *val)
 Get the ADC measurement range for a specific channel. More...
 
int ad74416h_set_adc_range (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_adc_range val)
 Set the ADC measurement range for a specific channel. More...
 
int ad74416h_get_adc_rate (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_adc_rate *val)
 Get the ADC Conversion Rate for a specific channel. More...
 
int ad74416h_set_adc_rate (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_adc_rate val)
 Set the ADC Conversion Rate for a specific channel. More...
 
int ad74416h_get_adc_conv_mux (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_adc_conv_mux *val)
 Get the ADC Input Node for conversion. More...
 
int ad74416h_set_adc_conv_mux (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_adc_conv_mux val)
 Set the ADC Input Node for conversion. More...
 
int ad74416h_set_adc_conv_seq (struct ad74416h_desc *desc, enum ad74416h_conv_seq status)
 Start or stop ADC conversions. More...
 
int ad74416h_get_adc_single (struct ad74416h_desc *desc, uint32_t ch, uint16_t *val)
 Get a single ADC raw value for a specific channel, then power down the ADC. More...
 
int ad74416h_get_temp (struct ad74416h_desc *desc, uint32_t ch, uint16_t *temp)
 Read the die's temperature from the diagnostic register. More...
 
int ad74416h_set_channel_function (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_op_mode ch_func)
 Set the operation mode for a specific channel. More...
 
int ad74416h_set_channel_vout_range (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_vout_range vout_range)
 Set the voltage range for a specific channel. More...
 
int ad74416h_set_channel_i_limit (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_i_limit i_limit)
 Set the current limit for a specific DAC channel in vout mode. More...
 
int ad74416h_set_channel_dac_code (struct ad74416h_desc *desc, uint32_t ch, uint16_t dac_code)
 Set and load a code for the DAC on a specific channel. More...
 
int ad74416h_set_diag (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_diag_mode diag_code)
 Set which diagnostic value to be loaded in the DIAG_RESULT register. More...
 
int ad74416h_get_diag (struct ad74416h_desc *desc, uint32_t ch, uint16_t *diag_code)
 Get the diagnostic value for a specific channel. More...
 
int ad74416h_set_debounce_mode (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_debounce_mode mode)
 Set the debounce mode for the IOx inputs when the ADC is running in digital input mode. More...
 
int ad74416h_set_debounce_time (struct ad74416h_desc *desc, uint32_t ch, uint32_t time)
 Set the debounce settle time for the IOx inputs when the ADC is running in digital input mode. More...
 
int ad74416h_gpio_get (struct ad74416h_desc *desc, uint32_t ch, uint8_t *val)
 Get the GPO value for a specific channel. More...
 
int ad74416h_set_gpio_config (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_gpio_select config)
 Set the GPIO operation mode. More...
 
int ad74416h_set_threshold (struct ad74416h_desc *desc, uint32_t ch, uint32_t threshold)
 Set the threshold, for which a signal would be considered high, when the ADC is running in digital input mode. More...
 
int ad74416h_do_set (struct ad74416h_desc *desc, uint32_t ch, uint8_t val)
 Set the DO value of a channel. More...
 
int ad74416h_gpio_set (struct ad74416h_desc *desc, uint32_t ch, uint8_t val)
 Set the logic value of a GPO pin. More...
 
int ad74416h_get_live (struct ad74416h_desc *desc, union ad74416h_live_status *status)
 Read the live status bits. More...
 
int ad74416h_dac_slew_enable (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_slew_lin_step step, enum ad74416h_lin_rate rate)
 Configure and enable slew rate control for a DAC on a specific channel. More...
 
int ad74416h_dac_slew_disable (struct ad74416h_desc *desc, uint32_t ch)
 Disable the slew rate control. More...
 
int ad74416h_set_therm_rst (struct ad74416h_desc *desc, bool enable)
 Enable or disable the higher thermal reset. More...
 
int ad74416h_reset (struct ad74416h_desc *desc)
 Perform software or hardware reset and wait for device reset time. More...
 
int ad74416h_init (struct ad74416h_desc **desc, struct ad74416h_init_param *init_param)
 Initialize the device structure. More...
 
int ad74416h_remove (struct ad74416h_desc *desc)
 Free the device descriptor. More...
 

Detailed Description

Source file of AD74416H Driver.

Author
Antoniu Miclaus (anton.nosp@m.iu.m.nosp@m.iclau.nosp@m.s@an.nosp@m.alog..nosp@m.com)

Copyright 2023(c) Analog Devices, Inc.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. Neither the name of Analog Devices, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANALOG DEVICES, INC. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Macro Definition Documentation

◆ AD74416H_CRC_POLYNOMIAL

#define AD74416H_CRC_POLYNOMIAL   0x7

◆ AD74416H_DIN_DEBOUNCE_LEN

#define AD74416H_DIN_DEBOUNCE_LEN   NO_OS_BIT(5)

◆ AD77416H_DEV_ADDRESS_MSK

#define AD77416H_DEV_ADDRESS_MSK   NO_OS_GENMASK(5, 4)

Function Documentation

◆ ad74416h_dac_current_to_code()

int ad74416h_dac_current_to_code ( struct ad74416h_desc desc,
uint32_t  uamps,
uint16_t *  code 
)

Convers a microamp value in the corresponding DAC 16 bit code.

Parameters
desc- The device structure.
uamps- The microamps value
code- The resulting DAC code
Returns
0 in case of success, -EINVAL otherwise

◆ ad74416h_dac_slew_disable()

int ad74416h_dac_slew_disable ( struct ad74416h_desc desc,
uint32_t  ch 
)

Disable the slew rate control.

Parameters
desc- The device structure.
ch- The channel index.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_dac_slew_enable()

int ad74416h_dac_slew_enable ( struct ad74416h_desc desc,
uint32_t  ch,
enum ad74416h_slew_lin_step  step,
enum ad74416h_lin_rate  rate 
)

Configure and enable slew rate control for a DAC on a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
step- Number of codes per increment.
rate- Number of increments per second.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_dac_voltage_to_code()

int ad74416h_dac_voltage_to_code ( struct ad74416h_desc desc,
int32_t  mvolts,
uint16_t *  code,
uint32_t  ch 
)

Converts a millivolt value in the corresponding DAC 16 bit code.

Parameters
desc- The device structure.
mvolts- The millivolts value.
code- The resulting DAC code.
ch- The channel index.
Returns
0 in case of success, -EINVAL otherwise
Here is the caller graph for this function:

◆ ad74416h_do_set()

int ad74416h_do_set ( struct ad74416h_desc desc,
uint32_t  ch,
uint8_t  val 
)

Set the DO value of a channel.

Parameters
desc- The device structure
ch- The channel index
val- the output logic state. 0-low 1-high
Returns
0 in case of success, negative error code otherwise

◆ ad74416h_get_adc_conv_mux()

int ad74416h_get_adc_conv_mux ( struct ad74416h_desc desc,
uint32_t  ch,
enum ad74416h_adc_conv_mux val 
)

Get the ADC Input Node for conversion.

Parameters
desc- The device structure.
ch- The channel index.
val- The ADC input node setting.

◆ ad74416h_get_adc_range()

int ad74416h_get_adc_range ( struct ad74416h_desc desc,
uint32_t  ch,
uint16_t *  val 
)

Get the ADC measurement range for a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
val- The ADC range value.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_get_adc_rate()

int ad74416h_get_adc_rate ( struct ad74416h_desc desc,
uint32_t  ch,
enum ad74416h_adc_rate val 
)

Get the ADC Conversion Rate for a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
val- The ADC rejection setting.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad74416h_get_adc_single()

int ad74416h_get_adc_single ( struct ad74416h_desc desc,
uint32_t  ch,
uint16_t *  val 
)

Get a single ADC raw value for a specific channel, then power down the ADC.

Parameters
desc- The device structure.
ch- The channel index.
val- The ADC raw result.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_get_diag()

int ad74416h_get_diag ( struct ad74416h_desc desc,
uint32_t  ch,
uint16_t *  diag_code 
)

Get the diagnostic value for a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
diag_code- The diagnostic setting.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad74416h_get_live()

int ad74416h_get_live ( struct ad74416h_desc desc,
union ad74416h_live_status status 
)

Read the live status bits.

Parameters
desc- The device structure.
status- The register's value.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_get_raw_adc_result()

int ad74416h_get_raw_adc_result ( struct ad74416h_desc desc,
uint32_t  ch,
uint32_t *  val 
)

Read the raw ADC raw conversion value.

Parameters
desc- The device structure.
ch- The channel index.
val- The ADC raw conversion value.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_get_temp()

int ad74416h_get_temp ( struct ad74416h_desc desc,
uint32_t  ch,
uint16_t *  temp 
)

Read the die's temperature from the diagnostic register.

Parameters
desc- The device structure.
ch- The diagnostic channel on which the temperature reading is assigned and enabled.
temp- The measured temperature (in degrees Celsius).
Returns
0 in case of success, -EINVAL otherwise.

◆ ad74416h_gpio_get()

int ad74416h_gpio_get ( struct ad74416h_desc desc,
uint32_t  ch,
uint8_t *  val 
)

Get the GPO value for a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
val- The debounce time.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_gpio_set()

int ad74416h_gpio_set ( struct ad74416h_desc desc,
uint32_t  ch,
uint8_t  val 
)

Set the logic value of a GPO pin.

Parameters
desc- The device structure.
ch- The channel index.
val- The output logic state.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad74416h_init()

int ad74416h_init ( struct ad74416h_desc **  desc,
struct ad74416h_init_param init_param 
)

Initialize the device structure.

Parameters
desc- The device structure to be initialized.
init_param- Initialization parameter for the device descriptor.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad74416h_nb_active_channels()

int ad74416h_nb_active_channels ( struct ad74416h_desc desc,
uint8_t *  nb_channels 
)

Get the number of active channels.

Parameters
desc- The device structure.
nb_channels- The number of active channels
Returns
0 in case of success, negative error otherwise.
Here is the caller graph for this function:

◆ ad74416h_reg_read()

int ad74416h_reg_read ( struct ad74416h_desc desc,
uint32_t  addr,
uint16_t *  val 
)

Read a register's value.

Parameters
desc- The device structure.
addr- The register's address.
val- The register's read value.
Returns
0 in case of success, negative error otherwise
Here is the caller graph for this function:

◆ ad74416h_reg_read_raw()

int ad74416h_reg_read_raw ( struct ad74416h_desc desc,
uint32_t  addr,
uint8_t *  val 
)

Read a raw communication frame.

Parameters
desc- The device structure.
addr- The register's address.
val- A raw comm frame.
Returns
0 in case of success, negative error otherwise.

Reading a register on AD74416H requires writing the address to the READ_SELECT register first and then doing another spi read, which will contain the requested register value.

Here is the caller graph for this function:

◆ ad74416h_reg_update()

int ad74416h_reg_update ( struct ad74416h_desc desc,
uint32_t  addr,
uint16_t  mask,
uint16_t  val 
)

Update a register's field.

Parameters
desc- The device structure.
addr- The register's address.
val- The register's value.
mask- The mask for a specific register field.
Returns
0 in case of success, negative error otherwise.
Here is the caller graph for this function:

◆ ad74416h_reg_write()

int ad74416h_reg_write ( struct ad74416h_desc desc,
uint32_t  addr,
uint16_t  val 
)

Write a register's value.

Parameters
desc- The device structure.
addr- The register's address.
val- The register's value.
Returns
0 in case of success, negative error otherwise
Here is the caller graph for this function:

◆ ad74416h_remove()

int ad74416h_remove ( struct ad74416h_desc desc)

Free the device descriptor.

Parameters
desc- The device structure.
Returns
0 in case of success, -EINVAL otherwise.
Here is the caller graph for this function:

◆ ad74416h_reset()

int ad74416h_reset ( struct ad74416h_desc desc)

Perform software or hardware reset and wait for device reset time.

Parameters
desc- The device structure.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad74416h_set_adc_channel_enable()

int ad74416h_set_adc_channel_enable ( struct ad74416h_desc desc,
uint32_t  ch,
bool  status 
)

Enable/disable a specific ADC channel.

Parameters
desc- The device structure.
ch- The channel index.
status- Enabled or disabled status.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad74416h_set_adc_conv_mux()

int ad74416h_set_adc_conv_mux ( struct ad74416h_desc desc,
uint32_t  ch,
enum ad74416h_adc_conv_mux  val 
)

Set the ADC Input Node for conversion.

Parameters
desc- The device structure
ch- The channel index.
val- The ADC input node setting.

◆ ad74416h_set_adc_conv_seq()

int ad74416h_set_adc_conv_seq ( struct ad74416h_desc desc,
enum ad74416h_conv_seq  status 
)

Start or stop ADC conversions.

Parameters
desc- The device structure.
status- The ADC conversion sequence.
Returns
0 in case of success, negative error code otherwise.

If the ADC was powered down, wait for 100us before the ADC starts doing conversions.

Here is the caller graph for this function:

◆ ad74416h_set_adc_range()

int ad74416h_set_adc_range ( struct ad74416h_desc desc,
uint32_t  ch,
enum ad74416h_adc_range  val 
)

Set the ADC measurement range for a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
val- The ADC range value.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_adc_rate()

int ad74416h_set_adc_rate ( struct ad74416h_desc desc,
uint32_t  ch,
enum ad74416h_adc_rate  val 
)

Set the ADC Conversion Rate for a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
val- The ADC rejection setting.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_channel_dac_code()

int ad74416h_set_channel_dac_code ( struct ad74416h_desc desc,
uint32_t  ch,
uint16_t  dac_code 
)

Set and load a code for the DAC on a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
dac_code- The code for the DAC.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_channel_function()

int ad74416h_set_channel_function ( struct ad74416h_desc desc,
uint32_t  ch,
enum ad74416h_op_mode  ch_func 
)

Set the operation mode for a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
ch_func- The operation mode.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_channel_i_limit()

int ad74416h_set_channel_i_limit ( struct ad74416h_desc desc,
uint32_t  ch,
enum ad74416h_i_limit  i_limit 
)

Set the current limit for a specific DAC channel in vout mode.

Parameters
desc- The devices structure
ch- The channel index
i_limit- The current limit
Returns
0 in case of success, negative error otherwise

◆ ad74416h_set_channel_vout_range()

int ad74416h_set_channel_vout_range ( struct ad74416h_desc desc,
uint32_t  ch,
enum ad74416h_vout_range  vout_range 
)

Set the voltage range for a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
vout_range- The voltage range.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_debounce_mode()

int ad74416h_set_debounce_mode ( struct ad74416h_desc desc,
uint32_t  ch,
enum ad74416h_debounce_mode  mode 
)

Set the debounce mode for the IOx inputs when the ADC is running in digital input mode.

Parameters
desc- The device structure.
ch- The channel index.
mode- The debounce mode.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_debounce_time()

int ad74416h_set_debounce_time ( struct ad74416h_desc desc,
uint32_t  ch,
uint32_t  time 
)

Set the debounce settle time for the IOx inputs when the ADC is running in digital input mode.

Parameters
desc- The device structure.
ch- The channel index.
time- The debounce time.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_diag()

int ad74416h_set_diag ( struct ad74416h_desc desc,
uint32_t  ch,
enum ad74416h_diag_mode  diag_code 
)

Set which diagnostic value to be loaded in the DIAG_RESULT register.

Parameters
desc- The device structure.
ch- The channel index.
diag_code- The diagnostic setting.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_diag_channel_enable()

int ad74416h_set_diag_channel_enable ( struct ad74416h_desc desc,
uint32_t  ch,
bool  status 
)

Enable conversions on a diagnostic register.

Parameters
desc- The device structure.
ch- Diagnostic channel index.
status- Enabled or disabled status.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_gpio_config()

int ad74416h_set_gpio_config ( struct ad74416h_desc desc,
uint32_t  ch,
enum ad74416h_gpio_select  config 
)

Set the GPIO operation mode.

Parameters
desc- The device structure.
ch- The channel index.
config- The configuration setting.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad74416h_set_therm_rst()

int ad74416h_set_therm_rst ( struct ad74416h_desc desc,
bool  enable 
)

Enable or disable the higher thermal reset.

Parameters
desc- The device structure.
enable- The thermal reset status. false: reset at 110 deg. Celsius. true: reset at 140 deg. Celsius.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_threshold()

int ad74416h_set_threshold ( struct ad74416h_desc desc,
uint32_t  ch,
uint32_t  threshold 
)

Set the threshold, for which a signal would be considered high, when the ADC is running in digital input mode.

Parameters
desc- The device structure.
ch- The channel index.
threshold- The threshold value (in millivolts).
Returns
0 in case of success, negative error code otherwise.

Set a fixed range (0 - 16 V) for the threshold, so it would not depend on Vadd.

◆ NO_OS_DECLARE_CRC8_TABLE()

NO_OS_DECLARE_CRC8_TABLE ( _crc_table  )