From patchwork Sun Mar 10 18:33:07 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Markus Pargmann X-Patchwork-Id: 2245541 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) by patchwork2.kernel.org (Postfix) with ESMTP id F3109DF24C for ; Sun, 10 Mar 2013 18:42:41 +0000 (UTC) Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1UEl8r-0006Zh-MS; Sun, 10 Mar 2013 18:38:42 +0000 Received: from metis.ext.pengutronix.de ([2001:6f8:1178:4:290:27ff:fe1d:cc33]) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1UEl5b-0004wF-3Q for linux-arm-kernel@lists.infradead.org; Sun, 10 Mar 2013 18:35:20 +0000 Received: from dude.hi.pengutronix.de ([2001:6f8:1178:2:21e:67ff:fe11:9c5c]) by metis.ext.pengutronix.de with esmtp (Exim 4.72) (envelope-from ) id 1UEl50-0005G2-4N; Sun, 10 Mar 2013 19:34:42 +0100 Received: from mpa by dude.hi.pengutronix.de with local (Exim 4.80) (envelope-from ) id 1UEl4v-0002uf-Rx; Sun, 10 Mar 2013 19:34:37 +0100 From: Markus Pargmann To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 06/10] ARM: soc-audio phycore-ac97: fix driver init order Date: Sun, 10 Mar 2013 19:33:07 +0100 Message-Id: <1362940391-8338-7-git-send-email-mpa@pengutronix.de> X-Mailer: git-send-email 1.8.2.rc2 In-Reply-To: <1362940391-8338-1-git-send-email-mpa@pengutronix.de> References: <1362940391-8338-1-git-send-email-mpa@pengutronix.de> X-SA-Exim-Connect-IP: 2001:6f8:1178:2:21e:67ff:fe11:9c5c X-SA-Exim-Mail-From: mpa@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-arm-kernel@lists.infradead.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20130310_143519_814035_09EE355D X-CRM114-Status: GOOD ( 17.47 ) X-Spam-Score: -4.3 (----) X-Spam-Report: SpamAssassin version 3.3.2 on merlin.infradead.org summary: Content analysis details: (-4.3 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.4 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] Cc: Fabio Estevam , alsa-devel@alsa-project.org, devicetree-discuss@lists.ozlabs.org, Mark Brown , Liam Girdwood , Grant Likely , Sascha Hauer , Markus Pargmann , Shawn Guo , Timur Tabi X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Adding a soc-audio sound driver internally uses snd_soc_register_device, which tries to bind it with the codec. The adding of the driver is deferred because the codec driver is not loaded. This patch changes the order of registration. The codec driver is there before the ac97 driver, so the snd_soc_register_device call is successfull. Signed-off-by: Markus Pargmann --- sound/soc/fsl/phycore-ac97.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/sound/soc/fsl/phycore-ac97.c b/sound/soc/fsl/phycore-ac97.c index f8da6dd..d146cec 100644 --- a/sound/soc/fsl/phycore-ac97.c +++ b/sound/soc/fsl/phycore-ac97.c @@ -79,35 +79,40 @@ static int __init imx_phycore_init(void) return 0; } - imx_phycore_snd_ac97_device = platform_device_alloc("soc-audio", -1); - if (!imx_phycore_snd_ac97_device) + + /* + * First add codec driver, otherwise soc-audio may be deferred and fails + * to load. + */ + imx_phycore_snd_device = platform_device_alloc("wm9712-codec", -1); + if (!imx_phycore_snd_device) return -ENOMEM; - platform_set_drvdata(imx_phycore_snd_ac97_device, &imx_phycore); - ret = platform_device_add(imx_phycore_snd_ac97_device); - if (ret) + ret = platform_device_add(imx_phycore_snd_device); + if (ret) { + printk(KERN_ERR "ASoC: Platform device allocation failed\n"); goto fail1; + } - imx_phycore_snd_device = platform_device_alloc("wm9712-codec", -1); - if (!imx_phycore_snd_device) { + imx_phycore_snd_ac97_device = platform_device_alloc("soc-audio", -1); + if (!imx_phycore_snd_ac97_device) { ret = -ENOMEM; goto fail2; } - ret = platform_device_add(imx_phycore_snd_device); - if (ret) { - printk(KERN_ERR "ASoC: Platform device allocation failed\n"); + platform_set_drvdata(imx_phycore_snd_ac97_device, &imx_phycore); + ret = platform_device_add(imx_phycore_snd_ac97_device); + if (ret) goto fail3; - } return 0; fail3: - platform_device_put(imx_phycore_snd_device); + platform_device_put(imx_phycore_snd_ac97_device); fail2: - platform_device_del(imx_phycore_snd_ac97_device); + platform_device_del(imx_phycore_snd_device); fail1: - platform_device_put(imx_phycore_snd_ac97_device); + platform_device_put(imx_phycore_snd_device); return ret; }