diff options
author | Sudhakar Rajashekhara <sudhakar.raj@ti.com> | 2009-05-21 07:41:35 -0400 |
---|---|---|
committer | Kevin Hilman <khilman@deeprootsystems.com> | 2009-08-26 03:56:56 -0400 |
commit | 60902a2cb12c3c1682ee7a04ad7448ec16dc0c29 (patch) | |
tree | ba754bff7fadd7106dc9f8549136a514177d0fd1 /arch/arm/mach-davinci/include/mach | |
parent | 4c5adde7943b982d22a7bf711654fbb5cb810667 (diff) |
davinci: EDMA: multiple CCs, channel mapping and API changes
- restructure to support multiple channel controllers by using
additional struct resources for each CC
- interface changes visible to EDMA clients
Introduce macros to build IDs from controller and channel number,
and to extract them. Modify the edma_alloc_slot function to take an
extra argument for the controller.
Also update ASoC drivers to use API. ASoC changes
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
- Move queue related mappings to dm<soc>.c
EDMA in DM355 and DM644x has two transfer controllers while DM646x
has four transfer controllers. Moving the queue to tc mapping and
queue priority mapping to dm<soc>.c will be helpful to probe these
mappings from platform device so that the machine_is_* testing will
be avoided.
- add channel mapping logic
Channel mapping logic is introduced in dm646x EDMA. This implies
that there is no fixed association for a channel number to a
parameter entry number. In other words, using the DMA channel
mapping registers (DCHMAPn), a PaRAM entry can be mapped to any
channel. While in the case of dm644x and dm355 there is a fixed
mapping between the EDMA channel and Param entry number.
Signed-off-by: Naresh Medisetty <naresh@ti.com>
Signed-off-by: Sudhakar Rajashekhara <sudhakar.raj@ti.com>
Reviewed-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
Diffstat (limited to 'arch/arm/mach-davinci/include/mach')
-rw-r--r-- | arch/arm/mach-davinci/include/mach/edma.h | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/arm/mach-davinci/include/mach/edma.h b/arch/arm/mach-davinci/include/mach/edma.h index 24a379239d7f..ba2ebdd058a0 100644 --- a/arch/arm/mach-davinci/include/mach/edma.h +++ b/arch/arm/mach-davinci/include/mach/edma.h | |||
@@ -170,6 +170,10 @@ enum sync_dimension { | |||
170 | ABSYNC = 1 | 170 | ABSYNC = 1 |
171 | }; | 171 | }; |
172 | 172 | ||
173 | #define EDMA_CTLR_CHAN(ctlr, chan) (((ctlr) << 16) | (chan)) | ||
174 | #define EDMA_CTLR(i) ((i) >> 16) | ||
175 | #define EDMA_CHAN_SLOT(i) ((i) & 0xffff) | ||
176 | |||
173 | #define EDMA_CHANNEL_ANY -1 /* for edma_alloc_channel() */ | 177 | #define EDMA_CHANNEL_ANY -1 /* for edma_alloc_channel() */ |
174 | #define EDMA_SLOT_ANY -1 /* for edma_alloc_slot() */ | 178 | #define EDMA_SLOT_ANY -1 /* for edma_alloc_slot() */ |
175 | 179 | ||
@@ -180,7 +184,7 @@ int edma_alloc_channel(int channel, | |||
180 | void edma_free_channel(unsigned channel); | 184 | void edma_free_channel(unsigned channel); |
181 | 185 | ||
182 | /* alloc/free parameter RAM slots */ | 186 | /* alloc/free parameter RAM slots */ |
183 | int edma_alloc_slot(int slot); | 187 | int edma_alloc_slot(unsigned ctlr, int slot); |
184 | void edma_free_slot(unsigned slot); | 188 | void edma_free_slot(unsigned slot); |
185 | 189 | ||
186 | /* calls that operate on part of a parameter RAM slot */ | 190 | /* calls that operate on part of a parameter RAM slot */ |
@@ -216,9 +220,12 @@ struct edma_soc_info { | |||
216 | unsigned n_region; | 220 | unsigned n_region; |
217 | unsigned n_slot; | 221 | unsigned n_slot; |
218 | unsigned n_tc; | 222 | unsigned n_tc; |
223 | unsigned n_cc; | ||
219 | 224 | ||
220 | /* list of channels with no even trigger; terminated by "-1" */ | 225 | /* list of channels with no even trigger; terminated by "-1" */ |
221 | const s8 *noevent; | 226 | const s8 *noevent; |
227 | const s8 (*queue_tc_mapping)[2]; | ||
228 | const s8 (*queue_priority_mapping)[2]; | ||
222 | }; | 229 | }; |
223 | 230 | ||
224 | #endif | 231 | #endif |