imx-dma.h (2667B)
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Copyright 2004-2009 Freescale Semiconductor, Inc. All Rights Reserved. 4 */ 5 6#ifndef __LINUX_DMA_IMX_H 7#define __LINUX_DMA_IMX_H 8 9#include <linux/scatterlist.h> 10#include <linux/device.h> 11#include <linux/dmaengine.h> 12 13/* 14 * This enumerates peripheral types. Used for SDMA. 15 */ 16enum sdma_peripheral_type { 17 IMX_DMATYPE_SSI, /* MCU domain SSI */ 18 IMX_DMATYPE_SSI_SP, /* Shared SSI */ 19 IMX_DMATYPE_MMC, /* MMC */ 20 IMX_DMATYPE_SDHC, /* SDHC */ 21 IMX_DMATYPE_UART, /* MCU domain UART */ 22 IMX_DMATYPE_UART_SP, /* Shared UART */ 23 IMX_DMATYPE_FIRI, /* FIRI */ 24 IMX_DMATYPE_CSPI, /* MCU domain CSPI */ 25 IMX_DMATYPE_CSPI_SP, /* Shared CSPI */ 26 IMX_DMATYPE_SIM, /* SIM */ 27 IMX_DMATYPE_ATA, /* ATA */ 28 IMX_DMATYPE_CCM, /* CCM */ 29 IMX_DMATYPE_EXT, /* External peripheral */ 30 IMX_DMATYPE_MSHC, /* Memory Stick Host Controller */ 31 IMX_DMATYPE_MSHC_SP, /* Shared Memory Stick Host Controller */ 32 IMX_DMATYPE_DSP, /* DSP */ 33 IMX_DMATYPE_MEMORY, /* Memory */ 34 IMX_DMATYPE_FIFO_MEMORY,/* FIFO type Memory */ 35 IMX_DMATYPE_SPDIF, /* SPDIF */ 36 IMX_DMATYPE_IPU_MEMORY, /* IPU Memory */ 37 IMX_DMATYPE_ASRC, /* ASRC */ 38 IMX_DMATYPE_ESAI, /* ESAI */ 39 IMX_DMATYPE_SSI_DUAL, /* SSI Dual FIFO */ 40 IMX_DMATYPE_ASRC_SP, /* Shared ASRC */ 41 IMX_DMATYPE_SAI, /* SAI */ 42 IMX_DMATYPE_MULTI_SAI, /* MULTI FIFOs For Audio */ 43}; 44 45enum imx_dma_prio { 46 DMA_PRIO_HIGH = 0, 47 DMA_PRIO_MEDIUM = 1, 48 DMA_PRIO_LOW = 2 49}; 50 51struct imx_dma_data { 52 int dma_request; /* DMA request line */ 53 int dma_request2; /* secondary DMA request line */ 54 enum sdma_peripheral_type peripheral_type; 55 int priority; 56}; 57 58static inline int imx_dma_is_ipu(struct dma_chan *chan) 59{ 60 return !strcmp(dev_name(chan->device->dev), "ipu-core"); 61} 62 63static inline int imx_dma_is_general_purpose(struct dma_chan *chan) 64{ 65 return !strcmp(chan->device->dev->driver->name, "imx-sdma") || 66 !strcmp(chan->device->dev->driver->name, "imx-dma"); 67} 68 69/** 70 * struct sdma_peripheral_config - SDMA config for audio 71 * @n_fifos_src: Number of FIFOs for recording 72 * @n_fifos_dst: Number of FIFOs for playback 73 * @sw_done: Use software done. Needed for PDM (micfil) 74 * 75 * Some i.MX Audio devices (SAI, micfil) have multiple successive FIFO 76 * registers. For multichannel recording/playback the SAI/micfil have 77 * one FIFO register per channel and the SDMA engine has to read/write 78 * the next channel from/to the next register and wrap around to the 79 * first register when all channels are handled. The number of active 80 * channels must be communicated to the SDMA engine using this struct. 81 */ 82struct sdma_peripheral_config { 83 int n_fifos_src; 84 int n_fifos_dst; 85 bool sw_done; 86}; 87 88#endif /* __LINUX_DMA_IMX_H */