ata/pata_arasan_cf: fill dma chan->private from pdata->dma_priv
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> Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
This commit is contained in:
parent
8d7b1c70b3
commit
60a230e4a6
@ -210,6 +210,8 @@ struct arasan_cf_dev {
|
|||||||
struct dma_chan *dma_chan;
|
struct dma_chan *dma_chan;
|
||||||
/* Mask for DMA transfers */
|
/* Mask for DMA transfers */
|
||||||
dma_cap_mask_t mask;
|
dma_cap_mask_t mask;
|
||||||
|
/* dma channel private data */
|
||||||
|
void *dma_priv;
|
||||||
/* DMA transfer work */
|
/* DMA transfer work */
|
||||||
struct work_struct work;
|
struct work_struct work;
|
||||||
/* DMA delayed finish work */
|
/* DMA delayed finish work */
|
||||||
@ -356,6 +358,7 @@ static void dma_callback(void *dev)
|
|||||||
|
|
||||||
static bool filter(struct dma_chan *chan, void *slave)
|
static bool filter(struct dma_chan *chan, void *slave)
|
||||||
{
|
{
|
||||||
|
chan->private = slave;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -526,7 +529,8 @@ static void data_xfer(struct work_struct *work)
|
|||||||
|
|
||||||
/* request dma channels */
|
/* request dma channels */
|
||||||
/* dma_request_channel may sleep, so calling from process context */
|
/* 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) {
|
if (!acdev->dma_chan) {
|
||||||
dev_err(acdev->host->dev, "Unable to get dma_chan\n");
|
dev_err(acdev->host->dev, "Unable to get dma_chan\n");
|
||||||
goto chan_request_fail;
|
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_WORK(&acdev->work, data_xfer);
|
||||||
INIT_DELAYED_WORK(&acdev->dwork, delayed_finish);
|
INIT_DELAYED_WORK(&acdev->dwork, delayed_finish);
|
||||||
dma_cap_set(DMA_MEMCPY, acdev->mask);
|
dma_cap_set(DMA_MEMCPY, acdev->mask);
|
||||||
|
acdev->dma_priv = pdata->dma_priv;
|
||||||
|
|
||||||
/* Handle platform specific quirks */
|
/* Handle platform specific quirks */
|
||||||
if (pdata->quirk) {
|
if (pdata->quirk) {
|
||||||
|
@ -37,6 +37,8 @@ struct arasan_cf_pdata {
|
|||||||
#define CF_BROKEN_PIO (1)
|
#define CF_BROKEN_PIO (1)
|
||||||
#define CF_BROKEN_MWDMA (1 << 1)
|
#define CF_BROKEN_MWDMA (1 << 1)
|
||||||
#define CF_BROKEN_UDMA (1 << 2)
|
#define CF_BROKEN_UDMA (1 << 2)
|
||||||
|
/* This is platform specific data for the DMA controller */
|
||||||
|
void *dma_priv;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
Loading…
Reference in New Issue
Block a user