From 9ba20dd48eec1640aef96965e95f8899353a689c Mon Sep 17 00:00:00 2001 From: Carles Cufi Date: Mon, 4 May 2020 13:13:36 +0200 Subject: [PATCH] drivers: audio: Port to the new timeout API Port the I2S and DMIC drivers to the new timeout API so that they do not need to enable legacy timeouts. Signed-off-by: Carles Cufi --- drivers/audio/intel_dmic.c | 2 +- drivers/i2s/Kconfig | 1 - drivers/i2s/i2s_cavs.c | 6 ++++-- drivers/i2s/i2s_ll_stm32.c | 5 +++-- drivers/i2s/i2s_sam_ssc.c | 6 ++++-- include/audio/dmic.h | 3 ++- samples/boards/intel_s1000_crb/audio/src/audio_driver.c | 8 ++++---- samples/boards/intel_s1000_crb/i2s/src/i2s_sample.c | 4 ++-- 8 files changed, 20 insertions(+), 15 deletions(-) diff --git a/drivers/audio/intel_dmic.c b/drivers/audio/intel_dmic.c index 6bd572c68ec..2af654a0595 100644 --- a/drivers/audio/intel_dmic.c +++ b/drivers/audio/intel_dmic.c @@ -1346,7 +1346,7 @@ static int dmic_read_device(struct device *dev, u8_t stream, /* retrieve buffer from out queue */ ret = k_msgq_get(&dmic_private.streams[stream].out_queue, - buffer, timeout); + buffer, K_MSEC(timeout)); if (ret) { LOG_ERR("No buffers in stream %u out_queue", stream); } else { diff --git a/drivers/i2s/Kconfig b/drivers/i2s/Kconfig index 7dd99d0a8b1..2ac144192ad 100644 --- a/drivers/i2s/Kconfig +++ b/drivers/i2s/Kconfig @@ -8,7 +8,6 @@ # menuconfig I2S bool "I2S bus drivers" - select LEGACY_TIMEOUT_API help Enable support for the I2S (Inter-IC Sound) hardware bus. diff --git a/drivers/i2s/i2s_cavs.c b/drivers/i2s/i2s_cavs.c index 4ebbfb1bbed..60b9edb60bd 100644 --- a/drivers/i2s/i2s_cavs.c +++ b/drivers/i2s/i2s_cavs.c @@ -779,7 +779,8 @@ static int i2s_cavs_read(struct device *dev, void **mem_block, size_t *size) return -EIO; } - ret = k_msgq_get(&strm->out_queue, &buffer, dev_data->cfg.timeout); + ret = k_msgq_get(&strm->out_queue, &buffer, + SYS_TIMEOUT_MS(dev_data->cfg.timeout)); if (ret != 0) { return -EAGAIN; } @@ -803,7 +804,8 @@ static int i2s_cavs_write(struct device *dev, void *mem_block, size_t size) SOC_DCACHE_FLUSH(mem_block, size); - ret = k_msgq_put(&strm->in_queue, &mem_block, dev_data->cfg.timeout); + ret = k_msgq_put(&strm->in_queue, &mem_block, + SYS_TIMEOUT_MS(dev_data->cfg.timeout)); if (ret) { LOG_ERR("k_msgq_put failed %d", ret); return ret; diff --git a/drivers/i2s/i2s_ll_stm32.c b/drivers/i2s/i2s_ll_stm32.c index 454fe263250..3dde87aff38 100644 --- a/drivers/i2s/i2s_ll_stm32.c +++ b/drivers/i2s/i2s_ll_stm32.c @@ -384,7 +384,7 @@ static int i2s_stm32_read(struct device *dev, void **mem_block, size_t *size) if (dev_data->rx.state != I2S_STATE_ERROR) { ret = k_sem_take(&dev_data->rx.sem, - K_MSEC(dev_data->rx.cfg.timeout)); + SYS_TIMEOUT_MS(dev_data->rx.cfg.timeout)); if (ret < 0) { return ret; } @@ -410,7 +410,8 @@ static int i2s_stm32_write(struct device *dev, void *mem_block, size_t size) return -EIO; } - ret = k_sem_take(&dev_data->tx.sem, K_MSEC(dev_data->tx.cfg.timeout)); + ret = k_sem_take(&dev_data->tx.sem, + SYS_TIMEOUT_MS(dev_data->tx.cfg.timeout)); if (ret < 0) { return ret; } diff --git a/drivers/i2s/i2s_sam_ssc.c b/drivers/i2s/i2s_sam_ssc.c index 2d3d06c61ea..3bb641a077f 100644 --- a/drivers/i2s/i2s_sam_ssc.c +++ b/drivers/i2s/i2s_sam_ssc.c @@ -840,7 +840,8 @@ static int i2s_sam_read(struct device *dev, void **mem_block, size_t *size) } if (dev_data->rx.state != I2S_STATE_ERROR) { - ret = k_sem_take(&dev_data->rx.sem, dev_data->rx.cfg.timeout); + ret = k_sem_take(&dev_data->rx.sem, + SYS_TIMEOUT_MS(dev_data->rx.cfg.timeout)); if (ret < 0) { return ret; } @@ -866,7 +867,8 @@ static int i2s_sam_write(struct device *dev, void *mem_block, size_t size) return -EIO; } - ret = k_sem_take(&dev_data->tx.sem, dev_data->tx.cfg.timeout); + ret = k_sem_take(&dev_data->tx.sem, + SYS_TIMEOUT_MS(dev_data->tx.cfg.timeout)); if (ret < 0) { return ret; } diff --git a/include/audio/dmic.h b/include/audio/dmic.h index ebd01130027..2dc2954ea27 100644 --- a/include/audio/dmic.h +++ b/include/audio/dmic.h @@ -273,7 +273,8 @@ static inline int dmic_trigger(struct device *dev, enum dmic_trigger cmd) * @param stream Stream identifier * @param buffer Pointer to the received buffer address * @param size Pointer to the received buffer size - * @param timeout Timeout value to wait in case audio is not yet received + * @param timeout Timeout in milliseconds to wait in case audio is not yet + * received, or @ref SYS_FOREVER_MS * * @return 0 on success, a negative error code on failure */ diff --git a/samples/boards/intel_s1000_crb/audio/src/audio_driver.c b/samples/boards/intel_s1000_crb/audio/src/audio_driver.c index bb9146b0955..91884b1f759 100644 --- a/samples/boards/intel_s1000_crb/audio/src/audio_driver.c +++ b/samples/boards/intel_s1000_crb/audio/src/audio_driver.c @@ -73,7 +73,7 @@ static void audio_driver_process_audio_input(void) int ret; /* read capture input buffer */ - ret = dmic_read(dmic_device, 0, (void **)&mic_in_buf, &size, K_FOREVER); + ret = dmic_read(dmic_device, 0, (void **)&mic_in_buf, &size, SYS_FOREVER_MS); if (ret) { LOG_ERR("dmic_device read failed %d", ret); return; @@ -224,7 +224,7 @@ static void audio_driver_config_host_streams(void) i2s_cfg.frame_clk_freq = AUDIO_SAMPLE_FREQ; i2s_cfg.block_size = HOST_FRAME_BYTES; i2s_cfg.mem_slab = &host_inout_mem_slab; - i2s_cfg.timeout = K_NO_WAIT; + i2s_cfg.timeout = 0; k_mem_slab_init(&host_inout_mem_slab, &audio_buffers.host_inout[0][0], HOST_FRAME_BYTES, HOST_INOUT_BUF_COUNT); @@ -251,7 +251,7 @@ static void audio_driver_config_periph_streams(void) I2S_OPT_BIT_CLK_SLAVE, .frame_clk_freq = AUDIO_SAMPLE_FREQ, .block_size = SPK_FRAME_BYTES, - .timeout = K_NO_WAIT, + .timeout = 0, }, }; struct pcm_stream_cfg stream = { @@ -318,7 +318,7 @@ static void audio_driver_config_periph_streams(void) i2s_cfg.frame_clk_freq = AUDIO_SAMPLE_FREQ; i2s_cfg.block_size = SPK_FRAME_BYTES; i2s_cfg.mem_slab = &spk_out_mem_slab; - i2s_cfg.timeout = K_NO_WAIT; + i2s_cfg.timeout = 0; k_mem_slab_init(&spk_out_mem_slab, &audio_buffers.spk_out[0][0], SPK_FRAME_BYTES, SPK_OUT_BUF_COUNT); diff --git a/samples/boards/intel_s1000_crb/i2s/src/i2s_sample.c b/samples/boards/intel_s1000_crb/i2s/src/i2s_sample.c index 471def46686..495ca630463 100644 --- a/samples/boards/intel_s1000_crb/i2s/src/i2s_sample.c +++ b/samples/boards/intel_s1000_crb/i2s/src/i2s_sample.c @@ -157,7 +157,7 @@ static void i2s_audio_init(void) i2s_cfg.mem_slab = &i2s_mem_slab; /* make the transmit interface non-blocking */ - i2s_cfg.timeout = K_NO_WAIT; + i2s_cfg.timeout = 0; ret = i2s_configure(spk_i2s_dev, I2S_DIR_TX, &i2s_cfg); if (ret != 0) { LOG_ERR("dmic_configure failed with %d error", ret); @@ -165,7 +165,7 @@ static void i2s_audio_init(void) } /* make the receive interface blocking */ - i2s_cfg.timeout = K_FOREVER; + i2s_cfg.timeout = SYS_FOREVER_MS; ret = i2s_configure(host_i2s_dev, I2S_DIR_RX, &i2s_cfg); if (ret != 0) { LOG_ERR("dmic_configure failed with %d error", ret);