drivers: spi_mcux_lpspi: Create DMA dev helpers
Create helper functions for duplicated code related to checking for DMA devices, with readable names. Also remove unneeded function prototype. Signed-off-by: Declan Snyder <declan.snyder@nxp.com>
This commit is contained in:
parent
d76ccdbdea
commit
5d081c98fb
1 changed files with 35 additions and 17 deletions
|
@ -272,7 +272,10 @@ static int spi_mcux_configure(const struct device *dev, const struct spi_config
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SPI_MCUX_LPSPI_DMA
|
#ifdef CONFIG_SPI_MCUX_LPSPI_DMA
|
||||||
static int spi_mcux_dma_rxtx_load(const struct device *dev, size_t *dma_size);
|
static bool lpspi_inst_has_dma(const struct spi_mcux_data *data)
|
||||||
|
{
|
||||||
|
return (data->dma_tx.dma_dev && data->dma_rx.dma_dev);
|
||||||
|
}
|
||||||
|
|
||||||
/* This function is executed in the interrupt context */
|
/* This function is executed in the interrupt context */
|
||||||
static void spi_mcux_dma_callback(const struct device *dev, void *arg, uint32_t channel, int status)
|
static void spi_mcux_dma_callback(const struct device *dev, void *arg, uint32_t channel, int status)
|
||||||
|
@ -550,7 +553,9 @@ out:
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#else
|
||||||
|
#define lpspi_inst_has_dma(arg) arg != arg
|
||||||
|
#endif /* CONFIG_SPI_MCUX_LPSPI_DMA */
|
||||||
|
|
||||||
#ifdef CONFIG_SPI_RTIO
|
#ifdef CONFIG_SPI_RTIO
|
||||||
|
|
||||||
|
@ -613,7 +618,7 @@ static int spi_mcux_transceive(const struct device *dev, const struct spi_config
|
||||||
#ifdef CONFIG_SPI_MCUX_LPSPI_DMA
|
#ifdef CONFIG_SPI_MCUX_LPSPI_DMA
|
||||||
const struct spi_mcux_data *data = dev->data;
|
const struct spi_mcux_data *data = dev->data;
|
||||||
|
|
||||||
if (data->dma_rx.dma_dev && data->dma_tx.dma_dev) {
|
if (lpspi_inst_has_dma(data)) {
|
||||||
return transceive_dma(dev, spi_cfg, tx_bufs, rx_bufs, false, NULL, NULL);
|
return transceive_dma(dev, spi_cfg, tx_bufs, rx_bufs, false, NULL, NULL);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_SPI_MCUX_LPSPI_DMA */
|
#endif /* CONFIG_SPI_MCUX_LPSPI_DMA */
|
||||||
|
@ -630,7 +635,7 @@ static int spi_mcux_transceive_async(const struct device *dev, const struct spi_
|
||||||
#ifdef CONFIG_SPI_MCUX_LPSPI_DMA
|
#ifdef CONFIG_SPI_MCUX_LPSPI_DMA
|
||||||
struct spi_mcux_data *data = dev->data;
|
struct spi_mcux_data *data = dev->data;
|
||||||
|
|
||||||
if (data->dma_rx.dma_dev && data->dma_tx.dma_dev) {
|
if (lpspi_inst_has_dma(data)) {
|
||||||
spi_context_buffers_setup(&data->ctx, tx_bufs, rx_bufs, 1);
|
spi_context_buffers_setup(&data->ctx, tx_bufs, rx_bufs, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -749,29 +754,42 @@ static void spi_mcux_iodev_complete(const struct device *dev, int status)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_SPI_MCUX_LPSPI_DMA)
|
||||||
|
static int lpspi_dma_dev_ready(const struct device *dma_dev)
|
||||||
|
{
|
||||||
|
if (!device_is_ready(dma_dev)) {
|
||||||
|
LOG_ERR("%s device is not ready", dma_dev->name);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lpspi_dma_devs_ready(struct spi_mcux_data *data)
|
||||||
|
{
|
||||||
|
return lpspi_dma_dev_ready(data->dma_tx.dma_dev) |
|
||||||
|
lpspi_dma_dev_ready(data->dma_rx.dma_dev);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define lpspi_dma_devs_ready(...) 0
|
||||||
|
#endif /* CONFIG_SPI_MCUX_LPSPI_DMA */
|
||||||
|
|
||||||
static int spi_mcux_init(const struct device *dev)
|
static int spi_mcux_init(const struct device *dev)
|
||||||
{
|
{
|
||||||
const struct spi_mcux_config *config = dev->config;
|
const struct spi_mcux_config *config = dev->config;
|
||||||
struct spi_mcux_data *data = dev->data;
|
struct spi_mcux_data *data = dev->data;
|
||||||
int err;
|
int err = 0;
|
||||||
|
|
||||||
DEVICE_MMIO_NAMED_MAP(dev, reg_base, K_MEM_CACHE_NONE | K_MEM_DIRECT_MAP);
|
DEVICE_MMIO_NAMED_MAP(dev, reg_base, K_MEM_CACHE_NONE | K_MEM_DIRECT_MAP);
|
||||||
|
|
||||||
data->dev = dev;
|
data->dev = dev;
|
||||||
|
|
||||||
#ifdef CONFIG_SPI_MCUX_LPSPI_DMA
|
if (IS_ENABLED(CONFIG_SPI_MCUX_LPSPI_DMA) && lpspi_inst_has_dma(data)) {
|
||||||
if (data->dma_tx.dma_dev && data->dma_rx.dma_dev) {
|
err = lpspi_dma_devs_ready(data);
|
||||||
if (!device_is_ready(data->dma_tx.dma_dev)) {
|
}
|
||||||
LOG_ERR("%s device is not ready", data->dma_tx.dma_dev->name);
|
if (err < 0) {
|
||||||
return -ENODEV;
|
return err;
|
||||||
}
|
|
||||||
|
|
||||||
if (!device_is_ready(data->dma_rx.dma_dev)) {
|
|
||||||
LOG_ERR("%s device is not ready", data->dma_rx.dma_dev->name);
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_SPI_MCUX_LPSPI_DMA */
|
|
||||||
|
|
||||||
err = spi_context_cs_configure_all(&data->ctx);
|
err = spi_context_cs_configure_all(&data->ctx);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue