[alsa-devel] [PATCH 5/8] ASoC: rsnd: use function pointer for each probe

Kuninori Morimoto kuninori.morimoto.gx at gmail.com
Mon Mar 3 08:43:18 CET 2014


From: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>

R-Car sound consists of many devices.
It will have more device support in the future.
Thus, for each probe become now function pointer array.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
---
 sound/soc/sh/rcar/core.c |   34 ++++++++++++++--------------------
 1 file changed, 14 insertions(+), 20 deletions(-)

diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c
index 416b078..ea747614 100644
--- a/sound/soc/sh/rcar/core.c
+++ b/sound/soc/sh/rcar/core.c
@@ -814,7 +814,15 @@ static int rsnd_probe(struct platform_device *pdev)
 	struct rcar_snd_info *info;
 	struct rsnd_priv *priv;
 	struct device *dev = &pdev->dev;
-	int ret;
+	int (*probe_func[])(struct platform_device *pdev,
+			    struct rsnd_priv *priv) = {
+		rsnd_gen_probe,
+		rsnd_ssi_probe,
+		rsnd_scu_probe,
+		rsnd_adg_probe,
+		rsnd_dai_probe,
+	};
+	int ret, i;
 
 	info = pdev->dev.platform_data;
 	if (!info) {
@@ -838,25 +846,11 @@ static int rsnd_probe(struct platform_device *pdev)
 	/*
 	 *	init each module
 	 */
-	ret = rsnd_gen_probe(pdev, priv);
-	if (ret)
-		return ret;
-
-	ret = rsnd_ssi_probe(pdev, priv);
-	if (ret)
-		return ret;
-
-	ret = rsnd_scu_probe(pdev, priv);
-	if (ret)
-		return ret;
-
-	ret = rsnd_adg_probe(pdev, priv);
-	if (ret)
-		return ret;
-
-	ret = rsnd_dai_probe(pdev, priv);
-	if (ret)
-		return ret;
+	for (i = 0; i < ARRAY_SIZE(probe_func); i++) {
+		ret = probe_func[i](pdev, priv);
+		if (ret)
+			return ret;
+	}
 
 	/*
 	 *	asoc register
-- 
1.7.9.5



More information about the Alsa-devel mailing list