Skip to content
Open
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
21 changes: 12 additions & 9 deletions drivers/video/video_stm32_dcmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,10 @@ void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi)
struct video_stm32_dcmi_data *dev_data =
CONTAINER_OF(hdcmi, struct video_stm32_dcmi_data, hdcmi);
struct video_buffer *vbuf;
HAL_StatusTypeDef __maybe_unused hal_ret;

HAL_DCMI_Suspend(hdcmi);
hal_ret = HAL_DCMI_Suspend(hdcmi);
__ASSERT_NO_MSG(hal_ret == HAL_OK);

vbuf = k_fifo_get(&dev_data->fifo_in, K_NO_WAIT);

Expand All @@ -81,7 +83,8 @@ void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi)
k_fifo_put(&dev_data->fifo_out, vbuf);

resume:
HAL_DCMI_Resume(hdcmi);
hal_ret = HAL_DCMI_Resume(hdcmi);
__ASSERT_NO_MSG(hal_ret == HAL_OK);
}

static void stm32_dcmi_isr(const struct device *dev)
Expand Down Expand Up @@ -231,6 +234,7 @@ static int video_stm32_dcmi_set_stream(const struct device *dev, bool enable,
{
struct video_stm32_dcmi_data *data = dev->data;
const struct video_stm32_dcmi_config *config = dev->config;
HAL_StatusTypeDef hal_ret;
int err;

if (!enable) {
Expand All @@ -239,8 +243,8 @@ static int video_stm32_dcmi_set_stream(const struct device *dev, bool enable,
return err;
}

err = HAL_DCMI_Stop(&data->hdcmi);
if (err != HAL_OK) {
hal_ret = HAL_DCMI_Stop(&data->hdcmi);
if (hal_ret != HAL_OK) {
LOG_ERR("Failed to stop DCMI");
return -EIO;
}
Expand All @@ -262,9 +266,9 @@ static int video_stm32_dcmi_set_stream(const struct device *dev, bool enable,
data->hdcmi.Instance->CR &= ~(DCMI_CR_FCRC_0 | DCMI_CR_FCRC_1);
data->hdcmi.Instance->CR |= STM32_DCMI_GET_CAPTURE_RATE(data->capture_rate);

err = HAL_DCMI_Start_DMA(&data->hdcmi, DCMI_MODE_CONTINUOUS,
(uint32_t)data->vbuf->buffer, data->vbuf->bytesused / 4);
if (err != HAL_OK) {
hal_ret = HAL_DCMI_Start_DMA(&data->hdcmi, DCMI_MODE_CONTINUOUS,
(uint32_t)data->vbuf->buffer, data->vbuf->bytesused / 4);
if (hal_ret != HAL_OK) {
LOG_ERR("Failed to start DCMI DMA");
return -EIO;
}
Expand Down Expand Up @@ -543,8 +547,7 @@ static int video_stm32_dcmi_init(const struct device *dev)
config->irq_config(dev);

/* Initialize DCMI peripheral */
err = HAL_DCMI_Init(&data->hdcmi);
if (err != HAL_OK) {
if (HAL_DCMI_Init(&data->hdcmi) != HAL_OK) {
LOG_ERR("DCMI initialization failed.");
return -EIO;
}
Expand Down
Loading