diff options
-rw-r--r-- | drivers/dma/sirf-dma.c | 43 |
1 files changed, 13 insertions, 30 deletions
diff --git a/drivers/dma/sirf-dma.c b/drivers/dma/sirf-dma.c index 11c85fc450a1..fab9c9c1b421 100644 --- a/drivers/dma/sirf-dma.c +++ b/drivers/dma/sirf-dma.c | |||
@@ -281,9 +281,10 @@ static dma_cookie_t sirfsoc_dma_tx_submit(struct dma_async_tx_descriptor *txd) | |||
281 | return cookie; | 281 | return cookie; |
282 | } | 282 | } |
283 | 283 | ||
284 | static int sirfsoc_dma_slave_config(struct sirfsoc_dma_chan *schan, | 284 | static int sirfsoc_dma_slave_config(struct dma_chan *chan, |
285 | struct dma_slave_config *config) | 285 | struct dma_slave_config *config) |
286 | { | 286 | { |
287 | struct sirfsoc_dma_chan *schan = dma_chan_to_sirfsoc_dma_chan(chan); | ||
287 | unsigned long flags; | 288 | unsigned long flags; |
288 | 289 | ||
289 | if ((config->src_addr_width != DMA_SLAVE_BUSWIDTH_4_BYTES) || | 290 | if ((config->src_addr_width != DMA_SLAVE_BUSWIDTH_4_BYTES) || |
@@ -297,8 +298,9 @@ static int sirfsoc_dma_slave_config(struct sirfsoc_dma_chan *schan, | |||
297 | return 0; | 298 | return 0; |
298 | } | 299 | } |
299 | 300 | ||
300 | static int sirfsoc_dma_terminate_all(struct sirfsoc_dma_chan *schan) | 301 | static int sirfsoc_dma_terminate_all(struct dma_chan *chan) |
301 | { | 302 | { |
303 | struct sirfsoc_dma_chan *schan = dma_chan_to_sirfsoc_dma_chan(chan); | ||
302 | struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); | 304 | struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); |
303 | int cid = schan->chan.chan_id; | 305 | int cid = schan->chan.chan_id; |
304 | unsigned long flags; | 306 | unsigned long flags; |
@@ -327,8 +329,9 @@ static int sirfsoc_dma_terminate_all(struct sirfsoc_dma_chan *schan) | |||
327 | return 0; | 329 | return 0; |
328 | } | 330 | } |
329 | 331 | ||
330 | static int sirfsoc_dma_pause_chan(struct sirfsoc_dma_chan *schan) | 332 | static int sirfsoc_dma_pause_chan(struct dma_chan *chan) |
331 | { | 333 | { |
334 | struct sirfsoc_dma_chan *schan = dma_chan_to_sirfsoc_dma_chan(chan); | ||
332 | struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); | 335 | struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); |
333 | int cid = schan->chan.chan_id; | 336 | int cid = schan->chan.chan_id; |
334 | unsigned long flags; | 337 | unsigned long flags; |
@@ -348,8 +351,9 @@ static int sirfsoc_dma_pause_chan(struct sirfsoc_dma_chan *schan) | |||
348 | return 0; | 351 | return 0; |
349 | } | 352 | } |
350 | 353 | ||
351 | static int sirfsoc_dma_resume_chan(struct sirfsoc_dma_chan *schan) | 354 | static int sirfsoc_dma_resume_chan(struct dma_chan *chan) |
352 | { | 355 | { |
356 | struct sirfsoc_dma_chan *schan = dma_chan_to_sirfsoc_dma_chan(chan); | ||
353 | struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); | 357 | struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); |
354 | int cid = schan->chan.chan_id; | 358 | int cid = schan->chan.chan_id; |
355 | unsigned long flags; | 359 | unsigned long flags; |
@@ -369,30 +373,6 @@ static int sirfsoc_dma_resume_chan(struct sirfsoc_dma_chan *schan) | |||
369 | return 0; | 373 | return 0; |
370 | } | 374 | } |
371 | 375 | ||
372 | static int sirfsoc_dma_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd, | ||
373 | unsigned long arg) | ||
374 | { | ||
375 | struct dma_slave_config *config; | ||
376 | struct sirfsoc_dma_chan *schan = dma_chan_to_sirfsoc_dma_chan(chan); | ||
377 | |||
378 | switch (cmd) { | ||
379 | case DMA_PAUSE: | ||
380 | return sirfsoc_dma_pause_chan(schan); | ||
381 | case DMA_RESUME: | ||
382 | return sirfsoc_dma_resume_chan(schan); | ||
383 | case DMA_TERMINATE_ALL: | ||
384 | return sirfsoc_dma_terminate_all(schan); | ||
385 | case DMA_SLAVE_CONFIG: | ||
386 | config = (struct dma_slave_config *)arg; | ||
387 | return sirfsoc_dma_slave_config(schan, config); | ||
388 | |||
389 | default: | ||
390 | break; | ||
391 | } | ||
392 | |||
393 | return -ENOSYS; | ||
394 | } | ||
395 | |||
396 | /* Alloc channel resources */ | 376 | /* Alloc channel resources */ |
397 | static int sirfsoc_dma_alloc_chan_resources(struct dma_chan *chan) | 377 | static int sirfsoc_dma_alloc_chan_resources(struct dma_chan *chan) |
398 | { | 378 | { |
@@ -739,7 +719,10 @@ static int sirfsoc_dma_probe(struct platform_device *op) | |||
739 | dma->device_alloc_chan_resources = sirfsoc_dma_alloc_chan_resources; | 719 | dma->device_alloc_chan_resources = sirfsoc_dma_alloc_chan_resources; |
740 | dma->device_free_chan_resources = sirfsoc_dma_free_chan_resources; | 720 | dma->device_free_chan_resources = sirfsoc_dma_free_chan_resources; |
741 | dma->device_issue_pending = sirfsoc_dma_issue_pending; | 721 | dma->device_issue_pending = sirfsoc_dma_issue_pending; |
742 | dma->device_control = sirfsoc_dma_control; | 722 | dma->device_config = sirfsoc_dma_slave_config; |
723 | dma->device_pause = sirfsoc_dma_pause_chan; | ||
724 | dma->device_resume = sirfsoc_dma_resume_chan; | ||
725 | dma->device_terminate_all = sirfsoc_dma_terminate_all; | ||
743 | dma->device_tx_status = sirfsoc_dma_tx_status; | 726 | dma->device_tx_status = sirfsoc_dma_tx_status; |
744 | dma->device_prep_interleaved_dma = sirfsoc_dma_prep_interleaved; | 727 | dma->device_prep_interleaved_dma = sirfsoc_dma_prep_interleaved; |
745 | dma->device_prep_dma_cyclic = sirfsoc_dma_prep_cyclic; | 728 | dma->device_prep_dma_cyclic = sirfsoc_dma_prep_cyclic; |