Loading Documentation/devicetree/bindings/sound/mxs-saif.txt +11 −6 Original line number Diff line number Diff line Loading @@ -3,8 +3,11 @@ Required properties: - compatible: Should be "fsl,<chip>-saif" - reg: Should contain registers location and length - interrupts: Should contain ERROR and DMA interrupts - fsl,saif-dma-channel: APBX DMA channel for the SAIF - interrupts: Should contain ERROR interrupt number - dmas: DMA specifier, consisting of a phandle to DMA controller node and SAIF DMA channel ID. Refer to dma.txt and fsl-mxs-dma.txt for details. - dma-names: Must be "rx-tx". Optional properties: - fsl,saif-master: phandle to the master SAIF. It's only required for Loading @@ -23,14 +26,16 @@ aliases { saif0: saif@80042000 { compatible = "fsl,imx28-saif"; reg = <0x80042000 2000>; interrupts = <59 80>; fsl,saif-dma-channel = <4>; interrupts = <59>; dmas = <&dma_apbx 4>; dma-names = "rx-tx"; }; saif1: saif@80046000 { compatible = "fsl,imx28-saif"; reg = <0x80046000 2000>; interrupts = <58 81>; fsl,saif-dma-channel = <5>; interrupts = <58>; dmas = <&dma_apbx 5>; dma-names = "rx-tx"; fsl,saif-master = <&saif0>; }; sound/soc/mxs/mxs-pcm.c +0 −18 Original line number Diff line number Diff line Loading @@ -49,24 +49,8 @@ static const struct snd_pcm_hardware snd_mxs_hardware = { .fifo_size = 32, }; static bool filter(struct dma_chan *chan, void *param) { struct mxs_pcm_dma_params *dma_params = param; if (!mxs_dma_is_apbx(chan)) return false; if (chan->chan_id != dma_params->chan_num) return false; chan->private = &dma_params->dma_data; return true; } static const struct snd_dmaengine_pcm_config mxs_dmaengine_pcm_config = { .pcm_hardware = &snd_mxs_hardware, .compat_filter_fn = filter, .prealloc_buffer_size = 64 * 1024, }; Loading @@ -74,8 +58,6 @@ int mxs_pcm_platform_register(struct device *dev) { return snd_dmaengine_pcm_register(dev, &mxs_dmaengine_pcm_config, SND_DMAENGINE_PCM_FLAG_NO_RESIDUE | SND_DMAENGINE_PCM_FLAG_NO_DT | SND_DMAENGINE_PCM_FLAG_COMPAT | SND_DMAENGINE_PCM_FLAG_HALF_DUPLEX); } EXPORT_SYMBOL_GPL(mxs_pcm_platform_register); Loading sound/soc/mxs/mxs-pcm.h +0 −7 Original line number Diff line number Diff line Loading @@ -19,13 +19,6 @@ #ifndef _MXS_PCM_H #define _MXS_PCM_H #include <linux/fsl/mxs-dma.h> struct mxs_pcm_dma_params { struct mxs_dma_data dma_data; int chan_num; }; int mxs_pcm_platform_register(struct device *dev); void mxs_pcm_platform_unregister(struct device *dev); Loading sound/soc/mxs/mxs-saif.c +1 −36 Original line number Diff line number Diff line Loading @@ -26,8 +26,6 @@ #include <linux/clk.h> #include <linux/delay.h> #include <linux/time.h> #include <linux/fsl/mxs-dma.h> #include <linux/pinctrl/consumer.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/pcm_params.h> Loading Loading @@ -605,8 +603,6 @@ static int mxs_saif_dai_probe(struct snd_soc_dai *dai) struct mxs_saif *saif = dev_get_drvdata(dai->dev); snd_soc_dai_set_drvdata(dai, saif); dai->playback_dma_data = &saif->dma_param; dai->capture_dma_data = &saif->dma_param; return 0; } Loading Loading @@ -665,9 +661,8 @@ static irqreturn_t mxs_saif_irq(int irq, void *dev_id) static int mxs_saif_probe(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; struct resource *iores, *dmares; struct resource *iores; struct mxs_saif *saif; struct pinctrl *pinctrl; int ret = 0; struct device_node *master; Loading Loading @@ -707,12 +702,6 @@ static int mxs_saif_probe(struct platform_device *pdev) mxs_saif[saif->id] = saif; pinctrl = devm_pinctrl_get_select_default(&pdev->dev); if (IS_ERR(pinctrl)) { ret = PTR_ERR(pinctrl); return ret; } saif->clk = devm_clk_get(&pdev->dev, NULL); if (IS_ERR(saif->clk)) { ret = PTR_ERR(saif->clk); Loading @@ -727,22 +716,6 @@ static int mxs_saif_probe(struct platform_device *pdev) if (IS_ERR(saif->base)) return PTR_ERR(saif->base); dmares = platform_get_resource(pdev, IORESOURCE_DMA, 0); if (!dmares) { /* * TODO: This is a temporary solution and should be changed * to use generic DMA binding later when the helplers get in. */ ret = of_property_read_u32(np, "fsl,saif-dma-channel", &saif->dma_param.chan_num); if (ret) { dev_err(&pdev->dev, "failed to get dma channel\n"); return ret; } } else { saif->dma_param.chan_num = dmares->start; } saif->irq = platform_get_irq(pdev, 0); if (saif->irq < 0) { ret = saif->irq; Loading @@ -759,14 +732,6 @@ static int mxs_saif_probe(struct platform_device *pdev) return ret; } saif->dma_param.dma_data.chan_irq = platform_get_irq(pdev, 1); if (saif->dma_param.dma_data.chan_irq < 0) { ret = saif->dma_param.dma_data.chan_irq; dev_err(&pdev->dev, "failed to get dma irq resource: %d\n", ret); return ret; } platform_set_drvdata(pdev, saif); ret = snd_soc_register_component(&pdev->dev, &mxs_saif_component, Loading sound/soc/mxs/mxs-saif.h +0 −1 Original line number Diff line number Diff line Loading @@ -117,7 +117,6 @@ struct mxs_saif { unsigned int mclk_in_use; void __iomem *base; int irq; struct mxs_pcm_dma_params dma_param; unsigned int id; unsigned int master_id; unsigned int cur_rate; Loading Loading
Documentation/devicetree/bindings/sound/mxs-saif.txt +11 −6 Original line number Diff line number Diff line Loading @@ -3,8 +3,11 @@ Required properties: - compatible: Should be "fsl,<chip>-saif" - reg: Should contain registers location and length - interrupts: Should contain ERROR and DMA interrupts - fsl,saif-dma-channel: APBX DMA channel for the SAIF - interrupts: Should contain ERROR interrupt number - dmas: DMA specifier, consisting of a phandle to DMA controller node and SAIF DMA channel ID. Refer to dma.txt and fsl-mxs-dma.txt for details. - dma-names: Must be "rx-tx". Optional properties: - fsl,saif-master: phandle to the master SAIF. It's only required for Loading @@ -23,14 +26,16 @@ aliases { saif0: saif@80042000 { compatible = "fsl,imx28-saif"; reg = <0x80042000 2000>; interrupts = <59 80>; fsl,saif-dma-channel = <4>; interrupts = <59>; dmas = <&dma_apbx 4>; dma-names = "rx-tx"; }; saif1: saif@80046000 { compatible = "fsl,imx28-saif"; reg = <0x80046000 2000>; interrupts = <58 81>; fsl,saif-dma-channel = <5>; interrupts = <58>; dmas = <&dma_apbx 5>; dma-names = "rx-tx"; fsl,saif-master = <&saif0>; };
sound/soc/mxs/mxs-pcm.c +0 −18 Original line number Diff line number Diff line Loading @@ -49,24 +49,8 @@ static const struct snd_pcm_hardware snd_mxs_hardware = { .fifo_size = 32, }; static bool filter(struct dma_chan *chan, void *param) { struct mxs_pcm_dma_params *dma_params = param; if (!mxs_dma_is_apbx(chan)) return false; if (chan->chan_id != dma_params->chan_num) return false; chan->private = &dma_params->dma_data; return true; } static const struct snd_dmaengine_pcm_config mxs_dmaengine_pcm_config = { .pcm_hardware = &snd_mxs_hardware, .compat_filter_fn = filter, .prealloc_buffer_size = 64 * 1024, }; Loading @@ -74,8 +58,6 @@ int mxs_pcm_platform_register(struct device *dev) { return snd_dmaengine_pcm_register(dev, &mxs_dmaengine_pcm_config, SND_DMAENGINE_PCM_FLAG_NO_RESIDUE | SND_DMAENGINE_PCM_FLAG_NO_DT | SND_DMAENGINE_PCM_FLAG_COMPAT | SND_DMAENGINE_PCM_FLAG_HALF_DUPLEX); } EXPORT_SYMBOL_GPL(mxs_pcm_platform_register); Loading
sound/soc/mxs/mxs-pcm.h +0 −7 Original line number Diff line number Diff line Loading @@ -19,13 +19,6 @@ #ifndef _MXS_PCM_H #define _MXS_PCM_H #include <linux/fsl/mxs-dma.h> struct mxs_pcm_dma_params { struct mxs_dma_data dma_data; int chan_num; }; int mxs_pcm_platform_register(struct device *dev); void mxs_pcm_platform_unregister(struct device *dev); Loading
sound/soc/mxs/mxs-saif.c +1 −36 Original line number Diff line number Diff line Loading @@ -26,8 +26,6 @@ #include <linux/clk.h> #include <linux/delay.h> #include <linux/time.h> #include <linux/fsl/mxs-dma.h> #include <linux/pinctrl/consumer.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/pcm_params.h> Loading Loading @@ -605,8 +603,6 @@ static int mxs_saif_dai_probe(struct snd_soc_dai *dai) struct mxs_saif *saif = dev_get_drvdata(dai->dev); snd_soc_dai_set_drvdata(dai, saif); dai->playback_dma_data = &saif->dma_param; dai->capture_dma_data = &saif->dma_param; return 0; } Loading Loading @@ -665,9 +661,8 @@ static irqreturn_t mxs_saif_irq(int irq, void *dev_id) static int mxs_saif_probe(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; struct resource *iores, *dmares; struct resource *iores; struct mxs_saif *saif; struct pinctrl *pinctrl; int ret = 0; struct device_node *master; Loading Loading @@ -707,12 +702,6 @@ static int mxs_saif_probe(struct platform_device *pdev) mxs_saif[saif->id] = saif; pinctrl = devm_pinctrl_get_select_default(&pdev->dev); if (IS_ERR(pinctrl)) { ret = PTR_ERR(pinctrl); return ret; } saif->clk = devm_clk_get(&pdev->dev, NULL); if (IS_ERR(saif->clk)) { ret = PTR_ERR(saif->clk); Loading @@ -727,22 +716,6 @@ static int mxs_saif_probe(struct platform_device *pdev) if (IS_ERR(saif->base)) return PTR_ERR(saif->base); dmares = platform_get_resource(pdev, IORESOURCE_DMA, 0); if (!dmares) { /* * TODO: This is a temporary solution and should be changed * to use generic DMA binding later when the helplers get in. */ ret = of_property_read_u32(np, "fsl,saif-dma-channel", &saif->dma_param.chan_num); if (ret) { dev_err(&pdev->dev, "failed to get dma channel\n"); return ret; } } else { saif->dma_param.chan_num = dmares->start; } saif->irq = platform_get_irq(pdev, 0); if (saif->irq < 0) { ret = saif->irq; Loading @@ -759,14 +732,6 @@ static int mxs_saif_probe(struct platform_device *pdev) return ret; } saif->dma_param.dma_data.chan_irq = platform_get_irq(pdev, 1); if (saif->dma_param.dma_data.chan_irq < 0) { ret = saif->dma_param.dma_data.chan_irq; dev_err(&pdev->dev, "failed to get dma irq resource: %d\n", ret); return ret; } platform_set_drvdata(pdev, saif); ret = snd_soc_register_component(&pdev->dev, &mxs_saif_component, Loading
sound/soc/mxs/mxs-saif.h +0 −1 Original line number Diff line number Diff line Loading @@ -117,7 +117,6 @@ struct mxs_saif { unsigned int mclk_in_use; void __iomem *base; int irq; struct mxs_pcm_dma_params dma_param; unsigned int id; unsigned int master_id; unsigned int cur_rate; Loading