From patchwork Tue Mar 26 18:05:39 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jean-Francois Moine X-Patchwork-Id: 2343091 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) by patchwork1.kernel.org (Postfix) with ESMTP id 8934E3FC54 for ; Tue, 26 Mar 2013 18:07:55 +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 1UKYFi-0006MQ-Br; Tue, 26 Mar 2013 18:05:42 +0000 Received: from smtp1-g21.free.fr ([2a01:e0c:1:1599::10]) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1UKYFd-0006Kz-SP for linux-arm-kernel@lists.infradead.org; Tue, 26 Mar 2013 18:05:39 +0000 Received: from armhf (unknown [IPv6:2a01:e35:2f5c:9de0:212:bfff:fe1e:9ce4]) by smtp1-g21.free.fr (Postfix) with ESMTP id 3359D9402B7; Tue, 26 Mar 2013 19:05:28 +0100 (CET) Date: Tue, 26 Mar 2013 19:05:39 +0100 From: Jean-Francois Moine To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 2/2] ARM: kirkwood: extend the kirkwood i2s driver for DT usage Message-ID: <20130326190539.494d96d9@armhf> X-Mailer: Claws Mail 3.8.1 (GTK+ 2.24.10; arm-unknown-linux-gnueabihf) Mime-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20130326_140538_507748_206D192D X-CRM114-Status: GOOD ( 21.56 ) X-Spam-Score: -1.9 (-) X-Spam-Report: SpamAssassin version 3.3.2 on merlin.infradead.org summary: Content analysis details: (-1.9 points) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (moinejf[at]free.fr) -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] Cc: Andrew Lunn , Jason Cooper , Sebastian Hesselbarth 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org The kirkwood i2s driver is used without DT in the Kirkwood machine. This patch adds a DT compatible definition for use in other Marvell machines as the Armada 88AP510 (Dove). Signed-off-by: Jean-Francois Moine --- .../devicetree/bindings/sound/kirkwood-i2s.txt | 24 +++++++++++++ sound/soc/kirkwood/kirkwood-i2s.c | 36 ++++++++++++++++++-- 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 Documentation/devicetree/bindings/sound/kirkwood-i2s.txt diff --git a/Documentation/devicetree/bindings/sound/kirkwood-i2s.txt b/Documentation/devicetree/bindings/sound/kirkwood-i2s.txt new file mode 100644 index 0000000..a089504 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/kirkwood-i2s.txt @@ -0,0 +1,24 @@ +* Kirkwood I2S controller + +Required properties: + +- compatible: "marvell,kirkwood-i2s" +- reg: physical base address of the controller and length of memory mapped + region. +- interrupts: list of two irq numbers. + The first irq is used for data flow and the second one is used for errors. +- clocks: phandle of the internal or external clock. + +Non-standard property: + +- marvell,burst-size (optional): burst size which can be only 32 or 128. + Default is 128. + +Example: + +i2s1: audio-controller@b4000 { + compatible = "marvell,kirkwood-i2s"; + reg = <0xb4000 0x4000>; + interrupts = <21>, <22>; + clocks = <&gate_clk 13>; +}; diff --git a/sound/soc/kirkwood/kirkwood-i2s.c b/sound/soc/kirkwood/kirkwood-i2s.c index afca1ec..dceb9f8 100644 --- a/sound/soc/kirkwood/kirkwood-i2s.c +++ b/sound/soc/kirkwood/kirkwood-i2s.c @@ -12,7 +12,6 @@ #include #include -#include #include #include #include @@ -22,6 +21,8 @@ #include #include #include +#include + #include "kirkwood.h" #define DRV_NAME "kirkwood-i2s" @@ -485,10 +486,30 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) return -ENXIO; } +#ifdef CONFIG_OF + if (!data) { + struct device_node *np = pdev->dev.of_node; + u32 val; + + if (!np + || of_property_read_u32(np, "marvell,burst-size", &val)) { + val = 128; + } else if (val != 32 && val != 128) { + dev_warn(&pdev->dev, + "'marvell,burst-size' can be only 32 or 128" + "- value forced to 128\n"); + val = 128; + } + priv->burst = val; + } else { + priv->burst = data->burst; + } +#else if (!data) { dev_err(&pdev->dev, "no platform data ?!\n"); return -EINVAL; } +#endif priv->burst = data->burst; @@ -519,7 +540,7 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) priv->ctl_rec = KIRKWOOD_RECCTL_SIZE_24; /* Select the burst size */ - if (data->burst == 32) { + if (priv->burst == 32) { priv->ctl_play |= KIRKWOOD_PLAYCTL_BURST_32; priv->ctl_rec |= KIRKWOOD_RECCTL_BURST_32; } else { @@ -556,12 +577,23 @@ static int kirkwood_i2s_dev_remove(struct platform_device *pdev) return 0; } +#ifdef CONFIG_OF +static struct of_device_id kirkwood_i2s_of_match[] = { + { .compatible = "marvell,kirkwood-i2s" }, + { } +}; +MODULE_DEVICE_TABLE(of, kirkwood_i2s_of_match); +#endif + static struct platform_driver kirkwood_i2s_driver = { .probe = kirkwood_i2s_dev_probe, .remove = kirkwood_i2s_dev_remove, .driver = { .name = DRV_NAME, .owner = THIS_MODULE, +#ifdef CONFIG_OF + .of_match_table = kirkwood_i2s_of_match, +#endif }, };