devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [alsa-devel] [PATCH 0/3] Sound support for Exynos4412 Trats2 board
@ 2015-01-05 11:25 Inha Song
  2015-01-05 11:25 ` [alsa-devel] [PATCH 1/3] ASoC: samsung: Add machine driver for Trats2 Inha Song
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Inha Song @ 2015-01-05 11:25 UTC (permalink / raw)
  To: alsa-devel
  Cc: robh+dt, pawel.moll, mark.rutland, s.nawrocki, ijc+devicetree,
	galak, linux, kgene, sbkim73, lgirdwood, broonie, perex, tiwai,
	grant.likely, ideal.song, devicetree, linux-kernel,
	linux-arm-kernel, linux-samsung-soc

This patch-set adds basic sound support for the Trats2 boards.
It just support primary I2s and external speaker playback.

Inha Song (3):
  ASoC: samsung: Add machine driver for Trats2
  ASoC: samsung: Document Trats2 audio subsystem bindings
  ARM: dts: Add sound nodes for exynos4412-trats2

 .../bindings/sound/samsung,trats2-wm1811.txt       |  31 +++
 arch/arm/boot/dts/exynos4412-trats2.dts            |  38 ++++
 sound/soc/samsung/Kconfig                          |   8 +
 sound/soc/samsung/Makefile                         |   2 +
 sound/soc/samsung/trats2_wm1811.c                  | 216 +++++++++++++++++++++
 5 files changed, 295 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/sound/samsung,trats2-wm1811.txt
 create mode 100644 sound/soc/samsung/trats2_wm1811.c

-- 
2.0.0.390.gcb682f8

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [alsa-devel] [PATCH 1/3] ASoC: samsung: Add machine driver for Trats2
  2015-01-05 11:25 [alsa-devel] [PATCH 0/3] Sound support for Exynos4412 Trats2 board Inha Song
@ 2015-01-05 11:25 ` Inha Song
       [not found]   ` <1420457117-11030-2-git-send-email-ideal.song-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
  2015-01-05 11:25 ` [alsa-devel] [PATCH 2/3] ASoC: samsung: Document Trats2 audio subsystem bindings Inha Song
  2015-01-05 11:25 ` [alsa-devel] [PATCH 3/3] ARM: dts: Add sound nodes for exynos4412-trats2 Inha Song
  2 siblings, 1 reply; 8+ messages in thread
From: Inha Song @ 2015-01-05 11:25 UTC (permalink / raw)
  To: alsa-devel
  Cc: robh+dt, pawel.moll, mark.rutland, s.nawrocki, ijc+devicetree,
	galak, linux, kgene, sbkim73, lgirdwood, broonie, perex, tiwai,
	grant.likely, ideal.song, devicetree, linux-kernel,
	linux-arm-kernel, linux-samsung-soc

This patch add the sound machine driver for Trats2 board.
The codec operate in master mode. So, Reference to the
codec master clock must be defined in DT.

Signed-off-by: Inha Song <ideal.song@samsung.com>
---
 sound/soc/samsung/Kconfig         |   8 ++
 sound/soc/samsung/Makefile        |   2 +
 sound/soc/samsung/trats2_wm1811.c | 216 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 226 insertions(+)
 create mode 100644 sound/soc/samsung/trats2_wm1811.c

diff --git a/sound/soc/samsung/Kconfig b/sound/soc/samsung/Kconfig
index fc67f97..8031423 100644
--- a/sound/soc/samsung/Kconfig
+++ b/sound/soc/samsung/Kconfig
@@ -245,3 +245,11 @@ config SND_SOC_ARNDALE_RT5631_ALC5631
         depends on SND_SOC_SAMSUNG
         select SND_SAMSUNG_I2S
         select SND_SOC_RT5631
+
+config SND_SOC_SAMSUNG_TRATS2_WM1811
+	tristate "SoC I2S Audio support for WM1811 on Tizen Trats2 board"
+	depends on SND_SOC_SAMSUNG
+	select SND_SOC_WM8994
+	select SND_SAMSUNG_I2S
+	help
+	  Say Y if you want to add support for SoC audio on the Tizen Trats2 board.
diff --git a/sound/soc/samsung/Makefile b/sound/soc/samsung/Makefile
index 31e3dba..e2b7b1b 100644
--- a/sound/soc/samsung/Makefile
+++ b/sound/soc/samsung/Makefile
@@ -46,6 +46,7 @@ snd-soc-littlemill-objs := littlemill.o
 snd-soc-bells-objs := bells.o
 snd-soc-odroidx2-max98090-objs := odroidx2_max98090.o
 snd-soc-arndale-rt5631-objs := arndale_rt5631.o
+snd-soc-trats2-wm1811-objs := trats2_wm1811.o
 
 obj-$(CONFIG_SND_SOC_SAMSUNG_JIVE_WM8750) += snd-soc-jive-wm8750.o
 obj-$(CONFIG_SND_SOC_SAMSUNG_NEO1973_WM8753) += snd-soc-neo1973-wm8753.o
@@ -73,3 +74,4 @@ obj-$(CONFIG_SND_SOC_LITTLEMILL) += snd-soc-littlemill.o
 obj-$(CONFIG_SND_SOC_BELLS) += snd-soc-bells.o
 obj-$(CONFIG_SND_SOC_ODROIDX2) += snd-soc-odroidx2-max98090.o
 obj-$(CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631) += snd-soc-arndale-rt5631.o
+obj-$(CONFIG_SND_SOC_SAMSUNG_TRATS2_WM1811) += snd-soc-trats2-wm1811.o
diff --git a/sound/soc/samsung/trats2_wm1811.c b/sound/soc/samsung/trats2_wm1811.c
new file mode 100644
index 0000000..fc96842
--- /dev/null
+++ b/sound/soc/samsung/trats2_wm1811.c
@@ -0,0 +1,216 @@
+/*
+ * Copyright (C) 2015 Samsung Electronics Co., Ltd.
+ *
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
+ */
+
+#include <linux/of.h>
+#include <linux/module.h>
+#include <linux/clk.h>
+#include <sound/soc.h>
+#include <sound/pcm_params.h>
+#include "i2s.h"
+#include "i2s-regs.h"
+#include "../codecs/wm8994.h"
+
+struct trats2_machine_priv {
+	struct clk *clk_mclk;
+};
+
+static struct trats2_machine_priv trats2_wm1811_priv;
+
+static const struct snd_kcontrol_new trats2_controls[] = {
+	SOC_DAPM_PIN_SWITCH("SPK"),
+};
+
+const struct snd_soc_dapm_widget trats2_dapm_widgets[] = {
+	SND_SOC_DAPM_SPK("SPK", NULL),
+};
+
+static int trats2_aif1_hw_params(struct snd_pcm_substream *substream,
+				 struct snd_pcm_hw_params *params)
+{
+	struct snd_soc_pcm_runtime *rtd = substream->private_data;
+	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+	struct snd_soc_dai *codec_dai = rtd->codec_dai;
+	struct trats2_machine_priv *priv = snd_soc_card_get_drvdata(rtd->card);
+	unsigned int sysclk_rate;
+	unsigned int mclk_rate =
+			(unsigned int)clk_get_rate(priv->clk_mclk);
+	int ret;
+
+	/* Set the codec DAI configuration to Master*/
+	ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S
+					| SND_SOC_DAIFMT_NB_NF
+					| SND_SOC_DAIFMT_CBM_CFM);
+	if (ret < 0) {
+		dev_err(codec_dai->dev,
+			"Failed to set codec dai format: %d\n", ret);
+		return ret;
+	}
+
+	/* Set the cpu DAI configuration to Slave */
+	ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S
+					| SND_SOC_DAIFMT_NB_NF
+					| SND_SOC_DAIFMT_CBM_CFM);
+	if (ret < 0) {
+		dev_err(cpu_dai->dev,
+			"Failed to set cpu dai format: %d\n", ret);
+		return ret;
+	}
+
+	/* SYSCLK must be greater than 4.096MHz */
+	if (params_rate(params) == 8000 || params_rate(params) == 11025)
+		sysclk_rate = params_rate(params) * 512;
+	else
+		sysclk_rate = params_rate(params) * 256;
+
+	/* Set the codec FLL1 */
+	ret = snd_soc_dai_set_pll(codec_dai, WM8994_FLL1, WM8994_FLL_SRC_MCLK1,
+				  mclk_rate, sysclk_rate);
+	if (ret < 0) {
+		dev_err(codec_dai->dev, "Failed to set FLL1: %d\n", ret);
+		return ret;
+	}
+
+	/* Set the codec SYSCLK */
+	ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL1,
+				     sysclk_rate, SND_SOC_CLOCK_IN);
+	if (ret < 0) {
+		dev_err(codec_dai->dev, "Failed to set SYSCLK: %d\n", ret);
+		return ret;
+	}
+
+	/* Set i2s OPCLK */
+	ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_OPCLK,
+				     0, MOD_OPCLK_PCLK);
+	if (ret < 0) {
+		dev_err(cpu_dai->dev,
+			"Failed to set i2s opclk: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
+static struct snd_soc_ops trats2_aif1_ops = {
+	.hw_params = trats2_aif1_hw_params,
+};
+
+static int trats2_init_paiftx(struct snd_soc_pcm_runtime *rtd)
+{
+	struct snd_soc_codec *codec = rtd->codec;
+	struct snd_soc_card *card = rtd->card;
+	struct trats2_machine_priv *priv = snd_soc_card_get_drvdata(card);
+	int ret;
+
+	ret = clk_prepare_enable(priv->clk_mclk);
+	if (ret) {
+		dev_err(codec->dev, "Failed to enable mclk: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
+static struct snd_soc_dai_link trats2_dai[] = {
+	{
+		.name = "WM1811 AIF1",
+		.stream_name = "Pri_Dai",
+		.codec_dai_name = "wm8994-aif1",
+		.codec_name = "wm8994-codec",
+		.init = trats2_init_paiftx,
+		.ops = &trats2_aif1_ops,
+	},
+};
+
+static struct snd_soc_card trats2_card = {
+	.owner			= THIS_MODULE,
+
+	.dai_link		= trats2_dai,
+	.num_links		= ARRAY_SIZE(trats2_dai),
+
+	.controls		= trats2_controls,
+	.num_controls		= ARRAY_SIZE(trats2_controls),
+	.dapm_widgets		= trats2_dapm_widgets,
+	.num_dapm_widgets	= ARRAY_SIZE(trats2_dapm_widgets),
+
+	.drvdata		= &trats2_wm1811_priv,
+};
+
+static int trats2_audio_probe(struct platform_device *pdev)
+{
+	struct device_node *np = pdev->dev.of_node;
+	struct snd_soc_card *card = &trats2_card;
+	struct snd_soc_dai_link *dai_link = card->dai_link;
+	struct trats2_machine_priv *priv = card->drvdata;
+	int ret;
+
+	if (!np) {
+		dev_err(&pdev->dev, "of node is missing.\n");
+		return -ENODEV;
+	}
+
+	card->dev = &pdev->dev;
+
+	ret = snd_soc_of_parse_card_name(card, "samsung,model");
+	if (ret) {
+		dev_err(&pdev->dev,
+			"Card name is not provided\n");
+		return ret;
+	}
+
+	ret = snd_soc_of_parse_audio_routing(card, "samsung,audio-routing");
+	if (ret) {
+		dev_err(&pdev->dev, "Audio routing is not provided\n");
+		return ret;
+	}
+
+	dai_link->cpu_of_node = of_parse_phandle(np,
+						 "samsung,i2s-controller", 0);
+	if (dai_link->cpu_of_node == NULL) {
+		dev_err(&pdev->dev, "i2s-controller property parse error\n");
+		return -EINVAL;
+	}
+
+	dai_link->platform_of_node = dai_link->cpu_of_node;
+
+	priv->clk_mclk =  devm_clk_get(&pdev->dev, "mclk");
+	if (IS_ERR(priv->clk_mclk)) {
+		dev_err(&pdev->dev, "Failed to get mclk clock\n");
+		return PTR_ERR(priv->clk_mclk);
+	}
+
+	ret = devm_snd_soc_register_card(&pdev->dev, card);
+	if (ret) {
+		dev_err(&pdev->dev, "Failed to register card: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
+static const struct of_device_id trats2_audio_of_match[] = {
+	{ .compatible	= "samsung,trats2-audio", },
+	{ },
+};
+MODULE_DEVICE_TABLE(of, trats2_audio_of_match);
+
+static struct platform_driver trats2_audio_driver = {
+	.driver = {
+		.name		= "trats2-audio",
+		.owner		= THIS_MODULE,
+		.pm		= &snd_soc_pm_ops,
+		.of_match_table	= trats2_audio_of_match,
+	},
+	.probe	= trats2_audio_probe,
+};
+
+module_platform_driver(trats2_audio_driver);
+
+MODULE_AUTHOR("Inha Song <ideal.song@samsung.com>");
+MODULE_DESCRIPTION("ALSA SoC Trats2 Audio Support");
+MODULE_LICENSE("GPL v2");
-- 
2.0.0.390.gcb682f8

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [alsa-devel] [PATCH 2/3] ASoC: samsung: Document Trats2 audio subsystem bindings
  2015-01-05 11:25 [alsa-devel] [PATCH 0/3] Sound support for Exynos4412 Trats2 board Inha Song
  2015-01-05 11:25 ` [alsa-devel] [PATCH 1/3] ASoC: samsung: Add machine driver for Trats2 Inha Song
@ 2015-01-05 11:25 ` Inha Song
  2015-01-05 15:29   ` Mark Brown
  2015-01-05 11:25 ` [alsa-devel] [PATCH 3/3] ARM: dts: Add sound nodes for exynos4412-trats2 Inha Song
  2 siblings, 1 reply; 8+ messages in thread
From: Inha Song @ 2015-01-05 11:25 UTC (permalink / raw)
  To: alsa-devel
  Cc: robh+dt, pawel.moll, mark.rutland, s.nawrocki, ijc+devicetree,
	galak, linux, kgene, sbkim73, lgirdwood, broonie, perex, tiwai,
	grant.likely, ideal.song, devicetree, linux-kernel,
	linux-arm-kernel, linux-samsung-soc

This patch add Trats2 audio subsystem bindings document.

Signed-off-by: Inha Song <ideal.song@samsung.com>
---
 .../bindings/sound/samsung,trats2-wm1811.txt       | 31 ++++++++++++++++++++++
 1 file changed, 31 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/sound/samsung,trats2-wm1811.txt

diff --git a/Documentation/devicetree/bindings/sound/samsung,trats2-wm1811.txt b/Documentation/devicetree/bindings/sound/samsung,trats2-wm1811.txt
new file mode 100644
index 0000000..9d4d3f1
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/samsung,trats2-wm1811.txt
@@ -0,0 +1,31 @@
+Samsung Exynos Trats2 audio with WM1811 codec
+
+Required properties:
+
+ - compatible : Must be "samsung,trats2-audio"
+
+ - clocks : Reference to the codec master clock
+ - clock-names : The clock should be named "mclk"
+
+ - samsung,i2s-controller : The phandle of the I2S controller
+
+ - samsung,model : The user visible name of this sound
+
+ - samsung,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
+
+Example:
+
+sound {
+	compatible = "samsung,trats2-audio";
+	clocks = <&pmu_system_controller 0>;
+	clock-names = "mclk";
+	samsung,i2s-controller = <&i2s0>;
+	samsung,model = "wm1811";
+	samsung,audio-routing =
+			"SPK", "SPKOUTLN",
+			"SPK", "SPKOUTLP",
+			"SPK", "SPKOUTRN",
+			"SPK", "SPKOUTRP";
+};
-- 
2.0.0.390.gcb682f8

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [alsa-devel] [PATCH 3/3] ARM: dts: Add sound nodes for exynos4412-trats2
  2015-01-05 11:25 [alsa-devel] [PATCH 0/3] Sound support for Exynos4412 Trats2 board Inha Song
  2015-01-05 11:25 ` [alsa-devel] [PATCH 1/3] ASoC: samsung: Add machine driver for Trats2 Inha Song
  2015-01-05 11:25 ` [alsa-devel] [PATCH 2/3] ASoC: samsung: Document Trats2 audio subsystem bindings Inha Song
@ 2015-01-05 11:25 ` Inha Song
  2 siblings, 0 replies; 8+ messages in thread
From: Inha Song @ 2015-01-05 11:25 UTC (permalink / raw)
  To: alsa-devel
  Cc: robh+dt, pawel.moll, mark.rutland, s.nawrocki, ijc+devicetree,
	galak, linux, kgene, sbkim73, lgirdwood, broonie, perex, tiwai,
	grant.likely, ideal.song, devicetree, linux-kernel,
	linux-arm-kernel, linux-samsung-soc

This patch add WM1811 audio codec, I2S interface and the sound
machine nodes to enable audio on exynos4412-trats2 board.

Signed-off-by: Inha Song <ideal.song@samsung.com>
---
 arch/arm/boot/dts/exynos4412-trats2.dts | 38 +++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/arch/arm/boot/dts/exynos4412-trats2.dts b/arch/arm/boot/dts/exynos4412-trats2.dts
index 29231b4..2943ce7 100644
--- a/arch/arm/boot/dts/exynos4412-trats2.dts
+++ b/arch/arm/boot/dts/exynos4412-trats2.dts
@@ -203,6 +203,23 @@
 		};
 	};
 
+	i2c@138A0000 {
+		samsung,i2c-sda-delay = <100>;
+		samsung,i2c-slave-addr = <0x10>;
+		samsung,i2c-max-bus-freq = <100000>;
+		pinctrl-0 = <&i2c4_bus>;
+		pinctrl-names = "default";
+		status = "okay";
+
+		wm1811: wm1811@1a {
+			compatible = "wlf,wm1811";
+			reg = <0x1a>;
+			DCVDD-supply = <&ldo3_reg>;
+			DBVDD1-supply = <&ldo3_reg>;
+			wlf,ldo1ena = <&gpj0 4 0>;
+		};
+	};
+
 	i2c@138D0000 {
 		samsung,i2c-sda-delay = <100>;
 		samsung,i2c-slave-addr = <0x10>;
@@ -838,6 +855,27 @@
 		};
 	};
 
+	i2s0: i2s@03830000 {
+		pinctrl-0 = <&i2s0_bus>;
+		pinctrl-names = "default";
+		status = "okay";
+	};
+
+	sound {
+		compatible = "samsung,trats2-audio";
+		clocks = <&pmu_system_controller 0>;
+		clock-names = "mclk";
+		assigned-clocks = <&pmu_system_controller 0>;
+		assigned-clock-parents =  <&clock CLK_XUSBXTI>;
+		samsung,i2s-controller = <&i2s0>;
+		samsung,model = "wm1811";
+		samsung,audio-routing =
+			"SPK", "SPKOUTLN",
+			"SPK", "SPKOUTLP",
+			"SPK", "SPKOUTRN",
+			"SPK", "SPKOUTRP";
+	};
+
 	exynos-usbphy@125B0000 {
 		status = "okay";
 	};
-- 
2.0.0.390.gcb682f8

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [alsa-devel] [PATCH 1/3] ASoC: samsung: Add machine driver for Trats2
       [not found]   ` <1420457117-11030-2-git-send-email-ideal.song-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
@ 2015-01-05 11:48     ` Lars-Peter Clausen
  2015-01-05 12:40       ` Inha Song
  0 siblings, 1 reply; 8+ messages in thread
From: Lars-Peter Clausen @ 2015-01-05 11:48 UTC (permalink / raw)
  To: Inha Song, alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw
  Cc: mark.rutland-5wv7dgnIgG8, devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA,
	linux-lFZ/pmaqli7XmaaqVzeoHQ, pawel.moll-5wv7dgnIgG8,
	ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg,
	sbkim73-Sze3O3UU22JBDgjK7y7TUQ,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	broonie-DgEjT+Ai2ygdnm+yROfE0A, lgirdwood-Re5JQEeQqe8AvxtiuMwx3w,
	tiwai-l3A5Bk7waGM, robh+dt-DgEjT+Ai2ygdnm+yROfE0A,
	kgene-DgEjT+Ai2ygdnm+yROfE0A, s.nawrocki-Sze3O3UU22JBDgjK7y7TUQ,
	galak-sgV2jX0FEOL9JmXXK+q4OQ, grant.likely-QSEj5FYQhm4dnm+yROfE0A,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r

Hi,

A few small comments inline.

On 01/05/2015 12:25 PM, Inha Song wrote:
> --- /dev/null
> +++ b/sound/soc/samsung/trats2_wm1811.c
> @@ -0,0 +1,216 @@
>[...]
> +#include <linux/of.h>
> +#include <linux/module.h>
> +#include <linux/clk.h>
> +#include <sound/soc.h>
> +#include <sound/pcm_params.h>
> +#include "i2s.h"
> +#include "i2s-regs.h"

You probably don't need i2s-regs.h

> +#include "../codecs/wm8994.h"
> +
> +struct trats2_machine_priv {
> +	struct clk *clk_mclk;
> +};
> +
> +static struct trats2_machine_priv trats2_wm1811_priv;
> +
> +static const struct snd_kcontrol_new trats2_controls[] = {
> +	SOC_DAPM_PIN_SWITCH("SPK"),
> +};
> +
> +const struct snd_soc_dapm_widget trats2_dapm_widgets[] = {

static

> +	SND_SOC_DAPM_SPK("SPK", NULL),
> +};
> +
> +static int trats2_aif1_hw_params(struct snd_pcm_substream *substream,
> +				 struct snd_pcm_hw_params *params)
> +{
> +	struct snd_soc_pcm_runtime *rtd = substream->private_data;
> +	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
> +	struct snd_soc_dai *codec_dai = rtd->codec_dai;
> +	struct trats2_machine_priv *priv = snd_soc_card_get_drvdata(rtd->card);
> +	unsigned int sysclk_rate;
> +	unsigned int mclk_rate =
> +			(unsigned int)clk_get_rate(priv->clk_mclk);
> +	int ret;
> +
> +	/* Set the codec DAI configuration to Master*/
> +	ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S
> +					| SND_SOC_DAIFMT_NB_NF
> +					| SND_SOC_DAIFMT_CBM_CFM);
> +	if (ret < 0) {
> +		dev_err(codec_dai->dev,
> +			"Failed to set codec dai format: %d\n", ret);
> +		return ret;
> +	}
> +
> +	/* Set the cpu DAI configuration to Slave */
> +	ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S
> +					| SND_SOC_DAIFMT_NB_NF
> +					| SND_SOC_DAIFMT_CBM_CFM);
> +	if (ret < 0) {
> +		dev_err(cpu_dai->dev,
> +			"Failed to set cpu dai format: %d\n", ret);
> +		return ret;
> +	}


Use the dai_fmt field in the dai_link struct to setup the DAI link format. 
This will configure both the CPU and the CODEC DAI with the specified 
format, no need to do it manually.

>[...]
> +static struct snd_soc_ops trats2_aif1_ops = {

const

> +	.hw_params = trats2_aif1_hw_params,
> +};
> +
> +static int trats2_init_paiftx(struct snd_soc_pcm_runtime *rtd)
> +{
> +	struct snd_soc_codec *codec = rtd->codec;
> +	struct snd_soc_card *card = rtd->card;
> +	struct trats2_machine_priv *priv = snd_soc_card_get_drvdata(card);
> +	int ret;
> +
> +	ret = clk_prepare_enable(priv->clk_mclk);

Maybe just do this in the platform device probe handler and you should have 
a matching disable call somewhere.

> +	if (ret) {
> +		dev_err(codec->dev, "Failed to enable mclk: %d\n", ret);
> +		return ret;
> +	}
> +
> +	return 0;
> +}
>[...]
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [alsa-devel] [PATCH 1/3] ASoC: samsung: Add machine driver for Trats2
  2015-01-05 11:48     ` Lars-Peter Clausen
@ 2015-01-05 12:40       ` Inha Song
  0 siblings, 0 replies; 8+ messages in thread
From: Inha Song @ 2015-01-05 12:40 UTC (permalink / raw)
  To: Lars-Peter Clausen
  Cc: alsa-devel, mark.rutland, devicetree, linux-samsung-soc, linux,
	pawel.moll, ijc+devicetree, sbkim73, linux-kernel, robh+dt,
	lgirdwood, tiwai, broonie, kgene, s.nawrocki, galak, grant.likely,
	linux-arm-kernel

Hi,

Thanks for your comments.


> Hi,
> 
> A few small comments inline.
> 
> On 01/05/2015 12:25 PM, Inha Song wrote:
> > --- /dev/null
> > +++ b/sound/soc/samsung/trats2_wm1811.c
> > @@ -0,0 +1,216 @@
> >[...]
> > +#include <linux/of.h>
> > +#include <linux/module.h>
> > +#include <linux/clk.h>
> > +#include <sound/soc.h>
> > +#include <sound/pcm_params.h>
> > +#include "i2s.h"
> > +#include "i2s-regs.h"
> 
> You probably don't need i2s-regs.h

OK, I will remove.

> 
> > +#include "../codecs/wm8994.h"
> > +
> > +struct trats2_machine_priv {
> > +	struct clk *clk_mclk;
> > +};
> > +
> > +static struct trats2_machine_priv trats2_wm1811_priv;
> > +
> > +static const struct snd_kcontrol_new trats2_controls[] = {
> > +	SOC_DAPM_PIN_SWITCH("SPK"),
> > +};
> > +
> > +const struct snd_soc_dapm_widget trats2_dapm_widgets[] = {
> 
> static

Sorry for my mistake.

> 
> > +	SND_SOC_DAPM_SPK("SPK", NULL),
> > +};
> > +
> > +static int trats2_aif1_hw_params(struct snd_pcm_substream *substream,
> > +				 struct snd_pcm_hw_params *params)
> > +{
> > +	struct snd_soc_pcm_runtime *rtd = substream->private_data;
> > +	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
> > +	struct snd_soc_dai *codec_dai = rtd->codec_dai;
> > +	struct trats2_machine_priv *priv = snd_soc_card_get_drvdata(rtd->card);
> > +	unsigned int sysclk_rate;
> > +	unsigned int mclk_rate =
> > +			(unsigned int)clk_get_rate(priv->clk_mclk);
> > +	int ret;
> > +
> > +	/* Set the codec DAI configuration to Master*/
> > +	ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S
> > +					| SND_SOC_DAIFMT_NB_NF
> > +					| SND_SOC_DAIFMT_CBM_CFM);
> > +	if (ret < 0) {
> > +		dev_err(codec_dai->dev,
> > +			"Failed to set codec dai format: %d\n", ret);
> > +		return ret;
> > +	}
> > +
> > +	/* Set the cpu DAI configuration to Slave */
> > +	ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S
> > +					| SND_SOC_DAIFMT_NB_NF
> > +					| SND_SOC_DAIFMT_CBM_CFM);
> > +	if (ret < 0) {
> > +		dev_err(cpu_dai->dev,
> > +			"Failed to set cpu dai format: %d\n", ret);
> > +		return ret;
> > +	}
> 
> 
> Use the dai_fmt field in the dai_link struct to setup the DAI link format. 
> This will configure both the CPU and the CODEC DAI with the specified 
> format, no need to do it manually.

Ok, move to dai_fmt.

> 
> >[...]
> > +static struct snd_soc_ops trats2_aif1_ops = {
> 
> const

I will fix this.

> 
> > +	.hw_params = trats2_aif1_hw_params,
> > +};
> > +
> > +static int trats2_init_paiftx(struct snd_soc_pcm_runtime *rtd)
> > +{
> > +	struct snd_soc_codec *codec = rtd->codec;
> > +	struct snd_soc_card *card = rtd->card;
> > +	struct trats2_machine_priv *priv = snd_soc_card_get_drvdata(card);
> > +	int ret;
> > +
> > +	ret = clk_prepare_enable(priv->clk_mclk);
> 
> Maybe just do this in the platform device probe handler and you should have 
> a matching disable call somewhere.

Ok, I will move clk_prepare_enable call to snd_soc_ops->startup
and clk_disable_unprepare call to snd_soc_ops->shutdown.

Best Regards,
Inha Song.

> 
> > +	if (ret) {
> > +		dev_err(codec->dev, "Failed to enable mclk: %d\n", ret);
> > +		return ret;
> > +	}
> > +
> > +	return 0;
> > +}
> >[...]
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [alsa-devel] [PATCH 2/3] ASoC: samsung: Document Trats2 audio subsystem bindings
  2015-01-05 11:25 ` [alsa-devel] [PATCH 2/3] ASoC: samsung: Document Trats2 audio subsystem bindings Inha Song
@ 2015-01-05 15:29   ` Mark Brown
  2015-01-13  1:27     ` Inha Song
  0 siblings, 1 reply; 8+ messages in thread
From: Mark Brown @ 2015-01-05 15:29 UTC (permalink / raw)
  To: Inha Song
  Cc: alsa-devel, robh+dt, pawel.moll, mark.rutland, s.nawrocki,
	ijc+devicetree, galak, linux, kgene, sbkim73, lgirdwood, perex,
	tiwai, grant.likely, devicetree, linux-kernel, linux-arm-kernel,
	linux-samsung-soc

[-- Attachment #1: Type: text/plain, Size: 478 bytes --]

On Mon, Jan 05, 2015 at 08:25:16PM +0900, Inha Song wrote:

> + - clocks : Reference to the codec master clock
> + - clock-names : The clock should be named "mclk"

This should be done in the CODEC driver, not in the machine driver - the
CODEC always needs the clock, it's not something specific to this
machine.  Even if we decide that for Linux the best thing to do is to
manage the clock in the machine driver it should be described in the DT
as being attached to the CODEC.

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 473 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [alsa-devel] [PATCH 2/3] ASoC: samsung: Document Trats2 audio subsystem bindings
  2015-01-05 15:29   ` Mark Brown
@ 2015-01-13  1:27     ` Inha Song
  0 siblings, 0 replies; 8+ messages in thread
From: Inha Song @ 2015-01-13  1:27 UTC (permalink / raw)
  To: Mark Brown
  Cc: mark.rutland, devicetree, alsa-devel, linux-samsung-soc, linux,
	pawel.moll, ijc+devicetree, sbkim73, linux-kernel, lgirdwood,
	tiwai, robh+dt, kgene, s.nawrocki, galak, grant.likely,
	linux-arm-kernel

Hi Mark,

Thank you for your feedback and sorry for late response.

I think, I should remove clock settings in machine driver.
If the clock settings are necessary, I will add "assigned-clocks" nodes
in trats2 sound DT like odroid board.

Best Regards,
Inha Song.

> On Mon, Jan 05, 2015 at 08:25:16PM +0900, Inha Song wrote:
> 
> > + - clocks : Reference to the codec master clock
> > + - clock-names : The clock should be named "mclk"
> 
> This should be done in the CODEC driver, not in the machine driver - the
> CODEC always needs the clock, it's not something specific to this
> machine.  Even if we decide that for Linux the best thing to do is to
> manage the clock in the machine driver it should be described in the DT
> as being attached to the CODEC.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-01-13  1:27 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-05 11:25 [alsa-devel] [PATCH 0/3] Sound support for Exynos4412 Trats2 board Inha Song
2015-01-05 11:25 ` [alsa-devel] [PATCH 1/3] ASoC: samsung: Add machine driver for Trats2 Inha Song
     [not found]   ` <1420457117-11030-2-git-send-email-ideal.song-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2015-01-05 11:48     ` Lars-Peter Clausen
2015-01-05 12:40       ` Inha Song
2015-01-05 11:25 ` [alsa-devel] [PATCH 2/3] ASoC: samsung: Document Trats2 audio subsystem bindings Inha Song
2015-01-05 15:29   ` Mark Brown
2015-01-13  1:27     ` Inha Song
2015-01-05 11:25 ` [alsa-devel] [PATCH 3/3] ARM: dts: Add sound nodes for exynos4412-trats2 Inha Song

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).