drivers: dac: ad559x: implement double range option

Optionally write to ad559x register bit which increases DAC output range
from 0V to 2 x Vref.

The functionality has been tested on AD5593r.
The voltage at 4095 has been measured to 5.01 volts.

Signed-off-by: Jeppe Odgaard <jeppe.odgaard@prevas.dk>
This commit is contained in:
Jeppe Odgaard 2024-08-09 15:30:52 +02:00 committed by Benjamin Cabé
commit c6aafd7eb5
2 changed files with 22 additions and 1 deletions

View file

@ -21,6 +21,7 @@ LOG_MODULE_REGISTER(dac_ad559x, CONFIG_DAC_LOG_LEVEL);
struct dac_ad559x_config {
const struct device *mfd_dev;
bool double_output_range;
};
struct dac_ad559x_data {
@ -88,11 +89,28 @@ static int dac_ad559x_init(const struct device *dev)
{
const struct dac_ad559x_config *config = dev->config;
int ret;
uint16_t reg_val;
if (!device_is_ready(config->mfd_dev)) {
return -ENODEV;
}
ret = mfd_ad559x_read_reg(config->mfd_dev, AD559X_REG_GEN_CTRL, 0, &reg_val);
if (ret < 0) {
return ret;
}
if (config->double_output_range) {
reg_val |= AD559X_DAC_RANGE;
} else {
reg_val &= ~AD559X_DAC_RANGE;
}
ret = mfd_ad559x_write_reg(config->mfd_dev, AD559X_REG_GEN_CTRL, reg_val);
if (ret < 0) {
return ret;
}
ret = mfd_ad559x_write_reg(config->mfd_dev, AD559X_REG_PD_REF_CTRL, AD559X_EN_REF);
if (ret < 0) {
return ret;
@ -104,6 +122,7 @@ static int dac_ad559x_init(const struct device *dev)
#define DAC_AD559X_DEFINE(inst) \
static const struct dac_ad559x_config dac_ad559x_config##inst = { \
.mfd_dev = DEVICE_DT_GET(DT_INST_PARENT(inst)), \
.double_output_range = DT_INST_PROP(inst, double_output_range), \
}; \
\
struct dac_ad559x_data dac_ad559x_data##inst; \

View file

@ -13,6 +13,7 @@ extern "C" {
#include <zephyr/device.h>
#define AD559X_REG_SEQ_ADC 0x02U
#define AD559X_REG_GEN_CTRL 0x03U
#define AD559X_REG_ADC_CONFIG 0x04U
#define AD559X_REG_LDAC_EN 0x05U
#define AD559X_REG_GPIO_PULLDOWN 0x06U
@ -23,6 +24,7 @@ extern "C" {
#define AD559X_REG_PD_REF_CTRL 0x0BU
#define AD559X_REG_IO_TS_CONFIG 0x0DU
#define AD559X_DAC_RANGE BIT(4)
#define AD559X_EN_REF BIT(9)
#define AD559X_PIN_MAX 8U