Loading sound/soc/atmel/atmel_ssc_dai.c +54 −3 Original line number Diff line number Diff line Loading @@ -789,13 +789,14 @@ static struct snd_soc_dai_driver atmel_ssc_dai[NUM_SSC_DEVICES] = { static __devinit int asoc_ssc_probe(struct platform_device *pdev) { return snd_soc_register_dais(&pdev->dev, atmel_ssc_dai, ARRAY_SIZE(atmel_ssc_dai)); BUG_ON(pdev->id < 0); BUG_ON(pdev->id >= ARRAY_SIZE(atmel_ssc_dai)); return snd_soc_register_dai(&pdev->dev, &atmel_ssc_dai[pdev->id]); } static int __devexit asoc_ssc_remove(struct platform_device *pdev) { snd_soc_unregister_dais(&pdev->dev, ARRAY_SIZE(atmel_ssc_dai)); snd_soc_unregister_dai(&pdev->dev); return 0; } Loading @@ -809,6 +810,56 @@ static struct platform_driver asoc_ssc_driver = { .remove = __devexit_p(asoc_ssc_remove), }; /** * atmel_ssc_set_audio - Allocate the specified SSC for audio use. */ int atmel_ssc_set_audio(int ssc_id) { struct ssc_device *ssc; static struct platform_device *dma_pdev; struct platform_device *ssc_pdev; int ret; if (ssc_id < 0 || ssc_id >= ARRAY_SIZE(atmel_ssc_dai)) return -EINVAL; /* Allocate a dummy device for DMA if we don't have one already */ if (!dma_pdev) { dma_pdev = platform_device_alloc("atmel-pcm-audio", -1); if (!dma_pdev) return -ENOMEM; ret = platform_device_add(dma_pdev); if (ret < 0) { platform_device_put(dma_pdev); dma_pdev = NULL; return ret; } } ssc_pdev = platform_device_alloc("atmel-ssc-dai", ssc_id); if (!ssc_pdev) { ssc_free(ssc); return -ENOMEM; } /* If we can grab the SSC briefly to parent the DAI device off it */ ssc = ssc_request(ssc_id); if (IS_ERR(ssc)) pr_warn("Unable to parent ASoC SSC DAI on SSC: %ld\n", PTR_ERR(ssc)); else ssc_pdev->dev.parent = &(ssc->pdev->dev); ssc_free(ssc); ret = platform_device_add(ssc_pdev); if (ret < 0) platform_device_put(ssc_pdev); return ret; } EXPORT_SYMBOL_GPL(atmel_ssc_set_audio); static int __init snd_atmel_ssc_init(void) { return platform_driver_register(&asoc_ssc_driver); Loading sound/soc/atmel/atmel_ssc_dai.h +2 −0 Original line number Diff line number Diff line Loading @@ -117,4 +117,6 @@ struct atmel_ssc_info { struct atmel_ssc_state ssc_state; }; int atmel_ssc_set_audio(int ssc); #endif /* _AT91_SSC_DAI_H */ sound/soc/atmel/sam9g20_wm8731.c +9 −3 Original line number Diff line number Diff line Loading @@ -146,7 +146,7 @@ static int at91sam9g20ek_wm8731_init(struct snd_soc_pcm_runtime *rtd) "at91sam9g20ek_wm8731 " ": at91sam9g20ek_wm8731_init() called\n"); ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK, ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL, MCLK_RATE, SND_SOC_CLOCK_IN); if (ret < 0) { printk(KERN_ERR "Failed to set WM8731 SYSCLK: %d\n", ret); Loading Loading @@ -183,8 +183,8 @@ static struct snd_soc_dai_link at91sam9g20ek_dai = { .cpu_dai_name = "atmel-ssc-dai.0", .codec_dai_name = "wm8731-hifi", .init = at91sam9g20ek_wm8731_init, .platform_name = "atmel_pcm-audio", .codec_name = "wm8731-codec.0-001a", .platform_name = "atmel-pcm-audio", .codec_name = "wm8731-codec.0-001b", .ops = &at91sam9g20ek_ops, }; Loading @@ -205,6 +205,12 @@ static int __init at91sam9g20ek_init(void) if (!(machine_is_at91sam9g20ek() || machine_is_at91sam9g20ek_2mmc())) return -ENODEV; ret = atmel_ssc_set_audio(0); if (ret != 0) { pr_err("Failed to set SSC 0 for audio: %d\n", ret); return ret; } /* * Codec MCLK is supplied by PCK0 - set it up. */ Loading sound/soc/au1x/db1200.c +1 −1 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ static int db1200_i2s_startup(struct snd_pcm_substream *substream) int ret; /* WM8731 has its own 12MHz crystal */ snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK, snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL, 12000000, SND_SOC_CLOCK_IN); /* codec is bitclock and lrclk master */ Loading Loading
sound/soc/atmel/atmel_ssc_dai.c +54 −3 Original line number Diff line number Diff line Loading @@ -789,13 +789,14 @@ static struct snd_soc_dai_driver atmel_ssc_dai[NUM_SSC_DEVICES] = { static __devinit int asoc_ssc_probe(struct platform_device *pdev) { return snd_soc_register_dais(&pdev->dev, atmel_ssc_dai, ARRAY_SIZE(atmel_ssc_dai)); BUG_ON(pdev->id < 0); BUG_ON(pdev->id >= ARRAY_SIZE(atmel_ssc_dai)); return snd_soc_register_dai(&pdev->dev, &atmel_ssc_dai[pdev->id]); } static int __devexit asoc_ssc_remove(struct platform_device *pdev) { snd_soc_unregister_dais(&pdev->dev, ARRAY_SIZE(atmel_ssc_dai)); snd_soc_unregister_dai(&pdev->dev); return 0; } Loading @@ -809,6 +810,56 @@ static struct platform_driver asoc_ssc_driver = { .remove = __devexit_p(asoc_ssc_remove), }; /** * atmel_ssc_set_audio - Allocate the specified SSC for audio use. */ int atmel_ssc_set_audio(int ssc_id) { struct ssc_device *ssc; static struct platform_device *dma_pdev; struct platform_device *ssc_pdev; int ret; if (ssc_id < 0 || ssc_id >= ARRAY_SIZE(atmel_ssc_dai)) return -EINVAL; /* Allocate a dummy device for DMA if we don't have one already */ if (!dma_pdev) { dma_pdev = platform_device_alloc("atmel-pcm-audio", -1); if (!dma_pdev) return -ENOMEM; ret = platform_device_add(dma_pdev); if (ret < 0) { platform_device_put(dma_pdev); dma_pdev = NULL; return ret; } } ssc_pdev = platform_device_alloc("atmel-ssc-dai", ssc_id); if (!ssc_pdev) { ssc_free(ssc); return -ENOMEM; } /* If we can grab the SSC briefly to parent the DAI device off it */ ssc = ssc_request(ssc_id); if (IS_ERR(ssc)) pr_warn("Unable to parent ASoC SSC DAI on SSC: %ld\n", PTR_ERR(ssc)); else ssc_pdev->dev.parent = &(ssc->pdev->dev); ssc_free(ssc); ret = platform_device_add(ssc_pdev); if (ret < 0) platform_device_put(ssc_pdev); return ret; } EXPORT_SYMBOL_GPL(atmel_ssc_set_audio); static int __init snd_atmel_ssc_init(void) { return platform_driver_register(&asoc_ssc_driver); Loading
sound/soc/atmel/atmel_ssc_dai.h +2 −0 Original line number Diff line number Diff line Loading @@ -117,4 +117,6 @@ struct atmel_ssc_info { struct atmel_ssc_state ssc_state; }; int atmel_ssc_set_audio(int ssc); #endif /* _AT91_SSC_DAI_H */
sound/soc/atmel/sam9g20_wm8731.c +9 −3 Original line number Diff line number Diff line Loading @@ -146,7 +146,7 @@ static int at91sam9g20ek_wm8731_init(struct snd_soc_pcm_runtime *rtd) "at91sam9g20ek_wm8731 " ": at91sam9g20ek_wm8731_init() called\n"); ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK, ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL, MCLK_RATE, SND_SOC_CLOCK_IN); if (ret < 0) { printk(KERN_ERR "Failed to set WM8731 SYSCLK: %d\n", ret); Loading Loading @@ -183,8 +183,8 @@ static struct snd_soc_dai_link at91sam9g20ek_dai = { .cpu_dai_name = "atmel-ssc-dai.0", .codec_dai_name = "wm8731-hifi", .init = at91sam9g20ek_wm8731_init, .platform_name = "atmel_pcm-audio", .codec_name = "wm8731-codec.0-001a", .platform_name = "atmel-pcm-audio", .codec_name = "wm8731-codec.0-001b", .ops = &at91sam9g20ek_ops, }; Loading @@ -205,6 +205,12 @@ static int __init at91sam9g20ek_init(void) if (!(machine_is_at91sam9g20ek() || machine_is_at91sam9g20ek_2mmc())) return -ENODEV; ret = atmel_ssc_set_audio(0); if (ret != 0) { pr_err("Failed to set SSC 0 for audio: %d\n", ret); return ret; } /* * Codec MCLK is supplied by PCK0 - set it up. */ Loading
sound/soc/au1x/db1200.c +1 −1 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ static int db1200_i2s_startup(struct snd_pcm_substream *substream) int ret; /* WM8731 has its own 12MHz crystal */ snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK, snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL, 12000000, SND_SOC_CLOCK_IN); /* codec is bitclock and lrclk master */ Loading