drivers: spi: sam0: 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-03-06 09:48:45 -06:00 committed by Kumar Gala
commit 0f0308c197

View file

@ -33,7 +33,7 @@ struct spi_sam0_config {
uint16_t gclk_clkctrl_id;
#endif
#ifdef CONFIG_SPI_ASYNC
char *dma_dev;
const struct device *dma_dev;
uint8_t tx_dma_request;
uint8_t tx_dma_channel;
uint8_t rx_dma_request;
@ -46,7 +46,6 @@ struct spi_sam0_data {
struct spi_context ctx;
#ifdef CONFIG_SPI_ASYNC
const struct device *dev;
const struct device *dma;
uint32_t dma_segment_len;
#endif
};
@ -473,20 +472,19 @@ static int spi_sam0_dma_rx_load(const struct device *dev, uint8_t *buf,
dma_blk.source_address = (uint32_t)(&(regs->DATA.reg));
dma_blk.source_addr_adj = DMA_ADDR_ADJ_NO_CHANGE;
retval = dma_config(data->dma, cfg->rx_dma_channel,
retval = dma_config(cfg->dma_dev, cfg->rx_dma_channel,
&dma_cfg);
if (retval != 0) {
return retval;
}
return dma_start(data->dma, cfg->rx_dma_channel);
return dma_start(cfg->dma_dev, cfg->rx_dma_channel);
}
static int spi_sam0_dma_tx_load(const struct device *dev, const uint8_t *buf,
size_t len)
{
const struct spi_sam0_config *cfg = dev->config;
struct spi_sam0_data *data = dev->data;
SercomSpi *regs = cfg->regs;
struct dma_config dma_cfg = { 0 };
struct dma_block_config dma_blk = { 0 };
@ -513,14 +511,14 @@ static int spi_sam0_dma_tx_load(const struct device *dev, const uint8_t *buf,
dma_blk.dest_address = (uint32_t)(&(regs->DATA.reg));
dma_blk.dest_addr_adj = DMA_ADDR_ADJ_NO_CHANGE;
retval = dma_config(data->dma, cfg->tx_dma_channel,
retval = dma_config(cfg->dma_dev, cfg->tx_dma_channel,
&dma_cfg);
if (retval != 0) {
return retval;
}
return dma_start(data->dma, cfg->tx_dma_channel);
return dma_start(cfg->dma_dev, cfg->tx_dma_channel);
}
static bool spi_sam0_dma_advance_segment(const struct device *dev)
@ -607,8 +605,8 @@ static void spi_sam0_dma_rx_done(const struct device *dma_dev, void *arg,
retval = spi_sam0_dma_advance_buffers(dev);
if (retval != 0) {
dma_stop(data->dma, cfg->tx_dma_channel);
dma_stop(data->dma, cfg->rx_dma_channel);
dma_stop(cfg->dma_dev, cfg->tx_dma_channel);
dma_stop(cfg->dma_dev, cfg->rx_dma_channel);
spi_context_cs_control(&data->ctx, false);
spi_context_complete(&data->ctx, retval);
return;
@ -626,10 +624,6 @@ static int spi_sam0_transceive_async(const struct device *dev,
struct spi_sam0_data *data = dev->data;
int retval;
if (!data->dma) {
return -ENOTSUP;
}
/*
* Transmit clocks the output and we use receive to determine when
* the transmit is done, so we always need both
@ -658,8 +652,8 @@ static int spi_sam0_transceive_async(const struct device *dev,
return 0;
err_cs:
dma_stop(data->dma, cfg->tx_dma_channel);
dma_stop(data->dma, cfg->rx_dma_channel);
dma_stop(cfg->dma_dev, cfg->tx_dma_channel);
dma_stop(cfg->dma_dev, cfg->rx_dma_channel);
spi_context_cs_control(&data->ctx, false);
@ -706,10 +700,10 @@ static int spi_sam0_init(const struct device *dev)
wait_synchronization(regs);
#ifdef CONFIG_SPI_ASYNC
data->dma = device_get_binding(cfg->dma_dev);
if (!device_is_ready(cfg->dma_dev)) {
return -ENODEV;
}
data->dev = dev;
#endif
spi_context_unlock_unconditionally(&data->ctx);
@ -731,7 +725,7 @@ static const struct spi_driver_api spi_sam0_driver_api = {
#if CONFIG_SPI_ASYNC
#define SPI_SAM0_DMA_CHANNELS(n) \
.dma_dev = ATMEL_SAM0_DT_INST_DMA_NAME(n, tx), \
.dma_dev = DEVICE_DT_GET(ATMEL_SAM0_DT_INST_DMA_CTLR(n, tx)), \
.tx_dma_request = ATMEL_SAM0_DT_INST_DMA_TRIGSRC(n, tx), \
.tx_dma_channel = ATMEL_SAM0_DT_INST_DMA_CHANNEL(n, tx), \
.rx_dma_request = ATMEL_SAM0_DT_INST_DMA_TRIGSRC(n, rx), \