Patchwork ata/pata_arasan_cf: fill dma chan->private from pdata->dma_priv

login
register
mail settings
Submitter Viresh KUMAR
Date March 4, 2011, 11:09 a.m.
Message ID <aef168cd6b2fd8f73bc559c0413dda003fcd09d7.1299236795.git.viresh.kumar@st.com>
Download mbox | patch
Permalink /patch/85414/
State Not Applicable
Delegated to: David Miller
Headers show

Comments

Viresh KUMAR - March 4, 2011, 11:09 a.m.
Some DMA controllers (eg: drivers/dma/dw_dmac*) allow platform specific
configuration for dma transfers. User drivers need to set chan->private field
of channel with pointer to configuration data. This patch takes dma_priv data
from platform data and passes it to chan->private_data, in order to pass
platform specific configuration to DMAC controller.

Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
---
 drivers/ata/pata_arasan_cf.c        |    7 ++++++-
 include/linux/pata_arasan_cf_data.h |    2 ++
 2 files changed, 8 insertions(+), 1 deletions(-)
Tejun Heo - March 4, 2011, 11:16 a.m.
On Fri, Mar 04, 2011 at 04:39:29PM +0530, Viresh Kumar wrote:
> Some DMA controllers (eg: drivers/dma/dw_dmac*) allow platform specific
> configuration for dma transfers. User drivers need to set chan->private field
> of channel with pointer to configuration data. This patch takes dma_priv data
> from platform data and passes it to chan->private_data, in order to pass
> platform specific configuration to DMAC controller.
> 
> Signed-off-by: Viresh Kumar <viresh.kumar@st.com>

Acked-by: Tejun Heo <tj@kernel.org>
Jeff Garzik - March 14, 2011, 6:58 a.m.
On 03/04/2011 06:09 AM, Viresh Kumar wrote:
> Some DMA controllers (eg: drivers/dma/dw_dmac*) allow platform specific
> configuration for dma transfers. User drivers need to set chan->private field
> of channel with pointer to configuration data. This patch takes dma_priv data
> from platform data and passes it to chan->private_data, in order to pass
> platform specific configuration to DMAC controller.
>
> Signed-off-by: Viresh Kumar<viresh.kumar@st.com>
> ---
>   drivers/ata/pata_arasan_cf.c        |    7 ++++++-
>   include/linux/pata_arasan_cf_data.h |    2 ++

applied


--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/ata/pata_arasan_cf.c b/drivers/ata/pata_arasan_cf.c
index b99b3fc..d67bff7 100644
--- a/drivers/ata/pata_arasan_cf.c
+++ b/drivers/ata/pata_arasan_cf.c
@@ -210,6 +210,8 @@  struct arasan_cf_dev {
 	struct dma_chan *dma_chan;
 	/* Mask for DMA transfers */
 	dma_cap_mask_t mask;
+	/* dma channel private data */
+	void *dma_priv;
 	/* DMA transfer work */
 	struct work_struct work;
 	/* DMA delayed finish work */
@@ -356,6 +358,7 @@  static void dma_callback(void *dev)
 
 static bool filter(struct dma_chan *chan, void *slave)
 {
+	chan->private = slave;
 	return true;
 }
 
@@ -526,7 +529,8 @@  static void data_xfer(struct work_struct *work)
 
 	/* request dma channels */
 	/* dma_request_channel may sleep, so calling from process context */
-	acdev->dma_chan = dma_request_channel(acdev->mask, filter, NULL);
+	acdev->dma_chan = dma_request_channel(acdev->mask, filter,
+			acdev->dma_priv);
 	if (!acdev->dma_chan) {
 		dev_err(acdev->host->dev, "Unable to get dma_chan\n");
 		goto chan_request_fail;
@@ -853,6 +857,7 @@  static int __devinit arasan_cf_probe(struct platform_device *pdev)
 	INIT_WORK(&acdev->work, data_xfer);
 	INIT_DELAYED_WORK(&acdev->dwork, delayed_finish);
 	dma_cap_set(DMA_MEMCPY, acdev->mask);
+	acdev->dma_priv = pdata->dma_priv;
 
 	/* Handle platform specific quirks */
 	if (pdata->quirk) {
diff --git a/include/linux/pata_arasan_cf_data.h b/include/linux/pata_arasan_cf_data.h
index d979fe6..a6ee9aa 100644
--- a/include/linux/pata_arasan_cf_data.h
+++ b/include/linux/pata_arasan_cf_data.h
@@ -37,6 +37,8 @@  struct arasan_cf_pdata {
 	#define CF_BROKEN_PIO			(1)
 	#define CF_BROKEN_MWDMA			(1 << 1)
 	#define CF_BROKEN_UDMA			(1 << 2)
+	/* This is platform specific data for the DMA controller */
+	void *dma_priv;
 };
 
 static inline void