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:
parent
d34f56c175
commit
c6aafd7eb5
2 changed files with 22 additions and 1 deletions
|
@ -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, ®_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; \
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue