drivers: dma: max32: Handle channel index conversion in HAL
Handle SoC-level differences in channel numbering logic in HAL. Signed-off-by: Tahsin Mutlugun <Tahsin.Mutlugun@analog.com>
This commit is contained in:
parent
85ef719eb2
commit
f7d315cf49
1 changed files with 6 additions and 11 deletions
|
@ -69,11 +69,6 @@ static inline int max32_dma_addr_adj(uint16_t addr_adj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int max32_dma_ch_index(mxc_dma_regs_t *dma, uint8_t ch)
|
|
||||||
{
|
|
||||||
return (ch + MXC_DMA_GET_IDX(dma) * (MXC_DMA_CHANNELS / MXC_DMA_INSTANCES));
|
|
||||||
}
|
|
||||||
|
|
||||||
static int max32_dma_config(const struct device *dev, uint32_t channel, struct dma_config *config)
|
static int max32_dma_config(const struct device *dev, uint32_t channel, struct dma_config *config)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -87,7 +82,7 @@ static int max32_dma_config(const struct device *dev, uint32_t channel, struct d
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ch = max32_dma_ch_index(cfg->regs, channel);
|
ch = Wrap_MXC_DMA_GetChannelIndex(cfg->regs, channel);
|
||||||
|
|
||||||
/* DMA Channel Config */
|
/* DMA Channel Config */
|
||||||
mxc_dma_config_t mxc_dma_cfg;
|
mxc_dma_config_t mxc_dma_cfg;
|
||||||
|
@ -166,7 +161,7 @@ static int max32_dma_reload(const struct device *dev, uint32_t channel, uint32_t
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
channel = max32_dma_ch_index(cfg->regs, channel);
|
channel = Wrap_MXC_DMA_GetChannelIndex(cfg->regs, channel);
|
||||||
flags = MXC_DMA_ChannelGetFlags(channel);
|
flags = MXC_DMA_ChannelGetFlags(channel);
|
||||||
if (flags & ADI_MAX32_DMA_STATUS_ST) {
|
if (flags & ADI_MAX32_DMA_STATUS_ST) {
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
@ -190,7 +185,7 @@ static int max32_dma_start(const struct device *dev, uint32_t channel)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
channel = max32_dma_ch_index(cfg->regs, channel);
|
channel = Wrap_MXC_DMA_GetChannelIndex(cfg->regs, channel);
|
||||||
flags = MXC_DMA_ChannelGetFlags(channel);
|
flags = MXC_DMA_ChannelGetFlags(channel);
|
||||||
if (flags & ADI_MAX32_DMA_STATUS_ST) {
|
if (flags & ADI_MAX32_DMA_STATUS_ST) {
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
@ -209,7 +204,7 @@ static int max32_dma_stop(const struct device *dev, uint32_t channel)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
channel = max32_dma_ch_index(cfg->regs, channel);
|
channel = Wrap_MXC_DMA_GetChannelIndex(cfg->regs, channel);
|
||||||
|
|
||||||
return MXC_DMA_Stop(channel);
|
return MXC_DMA_Stop(channel);
|
||||||
}
|
}
|
||||||
|
@ -227,7 +222,7 @@ static int max32_dma_get_status(const struct device *dev, uint32_t channel, stru
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
channel = max32_dma_ch_index(cfg->regs, channel);
|
channel = Wrap_MXC_DMA_GetChannelIndex(cfg->regs, channel);
|
||||||
txfer.ch = channel;
|
txfer.ch = channel;
|
||||||
|
|
||||||
flags = MXC_DMA_ChannelGetFlags(channel);
|
flags = MXC_DMA_ChannelGetFlags(channel);
|
||||||
|
@ -253,7 +248,7 @@ static void max32_dma_isr(const struct device *dev)
|
||||||
int flags;
|
int flags;
|
||||||
int status = 0;
|
int status = 0;
|
||||||
|
|
||||||
uint8_t channel_base = max32_dma_ch_index(cfg->regs, 0);
|
uint8_t channel_base = Wrap_MXC_DMA_GetChannelIndex(cfg->regs, 0);
|
||||||
|
|
||||||
for (ch = channel_base, c = 0; c < cfg->channels; ch++, c++) {
|
for (ch = channel_base, c = 0; c < cfg->channels; ch++, c++) {
|
||||||
flags = MXC_DMA_ChannelGetFlags(ch);
|
flags = MXC_DMA_ChannelGetFlags(ch);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue