From patchwork Tue Aug 29 19:28:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Brown X-Patchwork-Id: 111245 Delivered-To: patch@linaro.org Received: by 10.140.95.112 with SMTP id h103csp1830364qge; Tue, 29 Aug 2017 12:29:30 -0700 (PDT) X-Google-Smtp-Source: ADKCNb5bvwgcZEWan9ungBQ1UDTiZwn3rq1NyrnR+HcQNcHxpuTIul21TvhoZ5hl1pOkVUsF/rkQ X-Received: by 10.28.145.200 with SMTP id t191mr291575wmd.195.1504034970552; Tue, 29 Aug 2017 12:29:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1504034970; cv=none; d=google.com; s=arc-20160816; b=lM+chTVRLDSzX7DiYXmvfVl21ndndWAPjMlsk6/amFzBSSlh5SXiucmuYiQKMJCykJ QrlEQzAayMGODYJO+wrNJeu+kG8ASDNg/MSNnff5LJGK32AIGJPHkI0lMDhm2H/NLoS9 PRU8GVLhUA0t4yAmvzsSvxUgsXFN+hwdsQXZBKNkeN7WLVdUvZE5+6AE53EwOWDWtGNt 319IKl93Mj5PInbz+iyK8TASBiEFnWezO/KOcJTPFp7U62j1INnpemY1TEGPXelrAMzz afpRypLj3nJxen1LwTge3QWNZZiyXTRx2GxZCFRYNWJPf30Fd0rZN4gddiFljqGPBAIY GCOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:cc:date:message-id:in-reply-to:to:from :dkim-signature:delivered-to:arc-authentication-results; bh=PfC8bDj8FOaOUrGmdx1Zu1JLS74SzZHVTSAOgSmSxg0=; b=yJN72WevJROo7J9CpA0cOsKzkGgLDZSMwHCEo84yLaBGQkzJi0A+v3iIYo/F/IXLxZ DgwxNFrO+PajD/4QqMDnXDnVSKMSHkK2saJ0x0JwHERwXvLOvRT70Mwg2KBej7KFpMbG IGeZVk7Y4UZ2W2rjhZi8gsdoKE6G2TAL79lS4La9iD0/wHYTIk0KaLWvEw9M5EyvlbuF NsA725wNIyxEoxsmt8a6eeNXpo1E3QX50VIWCF5PxdeFA6+lernWcDYGUwQ9v8XeLtCn jypSPMvYQHPG31ZVzEym6CAKncnraIeW1cI58HenRRyA/j4XUuPGad3AFw9Qp0MFIcfa vQGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@sirena.org.uk header.s=20170815-heliosphere header.b=NYLDmWPX; spf=pass (google.com: domain of alsa-devel-bounces@alsa-project.org designates 77.48.224.243 as permitted sender) smtp.mailfrom=alsa-devel-bounces@alsa-project.org Return-Path: Received: from alsa0.perex.cz (alsa0.perex.cz. [77.48.224.243]) by mx.google.com with ESMTP id 35si2841778wrn.549.2017.08.29.12.29.30; Tue, 29 Aug 2017 12:29:30 -0700 (PDT) Received-SPF: pass (google.com: domain of alsa-devel-bounces@alsa-project.org designates 77.48.224.243 as permitted sender) client-ip=77.48.224.243; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@sirena.org.uk header.s=20170815-heliosphere header.b=NYLDmWPX; spf=pass (google.com: domain of alsa-devel-bounces@alsa-project.org designates 77.48.224.243 as permitted sender) smtp.mailfrom=alsa-devel-bounces@alsa-project.org Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id BBB22266F92; Tue, 29 Aug 2017 21:29:28 +0200 (CEST) X-Original-To: alsa-devel@alsa-project.org Delivered-To: alsa-devel@alsa-project.org Received: by alsa0.perex.cz (Postfix, from userid 1000) id 91678266F92; Tue, 29 Aug 2017 21:29:27 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on mail1.perex.cz X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS, RP_MATCHES_RCVD, SPF_PASS, URIBL_BLOCKED autolearn=disabled version=3.4.0 Received: from heliosphere.sirena.org.uk (heliosphere.sirena.org.uk [172.104.155.198]) by alsa0.perex.cz (Postfix) with ESMTP id 9FD62266E37 for ; Tue, 29 Aug 2017 21:29:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sirena.org.uk; s=20170815-heliosphere; h=Date:Message-Id:In-Reply-To: Subject:Cc:To:From:Sender:Reply-To:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:References: List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner: List-Archive; bh=DmhkTTLp2/hCZB2RzpFMbs4TiY44cXGf34eWX4JtTbI=; b=NYLDmWPXFyZu q0aWYCZUUybd67IGIJ91U9V8dNJBiE3EEMmkdvIMeB6j5FToxUEXmBPnPXi9ZHa3pnU1EgzShSEX/ vArlHLdUDbczyF2Et9G199840TJLZPvMGNCPzx3e2m+tqLQAhFjnSelsdEKFqUWzjxA9JPv7MkpvZ ZgMME=; Received: from 92.40.248.112.threembb.co.uk ([92.40.248.112] helo=finisterre.ee.mobilebroadband) by heliosphere.sirena.org.uk with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1dmmCJ-0003xg-PO; Tue, 29 Aug 2017 19:29:22 +0000 Received: by finisterre.ee.mobilebroadband (Postfix, from userid 1000) id 477424400E7; Tue, 29 Aug 2017 20:28:24 +0100 (BST) From: Mark Brown To: Jeffy Chen In-Reply-To: <20170824045227.15504-5-jeffy.chen@rock-chips.com> Message-Id: <20170829192824.477424400E7@finisterre.ee.mobilebroadband> Date: Tue, 29 Aug 2017 20:28:24 +0100 (BST) Cc: alsa-devel@alsa-project.org, dianders@chromium.org, heiko@sntech.de, briannorris@chromium.org, linux-kernel@vger.kernel.org, Liam Girdwood , linux-rockchip@lists.infradead.org, Mark Brown , Takashi Iwai , dgreid@chromium.org, mka@chromium.org, linux-arm-kernel@lists.infradead.org Subject: [alsa-devel] Applied "ASoC: rockchip: Parse dai links from dts" to the asoc tree X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org The patch ASoC: rockchip: Parse dai links from dts has been applied to the asoc tree at git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed. If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark >From 0d52954ffe80b051ab79a105bd801485c4bbe20a Mon Sep 17 00:00:00 2001 From: Jeffy Chen Date: Thu, 24 Aug 2017 12:52:24 +0800 Subject: [PATCH] ASoC: rockchip: Parse dai links from dts Refactor rockchip_sound_probe, parse dai links from dts instead of hard coding them. Signed-off-by: Jeffy Chen Reviewed-by: Matthias Kaehlcke Tested-by: Matthias Kaehlcke Signed-off-by: Mark Brown --- sound/soc/rockchip/rk3399_gru_sound.c | 140 ++++++++++++++++++++++------------ 1 file changed, 91 insertions(+), 49 deletions(-) -- 2.13.2 _______________________________________________ Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel diff --git a/sound/soc/rockchip/rk3399_gru_sound.c b/sound/soc/rockchip/rk3399_gru_sound.c index cd2fdba922f1..347c34d0db4c 100644 --- a/sound/soc/rockchip/rk3399_gru_sound.c +++ b/sound/soc/rockchip/rk3399_gru_sound.c @@ -240,14 +240,42 @@ static const struct snd_soc_ops rockchip_sound_da7219_ops = { .hw_params = rockchip_sound_da7219_hw_params, }; +static struct snd_soc_card rockchip_sound_card = { + .name = "rk3399-gru-sound", + .owner = THIS_MODULE, + .dapm_widgets = rockchip_dapm_widgets, + .num_dapm_widgets = ARRAY_SIZE(rockchip_dapm_widgets), + .dapm_routes = rockchip_dapm_routes, + .num_dapm_routes = ARRAY_SIZE(rockchip_dapm_routes), + .controls = rockchip_controls, + .num_controls = ARRAY_SIZE(rockchip_controls), +}; + enum { + DAILINK_DA7219, DAILINK_MAX98357A, DAILINK_RT5514, - DAILINK_DA7219, DAILINK_RT5514_DSP, }; -static struct snd_soc_dai_link rockchip_dailinks[] = { +static const char * const dailink_compat[] = { + [DAILINK_DA7219] = "dlg,da7219", + [DAILINK_MAX98357A] = "maxim,max98357a", + [DAILINK_RT5514] = "realtek,rt5514-i2c", + [DAILINK_RT5514_DSP] = "realtek,rt5514-spi", +}; + +static const struct snd_soc_dai_link rockchip_dais[] = { + [DAILINK_DA7219] = { + .name = "DA7219", + .stream_name = "DA7219 PCM", + .codec_dai_name = "da7219-hifi", + .init = rockchip_sound_da7219_init, + .ops = &rockchip_sound_da7219_ops, + /* set da7219 as slave */ + .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | + SND_SOC_DAIFMT_CBS_CFS, + }, [DAILINK_MAX98357A] = { .name = "MAX98357A", .stream_name = "MAX98357A PCM", @@ -266,16 +294,6 @@ static struct snd_soc_dai_link rockchip_dailinks[] = { .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS, }, - [DAILINK_DA7219] = { - .name = "DA7219", - .stream_name = "DA7219 PCM", - .codec_dai_name = "da7219-hifi", - .init = rockchip_sound_da7219_init, - .ops = &rockchip_sound_da7219_ops, - /* set da7219 as slave */ - .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | - SND_SOC_DAIFMT_CBS_CFS, - }, /* RT5514 DSP for voice wakeup via spi bus */ [DAILINK_RT5514_DSP] = { .name = "RT5514 DSP", @@ -284,42 +302,72 @@ static struct snd_soc_dai_link rockchip_dailinks[] = { }, }; -static struct snd_soc_card rockchip_sound_card = { - .name = "rk3399-gru-sound", - .owner = THIS_MODULE, - .dai_link = rockchip_dailinks, - .num_links = ARRAY_SIZE(rockchip_dailinks), - .dapm_widgets = rockchip_dapm_widgets, - .num_dapm_widgets = ARRAY_SIZE(rockchip_dapm_widgets), - .dapm_routes = rockchip_dapm_routes, - .num_dapm_routes = ARRAY_SIZE(rockchip_dapm_routes), - .controls = rockchip_controls, - .num_controls = ARRAY_SIZE(rockchip_controls), -}; - -static int rockchip_sound_probe(struct platform_device *pdev) +static int rockchip_sound_codec_node_match(struct device_node *np_codec) { - struct snd_soc_card *card = &rockchip_sound_card; - struct device_node *cpu_node; - int i, ret; + int i; - cpu_node = of_parse_phandle(pdev->dev.of_node, "rockchip,cpu", 0); - if (!cpu_node) { - dev_err(&pdev->dev, "Property 'rockchip,cpu' missing or invalid\n"); - return -EINVAL; + for (i = 0; i < ARRAY_SIZE(dailink_compat); i++) { + if (of_device_is_compatible(np_codec, dailink_compat[i])) + return i; } + return -1; +} - for (i = 0; i < ARRAY_SIZE(rockchip_dailinks); i++) { - rockchip_dailinks[i].platform_of_node = cpu_node; - rockchip_dailinks[i].cpu_of_node = cpu_node; - - rockchip_dailinks[i].codec_of_node = - of_parse_phandle(pdev->dev.of_node, "rockchip,codec", i); - if (!rockchip_dailinks[i].codec_of_node) { - dev_err(&pdev->dev, - "Property[%d] 'rockchip,codec' missing or invalid\n", i); +static int rockchip_sound_of_parse_dais(struct device *dev, + struct snd_soc_card *card) +{ + struct device_node *np_cpu; + struct device_node *np_codec; + struct snd_soc_dai_link *dai; + int i, index; + + card->dai_link = devm_kzalloc(dev, sizeof(rockchip_dais), + GFP_KERNEL); + if (!card->dai_link) + return -ENOMEM; + + np_cpu = of_parse_phandle(dev->of_node, "rockchip,cpu", 0); + + card->num_links = 0; + for (i = 0; i < ARRAY_SIZE(rockchip_dais); i++) { + np_codec = of_parse_phandle(dev->of_node, + "rockchip,codec", i); + if (!np_codec) + break; + + if (!of_device_is_available(np_codec)) + continue; + + index = rockchip_sound_codec_node_match(np_codec); + if (index < 0) + continue; + + if (!np_cpu) { + dev_err(dev, "Missing 'rockchip,cpu' for %s\n", + rockchip_dais[index].name); return -EINVAL; } + + dai = &card->dai_link[card->num_links++]; + *dai = rockchip_dais[index]; + + dai->codec_of_node = np_codec; + dai->platform_of_node = np_cpu; + dai->cpu_of_node = np_cpu; + } + + return 0; +} + +static int rockchip_sound_probe(struct platform_device *pdev) +{ + struct snd_soc_card *card = &rockchip_sound_card; + int ret; + + ret = rockchip_sound_of_parse_dais(&pdev->dev, card); + if (ret < 0) { + dev_err(&pdev->dev, "Failed to parse dais: %d\n", ret); + return ret; } /* Set DMIC wakeup delay */ @@ -332,13 +380,7 @@ static int rockchip_sound_probe(struct platform_device *pdev) } card->dev = &pdev->dev; - - ret = devm_snd_soc_register_card(&pdev->dev, card); - if (ret) - dev_err(&pdev->dev, "%s snd_soc_register_card fail %d\n", - __func__, ret); - - return ret; + return devm_snd_soc_register_card(&pdev->dev, card); } static const struct of_device_id rockchip_sound_of_match[] = {