All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ASoC: SAMSUNG: Add Aquila sound driver
@ 2010-07-07  8:41 최찬우
  2010-07-07 13:36 ` Mark Brown
  0 siblings, 1 reply; 16+ messages in thread
From: 최찬우 @ 2010-07-07  8:41 UTC (permalink / raw)
  To: alsa-devel; +Cc: 박경민, Mark Brown, 심준영

This patch add sound support for the Aquila board based on S5PC110.

The Aquila board is based on Samsung SoC(S5PC110) and include
WM8994 codec over I2Sv5 to support sound. As there is currently
no driver for the I2Sv5, the code to use I2Sv5 is deleted
on this patch.

After I2Sv5 driver is posted in a few weeks, I will post incremental
patch which some codes for using I2Sv5. The owner of I2Sv5 said that
he will post I2Sv5 driver after a few weeks.

The kind of jack is below states :
* SND_JACK_HEADPHONE
* SND_JACK_HEADSET
* SND_JACK_MECHANICAL
  : When TV-OUT cable is inserted on Aquila board,
  the TV-OUT cable isn't connected to television.
* SND_JACK_AVOUT
  : When TV-OUT cable is inserted on Aquila board,
  the TV-OUT cable is connected to television.

Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
 sound/soc/s3c24xx/Kconfig         |    8 +
 sound/soc/s3c24xx/Makefile        |    2 +
 sound/soc/s3c24xx/aquila_wm8994.c |  296 +++++++++++++++++++++++++++++++++++++
 3 files changed, 306 insertions(+), 0 deletions(-)
 create mode 100644 sound/soc/s3c24xx/aquila_wm8994.c

diff --git a/sound/soc/s3c24xx/Kconfig b/sound/soc/s3c24xx/Kconfig
index 213963a..0c5d8a5 100644
--- a/sound/soc/s3c24xx/Kconfig
+++ b/sound/soc/s3c24xx/Kconfig
@@ -131,3 +131,11 @@ config SND_S3C64XX_SOC_SMARTQ
 	depends on SND_S3C24XX_SOC && MACH_SMARTQ
 	select SND_S3C64XX_SOC_I2S
 	select SND_SOC_WM8750
+
+config SND_S5PC110_SOC_AQUILA_WM8994
+	tristate "SoC I2S Audio support for AQUILA - WM8994"
+	depends on SND_S3C24XX_SOC && MACH_AQUILA
+	select SND_SOC_WM8994
+	help
+	  Say Y if you want to add support for SoC audio on aquila
+	  with the WM8994.
diff --git a/sound/soc/s3c24xx/Makefile b/sound/soc/s3c24xx/Makefile
index 50172c3..02dd12c 100644
--- a/sound/soc/s3c24xx/Makefile
+++ b/sound/soc/s3c24xx/Makefile
@@ -30,6 +30,7 @@ snd-soc-s3c24xx-simtec-tlv320aic23-objs := s3c24xx_simtec_tlv320aic23.o
 snd-soc-smdk64xx-wm8580-objs := smdk64xx_wm8580.o
 snd-soc-smdk-wm9713-objs := smdk_wm9713.o
 snd-soc-s3c64xx-smartq-wm8987-objs := smartq_wm8987.o
+snd-soc-aquila-wm8994-objs := aquila_wm8994.o
 
 obj-$(CONFIG_SND_S3C24XX_SOC_JIVE_WM8750) += snd-soc-jive-wm8750.o
 obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753) += snd-soc-neo1973-wm8753.o
@@ -43,3 +44,4 @@ obj-$(CONFIG_SND_S3C24XX_SOC_SIMTEC_TLV320AIC23) += snd-soc-s3c24xx-simtec-tlv32
 obj-$(CONFIG_SND_S3C64XX_SOC_WM8580) += snd-soc-smdk64xx-wm8580.o
 obj-$(CONFIG_SND_SOC_SMDK_WM9713) += snd-soc-smdk-wm9713.o
 obj-$(CONFIG_SND_S3C64XX_SOC_SMARTQ) += snd-soc-s3c64xx-smartq-wm8987.o
+obj-$(CONFIG_SND_S5PC110_SOC_AQUILA_WM8994) += snd-soc-aquila-wm8994.o
diff --git a/sound/soc/s3c24xx/aquila_wm8994.c b/sound/soc/s3c24xx/aquila_wm8994.c
new file mode 100644
index 0000000..5caeedd
--- /dev/null
+++ b/sound/soc/s3c24xx/aquila_wm8994.c
@@ -0,0 +1,296 @@
+/*
+ * aquila_wm8994.c
+ *
+ * Copyright (C) 2010 Samsung Electronics Co.Ltd
+ * Author: Joonyoung Shim <jy0922.shim@samsung.com>
+ *
+ *  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/module.h>
+#include <linux/moduleparam.h>
+#include <linux/io.h>
+#include <linux/platform_device.h>
+#include <sound/soc.h>
+#include <sound/soc-dapm.h>
+#include <sound/jack.h>
+#include <asm/mach-types.h>
+#include <mach/gpio.h>
+#include <mach/regs-clock.h>
+
+#include <linux/mfd/wm8994/core.h>
+#include <linux/mfd/wm8994/registers.h>
+#include "../codecs/wm8994.h"
+#include "s3c-dma.h"
+#include "s3c24xx-i2s.h"
+
+extern struct snd_soc_platform s3c24xx_soc_platform;
+static struct snd_soc_card aquila;
+static struct platform_device *aquila_snd_device;
+
+/* 3.5 pie jack */
+static struct snd_soc_jack jack;
+
+/* 3.5 pie jack detection DAPM pins */
+static struct snd_soc_jack_pin jack_pins[] = {
+	{
+		.pin = "Headset Mic",
+		.mask = SND_JACK_MICROPHONE,
+	}, {
+		.pin = "Headset Stereophone",
+		.mask = SND_JACK_HEADPHONE | SND_JACK_MECHANICAL |
+			SND_JACK_AVOUT,
+	},
+};
+
+/* 3.5 pie jack detection gpios */
+static struct snd_soc_jack_gpio jack_gpios[] = {
+	{
+		.gpio = S5PV210_GPH0(6),
+		.name = "DET_3.5",
+		.report = SND_JACK_HEADSET | SND_JACK_MECHANICAL |
+			SND_JACK_AVOUT,
+		.debounce_time = 200,
+	},
+};
+
+static const struct snd_kcontrol_new aquila_controls[] = {
+};
+
+static const struct snd_soc_dapm_widget aquila_dapm_widgets[] = {
+	SND_SOC_DAPM_SPK("Ext Spk", NULL),
+	SND_SOC_DAPM_SPK("Ext Rcv", NULL),
+	SND_SOC_DAPM_HP("Headset Stereophone", NULL),
+	SND_SOC_DAPM_MIC("Headset Mic", NULL),
+	SND_SOC_DAPM_MIC("Main Mic", NULL),
+	SND_SOC_DAPM_MIC("2nd Mic", NULL),
+};
+
+static const struct snd_soc_dapm_route aquila_dapm_routes[] = {
+	{"Ext Spk", NULL, "SPKOUTLP"},
+	{"Ext Spk", NULL, "SPKOUTLN"},
+
+	{"Ext Rcv", NULL, "HPOUT2N"},
+	{"Ext Rcv", NULL, "HPOUT2P"},
+
+	{"Headset Stereophone", NULL, "HPOUT1L"},
+	{"Headset Stereophone", NULL, "HPOUT1R"},
+
+	{"IN1RN", NULL, "Headset Mic"},
+	{"IN1RP", NULL, "Headset Mic"},
+
+	{"IN1RN", NULL, "2nd Mic"},
+	{"IN1RP", NULL, "2nd Mic"},
+
+	{"IN1LN", NULL, "Main Mic"},
+	{"IN1LP", NULL, "Main Mic"},
+};
+
+static int aquila_wm8994_init(struct snd_soc_codec *codec)
+{
+	int ret;
+	unsigned int reg;
+
+	/* add aquila specific kcontorls */
+	ret = snd_soc_add_controls(codec, aquila_controls,
+			ARRAY_SIZE(aquila_controls));
+
+	if (ret < 0)
+		return ret;
+
+	/* add aquila specific widgets */
+	snd_soc_dapm_new_controls(codec, aquila_dapm_widgets,
+			ARRAY_SIZE(aquila_dapm_widgets));
+
+	/* set up aquila specific audio routes */
+	snd_soc_dapm_add_routes(codec, aquila_dapm_routes,
+			ARRAY_SIZE(aquila_dapm_routes));
+
+	snd_soc_dapm_sync(codec);
+
+	/* Headset jack detection */
+	ret = snd_soc_jack_new(&aquila, "Headset Jack",
+			SND_JACK_HEADSET | SND_JACK_MECHANICAL | SND_JACK_AVOUT,
+			&jack);
+	if (ret)
+		return ret;
+
+	ret = snd_soc_jack_add_pins(&jack, ARRAY_SIZE(jack_pins), jack_pins);
+	if (ret)
+		return ret;
+
+	ret = snd_soc_jack_add_gpios(&jack, ARRAY_SIZE(jack_gpios), jack_gpios);
+	if (ret)
+		return ret;
+
+	return 0;
+}
+
+static int aquila_hifi_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 *codec_dai = rtd->dai->codec_dai;
+	struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+	unsigned int pll_out = 24000000;
+	int ret = 0;
+
+	/* set the cpu DAI configuration */
+	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)
+		return ret;
+
+	/* set the cpu system clock */
+	ret = snd_soc_dai_set_sysclk(cpu_dai, 0, 0, 0);
+	if (ret < 0)
+		return ret;
+
+	/* set codec DAI configuration */
+	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)
+		return ret;
+
+	/* set the codec FLL */
+	ret = snd_soc_dai_set_pll(codec_dai, WM8994_FLL1, 0, pll_out,
+			params_rate(params) * 256);
+	if (ret < 0)
+		return ret;
+
+	/* set the codec system clock */
+	ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL1,
+			params_rate(params) * 256, SND_SOC_CLOCK_IN);
+	if (ret < 0)
+		return ret;
+
+	return 0;
+}
+
+static struct snd_soc_ops aquila_hifi_ops = {
+	.hw_params = aquila_hifi_hw_params,
+};
+
+static int aquila_voice_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 *codec_dai = rtd->dai->codec_dai;
+	unsigned int pll_out = 24000000;
+	int ret = 0;
+
+	if (params_rate(params) != 8000)
+		return -EINVAL;
+
+	/* set codec DAI configuration */
+	ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_LEFT_J |
+			SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM);
+	if (ret < 0)
+		return ret;
+
+	/* set the codec FLL */
+	ret = snd_soc_dai_set_pll(codec_dai, WM8994_FLL2, 0, pll_out,
+			params_rate(params) * 256);
+	if (ret < 0)
+		return ret;
+
+	/* set the codec system clock */
+	ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL2,
+			params_rate(params) * 256, SND_SOC_CLOCK_IN);
+	if (ret < 0)
+		return ret;
+
+	return 0;
+}
+
+static struct snd_soc_dai voice_dai = {
+	.name = "Voice",
+	.id = 0,
+	.playback = {
+		.channels_min = 1,
+		.channels_max = 2,
+		.rates = SNDRV_PCM_RATE_8000,
+		.formats = SNDRV_PCM_FMTBIT_S16_LE,},
+	.capture = {
+		.channels_min = 1,
+		.channels_max = 2,
+		.rates = SNDRV_PCM_RATE_8000,
+		.formats = SNDRV_PCM_FMTBIT_S16_LE,},
+};
+
+static struct snd_soc_ops aquila_voice_ops = {
+	.hw_params = aquila_voice_hw_params,
+};
+
+static struct snd_soc_dai_link aquila_dai[] = {
+{
+	.name = "WM8994",
+	.stream_name = "WM8994 HiFi",
+	/* After I2Sv5 driver is posted, cpu_dai will is enabled. */
+	/* .cpu_dai = &s5p_i2s_dai[0], */
+	.codec_dai = &wm8994_dai[0],
+	.init = aquila_wm8994_init,
+	.ops = &aquila_hifi_ops,
+}, {
+	.name = "WM8994 Voice",
+	.stream_name = "Voice",
+	.cpu_dai = &voice_dai,
+	.codec_dai = &wm8994_dai[1],
+	.ops = &aquila_voice_ops,
+},
+};
+
+static struct snd_soc_card aquila = {
+	.name = "aquila",
+	.platform = &s3c24xx_soc_platform,
+	.dai_link = aquila_dai,
+	.num_links = ARRAY_SIZE(aquila_dai),
+};
+
+static struct snd_soc_device aquila_snd_devdata = {
+	.card = &aquila,
+	.codec_dev = &soc_codec_dev_wm8994,
+};
+
+static int __init aquila_init(void)
+{
+	int ret;
+
+	if (!machine_is_aquila())
+		return -ENODEV;
+
+	/* register voice DAI here */
+	ret = snd_soc_register_dai(&voice_dai);
+	if (ret)
+		return ret;
+
+	aquila_snd_device = platform_device_alloc("soc-audio", 0);
+	if (!aquila_snd_device)
+		return -ENOMEM;
+
+	platform_set_drvdata(aquila_snd_device, &aquila_snd_devdata);
+	aquila_snd_devdata.dev = &aquila_snd_device->dev;
+	ret = platform_device_add(aquila_snd_device);
+
+	if (ret)
+		platform_device_put(aquila_snd_device);
+
+	return ret;
+}
+
+static void __exit aquila_exit(void)
+{
+	platform_device_unregister(aquila_snd_device);
+}
+
+module_init(aquila_init);
+module_exit(aquila_exit);
+
+/* Module information */
+MODULE_DESCRIPTION("ALSA SoC WM8994 Aquila(C110)");
+MODULE_AUTHOR("Joonyoung Shim <jy0922.shim@samsung.com>");
+MODULE_LICENSE("GPL");
-- 
1.6.3.3

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

* Re: [PATCH] ASoC: SAMSUNG: Add Aquila sound driver
  2010-07-07  8:41 [PATCH] ASoC: SAMSUNG: Add Aquila sound driver 최찬우
@ 2010-07-07 13:36 ` Mark Brown
  2010-07-08  1:51   ` 최찬우
  0 siblings, 1 reply; 16+ messages in thread
From: Mark Brown @ 2010-07-07 13:36 UTC (permalink / raw)
  To: 최찬우
  Cc: alsa-devel, 박경민, 심준영

On Wed, Jul 07, 2010 at 05:41:30PM +0900, 최찬우 wrote:

> +static const struct snd_kcontrol_new aquila_controls[] = {
> +};

This should be removed until there are controls to go in it.

> +static int aquila_wm8994_init(struct snd_soc_codec *codec)
> +{
> +	int ret;
> +	unsigned int reg;

It'd probably be useful to list any unconnected pins here (if there are
any) using snd_soc_nc_pin().

Otherwise this all looks very good - you should probably also include a
signoff from Mr. Shim, I guess.
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

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

* Re: [PATCH] ASoC: SAMSUNG: Add Aquila sound driver
  2010-07-07 13:36 ` Mark Brown
@ 2010-07-08  1:51   ` 최찬우
  0 siblings, 0 replies; 16+ messages in thread
From: 최찬우 @ 2010-07-08  1:51 UTC (permalink / raw)
  To: Mark Brown; +Cc: alsa-devel, 박경민, 심준영

Mark Brown wrote:
> On Wed, Jul 07, 2010 at 05:41:30PM +0900, 최찬우 wrote:
> 
>> +static const struct snd_kcontrol_new aquila_controls[] = {
>> +};
> 
> This should be removed until there are controls to go in it.
> 
Ok, I will do.

>> +static int aquila_wm8994_init(struct snd_soc_codec *codec)
>> +{
>> +	int ret;
>> +	unsigned int reg;
> 
> It'd probably be useful to list any unconnected pins here (if there are
> any) using snd_soc_nc_pin().
> 
I add unconnected pins using snd_soc_nc_pin().

> Otherwise this all looks very good - you should probably also include a
> signoff from Mr. Shim, I guess.

I will include Mr. Shim to signoff.

Thank you for your comment.
Chanwoo Choi

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

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

* Re: [PATCH] ASoC: SAMSUNG: Add Aquila sound driver
  2010-07-12  7:23         ` Chanwoo Choi
@ 2010-07-12  9:41           ` Mark Brown
  0 siblings, 0 replies; 16+ messages in thread
From: Mark Brown @ 2010-07-12  9:41 UTC (permalink / raw)
  To: Chanwoo Choi
  Cc: alsa-devel, Jassi Brar, Liam Girdwood, Kyungmin Park, Joonyoung Shim

On Mon, Jul 12, 2010 at 04:23:57PM +0900, Chanwoo Choi wrote:

> After upgrading existing i2s CPU drivers to run sound on Aquila board,
> Should I post this patch to upstream kernel?
> Or,
> Now, I post this patch which haven't used i2sv5 CPU driver to upstream kernel.
> Then, I will implement it and post incremental patch using it to run
> on Aquila board.

> Could you give me the opinion about this question?

I think whatever is easiest for you guys is fine - whatever is done in
the board specific code is only really going to impact people who have
Aquilla boards so the main thing is it makes sense to those people.

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

* Re: [PATCH] ASoC: SAMSUNG: Add Aquila sound driver
  2010-07-09  3:55       ` Chanwoo Choi
@ 2010-07-12  7:23         ` Chanwoo Choi
  2010-07-12  9:41           ` Mark Brown
  0 siblings, 1 reply; 16+ messages in thread
From: Chanwoo Choi @ 2010-07-12  7:23 UTC (permalink / raw)
  To: Mark Brown
  Cc: alsa-devel, Joonyoung Shim, Jassi Brar, Chanwoo Choi,
	Kyungmin Park, Liam Girdwood

Dear Mark,

Liam reviewed this patch.(Thank you for your review.)

The upstream kernel include i2s CPU drivers excepts for i2sv5 CPU driver.
I should upgrade existing i2s CPU drivers to support i2s operation 
for sound on Aquila board, becuase the sound driver on Aquila board
to need i2sv5 CPU driver.

I have a question.

After upgrading existing i2s CPU drivers to run sound on Aquila board,
Should I post this patch to upstream kernel?
Or,
Now, I post this patch which haven't used i2sv5 CPU driver to upstream kernel.
Then, I will implement it and post incremental patch using it to run
on Aquila board.

Could you give me the opinion about this question?

Thank you,
Chanwoo Choi

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

* Re: [PATCH] ASoC: SAMSUNG: Add Aquila sound driver
  2010-07-09  2:42     ` Mark Brown
  2010-07-09  3:55       ` Chanwoo Choi
@ 2010-07-09  9:15       ` Liam Girdwood
  1 sibling, 0 replies; 16+ messages in thread
From: Liam Girdwood @ 2010-07-09  9:15 UTC (permalink / raw)
  To: Mark Brown; +Cc: Chanwoo Choi, alsa-devel, Kyungmin Park, Joonyoung Shim

On Fri, 2010-07-09 at 11:42 +0900, Mark Brown wrote:
> On Fri, Jul 09, 2010 at 11:21:08AM +0900, Chanwoo Choi wrote:
> 
> > Also, Should I specially send this patch to review to Liam?
> 
> Yes, you should always CC all maintainers when submitting patches.

I'm happy enough with this too.

Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
-- 
Freelance Developer, SlimLogic Ltd
ASoC and Voltage Regulator Maintainer.
http://www.slimlogic.co.uk

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

* Re: [PATCH] ASoC: SAMSUNG: Add Aquila sound driver
  2010-07-09  2:42     ` Mark Brown
@ 2010-07-09  3:55       ` Chanwoo Choi
  2010-07-12  7:23         ` Chanwoo Choi
  2010-07-09  9:15       ` Liam Girdwood
  1 sibling, 1 reply; 16+ messages in thread
From: Chanwoo Choi @ 2010-07-09  3:55 UTC (permalink / raw)
  To: Mark Brown; +Cc: alsa-devel, Kyungmin Park, Joonyoung Shim

Mark Brown wrote:
> On Fri, Jul 09, 2010 at 11:21:08AM +0900, Chanwoo Choi wrote:
> 
>> Also, Should I specially send this patch to review to Liam?
> 
> Yes, you should always CC all maintainers when submitting patches.
> 
Ok, I will do in future.
Thank you for your comment.

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

* Re: [PATCH] ASoC: SAMSUNG: Add Aquila sound driver
  2010-07-09  2:21   ` Chanwoo Choi
@ 2010-07-09  2:42     ` Mark Brown
  2010-07-09  3:55       ` Chanwoo Choi
  2010-07-09  9:15       ` Liam Girdwood
  0 siblings, 2 replies; 16+ messages in thread
From: Mark Brown @ 2010-07-09  2:42 UTC (permalink / raw)
  To: Chanwoo Choi; +Cc: alsa-devel, Kyungmin Park, Joonyoung Shim

On Fri, Jul 09, 2010 at 11:21:08AM +0900, Chanwoo Choi wrote:

> Also, Should I specially send this patch to review to Liam?

Yes, you should always CC all maintainers when submitting patches.

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

* Re: [PATCH] ASoC: SAMSUNG: Add Aquila sound driver
  2010-07-08  7:05 ` Mark Brown
@ 2010-07-09  2:21   ` Chanwoo Choi
  2010-07-09  2:42     ` Mark Brown
  0 siblings, 1 reply; 16+ messages in thread
From: Chanwoo Choi @ 2010-07-09  2:21 UTC (permalink / raw)
  To: Mark Brown; +Cc: Chanwoo Choi, alsa-devel, Kyungmin Park, Joonyoung Shim

Mark Brown wrote:
> On Thu, Jul 08, 2010 at 01:57:38PM +0900, Chanwoo Choi wrote:
>> This patch add sound support for the Aquila board based on S5PC110.
>>
>> The Aquila board is based on Samsung SoC(S5PC110) and include
>> WM8994 codec over I2Sv5 to support sound. As there is currently
>> no driver for the I2Sv5, the code to use I2Sv5 is deleted
>> on this patch.
> 
> This looks good from my point of view, though I'm not sure if you want
> to do any updates for Jassi's comments and Liam also needs to review
> still.
> 
Ok, I am talking about using I2Sv5 with Jassi.
Also, Should I specially send this patch to review to Liam?
or What is another way to review?

> One other thing that you might want to do - I'm not sure if you noticed
> but there is now an API call snd_soc_dapm_ignore_suspend() which allows 
> audio paths to be kept up while the system is suspended, intended for
> use in cases like voice calls on mobile phones where audio is running
> even though the Linux system is suspended.  To use this you should mark
> all DAPM endpoints which can be live over suspend as ignoring suspend
> then ASoC should transparently keep any paths between endpoints marked
> this way up.
I see that your mentioned patcth.
But,
before I had received the patch to keep audio path on suspend,
to execute voice-call on suspend implemented that the state of LDO of 
codec is kept high to run audio in cases voice call while the Linux system
is suspended.

I will try to find your mentioned patch and check to apply the sound driver
of Aquila board.

Thank you,
Chanwoo Choi

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

* Re: [PATCH] ASoC: SAMSUNG: Add Aquila sound driver
  2010-07-09  1:06       ` Chanwoo Choi
@ 2010-07-09  2:17         ` Jassi Brar
  0 siblings, 0 replies; 16+ messages in thread
From: Jassi Brar @ 2010-07-09  2:17 UTC (permalink / raw)
  To: Chanwoo Choi; +Cc: alsa-devel, Mark Brown, Kyungmin Park, Joonyoung Shim

On Fri, Jul 9, 2010 at 10:06 AM, Chanwoo Choi <cw00.choi@samsung.com> wrote:
> Jassi Brar wrote:
>  > The gpio config stuff needs to be removed from the CPU driver. It was pending
>> due to fear of cross-tree merge issues. The platform specific code to do the
>> same is already upstream now.
>
> What is "platform specific code to the same" ?
Have a look at arch/arm/mach-s3c64xx/dev-audio.c which has various
cfg_gpio callback functions.


>> One engineer in my team is already looking into it while testing
>> Liam's multi-codec
>> changes.
>>
>>>> Please try to use the existing sound/soc/s3c24xx/s3c64xx-i2s-v4.c
>> 'try to' is the key word here. The driver is not expected to work rightaway.
>> One might need to make some changes to the CPU driver to just make it
>> work on platforms with very similar IP.
>
> Do you mean that I should implement i2sv5 drvier refer to the
> sound/soc/s3c24xx/s3c64xx-i2s-v4.c after completing cross-tree merge issue?

No.  I mean you should make minimal changes to the existing i2s CPU drivers
to make them just work for your machine. Aquila can exploit more
advanced features
of v4/v5 as they will be implemented in future.
If you don't wanna wait, you may start upgrading the existing drivers
in line with
existing frame work.
Please remember, the goal is towards having as least files as possible
in Samsung ASoC which supporting as many SoCs as possible.
Separate driver for V5 maybe warranted only when we want to implement
a feature that is not supported by v4.
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

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

* Re: [PATCH] ASoC: SAMSUNG: Add Aquila sound driver
  2010-07-08  8:19     ` Jassi Brar
@ 2010-07-09  1:06       ` Chanwoo Choi
  2010-07-09  2:17         ` Jassi Brar
  0 siblings, 1 reply; 16+ messages in thread
From: Chanwoo Choi @ 2010-07-09  1:06 UTC (permalink / raw)
  To: Jassi Brar
  Cc: Chanwoo Choi, alsa-devel, Mark Brown, Kyungmin Park, Joonyoung Shim

Jassi Brar wrote:
 > The gpio config stuff needs to be removed from the CPU driver. It was pending
> due to fear of cross-tree merge issues. The platform specific code to do the
> same is already upstream now.

What is "platform specific code to the same" ?

> One engineer in my team is already looking into it while testing
> Liam's multi-codec
> changes.
> 
>>> Please try to use the existing sound/soc/s3c24xx/s3c64xx-i2s-v4.c
> 'try to' is the key word here. The driver is not expected to work rightaway.
> One might need to make some changes to the CPU driver to just make it
> work on platforms with very similar IP.

Do you mean that I should implement i2sv5 drvier refer to the 
sound/soc/s3c24xx/s3c64xx-i2s-v4.c after completing cross-tree merge issue? 

Thank you,
Chanwoo Choi

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

* Re: [PATCH] ASoC: SAMSUNG: Add Aquila sound driver
  2010-07-08  8:10   ` Chanwoo Choi
@ 2010-07-08  8:19     ` Jassi Brar
  2010-07-09  1:06       ` Chanwoo Choi
  0 siblings, 1 reply; 16+ messages in thread
From: Jassi Brar @ 2010-07-08  8:19 UTC (permalink / raw)
  To: Chanwoo Choi; +Cc: alsa-devel, Mark Brown, Kyungmin Park, Joonyoung Shim

On Thu, Jul 8, 2010 at 5:10 PM, Chanwoo Choi <cw00.choi@samsung.com> wrote:
> Jassi Brar wrote:
>> On Thu, Jul 8, 2010 at 1:57 PM, Chanwoo Choi <cw00.choi@samsung.com> wrote:
>>> This patch add sound support for the Aquila board based on S5PC110.
>>>
>>> The Aquila board is based on Samsung SoC(S5PC110) and include
>>> WM8994 codec over I2Sv5 to support sound. As there is currently
>>> no driver for the I2Sv5, the code to use I2Sv5 is deleted
>>> on this patch.
>>>
>>> After I2Sv5 driver is posted in a few weeks, I will post incremental
>>> patch which some codes for using I2Sv5. The owner of I2Sv5 said that
>>> he will post I2Sv5 driver after a few weeks.
>>
>> I don't plan to create a copy of an almost copy of s3c64xx-i2s.c
>> Please try to use the existing sound/soc/s3c24xx/s3c64xx-i2s-v4.c
>> I intend to only enhance that code to enable features of 'v4', 'v5' etc.
>>
>
> As your comment, I did modify some codes to use sound/soc/s3c24xx/
> s3c64xx-i2s-v4.c instead of I2Sv5. When I try to compile kernel
> with arch/arm/configs/s5pv210_defconfig.
>

.....

>
> When compiling kernel, it is occurred below error because
> arch/arm/mach-s5pv210/include/mach/gpio-bank-*.h file
> isn't included to upstream kernel.
>
> sound/soc/s3c34xx/s3c64xx-i2s-v4.c included the header files
> in arch/arm/mach-s3c64xx/include/*.
>
> What is your opinion for this error?
>
> - compile error log :
> CHK     include/generated/compile.h
> CC      sound/soc/s3c24xx/s3c64xx-i2s-v4.o
> sound/soc/s3c24xx/s3c64xx-i2s-v4.c:19: fatal error:mach/gpio-bank-c.h:
>  No such file or directory

The gpio config stuff needs to be removed from the CPU driver. It was pending
due to fear of cross-tree merge issues. The platform specific code to do the
same is already upstream now.
One engineer in my team is already looking into it while testing
Liam's multi-codec
changes.

>> Please try to use the existing sound/soc/s3c24xx/s3c64xx-i2s-v4.c
'try to' is the key word here. The driver is not expected to work rightaway.
One might need to make some changes to the CPU driver to just make it
work on platforms with very similar IP.
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

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

* Re: [PATCH] ASoC: SAMSUNG: Add Aquila sound driver
  2010-07-08  5:52 ` Jassi Brar
@ 2010-07-08  8:10   ` Chanwoo Choi
  2010-07-08  8:19     ` Jassi Brar
  0 siblings, 1 reply; 16+ messages in thread
From: Chanwoo Choi @ 2010-07-08  8:10 UTC (permalink / raw)
  To: Jassi Brar; +Cc: alsa-devel, Mark Brown, Kyungmin Park, Joonyoung Shim

Jassi Brar wrote:
> On Thu, Jul 8, 2010 at 1:57 PM, Chanwoo Choi <cw00.choi@samsung.com> wrote:
>> This patch add sound support for the Aquila board based on S5PC110.
>>
>> The Aquila board is based on Samsung SoC(S5PC110) and include
>> WM8994 codec over I2Sv5 to support sound. As there is currently
>> no driver for the I2Sv5, the code to use I2Sv5 is deleted
>> on this patch.
>>
>> After I2Sv5 driver is posted in a few weeks, I will post incremental
>> patch which some codes for using I2Sv5. The owner of I2Sv5 said that
>> he will post I2Sv5 driver after a few weeks.
> 
> I don't plan to create a copy of an almost copy of s3c64xx-i2s.c
> Please try to use the existing sound/soc/s3c24xx/s3c64xx-i2s-v4.c
> I intend to only enhance that code to enable features of 'v4', 'v5' etc.
> 

As your comment, I did modify some codes to use sound/soc/s3c24xx/
s3c64xx-i2s-v4.c instead of I2Sv5. When I try to compile kernel 
with arch/arm/configs/s5pv210_defconfig.

diff --git a/sound/soc/s3c24xx/Kconfig b/sound/soc/s3c24xx/Kconfig
index 0c5d8a5..c09b402 100644
--- a/sound/soc/s3c24xx/Kconfig
+++ b/sound/soc/s3c24xx/Kconfig
@@ -135,6 +135,7 @@ config SND_S3C64XX_SOC_SMARTQ
 config SND_S5PC110_SOC_AQUILA_WM8994
 	tristate "SoC I2S Audio support for AQUILA - WM8994"
 	depends on SND_S3C24XX_SOC && MACH_AQUILA
+	select SND_S3C64XX_SOC_I2S_V4
 	select SND_SOC_WM8994
 	help
 	  Say Y if you want to add support for SoC audio on aquila
diff --git a/sound/soc/s3c24xx/s3c-i2s-v2.c b/sound/soc/s3c24xx/s3c-i2s-v2.c
index 13311c8..64376b2 100644
--- a/sound/soc/s3c24xx/s3c-i2s-v2.c
+++ b/sound/soc/s3c24xx/s3c-i2s-v2.c
@@ -32,7 +32,8 @@
 
 #undef S3C_IIS_V2_SUPPORTED
 
-#if defined(CONFIG_CPU_S3C2412) || defined(CONFIG_CPU_S3C2413)
+#if defined(CONFIG_CPU_S3C2412) || defined(CONFIG_CPU_S3C2413) \
+	|| defined(CONFIG_CPU_S5PV210)
 #define S3C_IIS_V2_SUPPORTED
 #endif
 

When compiling kernel, it is occurred below error because 
arch/arm/mach-s5pv210/include/mach/gpio-bank-*.h file 
isn't included to upstream kernel.

sound/soc/s3c34xx/s3c64xx-i2s-v4.c included the header files
in arch/arm/mach-s3c64xx/include/*.

What is your opinion for this error?

- compile error log :
CHK     include/generated/compile.h
CC      sound/soc/s3c24xx/s3c64xx-i2s-v4.o
sound/soc/s3c24xx/s3c64xx-i2s-v4.c:19: fatal error:mach/gpio-bank-c.h:
 No such file or directory

Thank you,
Chanwoo Choi

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

* Re: [PATCH] ASoC: SAMSUNG: Add Aquila sound driver
  2010-07-08  4:57 Chanwoo Choi
  2010-07-08  5:52 ` Jassi Brar
@ 2010-07-08  7:05 ` Mark Brown
  2010-07-09  2:21   ` Chanwoo Choi
  1 sibling, 1 reply; 16+ messages in thread
From: Mark Brown @ 2010-07-08  7:05 UTC (permalink / raw)
  To: Chanwoo Choi; +Cc: alsa-devel, Kyungmin Park, Joonyoung Shim

On Thu, Jul 08, 2010 at 01:57:38PM +0900, Chanwoo Choi wrote:
> This patch add sound support for the Aquila board based on S5PC110.
> 
> The Aquila board is based on Samsung SoC(S5PC110) and include
> WM8994 codec over I2Sv5 to support sound. As there is currently
> no driver for the I2Sv5, the code to use I2Sv5 is deleted
> on this patch.

This looks good from my point of view, though I'm not sure if you want
to do any updates for Jassi's comments and Liam also needs to review
still.

One other thing that you might want to do - I'm not sure if you noticed
but there is now an API call snd_soc_dapm_ignore_suspend() which allows 
audio paths to be kept up while the system is suspended, intended for
use in cases like voice calls on mobile phones where audio is running
even though the Linux system is suspended.  To use this you should mark
all DAPM endpoints which can be live over suspend as ignoring suspend
then ASoC should transparently keep any paths between endpoints marked
this way up.

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

* Re: [PATCH] ASoC: SAMSUNG: Add Aquila sound driver
  2010-07-08  4:57 Chanwoo Choi
@ 2010-07-08  5:52 ` Jassi Brar
  2010-07-08  8:10   ` Chanwoo Choi
  2010-07-08  7:05 ` Mark Brown
  1 sibling, 1 reply; 16+ messages in thread
From: Jassi Brar @ 2010-07-08  5:52 UTC (permalink / raw)
  To: Chanwoo Choi; +Cc: alsa-devel, Mark Brown, Kyungmin Park, Joonyoung Shim

On Thu, Jul 8, 2010 at 1:57 PM, Chanwoo Choi <cw00.choi@samsung.com> wrote:
> This patch add sound support for the Aquila board based on S5PC110.
>
> The Aquila board is based on Samsung SoC(S5PC110) and include
> WM8994 codec over I2Sv5 to support sound. As there is currently
> no driver for the I2Sv5, the code to use I2Sv5 is deleted
> on this patch.
>
> After I2Sv5 driver is posted in a few weeks, I will post incremental
> patch which some codes for using I2Sv5. The owner of I2Sv5 said that
> he will post I2Sv5 driver after a few weeks.

I don't plan to create a copy of an almost copy of s3c64xx-i2s.c
Please try to use the existing sound/soc/s3c24xx/s3c64xx-i2s-v4.c
I intend to only enhance that code to enable features of 'v4', 'v5' etc.

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

* [PATCH] ASoC: SAMSUNG: Add Aquila sound driver
@ 2010-07-08  4:57 Chanwoo Choi
  2010-07-08  5:52 ` Jassi Brar
  2010-07-08  7:05 ` Mark Brown
  0 siblings, 2 replies; 16+ messages in thread
From: Chanwoo Choi @ 2010-07-08  4:57 UTC (permalink / raw)
  To: alsa-devel; +Cc: Kyungmin Park, Mark Brown, Joonyoung Shim

This patch add sound support for the Aquila board based on S5PC110.

The Aquila board is based on Samsung SoC(S5PC110) and include
WM8994 codec over I2Sv5 to support sound. As there is currently
no driver for the I2Sv5, the code to use I2Sv5 is deleted
on this patch.

After I2Sv5 driver is posted in a few weeks, I will post incremental
patch which some codes for using I2Sv5. The owner of I2Sv5 said that
he will post I2Sv5 driver after a few weeks.

The kind of jack is below states :
* SND_JACK_HEADPHONE
* SND_JACK_HEADSET
* SND_JACK_MECHANICAL
  : When TV-OUT cable is inserted on Aquila board,
  the TV-OUT cable isn't connected to television.
* SND_JACK_AVOUT
  : When TV-OUT cable is inserted on Aquila board,
  the TV-OUT cable is connected to television.

Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
 sound/soc/s3c24xx/Kconfig         |    8 +
 sound/soc/s3c24xx/Makefile        |    2 +
 sound/soc/s3c24xx/aquila_wm8994.c |  298 +++++++++++++++++++++++++++++++++++++
 3 files changed, 308 insertions(+), 0 deletions(-)
 create mode 100644 sound/soc/s3c24xx/aquila_wm8994.c

diff --git a/sound/soc/s3c24xx/Kconfig b/sound/soc/s3c24xx/Kconfig
index 213963a..0c5d8a5 100644
--- a/sound/soc/s3c24xx/Kconfig
+++ b/sound/soc/s3c24xx/Kconfig
@@ -131,3 +131,11 @@ config SND_S3C64XX_SOC_SMARTQ
 	depends on SND_S3C24XX_SOC && MACH_SMARTQ
 	select SND_S3C64XX_SOC_I2S
 	select SND_SOC_WM8750
+
+config SND_S5PC110_SOC_AQUILA_WM8994
+	tristate "SoC I2S Audio support for AQUILA - WM8994"
+	depends on SND_S3C24XX_SOC && MACH_AQUILA
+	select SND_SOC_WM8994
+	help
+	  Say Y if you want to add support for SoC audio on aquila
+	  with the WM8994.
diff --git a/sound/soc/s3c24xx/Makefile b/sound/soc/s3c24xx/Makefile
index 50172c3..02dd12c 100644
--- a/sound/soc/s3c24xx/Makefile
+++ b/sound/soc/s3c24xx/Makefile
@@ -30,6 +30,7 @@ snd-soc-s3c24xx-simtec-tlv320aic23-objs := s3c24xx_simtec_tlv320aic23.o
 snd-soc-smdk64xx-wm8580-objs := smdk64xx_wm8580.o
 snd-soc-smdk-wm9713-objs := smdk_wm9713.o
 snd-soc-s3c64xx-smartq-wm8987-objs := smartq_wm8987.o
+snd-soc-aquila-wm8994-objs := aquila_wm8994.o
 
 obj-$(CONFIG_SND_S3C24XX_SOC_JIVE_WM8750) += snd-soc-jive-wm8750.o
 obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753) += snd-soc-neo1973-wm8753.o
@@ -43,3 +44,4 @@ obj-$(CONFIG_SND_S3C24XX_SOC_SIMTEC_TLV320AIC23) += snd-soc-s3c24xx-simtec-tlv32
 obj-$(CONFIG_SND_S3C64XX_SOC_WM8580) += snd-soc-smdk64xx-wm8580.o
 obj-$(CONFIG_SND_SOC_SMDK_WM9713) += snd-soc-smdk-wm9713.o
 obj-$(CONFIG_SND_S3C64XX_SOC_SMARTQ) += snd-soc-s3c64xx-smartq-wm8987.o
+obj-$(CONFIG_SND_S5PC110_SOC_AQUILA_WM8994) += snd-soc-aquila-wm8994.o
diff --git a/sound/soc/s3c24xx/aquila_wm8994.c b/sound/soc/s3c24xx/aquila_wm8994.c
new file mode 100644
index 0000000..706087f
--- /dev/null
+++ b/sound/soc/s3c24xx/aquila_wm8994.c
@@ -0,0 +1,298 @@
+/*
+ * aquila_wm8994.c
+ *
+ * Copyright (C) 2010 Samsung Electronics Co.Ltd
+ * Author: Chanwoo Choi <cw00.choi@samsung.com>
+ *
+ *  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/module.h>
+#include <linux/moduleparam.h>
+#include <linux/io.h>
+#include <linux/platform_device.h>
+#include <sound/soc.h>
+#include <sound/soc-dapm.h>
+#include <sound/jack.h>
+#include <asm/mach-types.h>
+#include <mach/gpio.h>
+#include <mach/regs-clock.h>
+
+#include <linux/mfd/wm8994/core.h>
+#include <linux/mfd/wm8994/registers.h>
+#include "../codecs/wm8994.h"
+#include "s3c-dma.h"
+#include "s3c24xx-i2s.h"
+
+static struct snd_soc_card aquila;
+static struct platform_device *aquila_snd_device;
+
+/* 3.5 pie jack */
+static struct snd_soc_jack jack;
+
+/* 3.5 pie jack detection DAPM pins */
+static struct snd_soc_jack_pin jack_pins[] = {
+	{
+		.pin = "Headset Mic",
+		.mask = SND_JACK_MICROPHONE,
+	}, {
+		.pin = "Headset Stereophone",
+		.mask = SND_JACK_HEADPHONE | SND_JACK_MECHANICAL |
+			SND_JACK_AVOUT,
+	},
+};
+
+/* 3.5 pie jack detection gpios */
+static struct snd_soc_jack_gpio jack_gpios[] = {
+	{
+		.gpio = S5PV210_GPH0(6),
+		.name = "DET_3.5",
+		.report = SND_JACK_HEADSET | SND_JACK_MECHANICAL |
+			SND_JACK_AVOUT,
+		.debounce_time = 200,
+	},
+};
+
+static const struct snd_soc_dapm_widget aquila_dapm_widgets[] = {
+	SND_SOC_DAPM_SPK("Ext Spk", NULL),
+	SND_SOC_DAPM_SPK("Ext Rcv", NULL),
+	SND_SOC_DAPM_HP("Headset Stereophone", NULL),
+	SND_SOC_DAPM_MIC("Headset Mic", NULL),
+	SND_SOC_DAPM_MIC("Main Mic", NULL),
+	SND_SOC_DAPM_MIC("2nd Mic", NULL),
+	SND_SOC_DAPM_LINE("Radio In", NULL),
+};
+
+static const struct snd_soc_dapm_route aquila_dapm_routes[] = {
+	{"Ext Spk", NULL, "SPKOUTLP"},
+	{"Ext Spk", NULL, "SPKOUTLN"},
+
+	{"Ext Rcv", NULL, "HPOUT2N"},
+	{"Ext Rcv", NULL, "HPOUT2P"},
+
+	{"Headset Stereophone", NULL, "HPOUT1L"},
+	{"Headset Stereophone", NULL, "HPOUT1R"},
+
+	{"IN1RN", NULL, "Headset Mic"},
+	{"IN1RP", NULL, "Headset Mic"},
+
+	{"IN1RN", NULL, "2nd Mic"},
+	{"IN1RP", NULL, "2nd Mic"},
+
+	{"IN1LN", NULL, "Main Mic"},
+	{"IN1LP", NULL, "Main Mic"},
+
+	{"IN2LN", NULL, "Radio In"},
+	{"IN2RN", NULL, "Radio In"},
+};
+
+static int aquila_wm8994_init(struct snd_soc_codec *codec)
+{
+	int ret;
+
+	/* add aquila specific widgets */
+	snd_soc_dapm_new_controls(codec, aquila_dapm_widgets,
+			ARRAY_SIZE(aquila_dapm_widgets));
+
+	/* set up aquila specific audio routes */
+	snd_soc_dapm_add_routes(codec, aquila_dapm_routes,
+			ARRAY_SIZE(aquila_dapm_routes));
+
+	/* set endpoints to not connected */
+	snd_soc_dapm_nc_pin(codec, "IN2LP:VXRN");
+	snd_soc_dapm_nc_pin(codec, "IN2RP:VXRP");
+	snd_soc_dapm_nc_pin(codec, "LINEOUT1N");
+	snd_soc_dapm_nc_pin(codec, "LINEOUT1P");
+	snd_soc_dapm_nc_pin(codec, "LINEOUT2N");
+	snd_soc_dapm_nc_pin(codec, "LINEOUT2P");
+	snd_soc_dapm_nc_pin(codec, "SPKOUTRN");
+	snd_soc_dapm_nc_pin(codec, "SPKOUTRP");
+
+	snd_soc_dapm_sync(codec);
+
+	/* Headset jack detection */
+	ret = snd_soc_jack_new(&aquila, "Headset Jack",
+			SND_JACK_HEADSET | SND_JACK_MECHANICAL | SND_JACK_AVOUT,
+			&jack);
+	if (ret)
+		return ret;
+
+	ret = snd_soc_jack_add_pins(&jack, ARRAY_SIZE(jack_pins), jack_pins);
+	if (ret)
+		return ret;
+
+	ret = snd_soc_jack_add_gpios(&jack, ARRAY_SIZE(jack_gpios), jack_gpios);
+	if (ret)
+		return ret;
+
+	return 0;
+}
+
+static int aquila_hifi_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 *codec_dai = rtd->dai->codec_dai;
+	struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+	unsigned int pll_out = 24000000;
+	int ret = 0;
+
+	/* set the cpu DAI configuration */
+	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)
+		return ret;
+
+	/* set the cpu system clock */
+	ret = snd_soc_dai_set_sysclk(cpu_dai, 0, 0, 0);
+	if (ret < 0)
+		return ret;
+
+	/* set codec DAI configuration */
+	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)
+		return ret;
+
+	/* set the codec FLL */
+	ret = snd_soc_dai_set_pll(codec_dai, WM8994_FLL1, 0, pll_out,
+			params_rate(params) * 256);
+	if (ret < 0)
+		return ret;
+
+	/* set the codec system clock */
+	ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL1,
+			params_rate(params) * 256, SND_SOC_CLOCK_IN);
+	if (ret < 0)
+		return ret;
+
+	return 0;
+}
+
+static struct snd_soc_ops aquila_hifi_ops = {
+	.hw_params = aquila_hifi_hw_params,
+};
+
+static int aquila_voice_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 *codec_dai = rtd->dai->codec_dai;
+	unsigned int pll_out = 24000000;
+	int ret = 0;
+
+	if (params_rate(params) != 8000)
+		return -EINVAL;
+
+	/* set codec DAI configuration */
+	ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_LEFT_J |
+			SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM);
+	if (ret < 0)
+		return ret;
+
+	/* set the codec FLL */
+	ret = snd_soc_dai_set_pll(codec_dai, WM8994_FLL2, 0, pll_out,
+			params_rate(params) * 256);
+	if (ret < 0)
+		return ret;
+
+	/* set the codec system clock */
+	ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL2,
+			params_rate(params) * 256, SND_SOC_CLOCK_IN);
+	if (ret < 0)
+		return ret;
+
+	return 0;
+}
+
+static struct snd_soc_dai voice_dai = {
+	.name = "Voice",
+	.id = 0,
+	.playback = {
+		.channels_min = 1,
+		.channels_max = 2,
+		.rates = SNDRV_PCM_RATE_8000,
+		.formats = SNDRV_PCM_FMTBIT_S16_LE,},
+	.capture = {
+		.channels_min = 1,
+		.channels_max = 2,
+		.rates = SNDRV_PCM_RATE_8000,
+		.formats = SNDRV_PCM_FMTBIT_S16_LE,},
+};
+
+static struct snd_soc_ops aquila_voice_ops = {
+	.hw_params = aquila_voice_hw_params,
+};
+
+static struct snd_soc_dai_link aquila_dai[] = {
+{
+	.name = "WM8994",
+	.stream_name = "WM8994 HiFi",
+	/* After I2Sv5 driver is posted, cpu_dai will be enabled. */
+	/* .cpu_dai = &s5p_i2s_dai[0], */
+	.codec_dai = &wm8994_dai[0],
+	.init = aquila_wm8994_init,
+	.ops = &aquila_hifi_ops,
+}, {
+	.name = "WM8994 Voice",
+	.stream_name = "Voice",
+	.cpu_dai = &voice_dai,
+	.codec_dai = &wm8994_dai[1],
+	.ops = &aquila_voice_ops,
+},
+};
+
+static struct snd_soc_card aquila = {
+	.name = "aquila",
+	.platform = &s3c24xx_soc_platform,
+	.dai_link = aquila_dai,
+	.num_links = ARRAY_SIZE(aquila_dai),
+};
+
+static struct snd_soc_device aquila_snd_devdata = {
+	.card = &aquila,
+	.codec_dev = &soc_codec_dev_wm8994,
+};
+
+static int __init aquila_init(void)
+{
+	int ret;
+
+	if (!machine_is_aquila())
+		return -ENODEV;
+
+	/* register voice DAI here */
+	ret = snd_soc_register_dai(&voice_dai);
+	if (ret)
+		return ret;
+
+	aquila_snd_device = platform_device_alloc("soc-audio", 0);
+	if (!aquila_snd_device)
+		return -ENOMEM;
+
+	platform_set_drvdata(aquila_snd_device, &aquila_snd_devdata);
+	aquila_snd_devdata.dev = &aquila_snd_device->dev;
+	ret = platform_device_add(aquila_snd_device);
+
+	if (ret)
+		platform_device_put(aquila_snd_device);
+
+	return ret;
+}
+
+static void __exit aquila_exit(void)
+{
+	platform_device_unregister(aquila_snd_device);
+}
+
+module_init(aquila_init);
+module_exit(aquila_exit);
+
+/* Module information */
+MODULE_DESCRIPTION("ALSA SoC WM8994 Aquila(S5PC110)");
+MODULE_AUTHOR("Chanwoo Choi <cw00.choi@samsung.com>");
+MODULE_LICENSE("GPL");
-- 
1.6.3.3

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

end of thread, other threads:[~2010-07-12  9:41 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-07-07  8:41 [PATCH] ASoC: SAMSUNG: Add Aquila sound driver 최찬우
2010-07-07 13:36 ` Mark Brown
2010-07-08  1:51   ` 최찬우
2010-07-08  4:57 Chanwoo Choi
2010-07-08  5:52 ` Jassi Brar
2010-07-08  8:10   ` Chanwoo Choi
2010-07-08  8:19     ` Jassi Brar
2010-07-09  1:06       ` Chanwoo Choi
2010-07-09  2:17         ` Jassi Brar
2010-07-08  7:05 ` Mark Brown
2010-07-09  2:21   ` Chanwoo Choi
2010-07-09  2:42     ` Mark Brown
2010-07-09  3:55       ` Chanwoo Choi
2010-07-12  7:23         ` Chanwoo Choi
2010-07-12  9:41           ` Mark Brown
2010-07-09  9:15       ` Liam Girdwood

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.