ASoC: fsl: mpc5200 combine psc_dma platform data
authorEric Millbrandt <emillbrandt@dekaresearch.com>
Thu, 13 Sep 2012 21:43:11 +0000 (17:43 -0400)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 19 Sep 2012 03:03:42 +0000 (23:03 -0400)
The mpc5200_psc_ac97 and mpc5200_psc_i2s modules rely on shared platform data
with mpc5200_dma.

Signed-off-by: Eric Millbrandt <emillbrandt@dekaresearch.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/fsl/mpc5200_dma.c
sound/soc/fsl/mpc5200_dma.h
sound/soc/fsl/mpc5200_psc_ac97.c
sound/soc/fsl/mpc5200_psc_i2s.c

index 9a3f7c5ab68748c5c05916d831defac13e0e7edb..9997c039bb245a7b891bbade0b436346fb5c5d3f 100644 (file)
@@ -370,7 +370,7 @@ static struct snd_soc_platform_driver mpc5200_audio_dma_platform = {
        .pcm_free       = &psc_dma_free,
 };
 
-static int mpc5200_hpcd_probe(struct platform_device *op)
+int mpc5200_audio_dma_create(struct platform_device *op)
 {
        phys_addr_t fifo;
        struct psc_dma *psc_dma;
@@ -487,8 +487,9 @@ out_unmap:
        iounmap(regs);
        return ret;
 }
+EXPORT_SYMBOL_GPL(mpc5200_audio_dma_create);
 
-static int mpc5200_hpcd_remove(struct platform_device *op)
+int mpc5200_audio_dma_destroy(struct platform_device *op)
 {
        struct psc_dma *psc_dma = dev_get_drvdata(&op->dev);
 
@@ -510,24 +511,7 @@ static int mpc5200_hpcd_remove(struct platform_device *op)
 
        return 0;
 }
-
-static struct of_device_id mpc5200_hpcd_match[] = {
-       { .compatible = "fsl,mpc5200-pcm", },
-       {}
-};
-MODULE_DEVICE_TABLE(of, mpc5200_hpcd_match);
-
-static struct platform_driver mpc5200_hpcd_of_driver = {
-       .probe          = mpc5200_hpcd_probe,
-       .remove         = mpc5200_hpcd_remove,
-       .driver = {
-               .owner          = THIS_MODULE,
-               .name           = "mpc5200-pcm-audio",
-               .of_match_table    = mpc5200_hpcd_match,
-       }
-};
-
-module_platform_driver(mpc5200_hpcd_of_driver);
+EXPORT_SYMBOL_GPL(mpc5200_audio_dma_destroy);
 
 MODULE_AUTHOR("Grant Likely <grant.likely@secretlab.ca>");
 MODULE_DESCRIPTION("Freescale MPC5200 PSC in DMA mode ASoC Driver");
index a3c0cd5382fbbfdb74a52b93ceaef444e87f011f..dff253fde29a98268185e715b2425134099eb296 100644 (file)
@@ -81,4 +81,7 @@ to_psc_dma_stream(struct snd_pcm_substream *substream, struct psc_dma *psc_dma)
        return &psc_dma->playback;
 }
 
+int mpc5200_audio_dma_create(struct platform_device *op);
+int mpc5200_audio_dma_destroy(struct platform_device *op);
+
 #endif /* __SOUND_SOC_FSL_MPC5200_DMA_H__ */
index ffa00a2eb7704439341debdcf7cafe2310e4ce94..9a094535fb2633caf5f506dfe456435fb7dc1951 100644 (file)
@@ -278,6 +278,10 @@ static int __devinit psc_ac97_of_probe(struct platform_device *op)
        struct snd_ac97 ac97;
        struct mpc52xx_psc __iomem *regs;
 
+       rc = mpc5200_audio_dma_create(op);
+       if (rc != 0)
+               return rc;
+
        rc = snd_soc_register_dais(&op->dev, psc_ac97_dai, ARRAY_SIZE(psc_ac97_dai));
        if (rc != 0) {
                dev_err(&op->dev, "Failed to register DAI\n");
@@ -303,6 +307,7 @@ static int __devinit psc_ac97_of_probe(struct platform_device *op)
 
 static int __devexit psc_ac97_of_remove(struct platform_device *op)
 {
+       mpc5200_audio_dma_destroy(op);
        snd_soc_unregister_dais(&op->dev, ARRAY_SIZE(psc_ac97_dai));
        return 0;
 }
index 7b530327553ad998f0cdf81635e3af218418e414..c0b7a23ebbfd048632dc66f2ce729d9d5eccde20 100644 (file)
@@ -156,6 +156,10 @@ static int __devinit psc_i2s_of_probe(struct platform_device *op)
        struct psc_dma *psc_dma;
        struct mpc52xx_psc __iomem *regs;
 
+       rc = mpc5200_audio_dma_create(op);
+       if (rc != 0)
+               return rc;
+
        rc = snd_soc_register_dais(&op->dev, psc_i2s_dai, ARRAY_SIZE(psc_i2s_dai));
        if (rc != 0) {
                pr_err("Failed to register DAI\n");
@@ -200,6 +204,7 @@ static int __devinit psc_i2s_of_probe(struct platform_device *op)
 
 static int __devexit psc_i2s_of_remove(struct platform_device *op)
 {
+       mpc5200_audio_dma_destroy(op);
        snd_soc_unregister_dais(&op->dev, ARRAY_SIZE(psc_i2s_dai));
        return 0;
 }