linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC 0/4] DT support for rx51-audio
@ 2013-10-27 21:24 Sebastian Reichel
  2013-10-27 21:24 ` [RFC 1/4] ASoC: omap: rx51: Use snd_soc_register_card Sebastian Reichel
                   ` (3 more replies)
  0 siblings, 4 replies; 18+ messages in thread
From: Sebastian Reichel @ 2013-10-27 21:24 UTC (permalink / raw)
  To: Sebastian Reichel, Peter Ujfalusi
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Stephen Warren,
	Ian Campbell, Rob Landley, Tony Lindgren, Russell King,
	Jaroslav Kysela, Takashi Iwai, Liam Girdwood, Mark Brown,
	Jarkko Nikula, Grant Likely, Linus Walleij, devicetree,
	linux-doc, linux-kernel, linux-arm-kernel, linux-omap,
	alsa-devel, Sebastian Reichel

Hi,

This patchset adds DT support in rx51-audio. I tested it on the Nokia N900
and was able to play sound with aplay using earphones and earspeaker. The
Loudspeakers did not work. I don't know the reason.

The patchset consists of 4 patches:

1. convert rx51-audio to snd_soc_register_card()
2. init audio in rx51 platform file
3. add some DT helpers to ASoC core
4. add DT support to rx51-audio

Please note, that the patch is RFC level for now. For example non DT boot
does not work, because I did not yet add pdata in boardcode.

Proposed DTS node would look like this:

sound: rx51-audio {
       compatible = "nokia,rx51-audio";

       ti,mcbsp = <&mcbsp2>;
       ti,codec = <&tlv320aic3x>;
       ti,codec_aux = <&tlv320aic3x_aux>;
       ti,headset_amp = <&tpa6130a2>;

       tvout-selection-gpio = <&gpio2 8 GPIO_ACTIVE_HIGH>; /* 40 */
       jack-detection-gpio = <&gpio6 17 GPIO_ACTIVE_HIGH>; /* 177 */
       eci-sw-gpio = <&gpio6 22 GPIO_ACTIVE_HIGH>; /* 182 */
       speaker-amp-gpio = <&twl_gpio 7 GPIO_ACTIVE_HIGH>;
};

-- Sebastian

Pali Rohár (2):
  ASoC: omap: rx51: Use snd_soc_register_card
  ARM: OMAP: rx51: Register audio device

Sebastian Reichel (2):
  ASoC: Allow Aux Codecs to be specified using DT
  ASoC: RX-51: Add DT support to sound driver

 .../devicetree/bindings/sound/nokia,rx51.txt       |  28 +++
 .../devicetree/bindings/vendor-prefixes.txt        |   1 +
 arch/arm/mach-omap2/board-rx51-peripherals.c       |  11 ++
 include/sound/rx51.h                               |  18 ++
 include/sound/soc.h                                |  13 +-
 sound/soc/omap/omap-mcbsp.c                        |   5 +-
 sound/soc/omap/omap-mcbsp.h                        |   2 +-
 sound/soc/omap/rx51.c                              | 212 +++++++++++++++------
 sound/soc/soc-core.c                               |  68 +++++--
 9 files changed, 277 insertions(+), 81 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/sound/nokia,rx51.txt
 create mode 100644 include/sound/rx51.h

-- 
1.8.4.rc3


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

* [RFC 1/4] ASoC: omap: rx51: Use snd_soc_register_card
  2013-10-27 21:24 [RFC 0/4] DT support for rx51-audio Sebastian Reichel
@ 2013-10-27 21:24 ` Sebastian Reichel
  2013-10-28 16:00   ` Mark Brown
  2013-11-06 14:17   ` Pavel Machek
  2013-10-27 21:24 ` [RFC 2/4] ARM: OMAP: rx51: Register audio device Sebastian Reichel
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 18+ messages in thread
From: Sebastian Reichel @ 2013-10-27 21:24 UTC (permalink / raw)
  To: Sebastian Reichel, Peter Ujfalusi
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Stephen Warren,
	Ian Campbell, Rob Landley, Tony Lindgren, Russell King,
	Jaroslav Kysela, Takashi Iwai, Liam Girdwood, Mark Brown,
	Jarkko Nikula, Grant Likely, Linus Walleij, devicetree,
	linux-doc, linux-kernel, linux-arm-kernel, linux-omap,
	alsa-devel, Pali Rohár, Sebastian Reichel

From: Pali Rohár <pali.rohar@gmail.com>

This patch converts the rx51 ASoC module to use
snd_soc_register_card. It also adds module alias
to support driver autoloading.

Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
Signed-off-by: Sebastian Reichel <sre@debian.org>
---
 sound/soc/omap/rx51.c | 49 +++++++++++++++++++++++++++++--------------------
 1 file changed, 29 insertions(+), 20 deletions(-)

diff --git a/sound/soc/omap/rx51.c b/sound/soc/omap/rx51.c
index 611179c..41f26ae 100644
--- a/sound/soc/omap/rx51.c
+++ b/sound/soc/omap/rx51.c
@@ -390,10 +390,9 @@ static struct snd_soc_card rx51_sound_card = {
 	.num_configs = ARRAY_SIZE(rx51_codec_conf),
 };
 
-static struct platform_device *rx51_snd_device;
-
-static int __init rx51_soc_init(void)
+static int rx51_soc_probe(struct platform_device *pdev)
 {
+	struct snd_soc_card *card = &rx51_sound_card;
 	int err;
 
 	if (!machine_is_nokia_rx51() && !of_machine_is_compatible("nokia,omap3-n900"))
@@ -408,22 +407,17 @@ static int __init rx51_soc_init(void)
 	if (err)
 		goto err_gpio_eci_sw;
 
-	rx51_snd_device = platform_device_alloc("soc-audio", -1);
-	if (!rx51_snd_device) {
-		err = -ENOMEM;
-		goto err1;
-	}
-
-	platform_set_drvdata(rx51_snd_device, &rx51_sound_card);
+	card->dev = &pdev->dev;
 
-	err = platform_device_add(rx51_snd_device);
-	if (err)
-		goto err2;
+	err = snd_soc_register_card(card);
+	if (err) {
+		dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", err);
+		goto err_snd;
+	}
 
 	return 0;
-err2:
-	platform_device_put(rx51_snd_device);
-err1:
+err_snd:
+	card->dev = NULL;
 	gpio_free(RX51_ECI_SW_GPIO);
 err_gpio_eci_sw:
 	gpio_free(RX51_TVOUT_SEL_GPIO);
@@ -432,19 +426,34 @@ err_gpio_tvout_sel:
 	return err;
 }
 
-static void __exit rx51_soc_exit(void)
+static int rx51_soc_remove(struct platform_device *pdev)
 {
+	struct snd_soc_card *card = platform_get_drvdata(pdev);
+
 	snd_soc_jack_free_gpios(&rx51_av_jack, ARRAY_SIZE(rx51_av_jack_gpios),
 				rx51_av_jack_gpios);
 
-	platform_device_unregister(rx51_snd_device);
+	snd_soc_unregister_card(card);
+	card->dev = NULL;
+
 	gpio_free(RX51_ECI_SW_GPIO);
 	gpio_free(RX51_TVOUT_SEL_GPIO);
+
+	return 0;
 }
 
-module_init(rx51_soc_init);
-module_exit(rx51_soc_exit);
+static struct platform_driver rx51_soc_driver = {
+	.driver = {
+		.name = "rx51-audio",
+		.owner = THIS_MODULE,
+	},
+	.probe = rx51_soc_probe,
+	.remove = rx51_soc_remove,
+};
+
+module_platform_driver(rx51_soc_driver);
 
 MODULE_AUTHOR("Nokia Corporation");
 MODULE_DESCRIPTION("ALSA SoC Nokia RX-51");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:rx51-audio");
-- 
1.8.4.rc3


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

* [RFC 2/4] ARM: OMAP: rx51: Register audio device
  2013-10-27 21:24 [RFC 0/4] DT support for rx51-audio Sebastian Reichel
  2013-10-27 21:24 ` [RFC 1/4] ASoC: omap: rx51: Use snd_soc_register_card Sebastian Reichel
@ 2013-10-27 21:24 ` Sebastian Reichel
  2013-11-06 14:19   ` Pavel Machek
  2013-10-27 21:24 ` [RFC 3/4] ASoC: Allow Aux Codecs to be specified using DT Sebastian Reichel
  2013-10-27 21:24 ` [RFC 4/4] ASoC: RX-51: Add DT support to sound driver Sebastian Reichel
  3 siblings, 1 reply; 18+ messages in thread
From: Sebastian Reichel @ 2013-10-27 21:24 UTC (permalink / raw)
  To: Sebastian Reichel, Peter Ujfalusi
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Stephen Warren,
	Ian Campbell, Rob Landley, Tony Lindgren, Russell King,
	Jaroslav Kysela, Takashi Iwai, Liam Girdwood, Mark Brown,
	Jarkko Nikula, Grant Likely, Linus Walleij, devicetree,
	linux-doc, linux-kernel, linux-arm-kernel, linux-omap,
	alsa-devel, Pali Rohár, Sebastian Reichel

From: Pali Rohár <pali.rohar@gmail.com>

This patch adds support for the audio chip to the legacy
boardcode of the Nokia N900.

Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
Signed-off-by: Sebastian Reichel <sre@debian.org>
---
 arch/arm/mach-omap2/board-rx51-peripherals.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c
index 68dc998..65e3627 100644
--- a/arch/arm/mach-omap2/board-rx51-peripherals.c
+++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
@@ -1205,6 +1205,16 @@ error:
 	 */
 }
 
+static struct platform_device rx51_audio_device = {
+	.name	= "rx51-audio",
+	.id	= -1,
+};
+
+static void __init rx51_init_audio(void)
+{
+	platform_device_register(&rx51_audio_device);
+}
+
 static struct tsc2005_platform_data tsc2005_pdata = {
 	.ts_pressure_max	= 2048,
 	.ts_pressure_fudge	= 2,
@@ -1287,6 +1297,7 @@ void __init rx51_peripherals_init(void)
 	gpmc_onenand_init(board_onenand_data);
 	board_smc91x_init();
 	rx51_add_gpio_keys();
+	rx51_init_audio();
 	rx51_init_wl1251();
 	rx51_init_tsc2005();
 	rx51_init_si4713();
-- 
1.8.4.rc3


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

* [RFC 3/4] ASoC: Allow Aux Codecs to be specified using DT
  2013-10-27 21:24 [RFC 0/4] DT support for rx51-audio Sebastian Reichel
  2013-10-27 21:24 ` [RFC 1/4] ASoC: omap: rx51: Use snd_soc_register_card Sebastian Reichel
  2013-10-27 21:24 ` [RFC 2/4] ARM: OMAP: rx51: Register audio device Sebastian Reichel
@ 2013-10-27 21:24 ` Sebastian Reichel
  2013-10-28 16:37   ` Mark Brown
  2013-11-06 14:25   ` Pavel Machek
  2013-10-27 21:24 ` [RFC 4/4] ASoC: RX-51: Add DT support to sound driver Sebastian Reichel
  3 siblings, 2 replies; 18+ messages in thread
From: Sebastian Reichel @ 2013-10-27 21:24 UTC (permalink / raw)
  To: Sebastian Reichel, Peter Ujfalusi
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Stephen Warren,
	Ian Campbell, Rob Landley, Tony Lindgren, Russell King,
	Jaroslav Kysela, Takashi Iwai, Liam Girdwood, Mark Brown,
	Jarkko Nikula, Grant Likely, Linus Walleij, devicetree,
	linux-doc, linux-kernel, linux-arm-kernel, linux-omap,
	alsa-devel, Sebastian Reichel

This patch adds support for specifying auxiliary codecs and
codec configuration via device tree phandles.

This change adds new fields to snd_soc_aux_dev and snd_soc_codec_conf
and adds support for the changes to SoC core methods.

Signed-off-by: Sebastian Reichel <sre@debian.org>
---
 include/sound/soc.h  | 13 +++++++++-
 sound/soc/soc-core.c | 68 ++++++++++++++++++++++++++++++++++++----------------
 2 files changed, 59 insertions(+), 22 deletions(-)

diff --git a/include/sound/soc.h b/include/sound/soc.h
index d22cb0a..00b25a8 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -937,7 +937,12 @@ struct snd_soc_dai_link {
 };
 
 struct snd_soc_codec_conf {
+	/*
+	 * specify device either by device name, or by
+	 * DT/OF node, but not both.
+	 */
 	const char *dev_name;
+	const struct device_node *of_node;
 
 	/*
 	 * optional map of kcontrol, widget and path name prefixes that are
@@ -954,7 +959,13 @@ struct snd_soc_codec_conf {
 
 struct snd_soc_aux_dev {
 	const char *name;		/* Codec name */
-	const char *codec_name;		/* for multi-codec */
+
+	/*
+	 * specify multi-codec either by device name, or by
+	 * DT/OF node, but not both.
+	 */
+	const char *codec_name;
+	const struct device_node *codec_of_node;
 
 	/* codec/machine specific init - e.g. add machine controls */
 	int (*init)(struct snd_soc_dapm_context *dapm);
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 1a38be0..392f479 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -1085,10 +1085,12 @@ static void soc_set_name_prefix(struct snd_soc_card *card,
 
 	for (i = 0; i < card->num_configs; i++) {
 		struct snd_soc_codec_conf *map = &card->codec_conf[i];
-		if (map->dev_name && !strcmp(codec->name, map->dev_name)) {
-			codec->name_prefix = map->name_prefix;
-			break;
-		}
+		if (map->of_node && codec->dev->of_node != map->of_node)
+			continue;
+		if (map->dev_name && strcmp(codec->name, map->dev_name))
+			continue;
+		codec->name_prefix = map->name_prefix;
+		break;
 	}
 }
 
@@ -1527,15 +1529,23 @@ static void soc_unregister_ac97_dai_link(struct snd_soc_codec *codec)
 static int soc_check_aux_dev(struct snd_soc_card *card, int num)
 {
 	struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num];
+	const char *codecname = aux_dev->codec_name;
 	struct snd_soc_codec *codec;
 
 	/* find CODEC from registered CODECs*/
 	list_for_each_entry(codec, &codec_list, list) {
-		if (!strcmp(codec->name, aux_dev->codec_name))
+		if (aux_dev->codec_of_node &&
+				codec->dev->of_node == aux_dev->codec_of_node)
+			return 0;
+		if (aux_dev->codec_name &&
+				!strcmp(codec->name, aux_dev->codec_name))
 			return 0;
 	}
 
-	dev_err(card->dev, "ASoC: %s not registered\n", aux_dev->codec_name);
+	if (aux_dev->codec_of_node)
+		codecname = of_node_full_name(aux_dev->codec_of_node);
+
+	dev_err(card->dev, "ASoC: %s not registered\n", codecname);
 
 	return -EPROBE_DEFER;
 }
@@ -1544,22 +1554,31 @@ static int soc_probe_aux_dev(struct snd_soc_card *card, int num)
 {
 	struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num];
 	struct snd_soc_codec *codec;
+	const char *codecname = aux_dev->codec_name;
 	int ret = -ENODEV;
 
 	/* find CODEC from registered CODECs*/
 	list_for_each_entry(codec, &codec_list, list) {
-		if (!strcmp(codec->name, aux_dev->codec_name)) {
-			if (codec->probed) {
-				dev_err(codec->dev,
-					"ASoC: codec already probed");
-				ret = -EBUSY;
-				goto out;
-			}
-			goto found;
+		if (aux_dev->codec_of_node &&
+				codec->dev->of_node != aux_dev->codec_of_node)
+			continue;
+		if (aux_dev->codec_name &&
+				strcmp(codec->name, aux_dev->codec_name))
+			continue;
+
+		if (codec->probed) {
+			dev_err(codec->dev, "ASoC: codec already probed");
+			ret = -EBUSY;
+			goto out;
 		}
+		goto found;
 	}
+
+	if (aux_dev->codec_of_node)
+		codecname = of_node_full_name(aux_dev->codec_of_node);
+
 	/* codec not found */
-	dev_err(card->dev, "ASoC: codec %s not found", aux_dev->codec_name);
+	dev_err(card->dev, "ASoC: codec %s not found", codecname);
 	return -EPROBE_DEFER;
 
 found:
@@ -1644,12 +1663,19 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
 		/* check to see if we need to override the compress_type */
 		for (i = 0; i < card->num_configs; ++i) {
 			codec_conf = &card->codec_conf[i];
-			if (!strcmp(codec->name, codec_conf->dev_name)) {
-				compress_type = codec_conf->compress_type;
-				if (compress_type && compress_type
-				    != codec->compress_type)
-					break;
-			}
+
+			if (codec_conf->of_node &&
+				codec->dev->of_node != codec_conf->of_node)
+				continue;
+
+			if (codec_conf->dev_name &&
+				strcmp(codec->name, codec_conf->dev_name))
+				continue;
+
+			compress_type = codec_conf->compress_type;
+			if (compress_type && compress_type
+			    != codec->compress_type)
+				break;
 		}
 		ret = snd_soc_init_codec_cache(codec, compress_type);
 		if (ret < 0)
-- 
1.8.4.rc3


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

* [RFC 4/4] ASoC: RX-51: Add DT support to sound driver
  2013-10-27 21:24 [RFC 0/4] DT support for rx51-audio Sebastian Reichel
                   ` (2 preceding siblings ...)
  2013-10-27 21:24 ` [RFC 3/4] ASoC: Allow Aux Codecs to be specified using DT Sebastian Reichel
@ 2013-10-27 21:24 ` Sebastian Reichel
  2013-10-28  6:45   ` Kumar Gala
                     ` (2 more replies)
  3 siblings, 3 replies; 18+ messages in thread
From: Sebastian Reichel @ 2013-10-27 21:24 UTC (permalink / raw)
  To: Sebastian Reichel, Peter Ujfalusi
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Stephen Warren,
	Ian Campbell, Rob Landley, Tony Lindgren, Russell King,
	Jaroslav Kysela, Takashi Iwai, Liam Girdwood, Mark Brown,
	Jarkko Nikula, Grant Likely, Linus Walleij, devicetree,
	linux-doc, linux-kernel, linux-arm-kernel, linux-omap,
	alsa-devel, Sebastian Reichel

This patch adds device tree support to the Nokia N900 audio driver.
It also removes GPIO defines and gets them from platform data /
device tree, since some GPIO numbers may be different with DT boot.

The binding also changes a helper function in omap-mcbsp, which
is currently only used by the Nokia N900. This change is needed,
because DT instanced omap-mcbsp driver has no valid id assigned.

Last but not least the DT binding is documented.

Signed-off-by: Sebastian Reichel <sre@debian.org>
---
 .../devicetree/bindings/sound/nokia,rx51.txt       |  28 ++++
 .../devicetree/bindings/vendor-prefixes.txt        |   1 +
 include/sound/rx51.h                               |  18 +++
 sound/soc/omap/omap-mcbsp.c                        |   5 +-
 sound/soc/omap/omap-mcbsp.h                        |   2 +-
 sound/soc/omap/rx51.c                              | 175 ++++++++++++++++-----
 6 files changed, 184 insertions(+), 45 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/sound/nokia,rx51.txt
 create mode 100644 include/sound/rx51.h

diff --git a/Documentation/devicetree/bindings/sound/nokia,rx51.txt b/Documentation/devicetree/bindings/sound/nokia,rx51.txt
new file mode 100644
index 0000000..4f985ca
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/nokia,rx51.txt
@@ -0,0 +1,28 @@
+* Nokia N900 audio setup
+
+Required properties:
+- compatible: "nokia,rx51-audio"
+- ti,mcbsp: phandle for the McBSP node
+- ti,codec: phandle for the main TLV320AIC3X node
+- ti,codec_aux: phandle for the main TLV320AIC3X auxiliary node
+- ti,headset_amp: phandle for the TPA6130A2 node
+- tvout-selection-gpio: GPIO for tvout selection
+- jack-detection-gpio: GPIO for jack detection
+- eci-sw-gpio: GPIO for ECI SW
+- speaker-amp-gpio: GPIO for Speaker Amp
+
+Example:
+
+sound {
+	compatible = "nokia,rx51-audio";
+
+	ti,mcbsp = <&mcbsp2>;
+	ti,codec = <&tlv320aic3x>;
+	ti,codec_aux = <&tlv320aic3x_aux>;
+	ti,headset_amp = <&tpa6130a2>;
+
+	tvout-selection-gpio = <&gpio2 8 GPIO_ACTIVE_HIGH>; /* 40 */
+	jack-detection-gpio = <&gpio6 17 GPIO_ACTIVE_HIGH>; /* 177 */
+	eci-sw-gpio = <&gpio6 22 GPIO_ACTIVE_HIGH>; /* 182 */
+	speaker-amp-gpio = <&twl_gpio 7 GPIO_ACTIVE_HIGH>;
+};
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
index 2956800..2cc3dad 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.txt
+++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
@@ -42,6 +42,7 @@ microchip	Microchip Technology Inc.
 mosaixtech	Mosaix Technologies, Inc.
 national	National Semiconductor
 nintendo	Nintendo
+nokia	Nokia Corporation
 nvidia	NVIDIA
 nxp	NXP Semiconductors
 onnn	ON Semiconductor Corp.
diff --git a/include/sound/rx51.h b/include/sound/rx51.h
new file mode 100644
index 0000000..190d745
--- /dev/null
+++ b/include/sound/rx51.h
@@ -0,0 +1,18 @@
+/*
+ * Platform data for Nokia RX-51 SoC audio
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#ifndef __RX51_AUDIO_H__
+#define __RX51_AUDIO_H__
+
+struct rx51_audio_pdata {
+	int tvout_selection_gpio;
+	int jack_detection_gpio;
+	int eci_sw_gpio;
+	int speaker_amp_gpio;
+};
+
+#endif
diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c
index 6c19bba..f88e31e 100644
--- a/sound/soc/omap/omap-mcbsp.c
+++ b/sound/soc/omap/omap-mcbsp.c
@@ -691,7 +691,7 @@ OMAP_MCBSP_SOC_SINGLE_S16_EXT("McBSP" #port " Sidetone Channel 1 Volume", \
 OMAP_MCBSP_ST_CONTROLS(2);
 OMAP_MCBSP_ST_CONTROLS(3);
 
-int omap_mcbsp_st_add_controls(struct snd_soc_pcm_runtime *rtd)
+int omap_mcbsp_st_add_controls(struct snd_soc_pcm_runtime *rtd, int port_id)
 {
 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
 	struct omap_mcbsp *mcbsp = snd_soc_dai_get_drvdata(cpu_dai);
@@ -701,7 +701,7 @@ int omap_mcbsp_st_add_controls(struct snd_soc_pcm_runtime *rtd)
 		return 0;
 	}
 
-	switch (mcbsp->id) {
+	switch (port_id) {
 	case 2: /* McBSP 2 */
 		return snd_soc_add_dai_controls(cpu_dai,
 					omap_mcbsp2_st_controls,
@@ -711,6 +711,7 @@ int omap_mcbsp_st_add_controls(struct snd_soc_pcm_runtime *rtd)
 					omap_mcbsp3_st_controls,
 					ARRAY_SIZE(omap_mcbsp3_st_controls));
 	default:
+		dev_err(mcbsp->dev, "Port %d not supported\n", port_id);
 		break;
 	}
 
diff --git a/sound/soc/omap/omap-mcbsp.h b/sound/soc/omap/omap-mcbsp.h
index ba8386a..2e3369c 100644
--- a/sound/soc/omap/omap-mcbsp.h
+++ b/sound/soc/omap/omap-mcbsp.h
@@ -39,6 +39,6 @@ enum omap_mcbsp_div {
 	OMAP_MCBSP_CLKGDV,		/* Sample rate generator divider */
 };
 
-int omap_mcbsp_st_add_controls(struct snd_soc_pcm_runtime *rtd);
+int omap_mcbsp_st_add_controls(struct snd_soc_pcm_runtime *rtd, int port_id);
 
 #endif
diff --git a/sound/soc/omap/rx51.c b/sound/soc/omap/rx51.c
index 41f26ae..aa44108 100644
--- a/sound/soc/omap/rx51.c
+++ b/sound/soc/omap/rx51.c
@@ -26,11 +26,13 @@
 #include <linux/delay.h>
 #include <linux/gpio.h>
 #include <linux/platform_device.h>
+#include <linux/of_gpio.h>
 #include <linux/module.h>
 #include <sound/core.h>
 #include <sound/jack.h>
 #include <sound/pcm.h>
 #include <sound/soc.h>
+#include <sound/rx51.h>
 #include <linux/platform_data/asoc-ti-mcbsp.h>
 #include "../codecs/tpa6130a2.h"
 
@@ -38,15 +40,6 @@
 
 #include "omap-mcbsp.h"
 
-#define RX51_TVOUT_SEL_GPIO		40
-#define RX51_JACK_DETECT_GPIO		177
-#define RX51_ECI_SW_GPIO		182
-/*
- * REVISIT: TWL4030 GPIO base in RX-51. Now statically defined to 192. This
- * gpio is reserved in arch/arm/mach-omap2/board-rx51-peripherals.c
- */
-#define RX51_SPEAKER_AMP_TWL_GPIO	(192 + 7)
-
 enum {
 	RX51_JACK_DISABLED,
 	RX51_JACK_TVOUT,		/* tv-out with stereo output */
@@ -60,6 +53,8 @@ static int rx51_jack_func;
 
 static void rx51_ext_control(struct snd_soc_dapm_context *dapm)
 {
+	struct snd_soc_card *card = dapm->card;
+	struct rx51_audio_pdata *pdata = snd_soc_card_get_drvdata(card);
 	int hp = 0, hs = 0, tvout = 0;
 
 	switch (rx51_jack_func) {
@@ -91,7 +86,7 @@ static void rx51_ext_control(struct snd_soc_dapm_context *dapm)
 	else
 		snd_soc_dapm_disable_pin(dapm, "HS Mic");
 
-	gpio_set_value(RX51_TVOUT_SEL_GPIO, tvout);
+	gpio_set_value(pdata->tvout_selection_gpio, tvout);
 
 	snd_soc_dapm_sync(dapm);
 }
@@ -150,10 +145,12 @@ static int rx51_set_spk(struct snd_kcontrol *kcontrol,
 static int rx51_spk_event(struct snd_soc_dapm_widget *w,
 			  struct snd_kcontrol *k, int event)
 {
-	if (SND_SOC_DAPM_EVENT_ON(event))
-		gpio_set_value_cansleep(RX51_SPEAKER_AMP_TWL_GPIO, 1);
-	else
-		gpio_set_value_cansleep(RX51_SPEAKER_AMP_TWL_GPIO, 0);
+	struct snd_soc_dapm_context *dapm = w->dapm;
+	struct snd_soc_card *card = dapm->card;
+	struct rx51_audio_pdata *pdata = snd_soc_card_get_drvdata(card);
+
+	gpio_set_value_cansleep(pdata->speaker_amp_gpio,
+				!!SND_SOC_DAPM_EVENT_ON(event));
 
 	return 0;
 }
@@ -219,7 +216,6 @@ static struct snd_soc_jack rx51_av_jack;
 
 static struct snd_soc_jack_gpio rx51_av_jack_gpios[] = {
 	{
-		.gpio = RX51_JACK_DETECT_GPIO,
 		.name = "avdet-gpio",
 		.report = SND_JACK_HEADSET,
 		.invert = 1,
@@ -286,6 +282,9 @@ static const struct snd_kcontrol_new aic34_rx51_controlsb[] = {
 static int rx51_aic34_init(struct snd_soc_pcm_runtime *rtd)
 {
 	struct snd_soc_codec *codec = rtd->codec;
+	struct snd_soc_card *card = codec->card;
+	struct rx51_audio_pdata *pdata = snd_soc_card_get_drvdata(card);
+
 	struct snd_soc_dapm_context *dapm = &codec->dapm;
 	int err;
 
@@ -297,8 +296,10 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime *rtd)
 	/* Add RX-51 specific controls */
 	err = snd_soc_add_card_controls(rtd->card, aic34_rx51_controls,
 				   ARRAY_SIZE(aic34_rx51_controls));
-	if (err < 0)
+	if (err < 0) {
+		dev_err(card->dev, "Failed to add RX-51 specific controls\n");
 		return err;
+	}
 
 	/* Add RX-51 specific widgets */
 	snd_soc_dapm_new_controls(dapm, aic34_dapm_widgets,
@@ -308,25 +309,39 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime *rtd)
 	snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map));
 
 	err = tpa6130a2_add_controls(codec);
-	if (err < 0)
+	if (err < 0) {
+		dev_err(card->dev, "Failed to add TPA6130A2 controls\n");
 		return err;
+	}
 	snd_soc_limit_volume(codec, "TPA6130A2 Headphone Playback Volume", 42);
 
-	err = omap_mcbsp_st_add_controls(rtd);
-	if (err < 0)
+	err = omap_mcbsp_st_add_controls(rtd, 2);
+	if (err < 0) {
+		dev_err(card->dev, "Failed to add MCBSP controls\n");
 		return err;
+	}
 
 	/* AV jack detection */
 	err = snd_soc_jack_new(codec, "AV Jack",
 			       SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
 			       &rx51_av_jack);
-	if (err)
+	if (err) {
+		dev_err(card->dev, "Failed to add AV Jack\n");
 		return err;
+
+	}
+
+	rx51_av_jack_gpios[0].gpio = pdata->jack_detection_gpio;
+
 	err = snd_soc_jack_add_gpios(&rx51_av_jack,
-				     ARRAY_SIZE(rx51_av_jack_gpios),
-				     rx51_av_jack_gpios);
+				ARRAY_SIZE(rx51_av_jack_gpios),
+				rx51_av_jack_gpios);
+	if (err) {
+		dev_err(card->dev, "Failed to add GPIOs\n");
+		return err;
+	}
 
-	return err;
+	return 0;
 }
 
 static int rx51_aic34b_init(struct snd_soc_dapm_context *dapm)
@@ -392,37 +407,106 @@ static struct snd_soc_card rx51_sound_card = {
 
 static int rx51_soc_probe(struct platform_device *pdev)
 {
+	struct rx51_audio_pdata *pdata = pdev->dev.platform_data;
+	struct device_node *np = pdev->dev.of_node;
 	struct snd_soc_card *card = &rx51_sound_card;
 	int err;
 
 	if (!machine_is_nokia_rx51() && !of_machine_is_compatible("nokia,omap3-n900"))
 		return -ENODEV;
 
-	err = gpio_request_one(RX51_TVOUT_SEL_GPIO,
+	card->dev = &pdev->dev;
+
+	if (np) {
+		struct device_node *dai_node;
+
+		pdata = devm_kzalloc(&pdev->dev,
+				sizeof(struct rx51_audio_pdata), GFP_KERNEL);
+
+		if (pdata == NULL) {
+			dev_err(card->dev, "failed to create private data\n");
+			return -ENOMEM;
+		}
+
+		pdata->tvout_selection_gpio =
+			of_get_named_gpio(np, "tvout-selection-gpio", 0);
+		pdata->jack_detection_gpio  =
+			of_get_named_gpio(np, "jack-detection-gpio", 0);
+		pdata->eci_sw_gpio = of_get_named_gpio(np, "eci-sw-gpio", 0);
+		pdata->speaker_amp_gpio =
+			of_get_named_gpio(np, "speaker-amp-gpio", 0);
+
+		dai_node = of_parse_phandle(np, "ti,mcbsp", 0);
+		if (!dai_node) {
+			dev_err(&pdev->dev, "McBSP node is not provided\n");
+			return -EINVAL;
+		}
+		rx51_dai[0].cpu_dai_name = NULL;
+		rx51_dai[0].cpu_of_node = dai_node;
+
+		dai_node = of_parse_phandle(np, "ti,codec", 0);
+		if (!dai_node) {
+			dev_err(&pdev->dev, "Codec node is not provided\n");
+			return -EINVAL;
+		}
+		rx51_dai[0].codec_name = NULL;
+		rx51_dai[0].codec_of_node = dai_node;
+
+		dai_node = of_parse_phandle(np, "ti,codec_aux", 0);
+		if (!dai_node) {
+			dev_err(&pdev->dev, "Auxiliary Codec node is not provided\n");
+			return -EINVAL;
+		}
+		rx51_aux_dev[0].codec_name = NULL;
+		rx51_aux_dev[0].codec_of_node = dai_node;
+		rx51_codec_conf[0].dev_name = NULL;
+		rx51_codec_conf[0].of_node = dai_node;
+
+		if (pdata->tvout_selection_gpio == -EPROBE_DEFER ||
+		    pdata->jack_detection_gpio == -EPROBE_DEFER ||
+		    pdata->eci_sw_gpio == -EPROBE_DEFER ||
+		    pdata->speaker_amp_gpio == -EPROBE_DEFER) {
+			devm_kfree(card->dev, pdata);
+			pdev->dev.platform_data = NULL;
+			return -EPROBE_DEFER;
+		}
+
+		pdev->dev.platform_data = pdata;
+	} else if (!pdata) {
+		dev_err(card->dev, "platform data missing");
+		err = -ENODEV;
+		goto error;
+	}
+
+	err = devm_gpio_request_one(card->dev, pdata->tvout_selection_gpio,
 			       GPIOF_DIR_OUT | GPIOF_INIT_LOW, "tvout_sel");
-	if (err)
-		goto err_gpio_tvout_sel;
-	err = gpio_request_one(RX51_ECI_SW_GPIO,
+	if (err) {
+		dev_err(card->dev, "could not setup tvout_sel\n");
+		goto error;
+	}
+	err = devm_gpio_request_one(card->dev, pdata->eci_sw_gpio,
 			       GPIOF_DIR_OUT | GPIOF_INIT_HIGH, "eci_sw");
-	if (err)
-		goto err_gpio_eci_sw;
-
-	card->dev = &pdev->dev;
+	if (err) {
+		dev_err(card->dev, "could not setup eci_sw\n");
+		goto error;
+	}
+	err = devm_gpio_request_one(card->dev, pdata->speaker_amp_gpio,
+			       GPIOF_DIR_OUT | GPIOF_INIT_LOW, "speaker_en");
+	if (err) {
+		dev_err(card->dev, "could not setup speaker_en\n");
+		goto error;
+	}
 
+	snd_soc_card_set_drvdata(card, pdata);
 	err = snd_soc_register_card(card);
 	if (err) {
-		dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", err);
-		goto err_snd;
+		dev_err(card->dev, "snd_soc_register_card failed (%d)\n", err);
+		goto error;
 	}
 
 	return 0;
-err_snd:
+error:
 	card->dev = NULL;
-	gpio_free(RX51_ECI_SW_GPIO);
-err_gpio_eci_sw:
-	gpio_free(RX51_TVOUT_SEL_GPIO);
-err_gpio_tvout_sel:
-
 	return err;
 }
 
@@ -436,16 +520,23 @@ static int rx51_soc_remove(struct platform_device *pdev)
 	snd_soc_unregister_card(card);
 	card->dev = NULL;
 
-	gpio_free(RX51_ECI_SW_GPIO);
-	gpio_free(RX51_TVOUT_SEL_GPIO);
-
 	return 0;
 }
 
+#if defined(CONFIG_OF)
+static const struct of_device_id rx51_audio_of_match[] = {
+	{ .compatible = "nokia,rx51-audio", },
+	{},
+};
+MODULE_DEVICE_TABLE(of, rx51_audio_of_match);
+#endif
+
+
 static struct platform_driver rx51_soc_driver = {
 	.driver = {
 		.name = "rx51-audio",
 		.owner = THIS_MODULE,
+		.of_match_table = of_match_ptr(rx51_audio_of_match),
 	},
 	.probe = rx51_soc_probe,
 	.remove = rx51_soc_remove,
-- 
1.8.4.rc3


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

* Re: [RFC 4/4] ASoC: RX-51: Add DT support to sound driver
  2013-10-27 21:24 ` [RFC 4/4] ASoC: RX-51: Add DT support to sound driver Sebastian Reichel
@ 2013-10-28  6:45   ` Kumar Gala
  2013-10-31 14:44   ` Linus Walleij
  2013-11-06 14:32   ` Pavel Machek
  2 siblings, 0 replies; 18+ messages in thread
From: Kumar Gala @ 2013-10-28  6:45 UTC (permalink / raw)
  To: Sebastian Reichel
  Cc: Sebastian Reichel, Peter Ujfalusi, Rob Herring, Pawel Moll,
	Mark Rutland, Stephen Warren, Ian Campbell, Rob Landley,
	Tony Lindgren, Russell King, Jaroslav Kysela, Takashi Iwai,
	Liam Girdwood, Mark Brown, Jarkko Nikula, Grant Likely,
	Linus Walleij, devicetree, linux-doc, linux-kernel,
	linux-arm-kernel, linux-omap, alsa-devel


On Oct 27, 2013, at 4:24 PM, Sebastian Reichel wrote:

> This patch adds device tree support to the Nokia N900 audio driver.
> It also removes GPIO defines and gets them from platform data /
> device tree, since some GPIO numbers may be different with DT boot.
> 
> The binding also changes a helper function in omap-mcbsp, which
> is currently only used by the Nokia N900. This change is needed,
> because DT instanced omap-mcbsp driver has no valid id assigned.
> 
> Last but not least the DT binding is documented.
> 
> Signed-off-by: Sebastian Reichel <sre@debian.org>
> ---
> .../devicetree/bindings/sound/nokia,rx51.txt       |  28 ++++
> .../devicetree/bindings/vendor-prefixes.txt        |   1 +
> include/sound/rx51.h                               |  18 +++
> sound/soc/omap/omap-mcbsp.c                        |   5 +-
> sound/soc/omap/omap-mcbsp.h                        |   2 +-
> sound/soc/omap/rx51.c                              | 175 ++++++++++++++++-----
> 6 files changed, 184 insertions(+), 45 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/sound/nokia,rx51.txt
> create mode 100644 include/sound/rx51.h
> 
> diff --git a/Documentation/devicetree/bindings/sound/nokia,rx51.txt b/Documentation/devicetree/bindings/sound/nokia,rx51.txt
> new file mode 100644
> index 0000000..4f985ca
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/sound/nokia,rx51.txt
> @@ -0,0 +1,28 @@
> +* Nokia N900 audio setup

This needs more description 

> +
> +Required properties:
> +- compatible: "nokia,rx51-audio"
> +- ti,mcbsp: phandle for the McBSP node
> +- ti,codec: phandle for the main TLV320AIC3X node
> +- ti,codec_aux: phandle for the main TLV320AIC3X auxiliary node
> +- ti,headset_amp: phandle for the TPA6130A2 node

Hmm, I don't think these should be ti prefixed but nokia.

> +- tvout-selection-gpio: GPIO for tvout selection
> +- jack-detection-gpio: GPIO for jack detection
> +- eci-sw-gpio: GPIO for ECI SW
> +- speaker-amp-gpio: GPIO for Speaker Amp

why aren't the gpio properties vendor prefixed?

> +
> +Example:
> +
> +sound {
> +	compatible = "nokia,rx51-audio";
> +
> +	ti,mcbsp = <&mcbsp2>;
> +	ti,codec = <&tlv320aic3x>;
> +	ti,codec_aux = <&tlv320aic3x_aux>;
> +	ti,headset_amp = <&tpa6130a2>;
> +
> +	tvout-selection-gpio = <&gpio2 8 GPIO_ACTIVE_HIGH>; /* 40 */
> +	jack-detection-gpio = <&gpio6 17 GPIO_ACTIVE_HIGH>; /* 177 */
> +	eci-sw-gpio = <&gpio6 22 GPIO_ACTIVE_HIGH>; /* 182 */
> +	speaker-amp-gpio = <&twl_gpio 7 GPIO_ACTIVE_HIGH>;
> +};

-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation


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

* Re: [RFC 1/4] ASoC: omap: rx51: Use snd_soc_register_card
  2013-10-27 21:24 ` [RFC 1/4] ASoC: omap: rx51: Use snd_soc_register_card Sebastian Reichel
@ 2013-10-28 16:00   ` Mark Brown
  2013-11-06 14:17   ` Pavel Machek
  1 sibling, 0 replies; 18+ messages in thread
From: Mark Brown @ 2013-10-28 16:00 UTC (permalink / raw)
  To: Sebastian Reichel
  Cc: Sebastian Reichel, Peter Ujfalusi, Rob Herring, Pawel Moll,
	Mark Rutland, Stephen Warren, Ian Campbell, Rob Landley,
	Tony Lindgren, Russell King, Jaroslav Kysela, Takashi Iwai,
	Liam Girdwood, Jarkko Nikula, Grant Likely, Linus Walleij,
	devicetree, linux-doc, linux-kernel, linux-arm-kernel,
	linux-omap, alsa-devel, Pali Rohár

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

On Sun, Oct 27, 2013 at 10:24:43PM +0100, Sebastian Reichel wrote:
> From: Pali Rohár <pali.rohar@gmail.com>
> 
> This patch converts the rx51 ASoC module to use
> snd_soc_register_card. It also adds module alias
> to support driver autoloading.

You should really use devm_snd_soc_register_card() here.

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

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

* Re: [RFC 3/4] ASoC: Allow Aux Codecs to be specified using DT
  2013-10-27 21:24 ` [RFC 3/4] ASoC: Allow Aux Codecs to be specified using DT Sebastian Reichel
@ 2013-10-28 16:37   ` Mark Brown
  2013-10-28 17:53     ` Sebastian Reichel
  2013-11-06 14:25   ` Pavel Machek
  1 sibling, 1 reply; 18+ messages in thread
From: Mark Brown @ 2013-10-28 16:37 UTC (permalink / raw)
  To: Sebastian Reichel
  Cc: Sebastian Reichel, Peter Ujfalusi, Rob Herring, Pawel Moll,
	Mark Rutland, Stephen Warren, Ian Campbell, Rob Landley,
	Tony Lindgren, Russell King, Jaroslav Kysela, Takashi Iwai,
	Liam Girdwood, Jarkko Nikula, Grant Likely, Linus Walleij,
	devicetree, linux-doc, linux-kernel, linux-arm-kernel,
	linux-omap, alsa-devel

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

On Sun, Oct 27, 2013 at 10:24:45PM +0100, Sebastian Reichel wrote:
> This patch adds support for specifying auxiliary codecs and
> codec configuration via device tree phandles.

This doesn't apply against current git, please check and resend.
Please also consider your CC list more carefully, there's an awful lot
of people on this...

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

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

* Re: [RFC 3/4] ASoC: Allow Aux Codecs to be specified using DT
  2013-10-28 16:37   ` Mark Brown
@ 2013-10-28 17:53     ` Sebastian Reichel
  2013-10-28 19:49       ` Mark Brown
  0 siblings, 1 reply; 18+ messages in thread
From: Sebastian Reichel @ 2013-10-28 17:53 UTC (permalink / raw)
  To: Mark Brown
  Cc: Peter Ujfalusi, Rob Herring, Pawel Moll, Mark Rutland,
	Stephen Warren, Ian Campbell, Rob Landley, Tony Lindgren,
	Russell King, Jaroslav Kysela, Takashi Iwai, Liam Girdwood,
	Jarkko Nikula, Grant Likely, Linus Walleij, devicetree,
	linux-doc, linux-kernel, linux-arm-kernel, linux-omap,
	alsa-devel

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

On Mon, Oct 28, 2013 at 09:37:21AM -0700, Mark Brown wrote:
> On Sun, Oct 27, 2013 at 10:24:45PM +0100, Sebastian Reichel wrote:
> > This patch adds support for specifying auxiliary codecs and
> > codec configuration via device tree phandles.
> 
> This doesn't apply against current git, please check and resend.

Can you give me a git url to rebase against? I used current git
master from torvalds.

> Please also consider your CC list more carefully, there's an awful lot
> of people on this...

I added exactly those recipients, that were returned by
./scripts/get_maintainer.pl for the patchset.

The list of involved people is quite long, because the patchset
touches devicetree, documentation, boardcode, asoc and the specific
driver.

-- Sebastian

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

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

* Re: [RFC 3/4] ASoC: Allow Aux Codecs to be specified using DT
  2013-10-28 17:53     ` Sebastian Reichel
@ 2013-10-28 19:49       ` Mark Brown
  0 siblings, 0 replies; 18+ messages in thread
From: Mark Brown @ 2013-10-28 19:49 UTC (permalink / raw)
  To: Peter Ujfalusi, Rob Herring, Pawel Moll, Mark Rutland,
	Stephen Warren, Ian Campbell, Rob Landley, Tony Lindgren,
	Russell King, Jaroslav Kysela, Takashi Iwai, Liam Girdwood,
	Jarkko Nikula, Grant Likely, Linus Walleij, devicetree,
	linux-doc, linux-kernel, linux-arm-kernel, linux-omap,
	alsa-devel

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

On Mon, Oct 28, 2013 at 06:53:42PM +0100, Sebastian Reichel wrote:
> On Mon, Oct 28, 2013 at 09:37:21AM -0700, Mark Brown wrote:

> > This doesn't apply against current git, please check and resend.

> Can you give me a git url to rebase against? I used current git
> master from torvalds.

From MAINTAINERS:

SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC)
M:      Liam Girdwood <lgirdwood@gmail.com>
M:      Mark Brown <broonie@kernel.org>
T:      git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
L:      alsa-devel@alsa-project.org (moderated for non-subscribers)
W:      http://alsa-project.org/main/index.php/ASoC
S:      Supported
F:      Documentation/sound/alsa/soc/
F:      sound/soc/
F:      include/sound/soc*

> > Please also consider your CC list more carefully, there's an awful lot
> > of people on this...

> I added exactly those recipients, that were returned by
> ./scripts/get_maintainer.pl for the patchset.

> The list of involved people is quite long, because the patchset
> touches devicetree, documentation, boardcode, asoc and the specific
> driver.

You shouldn't be using the output of get_maintainers directly, you
should understand why everyone it's including is in the list and if they
really should be.  This is especially important if you are sending a
series that covers many subsystems, or nested subsystems.

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

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

* Re: [RFC 4/4] ASoC: RX-51: Add DT support to sound driver
  2013-10-27 21:24 ` [RFC 4/4] ASoC: RX-51: Add DT support to sound driver Sebastian Reichel
  2013-10-28  6:45   ` Kumar Gala
@ 2013-10-31 14:44   ` Linus Walleij
  2013-10-31 15:33     ` Mark Brown
  2013-11-06 14:32   ` Pavel Machek
  2 siblings, 1 reply; 18+ messages in thread
From: Linus Walleij @ 2013-10-31 14:44 UTC (permalink / raw)
  To: Sebastian Reichel
  Cc: Sebastian Reichel, Peter Ujfalusi, Rob Herring, Pawel Moll,
	Mark Rutland, Stephen Warren, Ian Campbell, Rob Landley,
	Tony Lindgren, Russell King, Jaroslav Kysela, Takashi Iwai,
	Liam Girdwood, Mark Brown, Jarkko Nikula, Grant Likely,
	devicetree, linux-doc, linux-kernel, linux-arm-kernel,
	Linux-OMAP, alsa-devel

On Sun, Oct 27, 2013 at 2:24 PM, Sebastian Reichel <sre@debian.org> wrote:

> +- eci-sw-gpio: GPIO for ECI SW
> +- speaker-amp-gpio: GPIO for Speaker Amp

Can you please spell out the acronyms? ECI? SW? Amp?

I guess SW=switch, Amp=amplifier, but ECI beats me.

Yours,
Linus Walleij

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

* Re: [RFC 4/4] ASoC: RX-51: Add DT support to sound driver
  2013-10-31 14:44   ` Linus Walleij
@ 2013-10-31 15:33     ` Mark Brown
  0 siblings, 0 replies; 18+ messages in thread
From: Mark Brown @ 2013-10-31 15:33 UTC (permalink / raw)
  To: Linus Walleij
  Cc: Sebastian Reichel, Sebastian Reichel, Peter Ujfalusi,
	Rob Herring, Pawel Moll, Mark Rutland, Stephen Warren,
	Ian Campbell, Rob Landley, Tony Lindgren, Russell King,
	Jaroslav Kysela, Takashi Iwai, Liam Girdwood, Jarkko Nikula,
	Grant Likely, devicetree, linux-doc, linux-kernel,
	linux-arm-kernel, Linux-OMAP, alsa-devel

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

On Thu, Oct 31, 2013 at 07:44:22AM -0700, Linus Walleij wrote:
> On Sun, Oct 27, 2013 at 2:24 PM, Sebastian Reichel <sre@debian.org> wrote:

> > +- eci-sw-gpio: GPIO for ECI SW
> > +- speaker-amp-gpio: GPIO for Speaker Amp

> Can you please spell out the acronyms? ECI? SW? Amp?

> I guess SW=switch, Amp=amplifier, but ECI beats me.

ECI is the name of Nokia's accesory interface spec, it should be as
clear as GPIO for anyone working on Nokia hardware (which this is).

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

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

* Re: [RFC 1/4] ASoC: omap: rx51: Use snd_soc_register_card
  2013-10-27 21:24 ` [RFC 1/4] ASoC: omap: rx51: Use snd_soc_register_card Sebastian Reichel
  2013-10-28 16:00   ` Mark Brown
@ 2013-11-06 14:17   ` Pavel Machek
  1 sibling, 0 replies; 18+ messages in thread
From: Pavel Machek @ 2013-11-06 14:17 UTC (permalink / raw)
  To: Sebastian Reichel
  Cc: Sebastian Reichel, Peter Ujfalusi, Rob Herring, Pawel Moll,
	Mark Rutland, Stephen Warren, Ian Campbell, Rob Landley,
	Tony Lindgren, Russell King, Jaroslav Kysela, Takashi Iwai,
	Liam Girdwood, Mark Brown, Jarkko Nikula, Grant Likely,
	Linus Walleij, devicetree, linux-doc, linux-kernel,
	linux-arm-kernel, linux-omap, alsa-devel, Pali Rohár

On Sun 2013-10-27 22:24:43, Sebastian Reichel wrote:
> From: Pali Rohár <pali.rohar@gmail.com>
> 
> This patch converts the rx51 ASoC module to use
> snd_soc_register_card. It also adds module alias
> to support driver autoloading.
> 
> Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
> Signed-off-by: Sebastian Reichel <sre@debian.org>

Reviewed-by: Pavel Machek <pavel@ucw.cz>

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

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

* Re: [RFC 2/4] ARM: OMAP: rx51: Register audio device
  2013-10-27 21:24 ` [RFC 2/4] ARM: OMAP: rx51: Register audio device Sebastian Reichel
@ 2013-11-06 14:19   ` Pavel Machek
  0 siblings, 0 replies; 18+ messages in thread
From: Pavel Machek @ 2013-11-06 14:19 UTC (permalink / raw)
  To: Sebastian Reichel
  Cc: Sebastian Reichel, Peter Ujfalusi, Rob Herring, Pawel Moll,
	Mark Rutland, Stephen Warren, Ian Campbell, Rob Landley,
	Tony Lindgren, Russell King, Jaroslav Kysela, Takashi Iwai,
	Liam Girdwood, Mark Brown, Jarkko Nikula, Grant Likely,
	Linus Walleij, devicetree, linux-doc, linux-kernel,
	linux-arm-kernel, linux-omap, alsa-devel, Pali Rohár

Hi!

> From: Pali Rohár <pali.rohar@gmail.com>
> 
> This patch adds support for the audio chip to the legacy
> boardcode of the Nokia N900.

In 0/4, you said:

> For example non DT boot
> does not work, because I did not yet add pdata in boardcode.

So, perhaps we don't need this patch for now and can rely only do
audio on device-tree-enabled configurations?

Thanks,
							Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

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

* Re: [RFC 3/4] ASoC: Allow Aux Codecs to be specified using DT
  2013-10-27 21:24 ` [RFC 3/4] ASoC: Allow Aux Codecs to be specified using DT Sebastian Reichel
  2013-10-28 16:37   ` Mark Brown
@ 2013-11-06 14:25   ` Pavel Machek
  2013-11-07 12:26     ` Pavel Machek
  1 sibling, 1 reply; 18+ messages in thread
From: Pavel Machek @ 2013-11-06 14:25 UTC (permalink / raw)
  To: Sebastian Reichel
  Cc: Sebastian Reichel, Peter Ujfalusi, Rob Herring, Pawel Moll,
	Mark Rutland, Stephen Warren, Ian Campbell, Rob Landley,
	Tony Lindgren, Russell King, Jaroslav Kysela, Takashi Iwai,
	Liam Girdwood, Mark Brown, Jarkko Nikula, Grant Likely,
	Linus Walleij, devicetree, linux-doc, linux-kernel,
	linux-arm-kernel, linux-omap, alsa-devel

Hi!

> This patch adds support for specifying auxiliary codecs and
> codec configuration via device tree phandles.
> 
> This change adds new fields to snd_soc_aux_dev and snd_soc_codec_conf
> and adds support for the changes to SoC core methods.
> 
> Signed-off-by: Sebastian Reichel <sre@debian.org>
> ---
>  include/sound/soc.h  | 13 +++++++++-
>  sound/soc/soc-core.c | 68 ++++++++++++++++++++++++++++++++++++----------------
>  2 files changed, 59 insertions(+), 22 deletions(-)

> @@ -1527,15 +1529,23 @@ static void soc_unregister_ac97_dai_link(struct snd_soc_codec *codec)
>  static int soc_check_aux_dev(struct snd_soc_card *card, int num)
>  {
>  	struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num];
> +	const char *codecname = aux_dev->codec_name;
>  	struct snd_soc_codec *codec;
>  
>  	/* find CODEC from registered CODECs*/
>  	list_for_each_entry(codec, &codec_list, list) {
> -		if (!strcmp(codec->name, aux_dev->codec_name))
> +		if (aux_dev->codec_of_node &&
> +				codec->dev->of_node == aux_dev->codec_of_node)
> +			return 0;
> +		if (aux_dev->codec_name &&
> +				!strcmp(codec->name, aux_dev->codec_name))
>  			return 0;

You can use codecname here.

> -		if (!strcmp(codec->name, aux_dev->codec_name)) {
> -			if (codec->probed) {
> -				dev_err(codec->dev,
> -					"ASoC: codec already probed");
> -				ret = -EBUSY;
> -				goto out;
> -			}
> -			goto found;
> +		if (aux_dev->codec_of_node &&
> +				codec->dev->of_node != aux_dev->codec_of_node)
> +			continue;
> +		if (aux_dev->codec_name &&
> +				strcmp(codec->name, aux_dev->codec_name))
> +			continue;

So in (error) case of ! aux_dev->codec_of_node && ! aux_dev->codec_name 
we match first possible codec?

Given code similarity between this and the one above, should there be
helper function that does the comparison (or even walks the list)?

> @@ -1644,12 +1663,19 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
>  		/* check to see if we need to override the compress_type */
>  		for (i = 0; i < card->num_configs; ++i) {
>  			codec_conf = &card->codec_conf[i];
> -			if (!strcmp(codec->name, codec_conf->dev_name)) {
> -				compress_type = codec_conf->compress_type;
> -				if (compress_type && compress_type
> -				    != codec->compress_type)
> -					break;
> -			}
> +
> +			if (codec_conf->of_node &&
> +				codec->dev->of_node != codec_conf->of_node)
> +				continue;
> +
> +			if (codec_conf->dev_name &&
> +				strcmp(codec->name, codec_conf->dev_name))
> +				continue;
> +

..third copy of codec matching.

Thanks for doing all the good work,
									Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

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

* Re: [RFC 4/4] ASoC: RX-51: Add DT support to sound driver
  2013-10-27 21:24 ` [RFC 4/4] ASoC: RX-51: Add DT support to sound driver Sebastian Reichel
  2013-10-28  6:45   ` Kumar Gala
  2013-10-31 14:44   ` Linus Walleij
@ 2013-11-06 14:32   ` Pavel Machek
  2013-11-30 13:28     ` Jarkko Nikula
  2 siblings, 1 reply; 18+ messages in thread
From: Pavel Machek @ 2013-11-06 14:32 UTC (permalink / raw)
  To: Sebastian Reichel
  Cc: Sebastian Reichel, Peter Ujfalusi, Rob Herring, Pawel Moll,
	Mark Rutland, Stephen Warren, Ian Campbell, Rob Landley,
	Tony Lindgren, Russell King, Jaroslav Kysela, Takashi Iwai,
	Liam Girdwood, Mark Brown, Jarkko Nikula, Grant Likely,
	Linus Walleij, devicetree, linux-doc, linux-kernel,
	linux-arm-kernel, linux-omap, alsa-devel

Hi!

> This patch adds device tree support to the Nokia N900 audio driver.

Note, N900 audio driver.

> +- compatible: "nokia,rx51-audio"

Still, it is rx51-audio. If it is feasible, could we move away from
rx51 naming and into n900 naming that is familiar to mere humans?

We can rename the sources later, but I guess we should get dts binding
right first time...
									Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

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

* Re: [RFC 3/4] ASoC: Allow Aux Codecs to be specified using DT
  2013-11-06 14:25   ` Pavel Machek
@ 2013-11-07 12:26     ` Pavel Machek
  0 siblings, 0 replies; 18+ messages in thread
From: Pavel Machek @ 2013-11-07 12:26 UTC (permalink / raw)
  To: Sebastian Reichel
  Cc: Sebastian Reichel, Peter Ujfalusi, Rob Herring, Pawel Moll,
	Mark Rutland, Stephen Warren, Ian Campbell, Rob Landley,
	Tony Lindgren, Russell King, Jaroslav Kysela, Takashi Iwai,
	Liam Girdwood, Mark Brown, Jarkko Nikula, Grant Likely,
	Linus Walleij, devicetree, linux-doc, linux-kernel,
	linux-arm-kernel, linux-omap, alsa-devel

Hi!


> So in (error) case of ! aux_dev->codec_of_node && ! aux_dev->codec_name 
> we match first possible codec?
> 
> Given code similarity between this and the one above, should there be
> helper function that does the comparison (or even walks the list)?

Something like this? soc_probe_aux_dev now looks better... (Only
compile tested).

Signed-off-by: Pavel Machek <pavel@ucw.cz>

diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 392f479..3097e17 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -1526,69 +1526,65 @@ static void soc_unregister_ac97_dai_link(struct snd_soc_codec *codec)
 }
 #endif
 
-static int soc_check_aux_dev(struct snd_soc_card *card, int num)
+struct snd_soc_codec *soc_find_matching_codec(struct snd_soc_card *card, int num)
 {
 	struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num];
-	const char *codecname = aux_dev->codec_name;
 	struct snd_soc_codec *codec;
 
-	/* find CODEC from registered CODECs*/
+	/* find CODEC from registered CODECs */
 	list_for_each_entry(codec, &codec_list, list) {
-		if (aux_dev->codec_of_node &&
-				codec->dev->of_node == aux_dev->codec_of_node)
-			return 0;
-		if (aux_dev->codec_name &&
-				!strcmp(codec->name, aux_dev->codec_name))
-			return 0;
+		if (aux_dev->codec_of_node && 
+		    (codec->dev->of_node != aux_dev->codec_of_node))
+			continue;
+		if (aux_dev->codec_name && strcmp(codec->name, aux_dev->codec_name))
+			continue;
+		return codec;
 	}
+	return NULL;
+}
 
+static int soc_check_aux_dev(struct snd_soc_card *card, int num)
+{
+	struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num];
+	const char *codecname = aux_dev->codec_name;
+	struct snd_soc_codec *codec = soc_find_matching_codec(card, num);
+
+	if (codec)
+		return 0;
 	if (aux_dev->codec_of_node)
 		codecname = of_node_full_name(aux_dev->codec_of_node);
 
 	dev_err(card->dev, "ASoC: %s not registered\n", codecname);
-
 	return -EPROBE_DEFER;
 }
 
+
 static int soc_probe_aux_dev(struct snd_soc_card *card, int num)
 {
 	struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num];
-	struct snd_soc_codec *codec;
 	const char *codecname = aux_dev->codec_name;
 	int ret = -ENODEV;
+	struct snd_soc_codec *codec = soc_find_matching_codec(card, num);
 
-	/* find CODEC from registered CODECs*/
-	list_for_each_entry(codec, &codec_list, list) {
-		if (aux_dev->codec_of_node &&
-				codec->dev->of_node != aux_dev->codec_of_node)
-			continue;
-		if (aux_dev->codec_name &&
-				strcmp(codec->name, aux_dev->codec_name))
-			continue;
+	if (!codec) {
+		if (aux_dev->codec_of_node)
+			codecname = of_node_full_name(aux_dev->codec_of_node);
 
-		if (codec->probed) {
-			dev_err(codec->dev, "ASoC: codec already probed");
-			ret = -EBUSY;
-			goto out;
-		}
-		goto found;
+		/* codec not found */
+		dev_err(card->dev, "ASoC: codec %s not found", codecname);
+		return -EPROBE_DEFER;
 	}
 
-	if (aux_dev->codec_of_node)
-		codecname = of_node_full_name(aux_dev->codec_of_node);
-
-	/* codec not found */
-	dev_err(card->dev, "ASoC: codec %s not found", codecname);
-	return -EPROBE_DEFER;
+	if (codec->probed) {
+		dev_err(codec->dev, "ASoC: codec already probed");
+		return -EBUSY;
+	}
 
-found:
 	ret = soc_probe_codec(card, codec);
 	if (ret < 0)
 		return ret;
 
 	ret = soc_post_component_init(card, codec, num, 1);
-
-out:
 	return ret;
 }
 


-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

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

* Re: [RFC 4/4] ASoC: RX-51: Add DT support to sound driver
  2013-11-06 14:32   ` Pavel Machek
@ 2013-11-30 13:28     ` Jarkko Nikula
  0 siblings, 0 replies; 18+ messages in thread
From: Jarkko Nikula @ 2013-11-30 13:28 UTC (permalink / raw)
  To: Pavel Machek
  Cc: Sebastian Reichel, Sebastian Reichel, Peter Ujfalusi,
	Rob Herring, Pawel Moll, Mark Rutland, Stephen Warren,
	Ian Campbell, Rob Landley, Tony Lindgren, Russell King,
	Jaroslav Kysela, Takashi Iwai, Liam Girdwood, Mark Brown,
	Grant Likely, Linus Walleij, devicetree, linux-doc, linux-kernel,
	linux-arm-kernel, linux-omap, alsa-devel

Hi

On 11/06/2013 04:32 PM, Pavel Machek wrote:
> Hi!
> 
>> This patch adds device tree support to the Nokia N900 audio driver.
> 
> Note, N900 audio driver.
> 
>> +- compatible: "nokia,rx51-audio"
> 
> Still, it is rx51-audio. If it is feasible, could we move away from
> rx51 naming and into n900 naming that is familiar to mere humans?
> 
> We can rename the sources later, but I guess we should get dts binding
> right first time...

Sorry the long response. I definitely would like n900 naming more in dts.

History is that the basic board file for N900 went to mainline before
sales started and used the hw name in sources and Kconfig. Audio machine
driver then followed the same rx51 hw naming scheme with rest of sources.

-- 
Jarkko

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

end of thread, other threads:[~2013-11-30 13:29 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-10-27 21:24 [RFC 0/4] DT support for rx51-audio Sebastian Reichel
2013-10-27 21:24 ` [RFC 1/4] ASoC: omap: rx51: Use snd_soc_register_card Sebastian Reichel
2013-10-28 16:00   ` Mark Brown
2013-11-06 14:17   ` Pavel Machek
2013-10-27 21:24 ` [RFC 2/4] ARM: OMAP: rx51: Register audio device Sebastian Reichel
2013-11-06 14:19   ` Pavel Machek
2013-10-27 21:24 ` [RFC 3/4] ASoC: Allow Aux Codecs to be specified using DT Sebastian Reichel
2013-10-28 16:37   ` Mark Brown
2013-10-28 17:53     ` Sebastian Reichel
2013-10-28 19:49       ` Mark Brown
2013-11-06 14:25   ` Pavel Machek
2013-11-07 12:26     ` Pavel Machek
2013-10-27 21:24 ` [RFC 4/4] ASoC: RX-51: Add DT support to sound driver Sebastian Reichel
2013-10-28  6:45   ` Kumar Gala
2013-10-31 14:44   ` Linus Walleij
2013-10-31 15:33     ` Mark Brown
2013-11-06 14:32   ` Pavel Machek
2013-11-30 13:28     ` Jarkko Nikula

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).