drivers: dac: add checks for internal channel config

Return -ENOTSUP if these flags are specified but not supported.

Signed-off-by: Corey Wharton <xodus7@cwharton.com>
This commit is contained in:
Corey Wharton 2024-09-09 10:47:05 -07:00 committed by Anas Nashif
commit d80174fadf
17 changed files with 84 additions and 3 deletions

View file

@ -43,6 +43,11 @@ static int dac_ad559x_channel_setup(const struct device *dev,
return -EINVAL;
}
if (channel_cfg->internal) {
LOG_ERR("Internal channels not supported");
return -ENOTSUP;
}
data->dac_conf |= BIT(channel_cfg->channel_id);
return mfd_ad559x_write_reg(config->mfd_dev, AD559X_REG_LDAC_EN, data->dac_conf);

View file

@ -77,6 +77,11 @@ static int ad569x_channel_setup(const struct device *dev, const struct dac_chann
return -EINVAL;
}
if (channel_cfg->internal) {
LOG_ERR("Internal channels not supported");
return -ENOTSUP;
}
return 0;
}

View file

@ -94,6 +94,11 @@ static int ad56xx_channel_setup(const struct device *dev, const struct dac_chann
return -EINVAL;
}
if (channel_cfg->internal) {
LOG_ERR("Internal channels not supported");
return -ENOTSUP;
}
return 0;
}

View file

@ -106,6 +106,11 @@ static int dacx0501_channel_setup(const struct device *dev,
return -ENOTSUP;
}
if (channel_cfg->internal) {
LOG_ERR("Internal channels not supported");
return -ENOTSUP;
}
return 0;
}

View file

@ -163,6 +163,11 @@ static int dacx0508_channel_setup(const struct device *dev,
return -ENOTSUP;
}
if (channel_cfg->internal) {
LOG_ERR("Internal channels not supported");
return -ENOTSUP;
}
data->configured |= BIT(channel_cfg->channel_id);
return 0;

View file

@ -102,6 +102,11 @@ static int dacx3608_channel_setup(const struct device *dev,
return -ENOTSUP;
}
if (channel_cfg->internal) {
LOG_ERR("Internal channels not supported");
return -ENOTSUP;
}
if (data->configured & BIT(channel_cfg->channel_id)) {
LOG_DBG("Channel %d already configured", channel_cfg->channel_id);
return 0;

View file

@ -44,6 +44,11 @@ static int dac_esp32_channel_setup(const struct device *dev,
return -EINVAL;
}
if (channel_cfg->internal) {
LOG_ERR("Internal channels not supported");
return -ENOTSUP;
}
dac_output_enable(channel_cfg->channel_id);
return 0;

View file

@ -115,6 +115,11 @@ static int dac_gd32_channel_setup(const struct device *dev,
return -ENOTSUP;
}
if (channel_cfg->internal) {
LOG_ERR("Internal channels not supported");
return -ENOTSUP;
}
data->resolutions[dacx] = channel_cfg->resolution;
dac_gd32_disable(dacx);

View file

@ -66,6 +66,11 @@ static int ltc166x_channel_setup(const struct device *dev,
return -ENOTSUP;
}
if (channel_cfg->internal) {
LOG_ERR("Internal channels not supported");
return -ENOTSUP;
}
return 0;
}

View file

@ -76,6 +76,10 @@ static int mcp4725_channel_setup(const struct device *dev,
return -ENOTSUP;
}
if (channel_cfg->internal) {
return -ENOTSUP;
}
return 0;
}

View file

@ -45,6 +45,10 @@ static int mcp4728_channel_setup(const struct device *dev,
return -ENOTSUP;
}
if (channel_cfg->internal) {
return -ENOTSUP;
}
return 0;
}

View file

@ -41,6 +41,11 @@ static int mcux_dac_channel_setup(const struct device *dev,
return -ENOTSUP;
}
if (channel_cfg->internal) {
LOG_ERR("Internal channels not supported");
return -ENOTSUP;
}
DAC_GetDefaultConfig(&dac_config);
dac_config.enableLowPowerMode = config->low_power;
dac_config.referenceVoltageSource = config->reference;

View file

@ -44,6 +44,11 @@ static int mcux_dac32_channel_setup(const struct device *dev,
return -ENOTSUP;
}
if (channel_cfg->internal) {
LOG_ERR("Internal channels not supported");
return -ENOTSUP;
}
DAC32_GetDefaultConfig(&dac32_config);
dac32_config.enableLowPowerMode = config->low_power;
dac32_config.referenceVoltageSource = config->reference;

View file

@ -38,20 +38,25 @@ static int nxp_gau_dac_channel_setup(const struct device *dev,
{
const struct nxp_gau_dac_config *config = dev->config;
dac_channel_config_t dac_channel_config = {0};
bool use_internal = true;
if (channel_cfg->resolution != 10) {
LOG_ERR("DAC only support 10 bit resolution");
return -EINVAL;
}
if (channel_cfg->buffered) {
if (channel_cfg->internal && channel_cfg->buffered) {
LOG_ERR("DAC output can not be buffered and internal");
return -EINVAL;
} else if (channel_cfg->buffered) {
/* External and internal output are mutually exclusive */
LOG_WRN("Note: buffering DAC output to pad disconnects internal output");
use_internal = false;
}
dac_channel_config.waveType = kDAC_WaveNormal;
dac_channel_config.outMode = channel_cfg->buffered ?
kDAC_ChannelOutputPAD : kDAC_ChannelOutputInternal;
dac_channel_config.outMode =
use_internal ? kDAC_ChannelOutputInternal : kDAC_ChannelOutputPAD;
dac_channel_config.timingMode = kDAC_NonTimingCorrelated;
dac_channel_config.enableTrigger = false;
dac_channel_config.enableDMA = false;

View file

@ -41,6 +41,11 @@ static int mcux_lpdac_channel_setup(const struct device *dev,
return -ENOTSUP;
}
if (channel_cfg->internal) {
LOG_ERR("Internal channels not supported");
return -ENOTSUP;
}
DAC_GetDefaultConfig(&dac_config);
dac_config.referenceVoltageSource = config->ref_voltage;
#if defined(FSL_FEATURE_LPDAC_HAS_GCR_BUF_SPD_CTRL) && FSL_FEATURE_LPDAC_HAS_GCR_BUF_SPD_CTRL

View file

@ -85,6 +85,10 @@ static int dac_sam_channel_setup(const struct device *dev,
return -ENOTSUP;
}
if (channel_cfg->internal) {
return -ENOTSUP;
}
/* Enable Channel */
dac->DACC_CHER = DACC_CHER_CH0 << channel_cfg->channel_id;

View file

@ -63,6 +63,10 @@ static int dac_sam0_channel_setup(const struct device *dev,
return -ENOTSUP;
}
if (channel_cfg->internal) {
return -ENOSYS;
}
return 0;
}