Loading include/sound/dmaengine_pcm.h +0 −5 Original line number Original line Diff line number Diff line Loading @@ -90,11 +90,6 @@ void snd_dmaengine_pcm_set_config_from_dai_data( * makes sense if SND_DMAENGINE_PCM_FLAG_COMPAT is set as well. * makes sense if SND_DMAENGINE_PCM_FLAG_COMPAT is set as well. */ */ #define SND_DMAENGINE_PCM_FLAG_NO_DT BIT(1) #define SND_DMAENGINE_PCM_FLAG_NO_DT BIT(1) /* * The platforms dmaengine driver does not support reporting the amount of * bytes that are still left to transfer. */ #define SND_DMAENGINE_PCM_FLAG_NO_RESIDUE BIT(2) /* /* * The PCM is half duplex and the DMA channel is shared between capture and * The PCM is half duplex and the DMA channel is shared between capture and * playback. * playback. Loading sound/soc/atmel/atmel-pcm-dma.c +1 −2 Original line number Original line Diff line number Diff line Loading @@ -124,8 +124,7 @@ static const struct snd_dmaengine_pcm_config atmel_dmaengine_pcm_config = { int atmel_pcm_dma_platform_register(struct device *dev) int atmel_pcm_dma_platform_register(struct device *dev) { { return snd_dmaengine_pcm_register(dev, &atmel_dmaengine_pcm_config, return snd_dmaengine_pcm_register(dev, &atmel_dmaengine_pcm_config, 0); SND_DMAENGINE_PCM_FLAG_NO_RESIDUE); } } EXPORT_SYMBOL(atmel_pcm_dma_platform_register); EXPORT_SYMBOL(atmel_pcm_dma_platform_register); Loading sound/soc/cirrus/ep93xx-pcm.c +0 −1 Original line number Original line Diff line number Diff line Loading @@ -60,7 +60,6 @@ int devm_ep93xx_pcm_platform_register(struct device *dev) { { return devm_snd_dmaengine_pcm_register(dev, return devm_snd_dmaengine_pcm_register(dev, &ep93xx_dmaengine_pcm_config, &ep93xx_dmaengine_pcm_config, SND_DMAENGINE_PCM_FLAG_NO_RESIDUE | SND_DMAENGINE_PCM_FLAG_NO_DT | SND_DMAENGINE_PCM_FLAG_NO_DT | SND_DMAENGINE_PCM_FLAG_COMPAT); SND_DMAENGINE_PCM_FLAG_COMPAT); } } Loading sound/soc/fsl/fsl_sai.c +1 −2 Original line number Original line Diff line number Diff line Loading @@ -664,8 +664,7 @@ static int fsl_sai_probe(struct platform_device *pdev) if (sai->sai_on_imx) if (sai->sai_on_imx) return imx_pcm_dma_init(pdev); return imx_pcm_dma_init(pdev); else else return devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, return devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0); SND_DMAENGINE_PCM_FLAG_NO_RESIDUE); } } static const struct of_device_id fsl_sai_ids[] = { static const struct of_device_id fsl_sai_ids[] = { Loading sound/soc/soc-generic-dmaengine-pcm.c +14 −11 Original line number Original line Diff line number Diff line Loading @@ -24,6 +24,12 @@ #include <sound/dmaengine_pcm.h> #include <sound/dmaengine_pcm.h> /* * The platforms dmaengine driver does not support reporting the amount of * bytes that are still left to transfer. */ #define SND_DMAENGINE_PCM_FLAG_NO_RESIDUE BIT(31) struct dmaengine_pcm { struct dmaengine_pcm { struct dma_chan *chan[SNDRV_PCM_STREAM_LAST + 1]; struct dma_chan *chan[SNDRV_PCM_STREAM_LAST + 1]; const struct snd_dmaengine_pcm_config *config; const struct snd_dmaengine_pcm_config *config; Loading Loading @@ -222,14 +228,18 @@ static struct dma_chan *dmaengine_pcm_compat_request_channel( return snd_dmaengine_pcm_request_channel(fn, dma_data->filter_data); return snd_dmaengine_pcm_request_channel(fn, dma_data->filter_data); } } static bool dmaengine_pcm_can_report_residue(struct dma_chan *chan) static bool dmaengine_pcm_can_report_residue(struct device *dev, struct dma_chan *chan) { { struct dma_slave_caps dma_caps; struct dma_slave_caps dma_caps; int ret; int ret; ret = dma_get_slave_caps(chan, &dma_caps); ret = dma_get_slave_caps(chan, &dma_caps); if (ret != 0) if (ret != 0) { return true; dev_warn(dev, "Failed to get DMA channel capabilities, falling back to period counting: %d\n", ret); return false; } if (dma_caps.residue_granularity == DMA_RESIDUE_GRANULARITY_DESCRIPTOR) if (dma_caps.residue_granularity == DMA_RESIDUE_GRANULARITY_DESCRIPTOR) return false; return false; Loading Loading @@ -289,14 +299,7 @@ static int dmaengine_pcm_new(struct snd_soc_pcm_runtime *rtd) if (ret) if (ret) return ret; return ret; /* if (!dmaengine_pcm_can_report_residue(dev, pcm->chan[i])) * This will only return false if we know for sure that at least * one channel does not support residue reporting. If the DMA * driver does not implement the slave_caps API we rely having * the NO_RESIDUE flag set manually in case residue reporting is * not supported. */ if (!dmaengine_pcm_can_report_residue(pcm->chan[i])) pcm->flags |= SND_DMAENGINE_PCM_FLAG_NO_RESIDUE; pcm->flags |= SND_DMAENGINE_PCM_FLAG_NO_RESIDUE; } } Loading Loading
include/sound/dmaengine_pcm.h +0 −5 Original line number Original line Diff line number Diff line Loading @@ -90,11 +90,6 @@ void snd_dmaengine_pcm_set_config_from_dai_data( * makes sense if SND_DMAENGINE_PCM_FLAG_COMPAT is set as well. * makes sense if SND_DMAENGINE_PCM_FLAG_COMPAT is set as well. */ */ #define SND_DMAENGINE_PCM_FLAG_NO_DT BIT(1) #define SND_DMAENGINE_PCM_FLAG_NO_DT BIT(1) /* * The platforms dmaengine driver does not support reporting the amount of * bytes that are still left to transfer. */ #define SND_DMAENGINE_PCM_FLAG_NO_RESIDUE BIT(2) /* /* * The PCM is half duplex and the DMA channel is shared between capture and * The PCM is half duplex and the DMA channel is shared between capture and * playback. * playback. Loading
sound/soc/atmel/atmel-pcm-dma.c +1 −2 Original line number Original line Diff line number Diff line Loading @@ -124,8 +124,7 @@ static const struct snd_dmaengine_pcm_config atmel_dmaengine_pcm_config = { int atmel_pcm_dma_platform_register(struct device *dev) int atmel_pcm_dma_platform_register(struct device *dev) { { return snd_dmaengine_pcm_register(dev, &atmel_dmaengine_pcm_config, return snd_dmaengine_pcm_register(dev, &atmel_dmaengine_pcm_config, 0); SND_DMAENGINE_PCM_FLAG_NO_RESIDUE); } } EXPORT_SYMBOL(atmel_pcm_dma_platform_register); EXPORT_SYMBOL(atmel_pcm_dma_platform_register); Loading
sound/soc/cirrus/ep93xx-pcm.c +0 −1 Original line number Original line Diff line number Diff line Loading @@ -60,7 +60,6 @@ int devm_ep93xx_pcm_platform_register(struct device *dev) { { return devm_snd_dmaengine_pcm_register(dev, return devm_snd_dmaengine_pcm_register(dev, &ep93xx_dmaengine_pcm_config, &ep93xx_dmaengine_pcm_config, SND_DMAENGINE_PCM_FLAG_NO_RESIDUE | SND_DMAENGINE_PCM_FLAG_NO_DT | SND_DMAENGINE_PCM_FLAG_NO_DT | SND_DMAENGINE_PCM_FLAG_COMPAT); SND_DMAENGINE_PCM_FLAG_COMPAT); } } Loading
sound/soc/fsl/fsl_sai.c +1 −2 Original line number Original line Diff line number Diff line Loading @@ -664,8 +664,7 @@ static int fsl_sai_probe(struct platform_device *pdev) if (sai->sai_on_imx) if (sai->sai_on_imx) return imx_pcm_dma_init(pdev); return imx_pcm_dma_init(pdev); else else return devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, return devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0); SND_DMAENGINE_PCM_FLAG_NO_RESIDUE); } } static const struct of_device_id fsl_sai_ids[] = { static const struct of_device_id fsl_sai_ids[] = { Loading
sound/soc/soc-generic-dmaengine-pcm.c +14 −11 Original line number Original line Diff line number Diff line Loading @@ -24,6 +24,12 @@ #include <sound/dmaengine_pcm.h> #include <sound/dmaengine_pcm.h> /* * The platforms dmaengine driver does not support reporting the amount of * bytes that are still left to transfer. */ #define SND_DMAENGINE_PCM_FLAG_NO_RESIDUE BIT(31) struct dmaengine_pcm { struct dmaengine_pcm { struct dma_chan *chan[SNDRV_PCM_STREAM_LAST + 1]; struct dma_chan *chan[SNDRV_PCM_STREAM_LAST + 1]; const struct snd_dmaengine_pcm_config *config; const struct snd_dmaengine_pcm_config *config; Loading Loading @@ -222,14 +228,18 @@ static struct dma_chan *dmaengine_pcm_compat_request_channel( return snd_dmaengine_pcm_request_channel(fn, dma_data->filter_data); return snd_dmaengine_pcm_request_channel(fn, dma_data->filter_data); } } static bool dmaengine_pcm_can_report_residue(struct dma_chan *chan) static bool dmaengine_pcm_can_report_residue(struct device *dev, struct dma_chan *chan) { { struct dma_slave_caps dma_caps; struct dma_slave_caps dma_caps; int ret; int ret; ret = dma_get_slave_caps(chan, &dma_caps); ret = dma_get_slave_caps(chan, &dma_caps); if (ret != 0) if (ret != 0) { return true; dev_warn(dev, "Failed to get DMA channel capabilities, falling back to period counting: %d\n", ret); return false; } if (dma_caps.residue_granularity == DMA_RESIDUE_GRANULARITY_DESCRIPTOR) if (dma_caps.residue_granularity == DMA_RESIDUE_GRANULARITY_DESCRIPTOR) return false; return false; Loading Loading @@ -289,14 +299,7 @@ static int dmaengine_pcm_new(struct snd_soc_pcm_runtime *rtd) if (ret) if (ret) return ret; return ret; /* if (!dmaengine_pcm_can_report_residue(dev, pcm->chan[i])) * This will only return false if we know for sure that at least * one channel does not support residue reporting. If the DMA * driver does not implement the slave_caps API we rely having * the NO_RESIDUE flag set manually in case residue reporting is * not supported. */ if (!dmaengine_pcm_can_report_residue(pcm->chan[i])) pcm->flags |= SND_DMAENGINE_PCM_FLAG_NO_RESIDUE; pcm->flags |= SND_DMAENGINE_PCM_FLAG_NO_RESIDUE; } } Loading