Loading drivers/mmc/host/sh_mmcif.c +16 −4 Original line number Diff line number Diff line Loading @@ -165,6 +165,8 @@ struct sh_mmcif_host { struct mmc_host *mmc; struct mmc_data *data; struct platform_device *pd; struct sh_dmae_slave dma_slave_tx; struct sh_dmae_slave dma_slave_rx; struct clk *hclk; unsigned int clk; int bus_width; Loading Loading @@ -323,25 +325,35 @@ static bool sh_mmcif_filter(struct dma_chan *chan, void *arg) static void sh_mmcif_request_dma(struct sh_mmcif_host *host, struct sh_mmcif_plat_data *pdata) { struct sh_dmae_slave *tx, *rx; 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, &pdata->dma->chan_priv_tx); 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 (!host->chan_tx) return; host->chan_rx = dma_request_channel(mask, sh_mmcif_filter, &pdata->dma->chan_priv_rx); 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); Loading include/linux/mmc/sh_mmcif.h +3 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,9 @@ 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; struct sh_mmcif_dma *dma; /* Deprecated. Instead */ unsigned int slave_id_tx; /* use embedded slave_id_[tr]x */ unsigned int slave_id_rx; u8 sup_pclk; /* 1 :SH7757, 0: SH7724/SH7372 */ unsigned long caps; u32 ocr; Loading Loading
drivers/mmc/host/sh_mmcif.c +16 −4 Original line number Diff line number Diff line Loading @@ -165,6 +165,8 @@ struct sh_mmcif_host { struct mmc_host *mmc; struct mmc_data *data; struct platform_device *pd; struct sh_dmae_slave dma_slave_tx; struct sh_dmae_slave dma_slave_rx; struct clk *hclk; unsigned int clk; int bus_width; Loading Loading @@ -323,25 +325,35 @@ static bool sh_mmcif_filter(struct dma_chan *chan, void *arg) static void sh_mmcif_request_dma(struct sh_mmcif_host *host, struct sh_mmcif_plat_data *pdata) { struct sh_dmae_slave *tx, *rx; 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, &pdata->dma->chan_priv_tx); 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 (!host->chan_tx) return; host->chan_rx = dma_request_channel(mask, sh_mmcif_filter, &pdata->dma->chan_priv_rx); 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); Loading
include/linux/mmc/sh_mmcif.h +3 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,9 @@ 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; struct sh_mmcif_dma *dma; /* Deprecated. Instead */ unsigned int slave_id_tx; /* use embedded slave_id_[tr]x */ unsigned int slave_id_rx; u8 sup_pclk; /* 1 :SH7757, 0: SH7724/SH7372 */ unsigned long caps; u32 ocr; Loading