From patchwork Tue Jul 30 09:59:52 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Genoud X-Patchwork-Id: 2835597 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id DA37D9F4D4 for ; Tue, 30 Jul 2013 12:26:24 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 9FAA620317 for ; Tue, 30 Jul 2013 12:26:23 +0000 (UTC) Received: from casper.infradead.org (casper.infradead.org [85.118.1.10]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C4E4B20306 for ; Tue, 30 Jul 2013 12:26:18 +0000 (UTC) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1V46lg-00011Z-AK; Tue, 30 Jul 2013 10:03:02 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1V46l6-0008Le-TD; Tue, 30 Jul 2013 10:02:24 +0000 Received: from mail-wg0-x235.google.com ([2a00:1450:400c:c00::235]) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1V46jy-0008B5-HO for linux-arm-kernel@lists.infradead.org; Tue, 30 Jul 2013 10:01:16 +0000 Received: by mail-wg0-f53.google.com with SMTP id c11so5880144wgh.20 for ; Tue, 30 Jul 2013 03:00:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=WaZ2XA0GkAKBpT+8sD5ZWu5Cj7N9zMGVWthE3eeq5dg=; b=SSah8FtWRm+ZIz8Klv8MST6jl8sP28MNACmay81N78HO/A1Y2IJarw1F04EPFMPdWZ xD7E3BZxSiilS3qpxi0eLPw0fwmZwPccwelp7xNCHa92QkenhmNhtdwrlLCxd2CcKa6q s+I3+Gi48g1oxxcKwXXrS7GIw25f7KqymtmSFdd36O2s7T9V+YOx/88Yt0yYCZlZ+NVS EziVnXJaTvNhcEXuGDoWp9g05qre1neI8UoFgJ9aM471bLfwlx6oQIQfSHmMGVHpo1tX gpI3ywuwZoQ79e3jrKwCeMAK6pynlNz1h7Kml7yKaSm+pheAk4WL/ganNCcwBWbay8Tm j3fw== X-Received: by 10.180.101.170 with SMTP id fh10mr439230wib.22.1375178447820; Tue, 30 Jul 2013 03:00:47 -0700 (PDT) Received: from lnx-rg.pr (lyon.paratronic.fr. [213.41.177.106]) by mx.google.com with ESMTPSA id nb12sm27384598wic.3.2013.07.30.03.00.45 for (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 30 Jul 2013 03:00:46 -0700 (PDT) From: Richard Genoud To: Mark Brown , Nicolas Ferre , Liam Girdwood Subject: [PATCH v6 8/8] ASoC: sam9x5: get codec MCLK via device tree Date: Tue, 30 Jul 2013 11:59:52 +0200 Message-Id: <1375178392-26060-9-git-send-email-richard.genoud@gmail.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1375178392-26060-1-git-send-email-richard.genoud@gmail.com> References: <1375178392-26060-1-git-send-email-richard.genoud@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20130730_060114_761482_31A1AF2E X-CRM114-Status: GOOD ( 15.10 ) X-Spam-Score: -2.0 (--) Cc: alsa-devel@alsa-project.org, Lars-Peter Clausen , Richard Genoud , devicetree-discuss@lists.ozlabs.org, linux-kernel@vger.kernel.org, Bo Shen , linux-arm-kernel@lists.infradead.org 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 X-Spam-Status: No, score=-5.6 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Instead of having the clock rate hard coded, and thus, only compatible with one board, we can make it compatible with other implementations. Signed-off-by: Richard Genoud --- .../bindings/sound/atmel-sam9x5-wm8731-audio.txt | 4 ++++ arch/arm/boot/dts/at91sam9x5ek.dtsi | 8 ++++++++ sound/soc/atmel/sam9x5_wm8731.c | 18 ++++++++++++++---- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/Documentation/devicetree/bindings/sound/atmel-sam9x5-wm8731-audio.txt b/Documentation/devicetree/bindings/sound/atmel-sam9x5-wm8731-audio.txt index 0720857..114a4c5 100644 --- a/Documentation/devicetree/bindings/sound/atmel-sam9x5-wm8731-audio.txt +++ b/Documentation/devicetree/bindings/sound/atmel-sam9x5-wm8731-audio.txt @@ -8,6 +8,8 @@ Required properties: - atmel,audio-routing: A list of the connections between audio components. Each entry is a pair of strings, the first being the connection's sink, the second being the connection's source. + - clocks: Must contain an entry for the codec master clock. + - clock-names : Must be "mclk" (clock that feeds the codec master clock) Available audio endpoints for the audio-routing table: @@ -32,4 +34,6 @@ sound { atmel,ssc-controller = <&ssc0>; atmel,audio-codec = <&wm8731>; + clocks = <&sound_crystal 0>; + clock-names = "mclk"; }; diff --git a/arch/arm/boot/dts/at91sam9x5ek.dtsi b/arch/arm/boot/dts/at91sam9x5ek.dtsi index 9afe15b..b5ff17c 100644 --- a/arch/arm/boot/dts/at91sam9x5ek.dtsi +++ b/arch/arm/boot/dts/at91sam9x5ek.dtsi @@ -114,6 +114,12 @@ }; }; + sound_crystal: osc@0 { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <12288000>; + }; + sound { compatible = "atmel,sam9x5-wm8731-audio"; @@ -127,5 +133,7 @@ atmel,ssc-controller = <&ssc0>; atmel,audio-codec = <&wm8731>; + clocks = <&sound_crystal 0>; + clock-names = "mclk"; }; }; diff --git a/sound/soc/atmel/sam9x5_wm8731.c b/sound/soc/atmel/sam9x5_wm8731.c index 992ae38..f33c181 100644 --- a/sound/soc/atmel/sam9x5_wm8731.c +++ b/sound/soc/atmel/sam9x5_wm8731.c @@ -23,6 +23,8 @@ #include #include #include +#include +#include #include #include @@ -31,12 +33,10 @@ #include "../codecs/wm8731.h" #include "atmel_ssc_dai.h" - -#define MCLK_RATE 12288000 - #define DRV_NAME "sam9x5-snd-wm8731" struct sam9x5_drvdata { + struct clk *mclk; int ssc_id; }; @@ -46,6 +46,7 @@ struct sam9x5_drvdata { static int sam9x5_wm8731_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_dai *codec_dai = rtd->codec_dai; + struct sam9x5_drvdata *priv = snd_soc_card_get_drvdata(rtd->card); struct device *dev = rtd->dev; int ret; @@ -53,7 +54,8 @@ static int sam9x5_wm8731_init(struct snd_soc_pcm_runtime *rtd) /* set the codec system clock for DAC and ADC */ ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL, - MCLK_RATE, SND_SOC_CLOCK_IN); + clk_get_rate(priv->mclk), + SND_SOC_CLOCK_IN); if (ret < 0) { dev_err(dev, "ASoC: Failed to set WM8731 SYSCLK: %d\n", ret); return ret; @@ -142,6 +144,13 @@ static int sam9x5_wm8731_driver_probe(struct platform_device *pdev) priv->ssc_id = of_alias_get_id(cpu_np, "ssc"); + priv->mclk = devm_clk_get(&pdev->dev, "mclk"); + if (IS_ERR(priv->mclk)) { + ret = PTR_ERR(priv->mclk); + dev_err(&pdev->dev, "Failed to get MCLK: %d\n", ret); + goto out; + } + ret = atmel_ssc_set_audio(priv->ssc_id); if (ret != 0) { dev_err(&pdev->dev, @@ -153,6 +162,7 @@ static int sam9x5_wm8731_driver_probe(struct platform_device *pdev) of_node_put(codec_np); of_node_put(cpu_np); + snd_soc_card_set_drvdata(card, priv); platform_set_drvdata(pdev, card); ret = snd_soc_register_card(card);