Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 25 Jul 2012 00:12:54 +0000 (17:12 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 25 Jul 2012 00:12:54 +0000 (17:12 -0700)
Pull slave-dmaengine update from Vinod Koul:
 "This time we have a new dmaengine driver from the tegra folks.  Also
  we have Guennadi's cleanup of sh drivers which incudes a library for
  sh drivers.  And the usual odd fixes in bunch of drivers and some nice
  cleanup of dw_dmac from Andy."

Fix up conflicts in drivers/mmc/host/sh_mmcif.c

* 'next' of git://git.infradead.org/users/vkoul/slave-dma: (46 commits)
  dmaengine: Cleanup logging messages
  mmc: sh_mmcif: switch to the new DMA channel allocation and configuration
  dma: sh: provide a migration path for slave drivers to stop using .private
  dma: sh: use an integer slave ID to improve API compatibility
  dmaengine: shdma: prepare to stop using struct dma_chan::private
  sh: remove unused DMA device pointer from SIU platform data
  ASoC: siu: don't use DMA device for channel filtering
  dmaengine: shdma: (cosmetic) simplify a static function
  dmaengine: at_hdmac: add a few const qualifiers
  dw_dmac: use 'u32' for LLI structure members, not dma_addr_t
  dw_dmac: mark dwc_dump_lli inline
  dma: mxs-dma: Export missing symbols from mxs-dma.c
  dma: shdma: convert to the shdma base library
  ASoC: fsi: prepare for conversion to the shdma base library
  usb: renesas_usbhs: prepare for conversion to the shdma base library
  ASoC: siu: prepare for conversion to the shdma base library
  serial: sh-sci: prepare for conversion to the shdma base library
  mmc: sh_mobile_sdhi: prepare for conversion to the shdma base library
  mmc: sh_mmcif: remove unneeded struct sh_mmcif_dma, prepare to shdma conversion
  dma: shdma: prepare for conversion to the shdma base library
  ...

1  2 
drivers/dma/dw_dmac.c
drivers/mmc/host/sh_mmcif.c
drivers/mmc/host/sh_mobile_sdhi.c
drivers/tty/serial/sh-sci.c
drivers/usb/renesas_usbhs/fifo.c
include/linux/mmc/sh_mmcif.h
sound/soc/sh/fsi.c

Simple merge
@@@ -376,56 -372,63 +374,66 @@@ static void sh_mmcif_start_dma_tx(struc
  static void sh_mmcif_request_dma(struct sh_mmcif_host *host,
                                 struct sh_mmcif_plat_data *pdata)
  {
-       struct sh_dmae_slave *tx, *rx;
+       struct resource *res = platform_get_resource(host->pd, IORESOURCE_MEM, 0);
+       struct dma_slave_config cfg;
+       dma_cap_mask_t mask;
+       int ret;
        host->dma_active = false;
  
-       /* We can only either use DMA for both Tx and Rx or not use it at all */
-       if (pdata->dma) {
-               dev_warn(&host->pd->dev,
-                        "Update your platform to use embedded DMA slave IDs\n");
-               tx = &pdata->dma->chan_priv_tx;
-               rx = &pdata->dma->chan_priv_rx;
-       } else {
-               tx = &host->dma_slave_tx;
-               tx->slave_id = pdata->slave_id_tx;
-               rx = &host->dma_slave_rx;
-               rx->slave_id = pdata->slave_id_rx;
-       }
-       if (tx->slave_id > 0 && rx->slave_id > 0) {
-               dma_cap_mask_t mask;
-               dma_cap_zero(mask);
-               dma_cap_set(DMA_SLAVE, mask);
-               host->chan_tx = dma_request_channel(mask, sh_mmcif_filter, tx);
-               dev_dbg(&host->pd->dev, "%s: TX: got channel %p\n", __func__,
-                       host->chan_tx);
 +      if (!pdata)
 +              return;
 +
+       if (pdata->slave_id_tx <= 0 || pdata->slave_id_rx <= 0)
+               return;
  
-               if (!host->chan_tx)
-                       return;
+       /* We can only either use DMA for both Tx and Rx or not use it at all */
+       dma_cap_zero(mask);
+       dma_cap_set(DMA_SLAVE, mask);
  
-               host->chan_rx = dma_request_channel(mask, sh_mmcif_filter, rx);
-               dev_dbg(&host->pd->dev, "%s: RX: got channel %p\n", __func__,
-                       host->chan_rx);
+       host->chan_tx = dma_request_channel(mask, shdma_chan_filter,
+                                           (void *)pdata->slave_id_tx);
+       dev_dbg(&host->pd->dev, "%s: TX: got channel %p\n", __func__,
+               host->chan_tx);
  
-               if (!host->chan_rx) {
-                       dma_release_channel(host->chan_tx);
-                       host->chan_tx = NULL;
-                       return;
-               }
+       if (!host->chan_tx)
+               return;
  
-               init_completion(&host->dma_complete);
-       }
+       cfg.slave_id = pdata->slave_id_tx;
+       cfg.direction = DMA_MEM_TO_DEV;
+       cfg.dst_addr = res->start + MMCIF_CE_DATA;
+       cfg.src_addr = 0;
+       ret = dmaengine_slave_config(host->chan_tx, &cfg);
+       if (ret < 0)
+               goto ecfgtx;
+       host->chan_rx = dma_request_channel(mask, shdma_chan_filter,
+                                           (void *)pdata->slave_id_rx);
+       dev_dbg(&host->pd->dev, "%s: RX: got channel %p\n", __func__,
+               host->chan_rx);
+       if (!host->chan_rx)
+               goto erqrx;
+       cfg.slave_id = pdata->slave_id_rx;
+       cfg.direction = DMA_DEV_TO_MEM;
+       cfg.dst_addr = 0;
+       cfg.src_addr = res->start + MMCIF_CE_DATA;
+       ret = dmaengine_slave_config(host->chan_rx, &cfg);
+       if (ret < 0)
+               goto ecfgrx;
+       init_completion(&host->dma_complete);
+       return;
+ ecfgrx:
+       dma_release_channel(host->chan_rx);
+       host->chan_rx = NULL;
+ erqrx:
+ ecfgtx:
+       dma_release_channel(host->chan_tx);
+       host->chan_tx = NULL;
  }
  
  static void sh_mmcif_release_dma(struct sh_mmcif_host *host)
@@@ -161,18 -142,13 +161,18 @@@ static int __devinit sh_mobile_sdhi_pro
                        mmc_data->write16_hook = sh_mobile_sdhi_write16_hook;
                mmc_data->ocr_mask = p->tmio_ocr_mask;
                mmc_data->capabilities |= p->tmio_caps;
 +              mmc_data->capabilities2 |= p->tmio_caps2;
                mmc_data->cd_gpio = p->cd_gpio;
 +              if (p->set_pwr)
 +                      mmc_data->set_pwr = sh_mobile_sdhi_set_pwr;
 +              if (p->get_cd)
 +                      mmc_data->get_cd = sh_mobile_sdhi_get_cd;
  
                if (p->dma_slave_tx > 0 && p->dma_slave_rx > 0) {
-                       priv->param_tx.slave_id = p->dma_slave_tx;
-                       priv->param_rx.slave_id = p->dma_slave_rx;
-                       priv->dma_priv.chan_priv_tx = &priv->param_tx;
-                       priv->dma_priv.chan_priv_rx = &priv->param_rx;
+                       priv->param_tx.shdma_slave.slave_id = p->dma_slave_tx;
+                       priv->param_rx.shdma_slave.slave_id = p->dma_slave_rx;
+                       priv->dma_priv.chan_priv_tx = &priv->param_tx.shdma_slave;
+                       priv->dma_priv.chan_priv_rx = &priv->param_rx.shdma_slave;
                        priv->dma_priv.alignment_shift = 1; /* 2-byte alignment */
                        mmc_data->dma = &priv->dma_priv;
                }
Simple merge
Simple merge
@@@ -41,11 -36,8 +36,10 @@@ struct sh_mmcif_plat_data 
        void (*set_pwr)(struct platform_device *pdev, int state);
        void (*down_pwr)(struct platform_device *pdev);
        int (*get_cd)(struct platform_device *pdef);
-       struct sh_mmcif_dma     *dma;           /* Deprecated. Instead */
-       unsigned int            slave_id_tx;    /* use embedded slave_id_[tr]x */
+       unsigned int            slave_id_tx;    /* embedded slave_id_[tr]x */
        unsigned int            slave_id_rx;
 +      bool                    use_cd_gpio : 1;
 +      unsigned int            cd_gpio;
        u8                      sup_pclk;       /* 1 :SH7757, 0: SH7724/SH7372 */
        unsigned long           caps;
        u32                     ocr;
Simple merge