aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma
diff options
context:
space:
mode:
authorGuennadi Liakhovetski <g.liakhovetski@gmx.de>2012-07-05 06:29:40 -0400
committerVinod Koul <vinod.koul@linux.intel.com>2012-07-20 01:53:44 -0400
commitecf90fbbdc66cde6f5fa25d88541112b9baac459 (patch)
treee2998d0c217b07816dec6b22e03885c9fb4731bd /drivers/dma
parent1e7f07b5390b4bbf82fe017fcb46682dcf4ab1d0 (diff)
dmaengine: shdma: prepare to stop using struct dma_chan::private
Using struct dma_chan::private is deprecated. To update the shdma driver to stop using it we first have to eliminate internal runtime uses of it. After that we will also be able to stop using it for channel configuration. Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Vinod Koul <vinod.koul@linux.intel.com>
Diffstat (limited to 'drivers/dma')
-rw-r--r--drivers/dma/sh/shdma-base.c9
-rw-r--r--drivers/dma/sh/shdma.c24
-rw-r--r--drivers/dma/sh/shdma.h2
3 files changed, 17 insertions, 18 deletions
diff --git a/drivers/dma/sh/shdma-base.c b/drivers/dma/sh/shdma-base.c
index ff060d0da908..f75ebfa735c0 100644
--- a/drivers/dma/sh/shdma-base.c
+++ b/drivers/dma/sh/shdma-base.c
@@ -76,7 +76,7 @@ static dma_cookie_t shdma_tx_submit(struct dma_async_tx_descriptor *tx)
76 container_of(tx, struct shdma_desc, async_tx), 76 container_of(tx, struct shdma_desc, async_tx),
77 *last = desc; 77 *last = desc;
78 struct shdma_chan *schan = to_shdma_chan(tx->chan); 78 struct shdma_chan *schan = to_shdma_chan(tx->chan);
79 struct shdma_slave *slave = tx->chan->private; 79 struct shdma_slave *slave = schan->slave;
80 dma_async_tx_callback callback = tx->callback; 80 dma_async_tx_callback callback = tx->callback;
81 dma_cookie_t cookie; 81 dma_cookie_t cookie;
82 bool power_up; 82 bool power_up;
@@ -208,6 +208,7 @@ static int shdma_alloc_chan_resources(struct dma_chan *chan)
208 goto edescalloc; 208 goto edescalloc;
209 } 209 }
210 schan->desc_num = NR_DESCS_PER_CHANNEL; 210 schan->desc_num = NR_DESCS_PER_CHANNEL;
211 schan->slave = slave;
211 212
212 for (i = 0; i < NR_DESCS_PER_CHANNEL; i++) { 213 for (i = 0; i < NR_DESCS_PER_CHANNEL; i++) {
213 desc = ops->embedded_desc(schan->desc, i); 214 desc = ops->embedded_desc(schan->desc, i);
@@ -365,9 +366,9 @@ static void shdma_free_chan_resources(struct dma_chan *chan)
365 if (!list_empty(&schan->ld_queue)) 366 if (!list_empty(&schan->ld_queue))
366 shdma_chan_ld_cleanup(schan, true); 367 shdma_chan_ld_cleanup(schan, true);
367 368
368 if (chan->private) { 369 if (schan->slave) {
369 /* The caller is holding dma_list_mutex */ 370 /* The caller is holding dma_list_mutex */
370 struct shdma_slave *slave = chan->private; 371 struct shdma_slave *slave = schan->slave;
371 clear_bit(slave->slave_id, shdma_slave_used); 372 clear_bit(slave->slave_id, shdma_slave_used);
372 chan->private = NULL; 373 chan->private = NULL;
373 } 374 }
@@ -558,7 +559,7 @@ static struct dma_async_tx_descriptor *shdma_prep_slave_sg(
558 struct shdma_chan *schan = to_shdma_chan(chan); 559 struct shdma_chan *schan = to_shdma_chan(chan);
559 struct shdma_dev *sdev = to_shdma_dev(schan->dma_chan.device); 560 struct shdma_dev *sdev = to_shdma_dev(schan->dma_chan.device);
560 const struct shdma_ops *ops = sdev->ops; 561 const struct shdma_ops *ops = sdev->ops;
561 struct shdma_slave *slave = chan->private; 562 struct shdma_slave *slave = schan->slave;
562 dma_addr_t slave_addr; 563 dma_addr_t slave_addr;
563 564
564 if (!chan) 565 if (!chan)
diff --git a/drivers/dma/sh/shdma.c b/drivers/dma/sh/shdma.c
index f06906f281ac..9f0a2e507ac3 100644
--- a/drivers/dma/sh/shdma.c
+++ b/drivers/dma/sh/shdma.c
@@ -291,10 +291,8 @@ static void sh_dmae_setup_xfer(struct shdma_chan *schan,
291 shdma_chan); 291 shdma_chan);
292 292
293 if (sslave) { 293 if (sslave) {
294 struct sh_dmae_slave *slave = container_of(sslave,
295 struct sh_dmae_slave, shdma_slave);
296 const struct sh_dmae_slave_config *cfg = 294 const struct sh_dmae_slave_config *cfg =
297 slave->config; 295 sh_chan->config;
298 296
299 dmae_set_dmars(sh_chan, cfg->mid_rid); 297 dmae_set_dmars(sh_chan, cfg->mid_rid);
300 dmae_set_chcr(sh_chan, cfg->chcr); 298 dmae_set_chcr(sh_chan, cfg->chcr);
@@ -326,13 +324,11 @@ static int sh_dmae_set_slave(struct shdma_chan *schan,
326{ 324{
327 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, 325 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan,
328 shdma_chan); 326 shdma_chan);
329 struct sh_dmae_slave *slave = container_of(sslave, struct sh_dmae_slave,
330 shdma_slave);
331 const struct sh_dmae_slave_config *cfg = dmae_find_slave(sh_chan, sslave->slave_id); 327 const struct sh_dmae_slave_config *cfg = dmae_find_slave(sh_chan, sslave->slave_id);
332 if (!cfg) 328 if (!cfg)
333 return -ENODEV; 329 return -ENODEV;
334 330
335 slave->config = cfg; 331 sh_chan->config = cfg;
336 332
337 return 0; 333 return 0;
338} 334}
@@ -579,13 +575,12 @@ static int sh_dmae_resume(struct device *dev)
579 575
580 for (i = 0; i < shdev->pdata->channel_num; i++) { 576 for (i = 0; i < shdev->pdata->channel_num; i++) {
581 struct sh_dmae_chan *sh_chan = shdev->chan[i]; 577 struct sh_dmae_chan *sh_chan = shdev->chan[i];
582 struct sh_dmae_slave *param = sh_chan->shdma_chan.dma_chan.private;
583 578
584 if (!sh_chan->shdma_chan.desc_num) 579 if (!sh_chan->shdma_chan.desc_num)
585 continue; 580 continue;
586 581
587 if (param) { 582 if (sh_chan->shdma_chan.slave) {
588 const struct sh_dmae_slave_config *cfg = param->config; 583 const struct sh_dmae_slave_config *cfg = sh_chan->config;
589 dmae_set_dmars(sh_chan, cfg->mid_rid); 584 dmae_set_dmars(sh_chan, cfg->mid_rid);
590 dmae_set_chcr(sh_chan, cfg->chcr); 585 dmae_set_chcr(sh_chan, cfg->chcr);
591 } else { 586 } else {
@@ -609,14 +604,15 @@ const struct dev_pm_ops sh_dmae_pm = {
609 604
610static dma_addr_t sh_dmae_slave_addr(struct shdma_chan *schan) 605static dma_addr_t sh_dmae_slave_addr(struct shdma_chan *schan)
611{ 606{
612 struct sh_dmae_slave *param = schan->dma_chan.private; 607 struct sh_dmae_chan *sh_chan = container_of(schan,
608 struct sh_dmae_chan, shdma_chan);
613 609
614 /* 610 /*
615 * Implicit BUG_ON(!param) 611 * Implicit BUG_ON(!sh_chan->config)
616 * if (param != NULL), this is a successfully requested slave channel, 612 * This is an exclusive slave DMA operation, may only be called after a
617 * therefore param->config != NULL too. 613 * successful slave configuration.
618 */ 614 */
619 return param->config->addr; 615 return sh_chan->config->addr;
620} 616}
621 617
622static struct shdma_desc *sh_dmae_embedded_desc(void *buf, int i) 618static struct shdma_desc *sh_dmae_embedded_desc(void *buf, int i)
diff --git a/drivers/dma/sh/shdma.h b/drivers/dma/sh/shdma.h
index 840e47d1c86c..9314e93225db 100644
--- a/drivers/dma/sh/shdma.h
+++ b/drivers/dma/sh/shdma.h
@@ -13,6 +13,7 @@
13#ifndef __DMA_SHDMA_H 13#ifndef __DMA_SHDMA_H
14#define __DMA_SHDMA_H 14#define __DMA_SHDMA_H
15 15
16#include <linux/sh_dma.h>
16#include <linux/shdma-base.h> 17#include <linux/shdma-base.h>
17#include <linux/dmaengine.h> 18#include <linux/dmaengine.h>
18#include <linux/interrupt.h> 19#include <linux/interrupt.h>
@@ -25,6 +26,7 @@ struct device;
25 26
26struct sh_dmae_chan { 27struct sh_dmae_chan {
27 struct shdma_chan shdma_chan; 28 struct shdma_chan shdma_chan;
29 const struct sh_dmae_slave_config *config; /* Slave DMA configuration */
28 int xmit_shift; /* log_2(bytes_per_xfer) */ 30 int xmit_shift; /* log_2(bytes_per_xfer) */
29 u32 __iomem *base; 31 u32 __iomem *base;
30 char dev_id[16]; /* unique name per DMAC of channel */ 32 char dev_id[16]; /* unique name per DMAC of channel */