Browse Source

ASoC: fix clkdev API usage in sh/migor.c

The clkdev API doesn't use .name and .id members of struct clk for clock
lookup. Instead clocks should be added to a lookup list. Without this patch
audio om the Migo-R board fails silently.

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Guennadi Liakhovetski 14 years ago
parent
commit
cbfa5184cc
1 changed files with 13 additions and 2 deletions
  1. 13 2
      sound/soc/sh/migor.c

+ 13 - 2
sound/soc/sh/migor.c

@@ -12,6 +12,7 @@
 #include <linux/firmware.h>
 #include <linux/firmware.h>
 #include <linux/module.h>
 #include <linux/module.h>
 
 
+#include <asm/clkdev.h>
 #include <asm/clock.h>
 #include <asm/clock.h>
 
 
 #include <cpu/sh7722.h>
 #include <cpu/sh7722.h>
@@ -40,12 +41,12 @@ static struct clk_ops siumckb_clk_ops = {
 };
 };
 
 
 static struct clk siumckb_clk = {
 static struct clk siumckb_clk = {
-	.name		= "siumckb_clk",
-	.id		= -1,
 	.ops		= &siumckb_clk_ops,
 	.ops		= &siumckb_clk_ops,
 	.rate		= 0, /* initialised at run-time */
 	.rate		= 0, /* initialised at run-time */
 };
 };
 
 
+static struct clk_lookup *siumckb_lookup;
+
 static int migor_hw_params(struct snd_pcm_substream *substream,
 static int migor_hw_params(struct snd_pcm_substream *substream,
 			   struct snd_pcm_hw_params *params)
 			   struct snd_pcm_hw_params *params)
 {
 {
@@ -180,6 +181,13 @@ static int __init migor_init(void)
 	if (ret < 0)
 	if (ret < 0)
 		return ret;
 		return ret;
 
 
+	siumckb_lookup = clkdev_alloc(&siumckb_clk, "siumckb_clk", NULL);
+	if (!siumckb_lookup) {
+		ret = -ENOMEM;
+		goto eclkdevalloc;
+	}
+	clkdev_add(siumckb_lookup);
+
 	/* Port number used on this machine: port B */
 	/* Port number used on this machine: port B */
 	migor_snd_device = platform_device_alloc("soc-audio", 1);
 	migor_snd_device = platform_device_alloc("soc-audio", 1);
 	if (!migor_snd_device) {
 	if (!migor_snd_device) {
@@ -200,12 +208,15 @@ static int __init migor_init(void)
 epdevadd:
 epdevadd:
 	platform_device_put(migor_snd_device);
 	platform_device_put(migor_snd_device);
 epdevalloc:
 epdevalloc:
+	clkdev_drop(siumckb_lookup);
+eclkdevalloc:
 	clk_unregister(&siumckb_clk);
 	clk_unregister(&siumckb_clk);
 	return ret;
 	return ret;
 }
 }
 
 
 static void __exit migor_exit(void)
 static void __exit migor_exit(void)
 {
 {
+	clkdev_drop(siumckb_lookup);
 	clk_unregister(&siumckb_clk);
 	clk_unregister(&siumckb_clk);
 	platform_device_unregister(migor_snd_device);
 	platform_device_unregister(migor_snd_device);
 }
 }