Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make output buffer for STM32 DAC configurable #57730

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions doc/releases/release-notes-3.4.rst
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,12 @@ Changes in this release
registration function now returns a value which is 0 for success or a
negative error code if an error occurred.

* Added a new flag :c:struct:`dac_channel_cfg` ``buffered`` for DAC channels in
:c:struct:`dac_channel_cfg` to allow the configuration of the output buffer.
The actual interpretation of this depends on the hardware and is so far only
implemented for the STM32 DAC driver. Implicitly for this driver this changes
the default from being buffered to unbuffered.

Removed APIs in this release
============================

Expand Down
10 changes: 8 additions & 2 deletions drivers/dac/dac_stm32.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ static int dac_stm32_channel_setup(const struct device *dev,
{
struct dac_stm32_data *data = dev->data;
const struct dac_stm32_cfg *cfg = dev->config;
uint32_t output_buffer;

if ((channel_cfg->channel_id - STM32_FIRST_CHANNEL >=
data->channel_count) ||
Expand All @@ -100,10 +101,15 @@ static int dac_stm32_channel_setup(const struct device *dev,
return -ENOTSUP;
}

/* enable output buffer by default */
if (channel_cfg->buffered) {
output_buffer = LL_DAC_OUTPUT_BUFFER_ENABLE;
} else {
output_buffer = LL_DAC_OUTPUT_BUFFER_DISABLE;
}

LL_DAC_SetOutputBuffer(cfg->base,
table_channels[channel_cfg->channel_id - STM32_FIRST_CHANNEL],
LL_DAC_OUTPUT_BUFFER_ENABLE);
output_buffer);

LL_DAC_Enable(cfg->base,
table_channels[channel_cfg->channel_id - STM32_FIRST_CHANNEL]);
Expand Down
4 changes: 4 additions & 0 deletions include/zephyr/drivers/dac.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,14 @@ extern "C" {
* @param channel_id Channel identifier of the DAC that should be configured.
* @param resolution Desired resolution of the DAC (depends on device
* capabilities).
* @param buffered Enable output buffer for this channel. This is relevant for instance
* if the output is directly connected to the load, without an amplifier
* in between. The actual details on this are hardware dependent.
*/
struct dac_channel_cfg {
uint8_t channel_id;
uint8_t resolution;
bool buffered;
};

/**
Expand Down