i2s: cavs: Convert dma to use DEVICE_DT_GET

Replace device_get_binding with DEVICE_DT_GET for getting access
to the dma controller device.

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
This commit is contained in:
Kumar Gala 2021-02-26 10:02:43 -06:00 committed by Anas Nashif
commit 19356a0a01

View file

@ -75,13 +75,12 @@ struct i2s_cavs_config {
struct i2s_cavs_mn_div *mn_regs; struct i2s_cavs_mn_div *mn_regs;
uint32_t irq_id; uint32_t irq_id;
void (*irq_connect)(void); void (*irq_connect)(void);
const char *dma_name; const struct device *dev_dma;
}; };
/* Device run time data */ /* Device run time data */
struct i2s_cavs_dev_data { struct i2s_cavs_dev_data {
struct i2s_config cfg; struct i2s_config cfg;
const struct device *dev_dma;
struct stream tx; struct stream tx;
struct stream rx; struct stream rx;
}; };
@ -140,10 +139,10 @@ static void i2s_dma_tx_callback(const struct device *dma_dev, void *arg,
ret = k_msgq_get(&strm->in_queue, &buffer, K_NO_WAIT); ret = k_msgq_get(&strm->in_queue, &buffer, K_NO_WAIT);
if (ret == 0) { if (ret == 0) {
/* reload the DMA */ /* reload the DMA */
dma_reload(dev_data->dev_dma, strm->dma_channel, dma_reload(dev_cfg->dev_dma, strm->dma_channel,
(uint32_t)buffer, (uint32_t)&ssp->ssd, (uint32_t)buffer, (uint32_t)&ssp->ssd,
dev_data->cfg.block_size); dev_data->cfg.block_size);
dma_start(dev_data->dev_dma, strm->dma_channel); dma_start(dev_cfg->dev_dma, strm->dma_channel);
ssp->ssc1 |= SSCR1_TSRE; ssp->ssc1 |= SSCR1_TSRE;
k_msgq_put(&strm->out_queue, &buffer, K_NO_WAIT); k_msgq_put(&strm->out_queue, &buffer, K_NO_WAIT);
} }
@ -157,13 +156,13 @@ static void i2s_dma_tx_callback(const struct device *dma_dev, void *arg,
LOG_ERR("DMA status %08x channel %u k_msgq_get ret %d", LOG_ERR("DMA status %08x channel %u k_msgq_get ret %d",
status, channel, ret); status, channel, ret);
strm->state = I2S_STATE_STOPPING; strm->state = I2S_STATE_STOPPING;
i2s_tx_stream_disable(dev_data, ssp, dev_data->dev_dma); i2s_tx_stream_disable(dev_data, ssp, dev_cfg->dev_dma);
} }
break; break;
case I2S_STATE_STOPPING: case I2S_STATE_STOPPING:
i2s_tx_stream_disable(dev_data, ssp, dev_data->dev_dma); i2s_tx_stream_disable(dev_data, ssp, dev_cfg->dev_dma);
break; break;
} }
} }
@ -200,7 +199,7 @@ static void i2s_dma_rx_callback(const struct device *dma_dev, void *arg,
if (ret != 0) { if (ret != 0) {
LOG_ERR("buffer alloc from slab %p err %d", LOG_ERR("buffer alloc from slab %p err %d",
dev_data->cfg.mem_slab, ret); dev_data->cfg.mem_slab, ret);
i2s_rx_stream_disable(dev_data, ssp, dev_data->dev_dma); i2s_rx_stream_disable(dev_data, ssp, dev_cfg->dev_dma);
strm->state = I2S_STATE_READY; strm->state = I2S_STATE_READY;
} else { } else {
/* put buffer in input queue */ /* put buffer in input queue */
@ -213,15 +212,15 @@ static void i2s_dma_rx_callback(const struct device *dma_dev, void *arg,
SOC_DCACHE_INVALIDATE(buffer, dev_data->cfg.block_size); SOC_DCACHE_INVALIDATE(buffer, dev_data->cfg.block_size);
/* reload the DMA */ /* reload the DMA */
dma_reload(dev_data->dev_dma, strm->dma_channel, dma_reload(dev_cfg->dev_dma, strm->dma_channel,
(uint32_t)&ssp->ssd, (uint32_t)buffer, (uint32_t)&ssp->ssd, (uint32_t)buffer,
dev_data->cfg.block_size); dev_data->cfg.block_size);
dma_start(dev_data->dev_dma, strm->dma_channel); dma_start(dev_cfg->dev_dma, strm->dma_channel);
ssp->ssc1 |= SSCR1_RSRE; ssp->ssc1 |= SSCR1_RSRE;
} }
break; break;
case I2S_STATE_STOPPING: case I2S_STATE_STOPPING:
i2s_rx_stream_disable(dev_data, ssp, dev_data->dev_dma); i2s_rx_stream_disable(dev_data, ssp, dev_cfg->dev_dma);
strm->state = I2S_STATE_READY; strm->state = I2S_STATE_READY;
break; break;
} }
@ -459,7 +458,7 @@ static int i2s_cavs_configure(const struct device *dev, enum i2s_dir dir,
dma_block->source_address = (uint32_t)NULL; dma_block->source_address = (uint32_t)NULL;
dma_block->dest_address = (uint32_t)&ssp->ssd; dma_block->dest_address = (uint32_t)&ssp->ssd;
ret = dma_config(dev_data->dev_dma, dev_data->tx.dma_channel, ret = dma_config(dev_cfg->dev_dma, dev_data->tx.dma_channel,
&dev_data->tx.dma_cfg); &dev_data->tx.dma_cfg);
if (ret < 0) { if (ret < 0) {
LOG_ERR("dma_config failed: %d", ret); LOG_ERR("dma_config failed: %d", ret);
@ -471,7 +470,7 @@ static int i2s_cavs_configure(const struct device *dev, enum i2s_dir dir,
dma_block->source_address = (uint32_t)&ssp->ssd; dma_block->source_address = (uint32_t)&ssp->ssd;
dma_block->dest_address = (uint32_t)NULL; dma_block->dest_address = (uint32_t)NULL;
ret = dma_config(dev_data->dev_dma, dev_data->rx.dma_channel, ret = dma_config(dev_cfg->dev_dma, dev_data->rx.dma_channel,
&dev_data->rx.dma_cfg); &dev_data->rx.dma_cfg);
if (ret < 0) { if (ret < 0) {
LOG_ERR("dma_config failed: %d", ret); LOG_ERR("dma_config failed: %d", ret);
@ -656,10 +655,10 @@ static int i2s_cavs_trigger(const struct device *dev, enum i2s_dir dir,
if (dir == I2S_DIR_TX) { if (dir == I2S_DIR_TX) {
ret = i2s_tx_stream_start(dev_data, ssp, ret = i2s_tx_stream_start(dev_data, ssp,
dev_data->dev_dma); dev_cfg->dev_dma);
} else { } else {
ret = i2s_rx_stream_start(dev_data, ssp, ret = i2s_rx_stream_start(dev_data, ssp,
dev_data->dev_dma); dev_cfg->dev_dma);
} }
if (ret < 0) { if (ret < 0) {
@ -771,9 +770,8 @@ static int i2s_cavs_initialize(const struct device *dev)
const struct i2s_cavs_config *const dev_cfg = DEV_CFG(dev); const struct i2s_cavs_config *const dev_cfg = DEV_CFG(dev);
struct i2s_cavs_dev_data *const dev_data = DEV_DATA(dev); struct i2s_cavs_dev_data *const dev_data = DEV_DATA(dev);
dev_data->dev_dma = device_get_binding(dev_cfg->dma_name); if (!device_is_ready(dev_cfg->dev_dma)) {
if (!dev_data->dev_dma) { LOG_ERR("%s device not ready", dev_cfg->dev_dma->name);
LOG_ERR("%s device not found", dev_cfg->dma_name);
return -ENODEV; return -ENODEV;
} }
@ -823,7 +821,7 @@ static const struct i2s_driver_api i2s_cavs_driver_api = {
DT_INST_REG_ADDR_BY_IDX(n, 1), \ DT_INST_REG_ADDR_BY_IDX(n, 1), \
.irq_id = DT_INST_IRQN(n), \ .irq_id = DT_INST_IRQN(n), \
.irq_connect = i2s_cavs_irq_connect_##n, \ .irq_connect = i2s_cavs_irq_connect_##n, \
.dma_name = DT_INST_DMAS_LABEL_BY_NAME(n, tx), \ .dev_dma = DEVICE_DT_GET(DT_INST_DMAS_CTLR_BY_NAME(n, tx)),\
}; \ }; \
\ \
static struct i2s_cavs_dev_data i2s_cavs_data_##n = { \ static struct i2s_cavs_dev_data i2s_cavs_data_##n = { \