linux-mainline 3.2: add ASoC fixes for beagleboard
authorKoen Kooi <koen@dominion.thruhere.net>
Fri, 4 May 2012 06:45:54 +0000 (08:45 +0200)
committerDenys Dmytriyenko <denys@ti.com>
Thu, 10 May 2012 19:29:12 +0000 (15:29 -0400)
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
Signed-off-by: Denys Dmytriyenko <denys@ti.com>
recipes-kernel/linux/linux-mainline-3.2/beagle/0015-ASoC-omap-add-MODULE_ALIAS-to-mcbsp-and-pcm-drivers.patch [new file with mode: 0644]
recipes-kernel/linux/linux-mainline-3.2/beagle/0016-ASoC-omap-convert-per-board-modules-to-platform-driv.patch [new file with mode: 0644]
recipes-kernel/linux/linux-mainline_3.2.bb

diff --git a/recipes-kernel/linux/linux-mainline-3.2/beagle/0015-ASoC-omap-add-MODULE_ALIAS-to-mcbsp-and-pcm-drivers.patch b/recipes-kernel/linux/linux-mainline-3.2/beagle/0015-ASoC-omap-add-MODULE_ALIAS-to-mcbsp-and-pcm-drivers.patch
new file mode 100644 (file)
index 0000000..cffdeb9
--- /dev/null
@@ -0,0 +1,37 @@
+From d36c69551d168b2860cd216a8554740157a606f7 Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Tue, 3 Jan 2012 11:06:07 -0600
+Subject: [PATCH 15/16] ASoC: omap: add MODULE_ALIAS to mcbsp and pcm drivers
+
+This adds MODULE_ALIAS directives to the omap-mcbsp-dai and
+omap-pcm-audio drivers so they can be auto-loaded when platform
+devices are scanned.
+
+Signed-off-by: Mans Rullgard <mans.rullgard at linaro.org>
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ sound/soc/omap/omap-mcbsp.c |    1 +
+ sound/soc/omap/omap-pcm.c   |    1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c
+index 4314647..a13eb34 100644
+--- a/sound/soc/omap/omap-mcbsp.c
++++ b/sound/soc/omap/omap-mcbsp.c
+@@ -800,3 +800,4 @@ module_exit(snd_omap_mcbsp_exit);
+ MODULE_AUTHOR("Jarkko Nikula <jarkko.nikula@bitmer.com>");
+ MODULE_DESCRIPTION("OMAP I2S SoC Interface");
+ MODULE_LICENSE("GPL");
++MODULE_ALIAS("platform:omap-mcbsp-dai");
+diff --git a/sound/soc/omap/omap-pcm.c b/sound/soc/omap/omap-pcm.c
+index 6ede7dc..d5cffcf 100644
+--- a/sound/soc/omap/omap-pcm.c
++++ b/sound/soc/omap/omap-pcm.c
+@@ -448,3 +448,4 @@ module_exit(snd_omap_pcm_exit);
+ MODULE_AUTHOR("Jarkko Nikula <jarkko.nikula@bitmer.com>");
+ MODULE_DESCRIPTION("OMAP PCM DMA module");
+ MODULE_LICENSE("GPL");
++MODULE_ALIAS("platform:omap-pcm-audio");
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-mainline-3.2/beagle/0016-ASoC-omap-convert-per-board-modules-to-platform-driv.patch b/recipes-kernel/linux/linux-mainline-3.2/beagle/0016-ASoC-omap-convert-per-board-modules-to-platform-driv.patch
new file mode 100644 (file)
index 0000000..7865734
--- /dev/null
@@ -0,0 +1,1119 @@
+From c5ae7182911a49960d2b7775c941244ac41c105c Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Tue, 3 Jan 2012 11:03:32 -0600
+Subject: [PATCH 16/16] ASoC: omap: convert per-board modules to platform
+ drivers
+
+This converts the per-board modules to platform drivers for a
+device created by in main platform setup.  These drivers call
+snd_soc_register_card() directly instead of going via a "soc-audio"
+device and the corresponding driver in soc-core.
+
+Signed-off-by: Mans Rullgard <mans.rullgard at linaro.org>
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ arch/arm/mach-omap2/devices.c |   34 ++++++++++++++++++++
+ sound/soc/omap/am3517evm.c    |   52 ++++++++++++++++++------------
+ sound/soc/omap/igep0020.c     |   49 ++++++++++++++++++-----------
+ sound/soc/omap/n810.c         |   70 +++++++++++++++++++++++++----------------
+ sound/soc/omap/omap3beagle.c  |   52 ++++++++++++++++++------------
+ sound/soc/omap/omap3evm.c     |   53 +++++++++++++++++++------------
+ sound/soc/omap/omap3pandora.c |   67 +++++++++++++++++++++++----------------
+ sound/soc/omap/overo.c        |   53 ++++++++++++++++++-------------
+ sound/soc/omap/rx51.c         |   52 +++++++++++++++++++-----------
+ sound/soc/omap/sdp3430.c      |   62 +++++++++++++++++++++---------------
+ sound/soc/omap/sdp4430.c      |   53 +++++++++++++++++++------------
+ sound/soc/omap/zoom2.c        |   65 ++++++++++++++++++++++++--------------
+ 12 files changed, 423 insertions(+), 239 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
+index c15cfad..0f0b320 100644
+--- a/arch/arm/mach-omap2/devices.c
++++ b/arch/arm/mach-omap2/devices.c
+@@ -285,6 +285,10 @@ static struct platform_device omap_pcm = {
+       .id     = -1,
+ };
++static struct platform_device omap_soc_audio = {
++      .id     = -1,
++};
++
+ /*
+  * OMAP2420 has 2 McBSP ports
+  * OMAP2430 has 5 McBSP ports
+@@ -297,8 +301,30 @@ OMAP_MCBSP_PLATFORM_DEVICE(3);
+ OMAP_MCBSP_PLATFORM_DEVICE(4);
+ OMAP_MCBSP_PLATFORM_DEVICE(5);
++static struct {
++      int machine;
++      const char *name;
++} soc_device_names[] = {
++      { MACH_TYPE_OMAP3517EVM,        "am3517evm-soc-audio"   },
++      { MACH_TYPE_IGEP0020,           "igep2-soc-audio"       },
++      { MACH_TYPE_NOKIA_N810,         "n8x1-soc-audio"        },
++      { MACH_TYPE_NOKIA_N810_WIMAX,   "n8x1-soc-audio"        },
++      { MACH_TYPE_OMAP3_BEAGLE,       "omap3beagle-soc-audio" },
++      { MACH_TYPE_DEVKIT8000,         "omap3beagle-soc-audio" },
++      { MACH_TYPE_OMAP3EVM,           "omap3evm-soc-audio"    },
++      { MACH_TYPE_OMAP3_PANDORA,      "pandora-soc-audio"     },
++      { MACH_TYPE_OVERO,              "overo-soc-audio",      },
++      { MACH_TYPE_CM_T35,             "overo-soc-audio",      },
++      { MACH_TYPE_NOKIA_RX51,         "rx51-soc-audio",       },
++      { MACH_TYPE_OMAP_3430SDP,       "sdp3430-soc-audio",    },
++      { MACH_TYPE_OMAP_4430SDP,       "sdp4430-soc-audio",    },
++      { MACH_TYPE_OMAP_ZOOM2,         "zoom2-soc-audio",      },
++};
++
+ static void omap_init_audio(void)
+ {
++      int i;
++
+       platform_device_register(&omap_mcbsp1);
+       platform_device_register(&omap_mcbsp2);
+       if (cpu_is_omap243x() || cpu_is_omap34xx() || cpu_is_omap44xx()) {
+@@ -309,6 +335,14 @@ static void omap_init_audio(void)
+               platform_device_register(&omap_mcbsp5);
+       platform_device_register(&omap_pcm);
++
++      for (i = 0; i < ARRAY_SIZE(soc_device_names); i++) {
++              if (machine_arch_type == soc_device_names[i].machine) {
++                      omap_soc_audio.name = soc_device_names[i].name;
++                      platform_device_register(&omap_soc_audio);
++                      break;
++              }
++      }
+ }
+ #else
+diff --git a/sound/soc/omap/am3517evm.c b/sound/soc/omap/am3517evm.c
+index c1cd4a0..df8f795 100644
+--- a/sound/soc/omap/am3517evm.c
++++ b/sound/soc/omap/am3517evm.c
+@@ -116,45 +116,57 @@ static struct snd_soc_card snd_soc_am3517evm = {
+       .num_dapm_routes = ARRAY_SIZE(audio_map),
+ };
+-static struct platform_device *am3517evm_snd_device;
+-
+-static int __init am3517evm_soc_init(void)
++static int __devinit am3517evm_soc_probe(struct platform_device *pdev)
+ {
++      struct snd_soc_card *card = &snd_soc_am3517evm;
+       int ret;
+-      if (!machine_is_omap3517evm())
+-              return -ENODEV;
+       pr_info("OMAP3517 / AM3517 EVM SoC init\n");
+-      am3517evm_snd_device = platform_device_alloc("soc-audio", -1);
+-      if (!am3517evm_snd_device) {
+-              printk(KERN_ERR "Platform device allocation failed\n");
+-              return -ENOMEM;
++      card->dev = &pdev->dev;
++
++      ret = snd_soc_register_card(card);
++      if (ret) {
++              dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
++                      ret);
++              return ret;
+       }
+-      platform_set_drvdata(am3517evm_snd_device, &snd_soc_am3517evm);
++      return 0;
++}
++
++static int __devexit am3517evm_soc_remove(struct platform_device *pdev)
++{
++      struct snd_soc_card *card = platform_get_drvdata(pdev);
+-      ret = platform_device_add(am3517evm_snd_device);
+-      if (ret)
+-              goto err1;
++      snd_soc_unregister_card(card);
+       return 0;
++}
++
++static struct platform_driver am3517evm_driver = {
++      .driver = {
++              .name = "am3517evm-soc-audio",
++              .owner = THIS_MODULE,
++      },
+-err1:
+-      printk(KERN_ERR "Unable to add platform device\n");
+-      platform_device_put(am3517evm_snd_device);
++      .probe = am3517evm_soc_probe,
++      .remove = __devexit_p(am3517evm_soc_remove),
++};
+-      return ret;
++static int __init am3517evm_soc_init(void)
++{
++      return platform_driver_register(&am3517evm_driver);
+ }
++module_init(am3517evm_soc_init);
+ static void __exit am3517evm_soc_exit(void)
+ {
+-      platform_device_unregister(am3517evm_snd_device);
++      platform_driver_unregister(&am3517evm_driver);
+ }
+-
+-module_init(am3517evm_soc_init);
+ module_exit(am3517evm_soc_exit);
+ MODULE_AUTHOR("Anuj Aggarwal <anuj.aggarwal@ti.com>");
+ MODULE_DESCRIPTION("ALSA SoC OMAP3517 / AM3517 EVM");
+ MODULE_LICENSE("GPL v2");
++MODULE_ALIAS("platform:am3517evm-soc-audio");
+diff --git a/sound/soc/omap/igep0020.c b/sound/soc/omap/igep0020.c
+index 591fbf8..6446532 100644
+--- a/sound/soc/omap/igep0020.c
++++ b/sound/soc/omap/igep0020.c
+@@ -76,44 +76,57 @@ static struct snd_soc_card snd_soc_card_igep2 = {
+       .num_links = 1,
+ };
+-static struct platform_device *igep2_snd_device;
+-
+-static int __init igep2_soc_init(void)
++static int __devinit igep2_soc_probe(struct platform_device *pdev)
+ {
++      struct snd_soc_card *card = &snd_soc_card_igep2;
+       int ret;
+-      if (!machine_is_igep0020())
+-              return -ENODEV;
+       printk(KERN_INFO "IGEP v2 SoC init\n");
+-      igep2_snd_device = platform_device_alloc("soc-audio", -1);
+-      if (!igep2_snd_device) {
+-              printk(KERN_ERR "Platform device allocation failed\n");
+-              return -ENOMEM;
++      card->dev = &pdev->dev;
++
++      ret = snd_soc_register_card(card);
++      if (ret) {
++              dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
++                      ret);
++              return ret;
+       }
+-      platform_set_drvdata(igep2_snd_device, &snd_soc_card_igep2);
++      return 0;
++}
+-      ret = platform_device_add(igep2_snd_device);
+-      if (ret)
+-              goto err1;
++static int __devexit igep2_soc_remove(struct platform_device *pdev)
++{
++      struct snd_soc_card *card = platform_get_drvdata(pdev);
++
++      snd_soc_unregister_card(card);
+       return 0;
++}
++
++static struct platform_driver igep2_driver = {
++      .driver = {
++              .name = "igep2-soc-audio",
++              .owner = THIS_MODULE,
++      },
+-err1:
+-      printk(KERN_ERR "Unable to add platform device\n");
+-      platform_device_put(igep2_snd_device);
++      .probe = igep2_soc_probe,
++      .remove = __devexit_p(igep2_soc_remove),
++};
+-      return ret;
++static int __init igep2_soc_init(void)
++{
++      return platform_driver_register(&igep2_driver);
+ }
+ module_init(igep2_soc_init);
+ static void __exit igep2_soc_exit(void)
+ {
+-      platform_device_unregister(igep2_snd_device);
++      platform_driver_unregister(&igep2_driver);
+ }
+ module_exit(igep2_soc_exit);
+ MODULE_AUTHOR("Enric Balletbo i Serra <eballetbo@iseebcn.com>");
+ MODULE_DESCRIPTION("ALSA SoC IGEP v2");
+ MODULE_LICENSE("GPL");
++MODULE_ALIAS("platform:igep2-soc-audio");
+diff --git a/sound/soc/omap/n810.c b/sound/soc/omap/n810.c
+index fc6209b..1db768c 100644
+--- a/sound/soc/omap/n810.c
++++ b/sound/soc/omap/n810.c
+@@ -300,38 +300,25 @@ static struct snd_soc_card snd_soc_n810 = {
+       .num_dapm_routes = ARRAY_SIZE(audio_map),
+ };
+-static struct platform_device *n810_snd_device;
+-
+-static int __init n810_soc_init(void)
++static int __devinit n810_soc_probe(struct platform_device *pdev)
+ {
++      struct snd_soc_card *card = &snd_soc_n810;
++      struct device *dev = &pdev->dev;
+       int err;
+-      struct device *dev;
+-
+-      if (!(machine_is_nokia_n810() || machine_is_nokia_n810_wimax()))
+-              return -ENODEV;
+-
+-      n810_snd_device = platform_device_alloc("soc-audio", -1);
+-      if (!n810_snd_device)
+-              return -ENOMEM;
+-      platform_set_drvdata(n810_snd_device, &snd_soc_n810);
+-      err = platform_device_add(n810_snd_device);
+-      if (err)
+-              goto err1;
+-
+-      dev = &n810_snd_device->dev;
++      card->dev = dev;
+       sys_clkout2_src = clk_get(dev, "sys_clkout2_src");
+       if (IS_ERR(sys_clkout2_src)) {
+               dev_err(dev, "Could not get sys_clkout2_src clock\n");
+               err = PTR_ERR(sys_clkout2_src);
+-              goto err2;
++              return err;
+       }
+       sys_clkout2 = clk_get(dev, "sys_clkout2");
+       if (IS_ERR(sys_clkout2)) {
+               dev_err(dev, "Could not get sys_clkout2\n");
+               err = PTR_ERR(sys_clkout2);
+-              goto err3;
++              goto err1;
+       }
+       /*
+        * Configure 12 MHz output on SYS_CLKOUT2. Therefore we must use
+@@ -341,7 +328,7 @@ static int __init n810_soc_init(void)
+       if (IS_ERR(func96m_clk)) {
+               dev_err(dev, "Could not get func 96M clock\n");
+               err = PTR_ERR(func96m_clk);
+-              goto err4;
++              goto err2;
+       }
+       clk_set_parent(sys_clkout2_src, func96m_clk);
+       clk_set_rate(sys_clkout2, 12000000);
+@@ -352,33 +339,62 @@ static int __init n810_soc_init(void)
+       gpio_direction_output(N810_HEADSET_AMP_GPIO, 0);
+       gpio_direction_output(N810_SPEAKER_AMP_GPIO, 0);
++      err = snd_soc_register_card(card);
++      if (err) {
++              dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
++                      err);
++              goto err3;
++      }
++
+       return 0;
+-err4:
+-      clk_put(sys_clkout2);
+ err3:
+-      clk_put(sys_clkout2_src);
++      clk_put(func96m_clk);
+ err2:
+-      platform_device_del(n810_snd_device);
++      clk_put(sys_clkout2);
+ err1:
+-      platform_device_put(n810_snd_device);
++      clk_put(sys_clkout2_src);
+       return err;
+ }
+-static void __exit n810_soc_exit(void)
++static int __devexit n810_soc_remove(struct platform_device *pdev)
+ {
++      struct snd_soc_card *card = platform_get_drvdata(pdev);
++
+       gpio_free(N810_SPEAKER_AMP_GPIO);
+       gpio_free(N810_HEADSET_AMP_GPIO);
+       clk_put(sys_clkout2_src);
+       clk_put(sys_clkout2);
+       clk_put(func96m_clk);
+-      platform_device_unregister(n810_snd_device);
++      snd_soc_unregister_card(card);
++
++      return 0;
+ }
++static struct platform_driver n810_driver = {
++      .driver = {
++              .name = "n8x0-soc-audio",
++              .owner = THIS_MODULE,
++      },
++
++      .probe = n810_soc_probe,
++      .remove = __devexit_p(n810_soc_remove),
++};
++
++static int __init n810_soc_init(void)
++{
++      return platform_driver_register(&n810_driver);
++}
+ module_init(n810_soc_init);
++
++static void __exit n810_soc_exit(void)
++{
++      platform_driver_unregister(&n810_driver);
++}
+ module_exit(n810_soc_exit);
+ MODULE_AUTHOR("Jarkko Nikula <jarkko.nikula@bitmer.com>");
+ MODULE_DESCRIPTION("ALSA SoC Nokia N810");
+ MODULE_LICENSE("GPL");
++MODULE_ALIAS("platform:n8x0-soc-audio");
+diff --git a/sound/soc/omap/omap3beagle.c b/sound/soc/omap/omap3beagle.c
+index 3357dcc..10b51d8 100644
+--- a/sound/soc/omap/omap3beagle.c
++++ b/sound/soc/omap/omap3beagle.c
+@@ -106,45 +106,57 @@ static struct snd_soc_card snd_soc_omap3beagle = {
+       .num_links = 1,
+ };
+-static struct platform_device *omap3beagle_snd_device;
+-
+-static int __init omap3beagle_soc_init(void)
++static int __devinit omap3beagle_soc_probe(struct platform_device *pdev)
+ {
++      struct snd_soc_card *card = &snd_soc_omap3beagle;
+       int ret;
+-      if (!(machine_is_omap3_beagle() || machine_is_devkit8000()))
+-              return -ENODEV;
+       pr_info("OMAP3 Beagle/Devkit8000 SoC init\n");
+-      omap3beagle_snd_device = platform_device_alloc("soc-audio", -1);
+-      if (!omap3beagle_snd_device) {
+-              printk(KERN_ERR "Platform device allocation failed\n");
+-              return -ENOMEM;
++      card->dev = &pdev->dev;
++
++      ret = snd_soc_register_card(card);
++      if (ret) {
++              dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
++                      ret);
++              return ret;
+       }
+-      platform_set_drvdata(omap3beagle_snd_device, &snd_soc_omap3beagle);
++      return 0;
++}
++
++static int __devexit omap3beagle_soc_remove(struct platform_device *pdev)
++{
++      struct snd_soc_card *card = platform_get_drvdata(pdev);
+-      ret = platform_device_add(omap3beagle_snd_device);
+-      if (ret)
+-              goto err1;
++      snd_soc_unregister_card(card);
+       return 0;
++}
++
++static struct platform_driver omap3beagle_driver = {
++      .driver = {
++              .name = "omap3beagle-soc-audio",
++              .owner = THIS_MODULE,
++      },
+-err1:
+-      printk(KERN_ERR "Unable to add platform device\n");
+-      platform_device_put(omap3beagle_snd_device);
++      .probe = omap3beagle_soc_probe,
++      .remove = __devexit_p(omap3beagle_soc_remove),
++};
+-      return ret;
++static int __init omap3beagle_soc_init(void)
++{
++      return platform_driver_register(&omap3beagle_driver);
+ }
++module_init(omap3beagle_soc_init);
+ static void __exit omap3beagle_soc_exit(void)
+ {
+-      platform_device_unregister(omap3beagle_snd_device);
++      platform_driver_unregister(&omap3beagle_driver);
+ }
+-
+-module_init(omap3beagle_soc_init);
+ module_exit(omap3beagle_soc_exit);
+ MODULE_AUTHOR("Steve Sakoman <steve@sakoman.com>");
+ MODULE_DESCRIPTION("ALSA SoC OMAP3 Beagle");
+ MODULE_LICENSE("GPL");
++MODULE_ALIAS("platform:omap3beagle-soc-audio");
+diff --git a/sound/soc/omap/omap3evm.c b/sound/soc/omap/omap3evm.c
+index 6857895..3b95cea 100644
+--- a/sound/soc/omap/omap3evm.c
++++ b/sound/soc/omap/omap3evm.c
+@@ -74,44 +74,57 @@ static struct snd_soc_card snd_soc_omap3evm = {
+       .num_links = 1,
+ };
+-static struct platform_device *omap3evm_snd_device;
+-
+-static int __init omap3evm_soc_init(void)
++static int __devinit omap3evm_soc_probe(struct platform_device *pdev)
+ {
++      struct snd_soc_card *card = &snd_soc_omap3evm;
+       int ret;
+-      if (!machine_is_omap3evm())
+-              return -ENODEV;
+       pr_info("OMAP3 EVM SoC init\n");
+-      omap3evm_snd_device = platform_device_alloc("soc-audio", -1);
+-      if (!omap3evm_snd_device) {
+-              printk(KERN_ERR "Platform device allocation failed\n");
+-              return -ENOMEM;
++      card->dev = &pdev->dev;
++
++      ret = snd_soc_register_card(card);
++      if (ret) {
++              dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
++                      ret);
++              return ret;
+       }
+-      platform_set_drvdata(omap3evm_snd_device, &snd_soc_omap3evm);
+-      ret = platform_device_add(omap3evm_snd_device);
+-      if (ret)
+-              goto err1;
++      return 0;
++}
++
++static int __devexit omap3evm_soc_remove(struct platform_device *pdev)
++{
++      struct snd_soc_card *card = platform_get_drvdata(pdev);
++
++      snd_soc_unregister_card(card);
+       return 0;
++}
++
++static struct platform_driver omap3evm_driver = {
++      .driver = {
++              .name = "omap3evm-soc-audio",
++              .owner = THIS_MODULE,
++      },
+-err1:
+-      printk(KERN_ERR "Unable to add platform device\n");
+-      platform_device_put(omap3evm_snd_device);
++      .probe = omap3evm_soc_probe,
++      .remove = __devexit_p(omap3evm_soc_remove),
++};
+-      return ret;
++static int __init omap3evm_soc_init(void)
++{
++      return platform_driver_register(&omap3evm_driver);
+ }
++module_init(omap3evm_soc_init);
+ static void __exit omap3evm_soc_exit(void)
+ {
+-      platform_device_unregister(omap3evm_snd_device);
++      platform_driver_unregister(&omap3evm_driver);
+ }
+-
+-module_init(omap3evm_soc_init);
+ module_exit(omap3evm_soc_exit);
+ MODULE_AUTHOR("Anuj Aggarwal <anuj.aggarwal@ti.com>");
+ MODULE_DESCRIPTION("ALSA SoC OMAP3 EVM");
+ MODULE_LICENSE("GPL v2");
++MODULE_ALIAS("platform:omap3evm-soc-audio");
+diff --git a/sound/soc/omap/omap3pandora.c b/sound/soc/omap/omap3pandora.c
+index 7605c37..fd289a4 100644
+--- a/sound/soc/omap/omap3pandora.c
++++ b/sound/soc/omap/omap3pandora.c
+@@ -237,17 +237,15 @@ static struct snd_soc_card snd_soc_card_omap3pandora = {
+       .num_links = ARRAY_SIZE(omap3pandora_dai),
+ };
+-static struct platform_device *omap3pandora_snd_device;
+-
+-static int __init omap3pandora_soc_init(void)
++static int __devinit omap3pandora_soc_probe(struct platform_device *pdev)
+ {
++      struct snd_soc_card *card = &snd_soc_card_omap3pandora;
+       int ret;
+-      if (!machine_is_omap3_pandora())
+-              return -ENODEV;
+-
+       pr_info("OMAP3 Pandora SoC init\n");
++      card->dev = &pdev->dev;
++
+       ret = gpio_request(OMAP3_PANDORA_DAC_POWER_GPIO, "dac_power");
+       if (ret) {
+               pr_err(PREFIX "Failed to get DAC power GPIO\n");
+@@ -272,53 +270,68 @@ static int __init omap3pandora_soc_init(void)
+               goto fail1;
+       }
+-      omap3pandora_snd_device = platform_device_alloc("soc-audio", -1);
+-      if (omap3pandora_snd_device == NULL) {
+-              pr_err(PREFIX "Platform device allocation failed\n");
+-              ret = -ENOMEM;
+-              goto fail1;
+-      }
+-
+-      platform_set_drvdata(omap3pandora_snd_device, &snd_soc_card_omap3pandora);
+-
+-      ret = platform_device_add(omap3pandora_snd_device);
++      ret = snd_soc_register_card(card);
+       if (ret) {
+-              pr_err(PREFIX "Unable to add platform device\n");
+-              goto fail2;
++              dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
++                      ret);
++              goto fail1;
+       }
+-      omap3pandora_dac_reg = regulator_get(&omap3pandora_snd_device->dev, "vcc");
++      omap3pandora_dac_reg = regulator_get(card->dev, "vcc");
+       if (IS_ERR(omap3pandora_dac_reg)) {
+               pr_err(PREFIX "Failed to get DAC regulator from %s: %ld\n",
+-                      dev_name(&omap3pandora_snd_device->dev),
++                      dev_name(card->dev),
+                       PTR_ERR(omap3pandora_dac_reg));
+               ret = PTR_ERR(omap3pandora_dac_reg);
+-              goto fail3;
++              goto fail2;
+       }
+       return 0;
+-fail3:
+-      platform_device_del(omap3pandora_snd_device);
+ fail2:
+-      platform_device_put(omap3pandora_snd_device);
++      snd_soc_unregister_card(card);
+ fail1:
+       gpio_free(OMAP3_PANDORA_AMP_POWER_GPIO);
+ fail0:
+       gpio_free(OMAP3_PANDORA_DAC_POWER_GPIO);
+       return ret;
+ }
+-module_init(omap3pandora_soc_init);
+-static void __exit omap3pandora_soc_exit(void)
++static int __devexit omap3pandora_soc_remove(struct platform_device *pdev)
+ {
++      struct snd_soc_card *card = platform_get_drvdata(pdev);
++
+       regulator_put(omap3pandora_dac_reg);
+-      platform_device_unregister(omap3pandora_snd_device);
++      snd_soc_unregister_card(card);
+       gpio_free(OMAP3_PANDORA_AMP_POWER_GPIO);
+       gpio_free(OMAP3_PANDORA_DAC_POWER_GPIO);
++
++      return 0;
++}
++
++static struct platform_driver omap3pandora_driver = {
++      .driver = {
++              .name = "pandora-soc-audio",
++              .owner = THIS_MODULE,
++      },
++
++      .probe = omap3pandora_soc_probe,
++      .remove = __devexit_p(omap3pandora_soc_remove),
++};
++
++static int __init omap3pandora_soc_init(void)
++{
++      return platform_driver_register(&omap3pandora_driver);
++}
++module_init(omap3pandora_soc_init);
++
++static void __exit omap3pandora_soc_exit(void)
++{
++      platform_driver_unregister(&omap3pandora_driver);
+ }
+ module_exit(omap3pandora_soc_exit);
+ MODULE_AUTHOR("Grazvydas Ignotas <notasas@gmail.com>");
+ MODULE_DESCRIPTION("ALSA SoC OMAP3 Pandora");
+ MODULE_LICENSE("GPL");
++MODULE_ALIAS("platform:pandora-soc-audio");
+diff --git a/sound/soc/omap/overo.c b/sound/soc/omap/overo.c
+index c3550ae..fe8fd5e 100644
+--- a/sound/soc/omap/overo.c
++++ b/sound/soc/omap/overo.c
+@@ -76,46 +76,57 @@ static struct snd_soc_card snd_soc_card_overo = {
+       .num_links = 1,
+ };
+-static struct platform_device *overo_snd_device;
+-
+-static int __init overo_soc_init(void)
++static int __devinit overo_soc_probe(struct platform_device *pdev)
+ {
++      struct snd_soc_card *card = &snd_soc_card_overo;
+       int ret;
+-      if (!(machine_is_overo() || machine_is_cm_t35())) {
+-              pr_debug("Incomatible machine!\n");
+-              return -ENODEV;
+-      }
+-      printk(KERN_INFO "overo SoC init\n");
++      pr_info("overo SoC init\n");
++
++      card->dev = &pdev->dev;
+-      overo_snd_device = platform_device_alloc("soc-audio", -1);
+-      if (!overo_snd_device) {
+-              printk(KERN_ERR "Platform device allocation failed\n");
+-              return -ENOMEM;
++      ret = snd_soc_register_card(card);
++      if (ret) {
++              dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
++                      ret);
++              return ret;
+       }
+-      platform_set_drvdata(overo_snd_device, &snd_soc_card_overo);
++      return 0;
++}
++
++static int __devexit overo_soc_remove(struct platform_device *pdev)
++{
++      struct snd_soc_card *card = platform_get_drvdata(pdev);
+-      ret = platform_device_add(overo_snd_device);
+-      if (ret)
+-              goto err1;
++      snd_soc_unregister_card(card);
+       return 0;
++}
+-err1:
+-      printk(KERN_ERR "Unable to add platform device\n");
+-      platform_device_put(overo_snd_device);
++static struct platform_driver overo_driver = {
++      .driver = {
++              .name = "overo-soc-audio",
++              .owner = THIS_MODULE,
++      },
+-      return ret;
++      .probe = overo_soc_probe,
++      .remove = __devexit_p(overo_soc_remove),
++};
++
++static int __init overo_soc_init(void)
++{
++      return platform_driver_register(&overo_driver);
+ }
+ module_init(overo_soc_init);
+ static void __exit overo_soc_exit(void)
+ {
+-      platform_device_unregister(overo_snd_device);
++      platform_driver_unregister(&overo_driver);
+ }
+ module_exit(overo_soc_exit);
+ MODULE_AUTHOR("Steve Sakoman <steve@sakoman.com>");
+ MODULE_DESCRIPTION("ALSA SoC overo");
+ MODULE_LICENSE("GPL");
++MODULE_ALIAS("platform:overo-soc-audio");
+diff --git a/sound/soc/omap/rx51.c b/sound/soc/omap/rx51.c
+index 4cabb74..aca084d 100644
+--- a/sound/soc/omap/rx51.c
++++ b/sound/soc/omap/rx51.c
+@@ -391,14 +391,12 @@ static struct snd_soc_card rx51_sound_card = {
+       .num_configs = ARRAY_SIZE(rx51_codec_conf),
+ };
+-static struct platform_device *rx51_snd_device;
+-
+-static int __init rx51_soc_init(void)
++static int __devinit rx51_soc_probe(struct platform_device *pdev)
+ {
++      struct snd_soc_card *card = &rx51_sound_card;
+       int err;
+-      if (!machine_is_nokia_rx51())
+-              return -ENODEV;
++      card->dev = &pdev->dev;
+       err = gpio_request_one(RX51_TVOUT_SEL_GPIO,
+                              GPIOF_DIR_OUT | GPIOF_INIT_LOW, "tvout_sel");
+@@ -409,21 +407,14 @@ static int __init rx51_soc_init(void)
+       if (err)
+               goto err_gpio_eci_sw;
+-      rx51_snd_device = platform_device_alloc("soc-audio", -1);
+-      if (!rx51_snd_device) {
+-              err = -ENOMEM;
++      err = snd_soc_register_card(card);
++      if (err) {
++              dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
++                      err);
+               goto err1;
+       }
+-      platform_set_drvdata(rx51_snd_device, &rx51_sound_card);
+-
+-      err = platform_device_add(rx51_snd_device);
+-      if (err)
+-              goto err2;
+-
+       return 0;
+-err2:
+-      platform_device_put(rx51_snd_device);
+ err1:
+       gpio_free(RX51_ECI_SW_GPIO);
+ err_gpio_eci_sw:
+@@ -433,19 +424,44 @@ err_gpio_tvout_sel:
+       return err;
+ }
+-static void __exit rx51_soc_exit(void)
++static int __devexit rx51_soc_remove(struct platform_device *pdev)
+ {
++      struct snd_soc_card *card = platform_get_drvdata(pdev);
++
+       snd_soc_jack_free_gpios(&rx51_av_jack, ARRAY_SIZE(rx51_av_jack_gpios),
+                               rx51_av_jack_gpios);
+-      platform_device_unregister(rx51_snd_device);
++      snd_soc_unregister_card(card);
++
+       gpio_free(RX51_ECI_SW_GPIO);
+       gpio_free(RX51_TVOUT_SEL_GPIO);
++
++      return 0;
+ }
++static struct platform_driver rx51_driver = {
++      .driver = {
++              .name = "rx51-soc-audio",
++              .owner = THIS_MODULE,
++      },
++
++      .probe = rx51_soc_probe,
++      .remove = __devexit_p(rx51_soc_remove),
++};
++
++static int __init rx51_soc_init(void)
++{
++      return platform_driver_register(&rx51_driver);
++}
+ module_init(rx51_soc_init);
++
++static void __exit rx51_soc_exit(void)
++{
++      platform_driver_unregister(&rx51_driver);
++}
+ module_exit(rx51_soc_exit);
+ MODULE_AUTHOR("Nokia Corporation");
+ MODULE_DESCRIPTION("ALSA SoC Nokia RX-51");
+ MODULE_LICENSE("GPL");
++MODULE_ALIAS("platform:rx51-soc-audio");
+diff --git a/sound/soc/omap/sdp3430.c b/sound/soc/omap/sdp3430.c
+index e8fbf8e..09fd5bd 100644
+--- a/sound/soc/omap/sdp3430.c
++++ b/sound/soc/omap/sdp3430.c
+@@ -222,24 +222,15 @@ static struct snd_soc_card snd_soc_sdp3430 = {
+       .num_dapm_routes = ARRAY_SIZE(audio_map),
+ };
+-static struct platform_device *sdp3430_snd_device;
+-
+-static int __init sdp3430_soc_init(void)
++static int __devinit sdp3430_soc_probe(struct platform_device *pdev)
+ {
++      struct snd_soc_card *card = &snd_soc_sdp3430;
+       int ret;
+       u8 pin_mux;
+-      if (!machine_is_omap_3430sdp())
+-              return -ENODEV;
+-      printk(KERN_INFO "SDP3430 SoC init\n");
+-
+-      sdp3430_snd_device = platform_device_alloc("soc-audio", -1);
+-      if (!sdp3430_snd_device) {
+-              printk(KERN_ERR "Platform device allocation failed\n");
+-              return -ENOMEM;
+-      }
++      pr_info("SDP3430 SoC init\n");
+-      platform_set_drvdata(sdp3430_snd_device, &snd_soc_sdp3430);
++      card->dev = &pdev->dev;
+       /* Set TWL4030 GPIO6 as EXTMUTE signal */
+       twl_i2c_read_u8(TWL4030_MODULE_INTBR, &pin_mux,
+@@ -249,30 +240,51 @@ static int __init sdp3430_soc_init(void)
+       twl_i2c_write_u8(TWL4030_MODULE_INTBR, pin_mux,
+                                               TWL4030_INTBR_PMBR1);
+-      ret = platform_device_add(sdp3430_snd_device);
+-      if (ret)
+-              goto err1;
++      ret = snd_soc_register_card(card);
++      if (ret) {
++              dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
++                      ret);
++              return ret;
++      }
+       return 0;
++}
+-err1:
+-      printk(KERN_ERR "Unable to add platform device\n");
+-      platform_device_put(sdp3430_snd_device);
++static int __devexit sdp3430_soc_remove(struct platform_device *pdev)
++{
++      struct snd_soc_card *card = platform_get_drvdata(pdev);
+-      return ret;
++      snd_soc_jack_free_gpios(&hs_jack, ARRAY_SIZE(hs_jack_gpios),
++                              hs_jack_gpios);
++
++      snd_soc_unregister_card(card);
++
++      return 0;
++}
++
++static struct platform_driver sdp3430_driver = {
++      .driver = {
++              .name = "sdp3430-soc-audio",
++              .owner = THIS_MODULE,
++      },
++
++      .probe = sdp3430_soc_probe,
++      .remove = __devexit_p(sdp3430_soc_remove),
++};
++
++static int __init sdp3430_soc_init(void)
++{
++      return platform_driver_register(&sdp3430_driver);
+ }
+ module_init(sdp3430_soc_init);
+ static void __exit sdp3430_soc_exit(void)
+ {
+-      snd_soc_jack_free_gpios(&hs_jack, ARRAY_SIZE(hs_jack_gpios),
+-                              hs_jack_gpios);
+-
+-      platform_device_unregister(sdp3430_snd_device);
++      platform_driver_unregister(&sdp3430_driver);
+ }
+ module_exit(sdp3430_soc_exit);
+ MODULE_AUTHOR("Misael Lopez Cruz <x0052729@ti.com>");
+ MODULE_DESCRIPTION("ALSA SoC SDP3430");
+ MODULE_LICENSE("GPL");
+-
++MODULE_ALIAS("platform:sdp3430-soc-audio");
+diff --git a/sound/soc/omap/sdp4430.c b/sound/soc/omap/sdp4430.c
+index 03d9fa4..b3a05b1 100644
+--- a/sound/soc/omap/sdp4430.c
++++ b/sound/soc/omap/sdp4430.c
+@@ -172,44 +172,57 @@ static struct snd_soc_card snd_soc_sdp4430 = {
+       .num_dapm_routes = ARRAY_SIZE(audio_map),
+ };
+-static struct platform_device *sdp4430_snd_device;
+-
+-static int __init sdp4430_soc_init(void)
++static int __devinit sdp4430_soc_probe(struct platform_device *pdev)
+ {
++      struct snd_soc_card *card = &snd_soc_sdp4430;
+       int ret;
+-      if (!machine_is_omap_4430sdp())
+-              return -ENODEV;
+-      printk(KERN_INFO "SDP4430 SoC init\n");
++      pr_info("SDP4430 SoC init\n");
++
++      card->dev = &pdev->dev;
+-      sdp4430_snd_device = platform_device_alloc("soc-audio", -1);
+-      if (!sdp4430_snd_device) {
+-              printk(KERN_ERR "Platform device allocation failed\n");
+-              return -ENOMEM;
++      ret = snd_soc_register_card(card);
++      if (ret) {
++              dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
++                      ret);
++              return ret;
+       }
+-      platform_set_drvdata(sdp4430_snd_device, &snd_soc_sdp4430);
++      return 0;
++}
+-      ret = platform_device_add(sdp4430_snd_device);
+-      if (ret)
+-              goto err;
++static int __devexit sdp4430_soc_remove(struct platform_device *pdev)
++{
++      struct snd_soc_card *card = platform_get_drvdata(pdev);
++
++      snd_soc_unregister_card(card);
+       return 0;
++}
+-err:
+-      printk(KERN_ERR "Unable to add platform device\n");
+-      platform_device_put(sdp4430_snd_device);
+-      return ret;
++static struct platform_driver sdp4430_driver = {
++      .driver = {
++              .name = "sdp4430-soc-audio",
++              .owner = THIS_MODULE,
++      },
++
++      .probe = sdp4430_soc_probe,
++      .remove = __devexit_p(sdp4430_soc_remove),
++};
++
++static int __init sdp4430_soc_init(void)
++{
++      return platform_driver_register(&sdp4430_driver);
+ }
+ module_init(sdp4430_soc_init);
+ static void __exit sdp4430_soc_exit(void)
+ {
+-      platform_device_unregister(sdp4430_snd_device);
++      platform_driver_unregister(&sdp4430_driver);
+ }
+ module_exit(sdp4430_soc_exit);
+ MODULE_AUTHOR("Misael Lopez Cruz <x0052729@ti.com>");
+ MODULE_DESCRIPTION("ALSA SoC SDP4430");
+ MODULE_LICENSE("GPL");
+-
++MODULE_ALIAS("platform:sdp4430-soc-audio");
+diff --git a/sound/soc/omap/zoom2.c b/sound/soc/omap/zoom2.c
+index 7641a7f..8db8e10 100644
+--- a/sound/soc/omap/zoom2.c
++++ b/sound/soc/omap/zoom2.c
+@@ -166,26 +166,14 @@ static struct snd_soc_card snd_soc_zoom2 = {
+       .num_dapm_routes = ARRAY_SIZE(audio_map),
+ };
+-static struct platform_device *zoom2_snd_device;
+-
+-static int __init zoom2_soc_init(void)
++static int __devinit zoom2_soc_probe(struct platform_device *pdev)
+ {
++      struct snd_soc_card *card = &snd_soc_zoom2;
+       int ret;
+-      if (!machine_is_omap_zoom2())
+-              return -ENODEV;
+-      printk(KERN_INFO "Zoom2 SoC init\n");
+-
+-      zoom2_snd_device = platform_device_alloc("soc-audio", -1);
+-      if (!zoom2_snd_device) {
+-              printk(KERN_ERR "Platform device allocation failed\n");
+-              return -ENOMEM;
+-      }
++      pr_info("Zoom2 SoC init\n");
+-      platform_set_drvdata(zoom2_snd_device, &snd_soc_zoom2);
+-      ret = platform_device_add(zoom2_snd_device);
+-      if (ret)
+-              goto err1;
++      card->dev = &pdev->dev;
+       BUG_ON(gpio_request(ZOOM2_HEADSET_MUX_GPIO, "hs_mux") < 0);
+       gpio_direction_output(ZOOM2_HEADSET_MUX_GPIO, 0);
+@@ -193,26 +181,57 @@ static int __init zoom2_soc_init(void)
+       BUG_ON(gpio_request(ZOOM2_HEADSET_EXTMUTE_GPIO, "ext_mute") < 0);
+       gpio_direction_output(ZOOM2_HEADSET_EXTMUTE_GPIO, 0);
++      ret = snd_soc_register_card(card);
++      if (ret) {
++              dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
++                      ret);
++              goto err;
++      }
++
+       return 0;
+-err1:
+-      printk(KERN_ERR "Unable to add platform device\n");
+-      platform_device_put(zoom2_snd_device);
++err:
++      gpio_free(ZOOM2_HEADSET_MUX_GPIO);
++      gpio_free(ZOOM2_HEADSET_EXTMUTE_GPIO);
+       return ret;
+ }
+-module_init(zoom2_soc_init);
+-static void __exit zoom2_soc_exit(void)
++static int __devexit zoom2_soc_remove(struct platform_device *pdev)
+ {
++      struct snd_soc_card *card = platform_get_drvdata(pdev);
++
++      snd_soc_unregister_card(card);
++
+       gpio_free(ZOOM2_HEADSET_MUX_GPIO);
+       gpio_free(ZOOM2_HEADSET_EXTMUTE_GPIO);
+-      platform_device_unregister(zoom2_snd_device);
++      return 0;
++}
++
++static struct platform_driver zoom2_driver = {
++      .driver = {
++              .name = "zoom2-soc-audio",
++              .owner = THIS_MODULE,
++      },
++
++      .probe = zoom2_soc_probe,
++      .remove = __devexit_p(zoom2_soc_remove),
++};
++
++static int __init zoom2_soc_init(void)
++{
++      return platform_driver_register(&zoom2_driver);
++}
++module_init(zoom2_soc_init);
++
++static void __exit zoom2_soc_exit(void)
++{
++      platform_driver_unregister(&zoom2_driver);
+ }
+ module_exit(zoom2_soc_exit);
+ MODULE_AUTHOR("Misael Lopez Cruz <x0052729@ti.com>");
+ MODULE_DESCRIPTION("ALSA SoC Zoom2");
+ MODULE_LICENSE("GPL");
+-
++MODULE_ALIAS("platform:zoom2-soc-audio");
+-- 
+1.7.10
+
index 3e57ccf2bfc48849501bd2b75c7aff5430d53ddb..72a06e323b0de908e6a50917fb3ae884189c2bbe 100644 (file)
@@ -10,7 +10,7 @@ PV = "3.2.16"
 SRCREV_pn-${PN} = "b1be7dd1ec231ae751d0ce3acd0d2e5760704a6f"
 
 # The main PR is now using MACHINE_KERNEL_PR, for omap3 see conf/machine/include/omap3.inc
-MACHINE_KERNEL_PR_append = "b"
+MACHINE_KERNEL_PR_append = "c"
 
 FILESPATH =. "${FILE_DIRNAME}/linux-mainline-3.2:${FILE_DIRNAME}/linux-mainline-3.2/${MACHINE}:"
 
@@ -58,6 +58,8 @@ SRC_URI += "git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.gi
             file://beagle/0012-backlight-Add-TLC59108-backlight-control-driver.patch \
             file://beagle/0013-tlc59108-adjust-for-beagleboard-uLCD7.patch \
             file://beagle/0014-expansion-add-wifi.patch \
+            file://beagle/0015-ASoC-omap-add-MODULE_ALIAS-to-mcbsp-and-pcm-drivers.patch \
+            file://beagle/0016-ASoC-omap-convert-per-board-modules-to-platform-driv.patch \
             file://devkit8000/0001-arm-omap-devkit8000-for-lcd-use-samsung_lte_panel.patch \
             file://touchbook/0001-omap3-touchbook-remove-mmc-gpio_wp.patch \
             file://touchbook/0002-omap3-touchbook-drop-u-boot-readonly.patch \