Merge branch 'for-linus' of git://android.git.kernel.org/kernel/tegra
[pandora-kernel.git] / drivers / ata / pata_arasan_cf.c
index 8b060c4..719bb73 100644 (file)
@@ -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;
 }
 
@@ -382,7 +385,7 @@ static inline int wait4buf(struct arasan_cf_dev *acdev)
                return -ETIMEDOUT;
        }
 
-       /* Check if PIO Error interrupt has occured */
+       /* Check if PIO Error interrupt has occurred */
        if (acdev->dma_status & ATA_DMA_ERR)
                return -EAGAIN;
 
@@ -447,7 +450,7 @@ static int sg_xfer(struct arasan_cf_dev *acdev, struct scatterlist *sg)
        /*
         * For each sg:
         * MAX_XFER_COUNT data will be transferred before we get transfer
-        * complete interrupt. Inbetween after FIFO_SIZE data
+        * complete interrupt. Between after FIFO_SIZE data
         * buffer available interrupt will be generated. At this time we will
         * fill FIFO again: max FIFO_SIZE data.
         */
@@ -460,7 +463,7 @@ static int sg_xfer(struct arasan_cf_dev *acdev, struct scatterlist *sg)
                                acdev->vbase + XFER_CTR);
                spin_unlock_irqrestore(&acdev->host->lock, flags);
 
-               /* continue dma xfers untill current sg is completed */
+               /* continue dma xfers until current sg is completed */
                while (xfer_cnt) {
                        /* wait for read to complete */
                        if (!write) {
@@ -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;
@@ -559,7 +563,7 @@ static void data_xfer(struct work_struct *work)
 
 chan_request_fail:
        spin_lock_irqsave(&acdev->host->lock, flags);
-       /* error when transfering data to/from memory */
+       /* error when transferring data to/from memory */
        qc->err_mask |= AC_ERR_HOST_BUS;
        qc->ap->hsm_task_state = HSM_ST_ERR;
 
@@ -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) {