Loading Documentation/devicetree/bindings/sound/mvebu-audio.txt 0 → 100644 +29 −0 Original line number Original line Diff line number Diff line * mvebu (Kirkwood, Dove, Armada 370) audio controller Required properties: - compatible: "marvell,mvebu-audio" - reg: physical base address of the controller and length of memory mapped region. - interrupts: list of two irq numbers. The first irq is used for data flow and the second one is used for errors. - clocks: one or two phandles. The first one is mandatory and defines the internal clock. The second one is optional and defines an external clock. - clock-names: names associated to the clocks: "internal" for the internal clock "extclk" for the external clock Example: i2s1: audio-controller@b4000 { compatible = "marvell,mvebu-audio"; reg = <0xb4000 0x2210>; interrupts = <21>, <22>; clocks = <&gate_clk 13>; clock-names = "internal"; }; sound/soc/kirkwood/Kconfig +2 −2 Original line number Original line Diff line number Diff line config SND_KIRKWOOD_SOC config SND_KIRKWOOD_SOC tristate "SoC Audio for the Marvell Kirkwood chip" tristate "SoC Audio for the Marvell Kirkwood and Dove chips" depends on ARCH_KIRKWOOD || COMPILE_TEST depends on ARCH_KIRKWOOD || ARCH_DOVE || COMPILE_TEST help help Say Y or M if you want to add support for codecs attached to Say Y or M if you want to add support for codecs attached to the Kirkwood I2S interface. You will also need to select the the Kirkwood I2S interface. You will also need to select the Loading sound/soc/kirkwood/kirkwood-i2s.c +20 −6 Original line number Original line Diff line number Diff line Loading @@ -22,6 +22,8 @@ #include <sound/pcm_params.h> #include <sound/pcm_params.h> #include <sound/soc.h> #include <sound/soc.h> #include <linux/platform_data/asoc-kirkwood.h> #include <linux/platform_data/asoc-kirkwood.h> #include <linux/of.h> #include "kirkwood.h" #include "kirkwood.h" #define DRV_NAME "mvebu-audio" #define DRV_NAME "mvebu-audio" Loading Loading @@ -453,6 +455,7 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) struct snd_soc_dai_driver *soc_dai = &kirkwood_i2s_dai; struct snd_soc_dai_driver *soc_dai = &kirkwood_i2s_dai; struct kirkwood_dma_data *priv; struct kirkwood_dma_data *priv; struct resource *mem; struct resource *mem; struct device_node *np = pdev->dev.of_node; int err; int err; priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); Loading @@ -473,14 +476,16 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) return -ENXIO; return -ENXIO; } } if (!data) { if (np) { dev_err(&pdev->dev, "no platform data ?!\n"); priv->burst = 128; /* might be 32 or 128 */ } else if (data) { priv->burst = data->burst; } else { dev_err(&pdev->dev, "no DT nor platform data ?!\n"); return -EINVAL; return -EINVAL; } } priv->burst = data->burst; priv->clk = devm_clk_get(&pdev->dev, np ? "internal" : NULL); priv->clk = devm_clk_get(&pdev->dev, NULL); if (IS_ERR(priv->clk)) { if (IS_ERR(priv->clk)) { dev_err(&pdev->dev, "no clock\n"); dev_err(&pdev->dev, "no clock\n"); return PTR_ERR(priv->clk); return PTR_ERR(priv->clk); Loading @@ -507,7 +512,7 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) priv->ctl_rec = KIRKWOOD_RECCTL_SIZE_24; priv->ctl_rec = KIRKWOOD_RECCTL_SIZE_24; /* Select the burst size */ /* Select the burst size */ if (data->burst == 32) { if (priv->burst == 32) { priv->ctl_play |= KIRKWOOD_PLAYCTL_BURST_32; priv->ctl_play |= KIRKWOOD_PLAYCTL_BURST_32; priv->ctl_rec |= KIRKWOOD_RECCTL_BURST_32; priv->ctl_rec |= KIRKWOOD_RECCTL_BURST_32; } else { } else { Loading Loading @@ -552,12 +557,21 @@ static int kirkwood_i2s_dev_remove(struct platform_device *pdev) return 0; return 0; } } #ifdef CONFIG_OF static struct of_device_id mvebu_audio_of_match[] = { { .compatible = "marvell,mvebu-audio" }, { } }; MODULE_DEVICE_TABLE(of, mvebu_audio_of_match); #endif static struct platform_driver kirkwood_i2s_driver = { static struct platform_driver kirkwood_i2s_driver = { .probe = kirkwood_i2s_dev_probe, .probe = kirkwood_i2s_dev_probe, .remove = kirkwood_i2s_dev_remove, .remove = kirkwood_i2s_dev_remove, .driver = { .driver = { .name = DRV_NAME, .name = DRV_NAME, .owner = THIS_MODULE, .owner = THIS_MODULE, .of_match_table = of_match_ptr(mvebu_audio_of_match), }, }, }; }; Loading Loading
Documentation/devicetree/bindings/sound/mvebu-audio.txt 0 → 100644 +29 −0 Original line number Original line Diff line number Diff line * mvebu (Kirkwood, Dove, Armada 370) audio controller Required properties: - compatible: "marvell,mvebu-audio" - reg: physical base address of the controller and length of memory mapped region. - interrupts: list of two irq numbers. The first irq is used for data flow and the second one is used for errors. - clocks: one or two phandles. The first one is mandatory and defines the internal clock. The second one is optional and defines an external clock. - clock-names: names associated to the clocks: "internal" for the internal clock "extclk" for the external clock Example: i2s1: audio-controller@b4000 { compatible = "marvell,mvebu-audio"; reg = <0xb4000 0x2210>; interrupts = <21>, <22>; clocks = <&gate_clk 13>; clock-names = "internal"; };
sound/soc/kirkwood/Kconfig +2 −2 Original line number Original line Diff line number Diff line config SND_KIRKWOOD_SOC config SND_KIRKWOOD_SOC tristate "SoC Audio for the Marvell Kirkwood chip" tristate "SoC Audio for the Marvell Kirkwood and Dove chips" depends on ARCH_KIRKWOOD || COMPILE_TEST depends on ARCH_KIRKWOOD || ARCH_DOVE || COMPILE_TEST help help Say Y or M if you want to add support for codecs attached to Say Y or M if you want to add support for codecs attached to the Kirkwood I2S interface. You will also need to select the the Kirkwood I2S interface. You will also need to select the Loading
sound/soc/kirkwood/kirkwood-i2s.c +20 −6 Original line number Original line Diff line number Diff line Loading @@ -22,6 +22,8 @@ #include <sound/pcm_params.h> #include <sound/pcm_params.h> #include <sound/soc.h> #include <sound/soc.h> #include <linux/platform_data/asoc-kirkwood.h> #include <linux/platform_data/asoc-kirkwood.h> #include <linux/of.h> #include "kirkwood.h" #include "kirkwood.h" #define DRV_NAME "mvebu-audio" #define DRV_NAME "mvebu-audio" Loading Loading @@ -453,6 +455,7 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) struct snd_soc_dai_driver *soc_dai = &kirkwood_i2s_dai; struct snd_soc_dai_driver *soc_dai = &kirkwood_i2s_dai; struct kirkwood_dma_data *priv; struct kirkwood_dma_data *priv; struct resource *mem; struct resource *mem; struct device_node *np = pdev->dev.of_node; int err; int err; priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); Loading @@ -473,14 +476,16 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) return -ENXIO; return -ENXIO; } } if (!data) { if (np) { dev_err(&pdev->dev, "no platform data ?!\n"); priv->burst = 128; /* might be 32 or 128 */ } else if (data) { priv->burst = data->burst; } else { dev_err(&pdev->dev, "no DT nor platform data ?!\n"); return -EINVAL; return -EINVAL; } } priv->burst = data->burst; priv->clk = devm_clk_get(&pdev->dev, np ? "internal" : NULL); priv->clk = devm_clk_get(&pdev->dev, NULL); if (IS_ERR(priv->clk)) { if (IS_ERR(priv->clk)) { dev_err(&pdev->dev, "no clock\n"); dev_err(&pdev->dev, "no clock\n"); return PTR_ERR(priv->clk); return PTR_ERR(priv->clk); Loading @@ -507,7 +512,7 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) priv->ctl_rec = KIRKWOOD_RECCTL_SIZE_24; priv->ctl_rec = KIRKWOOD_RECCTL_SIZE_24; /* Select the burst size */ /* Select the burst size */ if (data->burst == 32) { if (priv->burst == 32) { priv->ctl_play |= KIRKWOOD_PLAYCTL_BURST_32; priv->ctl_play |= KIRKWOOD_PLAYCTL_BURST_32; priv->ctl_rec |= KIRKWOOD_RECCTL_BURST_32; priv->ctl_rec |= KIRKWOOD_RECCTL_BURST_32; } else { } else { Loading Loading @@ -552,12 +557,21 @@ static int kirkwood_i2s_dev_remove(struct platform_device *pdev) return 0; return 0; } } #ifdef CONFIG_OF static struct of_device_id mvebu_audio_of_match[] = { { .compatible = "marvell,mvebu-audio" }, { } }; MODULE_DEVICE_TABLE(of, mvebu_audio_of_match); #endif static struct platform_driver kirkwood_i2s_driver = { static struct platform_driver kirkwood_i2s_driver = { .probe = kirkwood_i2s_dev_probe, .probe = kirkwood_i2s_dev_probe, .remove = kirkwood_i2s_dev_remove, .remove = kirkwood_i2s_dev_remove, .driver = { .driver = { .name = DRV_NAME, .name = DRV_NAME, .owner = THIS_MODULE, .owner = THIS_MODULE, .of_match_table = of_match_ptr(mvebu_audio_of_match), }, }, }; }; Loading