Alsa-Devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* ASoC: ak4642/fsi: add ak4648 support
@ 2011-11-07  6:03 kuninori.morimoto.gx
  2011-11-07  6:04 ` [PATCH 1/5] ASoC: fsi-ak4642: modify specification method of FSI / ak464x Kuninori Morimoto
                   ` (5 more replies)
  0 siblings, 6 replies; 30+ messages in thread
From: kuninori.morimoto.gx @ 2011-11-07  6:03 UTC (permalink / raw)
  To: Paul Mundt, Mark Brown; +Cc: Linux-ALSA, Kuninori Morimoto, Liam Girdwood

Dear Mark, Liam, Paul

These are ak4648 suport for ak4642 driver,
and fsi update patch set

Kuninori Morimoto (5):
      ASoC: fsi-ak4642: modify specification method of FSI / ak464x
      ASoC: ak4642: ak4642 was tested
      ASoC: ak4642: headphone/stereo-line output control
      ASoC: ak4642: add ak4648 support
      ASoC: fsi: add valid data position control support

>> Paul

Can you please check #1 patch which modify arch/sh and arch/arm

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

* [PATCH 1/5] ASoC: fsi-ak4642: modify specification method of FSI / ak464x
  2011-11-07  6:03 ASoC: ak4642/fsi: add ak4648 support kuninori.morimoto.gx
@ 2011-11-07  6:04 ` Kuninori Morimoto
  2011-11-24  0:55   ` [PATCH 1/5][resend] " Kuninori Morimoto
  2011-11-07  6:04 ` [PATCH 2/5] ASoC: ak4642: ak4642 was tested Kuninori Morimoto
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-07  6:04 UTC (permalink / raw)
  To: Paul Mundt, Mark Brown, Liam Girdwood; +Cc: Linux-ALSA, Kuninori Morimoto

Current fsi-ak4642 was using id_entry name in order to specify
FSI port and ak464x codec.
But it was no sense, no flexibility.
Platform can specify FSI/ak464x pair by this patch.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 arch/arm/mach-shmobile/board-ap4evb.c   |   15 ++++-
 arch/arm/mach-shmobile/board-mackerel.c |   14 ++++-
 arch/sh/boards/mach-se/7724/setup.c     |   14 ++++-
 include/sound/sh_fsi.h                  |   12 +++
 sound/soc/sh/fsi-ak4642.c               |  114 +++----------------------------
 5 files changed, 63 insertions(+), 106 deletions(-)

diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c
index 5aa5ddd..5df4e3a 100644
--- a/arch/arm/mach-shmobile/board-ap4evb.c
+++ b/arch/arm/mach-shmobile/board-ap4evb.c
@@ -787,9 +787,22 @@ static struct platform_device fsi_device = {
 	},
 };
 
+static struct fsi_ak4642_info fsi2_ak4643_info = {
+	.name		= "AK4643",
+	.card		= "FSI2A-AK4643",
+	.cpu_dai	= "fsia-dai",
+	.codec		= "ak4642-codec.0-0013",
+	.platform	= "sh_fsi2",
+	.id		= FSI_PORT_A,
+};
+
 static struct platform_device fsi_ak4643_device = {
-	.name		= "sh_fsi2_a_ak4643",
+	.name	= "fsi-ak4642-audio",
+	.dev	= {
+		.platform_data	= &fsi_info,
+	},
 };
+
 static struct sh_mobile_meram_cfg hdmi_meram_cfg = {
 	.icb[0] = {
 		.marker_icb     = 30,
diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c
index d41c01f..fbef6c8 100644
--- a/arch/arm/mach-shmobile/board-mackerel.c
+++ b/arch/arm/mach-shmobile/board-mackerel.c
@@ -984,8 +984,20 @@ static struct platform_device fsi_device = {
 	},
 };
 
+static struct fsi_ak4642_info fsi2_ak4643_info = {
+	.name		= "AK4643",
+	.card		= "FSI2A-AK4643",
+	.cpu_dai	= "fsia-dai",
+	.codec		= "ak4642-codec.0-0013",
+	.platform	= "sh_fsi2",
+	.id		= FSI_PORT_A,
+};
+
 static struct platform_device fsi_ak4643_device = {
-	.name		= "sh_fsi2_a_ak4643",
+	.name	= "fsi-ak4642-audio",
+	.dev	= {
+		.platform_data	= &fsi2_ak4643_info,
+	},
 };
 
 /*
diff --git a/arch/sh/boards/mach-se/7724/setup.c b/arch/sh/boards/mach-se/7724/setup.c
index d007567..f56ca9a 100644
--- a/arch/sh/boards/mach-se/7724/setup.c
+++ b/arch/sh/boards/mach-se/7724/setup.c
@@ -315,8 +315,20 @@ static struct platform_device fsi_device = {
 	},
 };
 
+static struct fsi_ak4642_info fsi_ak4642_info = {
+	.name		= "AK4642",
+	.card		= "FSIA-AK4642",
+	.cpu_dai	= "fsia-dai",
+	.codec		= "ak4642-codec.0-0012",
+	.platform	= "sh_fsi.0",
+	.id		= FSI_PORT_A,
+};
+
 static struct platform_device fsi_ak4642_device = {
-	.name		= "sh_fsi_a_ak4642",
+	.name	= "fsi-ak4642-audio",
+	.dev	= {
+		.platform_data	= &fsi_ak4642_info,
+	},
 };
 
 /* KEYSC in SoC (Needs SW33-2 set to ON) */
diff --git a/include/sound/sh_fsi.h b/include/sound/sh_fsi.h
index 9a155f9..9b1aaca 100644
--- a/include/sound/sh_fsi.h
+++ b/include/sound/sh_fsi.h
@@ -78,4 +78,16 @@ struct sh_fsi_platform_info {
 	int (*set_rate)(struct device *dev, int is_porta, int rate, int enable);
 };
 
+/*
+ * for fsi-ak4642
+ */
+struct fsi_ak4642_info {
+	const char *name;
+	const char *card;
+	const char *cpu_dai;
+	const char *codec;
+	const char *platform;
+	int id;
+};
+
 #endif /* __SOUND_FSI_H */
diff --git a/sound/soc/sh/fsi-ak4642.c b/sound/soc/sh/fsi-ak4642.c
index 770a71a..c7d2f8c 100644
--- a/sound/soc/sh/fsi-ak4642.c
+++ b/sound/soc/sh/fsi-ak4642.c
@@ -57,27 +57,23 @@ static struct platform_device *fsi_snd_device;
 static int fsi_ak4642_probe(struct platform_device *pdev)
 {
 	int ret = -ENOMEM;
-	const struct platform_device_id	*id_entry;
-	struct fsi_ak4642_data *pdata;
+	struct fsi_ak4642_info *pinfo = pdev->dev.platform_data;
 
-	id_entry = pdev->id_entry;
-	if (!id_entry) {
-		dev_err(&pdev->dev, "unknown fsi ak4642\n");
-		return -ENODEV;
+	if (!pinfo) {
+		dev_err(&pdev->dev, "no info for fsi ak4642\n");
+		goto out;
 	}
 
-	pdata = (struct fsi_ak4642_data *)id_entry->driver_data;
-
-	fsi_snd_device = platform_device_alloc("soc-audio", pdata->id);
+	fsi_snd_device = platform_device_alloc("soc-audio", pinfo->id);
 	if (!fsi_snd_device)
 		goto out;
 
-	fsi_dai_link.name		= pdata->name;
-	fsi_dai_link.stream_name	= pdata->name;
-	fsi_dai_link.cpu_dai_name	= pdata->cpu_dai;
-	fsi_dai_link.platform_name	= pdata->platform;
-	fsi_dai_link.codec_name		= pdata->codec;
-	fsi_soc_card.name		= pdata->card;
+	fsi_dai_link.name		= pinfo->name;
+	fsi_dai_link.stream_name	= pinfo->name;
+	fsi_dai_link.cpu_dai_name	= pinfo->cpu_dai;
+	fsi_dai_link.platform_name	= pinfo->platform;
+	fsi_dai_link.codec_name		= pinfo->codec;
+	fsi_soc_card.name		= pinfo->card;
 
 	platform_set_drvdata(fsi_snd_device, &fsi_soc_card);
 	ret = platform_device_add(fsi_snd_device);
@@ -95,100 +91,12 @@ static int fsi_ak4642_remove(struct platform_device *pdev)
 	return 0;
 }
 
-static struct fsi_ak4642_data fsi_a_ak4642 = {
-	.name		= "AK4642",
-	.card		= "FSIA-AK4642",
-	.cpu_dai	= "fsia-dai",
-	.codec		= "ak4642-codec.0-0012",
-	.platform	= "sh_fsi.0",
-	.id		= FSI_PORT_A,
-};
-
-static struct fsi_ak4642_data fsi_b_ak4642 = {
-	.name		= "AK4642",
-	.card		= "FSIB-AK4642",
-	.cpu_dai	= "fsib-dai",
-	.codec		= "ak4642-codec.0-0012",
-	.platform	= "sh_fsi.0",
-	.id		= FSI_PORT_B,
-};
-
-static struct fsi_ak4642_data fsi_a_ak4643 = {
-	.name		= "AK4643",
-	.card		= "FSIA-AK4643",
-	.cpu_dai	= "fsia-dai",
-	.codec		= "ak4642-codec.0-0013",
-	.platform	= "sh_fsi.0",
-	.id		= FSI_PORT_A,
-};
-
-static struct fsi_ak4642_data fsi_b_ak4643 = {
-	.name		= "AK4643",
-	.card		= "FSIB-AK4643",
-	.cpu_dai	= "fsib-dai",
-	.codec		= "ak4642-codec.0-0013",
-	.platform	= "sh_fsi.0",
-	.id		= FSI_PORT_B,
-};
-
-static struct fsi_ak4642_data fsi2_a_ak4642 = {
-	.name		= "AK4642",
-	.card		= "FSI2A-AK4642",
-	.cpu_dai	= "fsia-dai",
-	.codec		= "ak4642-codec.0-0012",
-	.platform	= "sh_fsi2",
-	.id		= FSI_PORT_A,
-};
-
-static struct fsi_ak4642_data fsi2_b_ak4642 = {
-	.name		= "AK4642",
-	.card		= "FSI2B-AK4642",
-	.cpu_dai	= "fsib-dai",
-	.codec		= "ak4642-codec.0-0012",
-	.platform	= "sh_fsi2",
-	.id		= FSI_PORT_B,
-};
-
-static struct fsi_ak4642_data fsi2_a_ak4643 = {
-	.name		= "AK4643",
-	.card		= "FSI2A-AK4643",
-	.cpu_dai	= "fsia-dai",
-	.codec		= "ak4642-codec.0-0013",
-	.platform	= "sh_fsi2",
-	.id		= FSI_PORT_A,
-};
-
-static struct fsi_ak4642_data fsi2_b_ak4643 = {
-	.name		= "AK4643",
-	.card		= "FSI2B-AK4643",
-	.cpu_dai	= "fsib-dai",
-	.codec		= "ak4642-codec.0-0013",
-	.platform	= "sh_fsi2",
-	.id		= FSI_PORT_B,
-};
-
-static struct platform_device_id fsi_id_table[] = {
-	/* FSI */
-	{ "sh_fsi_a_ak4642",	(kernel_ulong_t)&fsi_a_ak4642 },
-	{ "sh_fsi_b_ak4642",	(kernel_ulong_t)&fsi_b_ak4642 },
-	{ "sh_fsi_a_ak4643",	(kernel_ulong_t)&fsi_a_ak4643 },
-	{ "sh_fsi_b_ak4643",	(kernel_ulong_t)&fsi_b_ak4643 },
-
-	/* FSI 2 */
-	{ "sh_fsi2_a_ak4642",	(kernel_ulong_t)&fsi2_a_ak4642 },
-	{ "sh_fsi2_b_ak4642",	(kernel_ulong_t)&fsi2_b_ak4642 },
-	{ "sh_fsi2_a_ak4643",	(kernel_ulong_t)&fsi2_a_ak4643 },
-	{ "sh_fsi2_b_ak4643",	(kernel_ulong_t)&fsi2_b_ak4643 },
-	{},
-};
-
 static struct platform_driver fsi_ak4642 = {
 	.driver = {
 		.name	= "fsi-ak4642-audio",
 	},
 	.probe		= fsi_ak4642_probe,
 	.remove		= fsi_ak4642_remove,
-	.id_table	= fsi_id_table,
 };
 
 static int __init fsi_ak4642_init(void)
-- 
1.7.5.4

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

* [PATCH 2/5] ASoC: ak4642: ak4642 was tested
  2011-11-07  6:03 ASoC: ak4642/fsi: add ak4648 support kuninori.morimoto.gx
  2011-11-07  6:04 ` [PATCH 1/5] ASoC: fsi-ak4642: modify specification method of FSI / ak464x Kuninori Morimoto
@ 2011-11-07  6:04 ` Kuninori Morimoto
  2011-11-08 10:57   ` Mark Brown
  2011-11-07  6:05 ` [PATCH 3/5] ASoC: ak4642: headphone/stereo-line output control Kuninori Morimoto
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-07  6:04 UTC (permalink / raw)
  To: Paul Mundt, Mark Brown, Liam Girdwood; +Cc: Linux-ALSA, Kuninori Morimoto

ak4642 was tested by ms7724se board

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 sound/soc/codecs/ak4642.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index 79c1b3d..50da176 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -18,7 +18,7 @@
  * This is very simple driver.
  * It can use headphone output / stereo input only
  *
- * AK4642 is not tested.
+ * AK4642 is tested.
  * AK4643 is tested.
  */
 
-- 
1.7.5.4

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

* [PATCH 3/5] ASoC: ak4642: headphone/stereo-line output control
  2011-11-07  6:03 ASoC: ak4642/fsi: add ak4648 support kuninori.morimoto.gx
  2011-11-07  6:04 ` [PATCH 1/5] ASoC: fsi-ak4642: modify specification method of FSI / ak464x Kuninori Morimoto
  2011-11-07  6:04 ` [PATCH 2/5] ASoC: ak4642: ak4642 was tested Kuninori Morimoto
@ 2011-11-07  6:05 ` Kuninori Morimoto
  2011-11-08 10:55   ` Mark Brown
  2011-11-07  6:05 ` [PATCH 4/5] ASoC: ak4642: add ak4648 support Kuninori Morimoto
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-07  6:05 UTC (permalink / raw)
  To: Paul Mundt, Mark Brown, Liam Girdwood; +Cc: Linux-ALSA, Kuninori Morimoto

This patch modifies ak4642 driver to output both headphone/stereo-line in same time.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 sound/soc/codecs/ak4642.c |   44 +++++++++++++++++++++++++++++++++++---------
 1 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index 50da176..f30e434 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -75,6 +75,7 @@
 /* PW_MGMT1*/
 #define PMVCM		(1 << 6) /* VCOM Power Management */
 #define PMMIN		(1 << 5) /* MIN Input Power Management */
+#define PMLO		(1 << 3) /* Stereo Line Out Power Management */
 #define PMDAC		(1 << 2) /* DAC Power Management */
 #define PMADL		(1 << 0) /* MIC Amp Lch and ADC Lch Power Management */
 
@@ -98,6 +99,9 @@
 #define PMMP		(1 << 2) /* MPWR pin Power Management */
 #define MGAIN0		(1 << 0) /* MIC amp gain*/
 
+/* SG_SL2 */
+#define LOPS		(1 << 6) /* Stereo Line Output Power-Save Mode */
+
 /* TIMER */
 #define ZTM(param)	((param & 0x3) << 4) /* ALC Zoro Crossing TimeOut */
 #define WTM(param)	(((param & 0x4) << 4) | ((param & 0x3) << 2))
@@ -130,10 +134,13 @@
 #define FS_MASK		(FS0 | FS1 | FS2 | FS3)
 
 /* MD_CTL3 */
-#define BST1		(1 << 3)
+#define DEM0		(1 << 0) /* De-emphasis Frequency Select */
+#define BST1		(1 << 3) /* Bass Boost Function Select */
+#define DVOLC		(1 << 4) /* Output Digital Volume Control Mode Select */
 
 /* MD_CTL4 */
-#define DACH		(1 << 0)
+#define DACH		(1 << 0) /* Switch Control from DAC to Headphone-Amp */
+#define IVOLC		(1 << 3) /* Input Digital Volume Control Mode Select */
 
 /*
  * Playback Volume (table 39)
@@ -241,21 +248,31 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream,
 
 	if (is_play) {
 		/*
-		 * start headphone output
+		 * start output
+		 *  - headphone
+		 *  - stereo line
 		 *
 		 * PLL, Master Mode
 		 * Audio I/F Format :MSB justified (ADC & DAC)
-		 * Bass Boost Level : Middle
+		 * Digital Volume	: -8dB
+		 * Bass Boost Level	: Middle
+		 * LOVL=MINL bits	: 0
 		 *
 		 * This operation came from example code of
 		 * "ASAHI KASEI AK4642" (japanese) manual p97.
+		 * "ASAHI KASEI AK4642" (japanese) manual p98.
+		 *
 		 */
 		snd_soc_update_bits(codec, MD_CTL4, DACH, DACH);
 		snd_soc_update_bits(codec, MD_CTL3, BST1, BST1);
+		snd_soc_update_bits(codec, SG_SL1, DACL | MGAIN0, DACL);
 		ak4642_write(codec, L_IVC, 0x91); /* volume */
 		ak4642_write(codec, R_IVC, 0x91); /* volume */
-		snd_soc_update_bits(codec, PW_MGMT1, PMVCM | PMMIN | PMDAC,
-						     PMVCM | PMMIN | PMDAC);
+		snd_soc_update_bits(codec, SG_SL2, LOPS, LOPS);
+		snd_soc_update_bits(codec, PW_MGMT1,
+				    PMVCM | PMMIN | PMLO | PMDAC,
+				    PMVCM | PMMIN | PMLO | PMDAC);
+		snd_soc_update_bits(codec, SG_SL2, LOPS, 0);
 		snd_soc_update_bits(codec, PW_MGMT2, PMHP_MASK,	PMHP);
 		snd_soc_update_bits(codec, PW_MGMT2, HPMTN,	HPMTN);
 	} else {
@@ -272,7 +289,9 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream,
 		 * This operation came from example code of
 		 * "ASAHI KASEI AK4642" (japanese) manual p94.
 		 */
-		ak4642_write(codec, SG_SL1, PMMP | MGAIN0);
+		snd_soc_update_bits(codec, SG_SL1,
+				    PMMP | MGAIN0,
+				    PMMP | MGAIN0);
 		ak4642_write(codec, TIMER, ZTM(0x3) | WTM(0x3));
 		ak4642_write(codec, ALC_CTL1, ALC | LMTH0);
 		snd_soc_update_bits(codec, PW_MGMT1, PMVCM | PMADL,
@@ -290,12 +309,19 @@ static void ak4642_dai_shutdown(struct snd_pcm_substream *substream,
 	struct snd_soc_codec *codec = dai->codec;
 
 	if (is_play) {
-		/* stop headphone output */
+		/*
+		 * stop output
+		 *  - headphone
+		 *  - stereo line
+		 */
+		snd_soc_update_bits(codec, SG_SL2, LOPS, LOPS);
 		snd_soc_update_bits(codec, PW_MGMT2, HPMTN,	0);
 		snd_soc_update_bits(codec, PW_MGMT2, PMHP_MASK,	0);
-		snd_soc_update_bits(codec, PW_MGMT1, PMMIN | PMDAC, 0);
+		snd_soc_update_bits(codec, PW_MGMT1, PMMIN | PMLO | PMDAC, 0);
 		snd_soc_update_bits(codec, MD_CTL3, BST1, 0);
 		snd_soc_update_bits(codec, MD_CTL4, DACH, 0);
+		snd_soc_update_bits(codec, SG_SL1, DACL, 0);
+		snd_soc_update_bits(codec, SG_SL2, LOPS, 0);
 	} else {
 		/* stop stereo input */
 		snd_soc_update_bits(codec, PW_MGMT1, PMADL, 0);
-- 
1.7.5.4

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

* [PATCH 4/5] ASoC: ak4642: add ak4648 support
  2011-11-07  6:03 ASoC: ak4642/fsi: add ak4648 support kuninori.morimoto.gx
                   ` (2 preceding siblings ...)
  2011-11-07  6:05 ` [PATCH 3/5] ASoC: ak4642: headphone/stereo-line output control Kuninori Morimoto
@ 2011-11-07  6:05 ` Kuninori Morimoto
  2011-11-08 11:01   ` Mark Brown
  2011-11-07  6:05 ` [PATCH 5/5] ASoC: fsi: add valid data position control support Kuninori Morimoto
  2011-11-10  8:20 ` ASoC: ak4642/fsi: add ak4648 support kuninori.morimoto.gx
  5 siblings, 1 reply; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-07  6:05 UTC (permalink / raw)
  To: Paul Mundt, Mark Brown, Liam Girdwood; +Cc: Linux-ALSA, Kuninori Morimoto

This patch adds ak4648 support.
ak4642/ak4643/ak4648 are register compatible,
but these have a slightly different register default value.
struct ak4642_chip is added in order to absorb this difference.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 sound/soc/codecs/ak4642.c |   74 +++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 65 insertions(+), 9 deletions(-)

diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index f30e434..1b768ad 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -20,6 +20,7 @@
  *
  * AK4642 is tested.
  * AK4643 is tested.
+ * AK4648 is tested.
  */
 
 #include <linux/delay.h>
@@ -70,8 +71,6 @@
 #define HP_MS		0x23
 #define SPK_MS		0x24
 
-#define AK4642_CACHEREGNUM 	0x25
-
 /* PW_MGMT1*/
 #define PMVCM		(1 << 6) /* VCOM Power Management */
 #define PMMIN		(1 << 5) /* MIN Input Power Management */
@@ -158,28 +157,58 @@ static const struct snd_kcontrol_new ak4642_snd_controls[] = {
 			 0, 0xFF, 1, out_tlv),
 };
 
+/*
+ * ak464x list
+ */
+
+#define AK4642_CACHEREGNUM	(0x24 + 1)
+#define AK4648_CACHEREGNUM	(0x27 + 1)
+#define AK464x_CACHEREGNUM_MAX	AK4648_CACHEREGNUM /* max size */
 
 /* codec private data */
+struct ak4642_reg_fix {
+	unsigned int reg;
+	unsigned int val;
+};
+
+struct ak4642_chip {
+	int reg_max;
+	struct ak4642_reg_fix *reg_fix;
+	int reg_fix_size;
+};
+
 struct ak4642_priv {
 	unsigned int sysclk;
 	enum snd_soc_control_type control_type;
 	void *control_data;
+	struct ak4642_chip *chip;
 };
 
 /*
  * ak4642 register cache
  */
-static const u8 ak4642_reg[AK4642_CACHEREGNUM] = {
+static const u8 ak4642_reg[AK464x_CACHEREGNUM_MAX] = {
 	0x00, 0x00, 0x01, 0x00,
 	0x02, 0x00, 0x00, 0x00,
 	0xe1, 0xe1, 0x18, 0x00,
-	0xe1, 0x18, 0x11, 0x08,
+	0xe1, 0x18, 0x11, 0xff,  /* 0xF will be fixed */
 	0x00, 0x00, 0x00, 0x00,
 	0x00, 0x00, 0x00, 0x00,
 	0x00, 0x00, 0x00, 0x00,
 	0x00, 0x00, 0x00, 0x00,
 	0x00, 0x00, 0x00, 0x00,
-	0x00,
+	0x00, 0xff, 0xff, 0xff, /* 0x25 - 0x27 will be fixed */
+};
+
+static struct ak4642_reg_fix ak4642_reg_fix[] = {
+	{ 0xF, 0x08 }
+};
+
+static struct ak4642_reg_fix ak4648_reg_fix[] = {
+	{ 0xF,  0xb8 },
+	{ 0x25, 0x88 },
+	{ 0x26, 0x88 },
+	{ 0x27, 0x08 },
 };
 
 /*
@@ -496,6 +525,8 @@ static int ak4642_resume(struct snd_soc_codec *codec)
 static int ak4642_probe(struct snd_soc_codec *codec)
 {
 	struct ak4642_priv *ak4642 = snd_soc_codec_get_drvdata(codec);
+	struct ak4642_chip *chip = ak4642->chip;
+	int i;
 
 	dev_info(codec->dev, "AK4642 Audio Codec %s", AK4642_VERSION);
 
@@ -505,6 +536,15 @@ static int ak4642_probe(struct snd_soc_codec *codec)
 	snd_soc_add_controls(codec, ak4642_snd_controls,
 			     ARRAY_SIZE(ak4642_snd_controls));
 
+	/*
+	 * fixup register cache
+	 * each ak464x have a slightly different value
+	 */
+	for (i = 0; i < chip->reg_fix_size; i++)
+		ak4642_write_reg_cache(codec,
+				       chip->reg_fix[i].reg,
+				       chip->reg_fix[i].val);
+
 	return 0;
 }
 
@@ -530,8 +570,9 @@ static __devinit int ak4642_i2c_probe(struct i2c_client *i2c,
 		return -ENOMEM;
 
 	i2c_set_clientdata(i2c, ak4642);
-	ak4642->control_data = i2c;
-	ak4642->control_type = SND_SOC_I2C;
+	ak4642->control_data	= i2c;
+	ak4642->control_type	= SND_SOC_I2C;
+	ak4642->chip		= (struct ak4642_chip *)id->driver_data;
 
 	ret =  snd_soc_register_codec(&i2c->dev,
 			&soc_codec_dev_ak4642, &ak4642_dai, 1);
@@ -547,9 +588,24 @@ static __devexit int ak4642_i2c_remove(struct i2c_client *client)
 	return 0;
 }
 
+/* ak4642 / ak4643 */
+static const struct ak4642_chip ak4642_chip = {
+	.reg_max	= AK4642_CACHEREGNUM,
+	.reg_fix	= ak4642_reg_fix,
+	.reg_fix_size	= ARRAY_SIZE(ak4642_reg_fix),
+};
+
+/* ak4648 */
+static const struct ak4642_chip ak4648_chip = {
+	.reg_max	= AK4648_CACHEREGNUM,
+	.reg_fix	= ak4648_reg_fix,
+	.reg_fix_size	= ARRAY_SIZE(ak4648_reg_fix),
+};
+
 static const struct i2c_device_id ak4642_i2c_id[] = {
-	{ "ak4642", 0 },
-	{ "ak4643", 0 },
+	{ "ak4642", (kernel_ulong_t)&ak4642_chip },
+	{ "ak4643", (kernel_ulong_t)&ak4642_chip }, /* same as ak4642 */
+	{ "ak4648", (kernel_ulong_t)&ak4648_chip },
 	{ }
 };
 MODULE_DEVICE_TABLE(i2c, ak4642_i2c_id);
-- 
1.7.5.4

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

* [PATCH 5/5] ASoC: fsi: add valid data position control support
  2011-11-07  6:03 ASoC: ak4642/fsi: add ak4648 support kuninori.morimoto.gx
                   ` (3 preceding siblings ...)
  2011-11-07  6:05 ` [PATCH 4/5] ASoC: ak4642: add ak4648 support Kuninori Morimoto
@ 2011-11-07  6:05 ` Kuninori Morimoto
  2011-11-08 11:02   ` Mark Brown
  2011-11-10  8:20 ` ASoC: ak4642/fsi: add ak4648 support kuninori.morimoto.gx
  5 siblings, 1 reply; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-07  6:05 UTC (permalink / raw)
  To: Paul Mundt, Mark Brown, Liam Girdwood; +Cc: Linux-ALSA, Kuninori Morimoto

FSI2 can control valid data position, like
package in front/back or stream  mode (16bit x 2).
But current fsi driver is assuming it was in-back.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 sound/soc/sh/fsi.c |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
index 8e112cc..4bfc372 100644
--- a/sound/soc/sh/fsi.c
+++ b/sound/soc/sh/fsi.c
@@ -31,7 +31,9 @@
 #define REG_DIDT	0x0020
 #define REG_DODT	0x0024
 #define REG_MUTE_ST	0x0028
+#define REG_OUT_DMAC	0x002C
 #define REG_OUT_SEL	0x0030
+#define REG_IN_DMAC	0x0038
 
 /* master register */
 #define MST_CLK_RST	0x0210
@@ -885,6 +887,8 @@ static int fsi_hw_startup(struct fsi_priv *fsi,
 			  int is_play,
 			  struct device *dev)
 {
+	struct fsi_master *master = fsi_get_master(fsi);
+	int fsi_ver = master->core->ver;
 	u32 flags = fsi_get_info_flags(fsi);
 	u32 data = 0;
 
@@ -919,6 +923,17 @@ static int fsi_hw_startup(struct fsi_priv *fsi,
 		fsi_reg_mask_set(fsi, OUT_SEL, DMMD, DMMD);
 	}
 
+	/*
+	 * FIXME
+	 *
+	 * FSI driver assumed that data package is in-back.
+	 * FSI2 chip can select it.
+	 */
+	if (fsi_ver >= 2) {
+		fsi_reg_write(fsi, OUT_DMAC,	(1 << 4));
+		fsi_reg_write(fsi, IN_DMAC,	(1 << 4));
+	}
+
 	/* irq clear */
 	fsi_irq_disable(fsi, is_play);
 	fsi_irq_clear_status(fsi);
-- 
1.7.5.4

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

* Re: [PATCH 3/5] ASoC: ak4642: headphone/stereo-line output control
  2011-11-07  6:05 ` [PATCH 3/5] ASoC: ak4642: headphone/stereo-line output control Kuninori Morimoto
@ 2011-11-08 10:55   ` Mark Brown
  2011-11-08 11:22     ` Kuninori Morimoto
  0 siblings, 1 reply; 30+ messages in thread
From: Mark Brown @ 2011-11-08 10:55 UTC (permalink / raw)
  To: Kuninori Morimoto
  Cc: Linux-ALSA, Paul Mundt, Kuninori Morimoto, Liam Girdwood

On Sun, Nov 06, 2011 at 10:05:05PM -0800, Kuninori Morimoto wrote:
> This patch modifies ak4642 driver to output both headphone/stereo-line in same time.

If you're going to start implementing any sort of routing control you
should really be updating the driver to work normally - we shouldn't
really have accepted the limited functionality in the first place.

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

* Re: [PATCH 2/5] ASoC: ak4642: ak4642 was tested
  2011-11-07  6:04 ` [PATCH 2/5] ASoC: ak4642: ak4642 was tested Kuninori Morimoto
@ 2011-11-08 10:57   ` Mark Brown
  0 siblings, 0 replies; 30+ messages in thread
From: Mark Brown @ 2011-11-08 10:57 UTC (permalink / raw)
  To: Kuninori Morimoto
  Cc: Linux-ALSA, Paul Mundt, Kuninori Morimoto, Liam Girdwood

On Sun, Nov 06, 2011 at 10:04:53PM -0800, Kuninori Morimoto wrote:
> ak4642 was tested by ms7724se board

Applied, thanks.

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

* Re: [PATCH 4/5] ASoC: ak4642: add ak4648 support
  2011-11-07  6:05 ` [PATCH 4/5] ASoC: ak4642: add ak4648 support Kuninori Morimoto
@ 2011-11-08 11:01   ` Mark Brown
  0 siblings, 0 replies; 30+ messages in thread
From: Mark Brown @ 2011-11-08 11:01 UTC (permalink / raw)
  To: Kuninori Morimoto
  Cc: Linux-ALSA, Paul Mundt, Kuninori Morimoto, Liam Girdwood

On Sun, Nov 06, 2011 at 10:05:15PM -0800, Kuninori Morimoto wrote:

> +#define AK4642_CACHEREGNUM	(0x24 + 1)
> +#define AK4648_CACHEREGNUM	(0x27 + 1)

> +	/*
> +	 * fixup register cache
> +	 * each ak464x have a slightly different value
> +	 */
> +	for (i = 0; i < chip->reg_fix_size; i++)
> +		ak4642_write_reg_cache(codec,
> +				       chip->reg_fix[i].reg,
> +				       chip->reg_fix[i].val);

This won't work properly when resyncing the cache as the driver will
think that these are non-default values.  Given how small the register
maps are just have different default tables, it's not worth the effort
of doing anything more complex.

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

* Re: [PATCH 5/5] ASoC: fsi: add valid data position control support
  2011-11-07  6:05 ` [PATCH 5/5] ASoC: fsi: add valid data position control support Kuninori Morimoto
@ 2011-11-08 11:02   ` Mark Brown
  0 siblings, 0 replies; 30+ messages in thread
From: Mark Brown @ 2011-11-08 11:02 UTC (permalink / raw)
  To: Kuninori Morimoto
  Cc: Linux-ALSA, Paul Mundt, Kuninori Morimoto, Liam Girdwood

On Sun, Nov 06, 2011 at 10:05:25PM -0800, Kuninori Morimoto wrote:
> FSI2 can control valid data position, like
> package in front/back or stream  mode (16bit x 2).
> But current fsi driver is assuming it was in-back.

Applied, thanks.

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

* Re: [PATCH 3/5] ASoC: ak4642: headphone/stereo-line output control
  2011-11-08 10:55   ` Mark Brown
@ 2011-11-08 11:22     ` Kuninori Morimoto
  2011-11-08 11:40       ` Mark Brown
  0 siblings, 1 reply; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-08 11:22 UTC (permalink / raw)
  To: Mark Brown; +Cc: Linux-ALSA, Paul Mundt, Kuninori Morimoto, Liam Girdwood


Hi Mark

Thank you for checking patch

> > This patch modifies ak4642 driver to output both headphone/stereo-line in same time.
> 
> If you're going to start implementing any sort of routing control you
> should really be updating the driver to work normally - we shouldn't
> really have accepted the limited functionality in the first place.

Sorry. what is this "limited functionality" mean ?

We used headphone output by ak4642/ak4643 on our (old) board.
today, our new board use stereo-line output by ak4648.

And ak4642/ak4643/ak4648 can output headphone/stereo-line in same time.
I think there is no limited functionality on these chips.
but am I misunderstanding ?

Best regards
---
Kuninori Morimoto

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

* Re: [PATCH 3/5] ASoC: ak4642: headphone/stereo-line output control
  2011-11-08 11:22     ` Kuninori Morimoto
@ 2011-11-08 11:40       ` Mark Brown
  0 siblings, 0 replies; 30+ messages in thread
From: Mark Brown @ 2011-11-08 11:40 UTC (permalink / raw)
  To: Kuninori Morimoto
  Cc: Linux-ALSA, Paul Mundt, Kuninori Morimoto, Liam Girdwood

On Tue, Nov 08, 2011 at 03:22:22AM -0800, Kuninori Morimoto wrote:

> > If you're going to start implementing any sort of routing control you
> > should really be updating the driver to work normally - we shouldn't
> > really have accepted the limited functionality in the first place.

> Sorry. what is this "limited functionality" mean ?

Your driver is using hard coded paths rather than offering the user
runtime control of the audio routing.

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

* Re: ASoC: ak4642/fsi: add ak4648 support
  2011-11-07  6:03 ASoC: ak4642/fsi: add ak4648 support kuninori.morimoto.gx
                   ` (4 preceding siblings ...)
  2011-11-07  6:05 ` [PATCH 5/5] ASoC: fsi: add valid data position control support Kuninori Morimoto
@ 2011-11-10  8:20 ` kuninori.morimoto.gx
  2011-11-10  8:21   ` [PATCH 1/5] ASoC: ak4642: add ak4642_set_bias_level() Kuninori Morimoto
                     ` (5 more replies)
  5 siblings, 6 replies; 30+ messages in thread
From: kuninori.morimoto.gx @ 2011-11-10  8:20 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood; +Cc: Linux-ALSA, Kuninori Morimoto


Hi Mark, Liam

These are redo of below patches

>       ASoC: ak4642: headphone/stereo-line output control
>       ASoC: ak4642: add ak4648 support

Kuninori Morimoto (5):
      ASoC: ak4642: add ak4642_set_bias_level()
      ASoC: ak4642: add DAPM support for HeadPhone Output
      ASoC: ak4642: add headphone mute switch control
      ASoC: ak4642: add Line out support
      ASoC: ak4642: add ak4648 support

This time I tried to use DAPM for "Output".
I will try "Input" case in the future

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

* [PATCH 1/5] ASoC: ak4642: add ak4642_set_bias_level()
  2011-11-10  8:20 ` ASoC: ak4642/fsi: add ak4648 support kuninori.morimoto.gx
@ 2011-11-10  8:21   ` Kuninori Morimoto
  2011-11-10 11:27     ` Mark Brown
  2011-11-10  8:21   ` [PATCH 2/5] ASoC: ak4642: add DAPM support for HeadPhone Output Kuninori Morimoto
                     ` (4 subsequent siblings)
  5 siblings, 1 reply; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-10  8:21 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood; +Cc: Linux-ALSA, Kuninori Morimoto

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 sound/soc/codecs/ak4642.c |   31 +++++++++++++++++++++++++++----
 1 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index b854eb0..eaf064a 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -196,8 +196,8 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream,
 		snd_soc_update_bits(codec, MD_CTL3, BST1, BST1);
 		snd_soc_write(codec, L_IVC, 0x91); /* volume */
 		snd_soc_write(codec, R_IVC, 0x91); /* volume */
-		snd_soc_update_bits(codec, PW_MGMT1, PMVCM | PMMIN | PMDAC,
-						     PMVCM | PMMIN | PMDAC);
+		snd_soc_update_bits(codec, PW_MGMT1, PMMIN | PMDAC,
+						     PMMIN | PMDAC);
 		snd_soc_update_bits(codec, PW_MGMT2, PMHP_MASK,	PMHP);
 		snd_soc_update_bits(codec, PW_MGMT2, HPMTN,	HPMTN);
 	} else {
@@ -217,8 +217,7 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream,
 		snd_soc_write(codec, SG_SL1, PMMP | MGAIN0);
 		snd_soc_write(codec, TIMER, ZTM(0x3) | WTM(0x3));
 		snd_soc_write(codec, ALC_CTL1, ALC | LMTH0);
-		snd_soc_update_bits(codec, PW_MGMT1, PMVCM | PMADL,
-						     PMVCM | PMADL);
+		snd_soc_update_bits(codec, PW_MGMT1, PMADL, PMADL);
 		snd_soc_update_bits(codec, PW_MGMT3, PMADR, PMADR);
 	}
 
@@ -376,6 +375,20 @@ static int ak4642_dai_hw_params(struct snd_pcm_substream *substream,
 	return 0;
 }
 
+static int ak4642_set_bias_level(struct snd_soc_codec *codec,
+				 enum snd_soc_bias_level level)
+{
+	switch (level) {
+	case SND_SOC_BIAS_OFF:
+		snd_soc_write(codec, PW_MGMT1, 0x00);
+		break;
+	default:
+		snd_soc_update_bits(codec, PW_MGMT1, PMVCM, PMVCM);
+	}
+	codec->dapm.bias_level = level;
+	return 0;
+}
+
 static struct snd_soc_dai_ops ak4642_dai_ops = {
 	.startup	= ak4642_dai_startup,
 	.shutdown	= ak4642_dai_shutdown,
@@ -425,12 +438,22 @@ static int ak4642_probe(struct snd_soc_codec *codec)
 	snd_soc_add_controls(codec, ak4642_snd_controls,
 			     ARRAY_SIZE(ak4642_snd_controls));
 
+	ak4642_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+
+	return 0;
+}
+
+static int ak4642_remove(struct snd_soc_codec *codec)
+{
+	ak4642_set_bias_level(codec, SND_SOC_BIAS_OFF);
 	return 0;
 }
 
 static struct snd_soc_codec_driver soc_codec_dev_ak4642 = {
 	.probe			= ak4642_probe,
+	.remove			= ak4642_remove,
 	.resume			= ak4642_resume,
+	.set_bias_level		= ak4642_set_bias_level,
 	.reg_cache_size		= ARRAY_SIZE(ak4642_reg),
 	.reg_word_size		= sizeof(u8),
 	.reg_cache_default	= ak4642_reg,
-- 
1.7.5.4

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

* [PATCH 2/5] ASoC: ak4642: add DAPM support for HeadPhone Output
  2011-11-10  8:20 ` ASoC: ak4642/fsi: add ak4648 support kuninori.morimoto.gx
  2011-11-10  8:21   ` [PATCH 1/5] ASoC: ak4642: add ak4642_set_bias_level() Kuninori Morimoto
@ 2011-11-10  8:21   ` Kuninori Morimoto
  2011-11-10  8:21   ` [PATCH 3/5] ASoC: ak4642: add headphone mute switch control Kuninori Morimoto
                     ` (3 subsequent siblings)
  5 siblings, 0 replies; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-10  8:21 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood; +Cc: Linux-ALSA, Kuninori Morimoto

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 sound/soc/codecs/ak4642.c |   44 +++++++++++++++++++++++++++++++++++---------
 1 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index eaf064a..8aa9dd1 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -152,6 +152,37 @@ static const struct snd_kcontrol_new ak4642_snd_controls[] = {
 			 0, 0xFF, 1, out_tlv),
 };
 
+static const struct snd_kcontrol_new ak4642_hpout_mixer_controls[] = {
+	SOC_DAPM_SINGLE("DACH", MD_CTL4, 0, 1, 0),
+};
+
+static const struct snd_soc_dapm_widget ak4642_dapm_widgets[] = {
+
+	/* Outputs */
+	SND_SOC_DAPM_OUTPUT("HPOUTL"),
+	SND_SOC_DAPM_OUTPUT("HPOUTR"),
+
+	SND_SOC_DAPM_MIXER("HPOUTL Mixer", PW_MGMT2, 5, 0,
+			   &ak4642_hpout_mixer_controls[0],
+			   ARRAY_SIZE(ak4642_hpout_mixer_controls)),
+
+	SND_SOC_DAPM_MIXER("HPOUTR Mixer", PW_MGMT2, 4, 0,
+			   &ak4642_hpout_mixer_controls[0],
+			   ARRAY_SIZE(ak4642_hpout_mixer_controls)),
+
+	/* DAC */
+	SND_SOC_DAPM_DAC("DAC", "HiFi Playback", PW_MGMT1, 2, 0),
+};
+
+static const struct snd_soc_dapm_route ak4642_intercon[] = {
+
+	/* Outputs */
+	{"HPOUTL", "NULL", "HPOUTL Mixer"},
+	{"HPOUTR", "NULL", "HPOUTR Mixer"},
+
+	{"HPOUTL Mixer", "DACH", "DAC"},
+	{"HPOUTR Mixer", "DACH", "DAC"},
+};
 
 /* codec private data */
 struct ak4642_priv {
@@ -192,13 +223,8 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream,
 		 * This operation came from example code of
 		 * "ASAHI KASEI AK4642" (japanese) manual p97.
 		 */
-		snd_soc_update_bits(codec, MD_CTL4, DACH, DACH);
-		snd_soc_update_bits(codec, MD_CTL3, BST1, BST1);
 		snd_soc_write(codec, L_IVC, 0x91); /* volume */
 		snd_soc_write(codec, R_IVC, 0x91); /* volume */
-		snd_soc_update_bits(codec, PW_MGMT1, PMMIN | PMDAC,
-						     PMMIN | PMDAC);
-		snd_soc_update_bits(codec, PW_MGMT2, PMHP_MASK,	PMHP);
 		snd_soc_update_bits(codec, PW_MGMT2, HPMTN,	HPMTN);
 	} else {
 		/*
@@ -233,10 +259,6 @@ static void ak4642_dai_shutdown(struct snd_pcm_substream *substream,
 	if (is_play) {
 		/* stop headphone output */
 		snd_soc_update_bits(codec, PW_MGMT2, HPMTN,	0);
-		snd_soc_update_bits(codec, PW_MGMT2, PMHP_MASK,	0);
-		snd_soc_update_bits(codec, PW_MGMT1, PMMIN | PMDAC, 0);
-		snd_soc_update_bits(codec, MD_CTL3, BST1, 0);
-		snd_soc_update_bits(codec, MD_CTL4, DACH, 0);
 	} else {
 		/* stop stereo input */
 		snd_soc_update_bits(codec, PW_MGMT1, PMADL, 0);
@@ -457,6 +479,10 @@ static struct snd_soc_codec_driver soc_codec_dev_ak4642 = {
 	.reg_cache_size		= ARRAY_SIZE(ak4642_reg),
 	.reg_word_size		= sizeof(u8),
 	.reg_cache_default	= ak4642_reg,
+	.dapm_widgets		= ak4642_dapm_widgets,
+	.num_dapm_widgets	= ARRAY_SIZE(ak4642_dapm_widgets),
+	.dapm_routes		= ak4642_intercon,
+	.num_dapm_routes	= ARRAY_SIZE(ak4642_intercon),
 };
 
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-- 
1.7.5.4

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

* [PATCH 3/5] ASoC: ak4642: add headphone mute switch control
  2011-11-10  8:20 ` ASoC: ak4642/fsi: add ak4648 support kuninori.morimoto.gx
  2011-11-10  8:21   ` [PATCH 1/5] ASoC: ak4642: add ak4642_set_bias_level() Kuninori Morimoto
  2011-11-10  8:21   ` [PATCH 2/5] ASoC: ak4642: add DAPM support for HeadPhone Output Kuninori Morimoto
@ 2011-11-10  8:21   ` Kuninori Morimoto
  2011-11-10 11:30     ` Mark Brown
  2011-11-10  8:21   ` [PATCH 4/5] ASoC: ak4642: add Line out support Kuninori Morimoto
                     ` (2 subsequent siblings)
  5 siblings, 1 reply; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-10  8:21 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood; +Cc: Linux-ALSA, Kuninori Morimoto

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 sound/soc/codecs/ak4642.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index 8aa9dd1..473202a 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -150,6 +150,8 @@ static const struct snd_kcontrol_new ak4642_snd_controls[] = {
 
 	SOC_DOUBLE_R_TLV("Digital Playback Volume", L_DVC, R_DVC,
 			 0, 0xFF, 1, out_tlv),
+
+	SOC_SINGLE("Headphone Mute Switch", PW_MGMT2, 6, 1, 0),
 };
 
 static const struct snd_kcontrol_new ak4642_hpout_mixer_controls[] = {
@@ -225,7 +227,6 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream,
 		 */
 		snd_soc_write(codec, L_IVC, 0x91); /* volume */
 		snd_soc_write(codec, R_IVC, 0x91); /* volume */
-		snd_soc_update_bits(codec, PW_MGMT2, HPMTN,	HPMTN);
 	} else {
 		/*
 		 * start stereo input
@@ -257,8 +258,6 @@ static void ak4642_dai_shutdown(struct snd_pcm_substream *substream,
 	struct snd_soc_codec *codec = dai->codec;
 
 	if (is_play) {
-		/* stop headphone output */
-		snd_soc_update_bits(codec, PW_MGMT2, HPMTN,	0);
 	} else {
 		/* stop stereo input */
 		snd_soc_update_bits(codec, PW_MGMT1, PMADL, 0);
-- 
1.7.5.4

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

* [PATCH 4/5] ASoC: ak4642: add Line out support
  2011-11-10  8:20 ` ASoC: ak4642/fsi: add ak4648 support kuninori.morimoto.gx
                     ` (2 preceding siblings ...)
  2011-11-10  8:21   ` [PATCH 3/5] ASoC: ak4642: add headphone mute switch control Kuninori Morimoto
@ 2011-11-10  8:21   ` Kuninori Morimoto
  2011-11-10  8:21   ` [PATCH 5/5] ASoC: ak4642: add ak4648 support Kuninori Morimoto
  2011-11-10 11:32   ` ASoC: ak4642/fsi: " Mark Brown
  5 siblings, 0 replies; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-10  8:21 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood; +Cc: Linux-ALSA, Kuninori Morimoto

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 sound/soc/codecs/ak4642.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index 473202a..8b32f41 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -158,11 +158,16 @@ static const struct snd_kcontrol_new ak4642_hpout_mixer_controls[] = {
 	SOC_DAPM_SINGLE("DACH", MD_CTL4, 0, 1, 0),
 };
 
+static const struct snd_kcontrol_new ak4642_lout_mixer_controls[] = {
+	SOC_DAPM_SINGLE("DACL", SG_SL1, 4, 1, 0),
+};
+
 static const struct snd_soc_dapm_widget ak4642_dapm_widgets[] = {
 
 	/* Outputs */
 	SND_SOC_DAPM_OUTPUT("HPOUTL"),
 	SND_SOC_DAPM_OUTPUT("HPOUTR"),
+	SND_SOC_DAPM_OUTPUT("LINEOUT"),
 
 	SND_SOC_DAPM_MIXER("HPOUTL Mixer", PW_MGMT2, 5, 0,
 			   &ak4642_hpout_mixer_controls[0],
@@ -172,6 +177,10 @@ static const struct snd_soc_dapm_widget ak4642_dapm_widgets[] = {
 			   &ak4642_hpout_mixer_controls[0],
 			   ARRAY_SIZE(ak4642_hpout_mixer_controls)),
 
+	SND_SOC_DAPM_MIXER("LINEOUT Mixer", PW_MGMT1, 3, 0,
+			   &ak4642_lout_mixer_controls[0],
+			   ARRAY_SIZE(ak4642_lout_mixer_controls)),
+
 	/* DAC */
 	SND_SOC_DAPM_DAC("DAC", "HiFi Playback", PW_MGMT1, 2, 0),
 };
@@ -181,9 +190,12 @@ static const struct snd_soc_dapm_route ak4642_intercon[] = {
 	/* Outputs */
 	{"HPOUTL", "NULL", "HPOUTL Mixer"},
 	{"HPOUTR", "NULL", "HPOUTR Mixer"},
+	{"LINEOUT", "NULL", "LINEOUT Mixer"},
 
 	{"HPOUTL Mixer", "DACH", "DAC"},
 	{"HPOUTR Mixer", "DACH", "DAC"},
+	{"LINEOUT Mixer", "DACL", "DAC"},
+
 };
 
 /* codec private data */
-- 
1.7.5.4

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

* [PATCH 5/5] ASoC: ak4642: add ak4648 support
  2011-11-10  8:20 ` ASoC: ak4642/fsi: add ak4648 support kuninori.morimoto.gx
                     ` (3 preceding siblings ...)
  2011-11-10  8:21   ` [PATCH 4/5] ASoC: ak4642: add Line out support Kuninori Morimoto
@ 2011-11-10  8:21   ` Kuninori Morimoto
  2011-11-10 11:32   ` ASoC: ak4642/fsi: " Mark Brown
  5 siblings, 0 replies; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-10  8:21 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood; +Cc: Linux-ALSA, Kuninori Morimoto

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 sound/soc/codecs/ak4642.c |   44 ++++++++++++++++++++++++++++++++++++--------
 1 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index 8b32f41..b7b650a 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -20,6 +20,7 @@
  *
  * AK4642 is tested.
  * AK4643 is tested.
+ * AK4648 is tested.
  */
 
 #include <linux/delay.h>
@@ -71,8 +72,6 @@
 #define HP_MS		0x23
 #define SPK_MS		0x24
 
-#define AK4642_CACHEREGNUM 	0x25
-
 /* PW_MGMT1*/
 #define PMVCM		(1 << 6) /* VCOM Power Management */
 #define PMMIN		(1 << 5) /* MIN Input Power Management */
@@ -207,7 +206,7 @@ struct ak4642_priv {
 /*
  * ak4642 register cache
  */
-static const u8 ak4642_reg[AK4642_CACHEREGNUM] = {
+static const u8 ak4642_reg[] = {
 	0x00, 0x00, 0x01, 0x00,
 	0x02, 0x00, 0x00, 0x00,
 	0xe1, 0xe1, 0x18, 0x00,
@@ -220,6 +219,19 @@ static const u8 ak4642_reg[AK4642_CACHEREGNUM] = {
 	0x00,
 };
 
+static const u8 ak4648_reg[] = {
+	0x00, 0x00, 0x01, 0x00,
+	0x02, 0x00, 0x00, 0x00,
+	0xe1, 0xe1, 0x18, 0x00,
+	0xe1, 0x18, 0x11, 0xb8,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x88, 0x88, 0x08,
+};
+
 static int ak4642_dai_startup(struct snd_pcm_substream *substream,
 			      struct snd_soc_dai *dai)
 {
@@ -487,9 +499,23 @@ static struct snd_soc_codec_driver soc_codec_dev_ak4642 = {
 	.remove			= ak4642_remove,
 	.resume			= ak4642_resume,
 	.set_bias_level		= ak4642_set_bias_level,
-	.reg_cache_size		= ARRAY_SIZE(ak4642_reg),
+	.reg_cache_default	= ak4642_reg,			/* ak4642 reg */
+	.reg_cache_size		= ARRAY_SIZE(ak4642_reg),	/* ak4642 reg */
+	.reg_word_size		= sizeof(u8),
+	.dapm_widgets		= ak4642_dapm_widgets,
+	.num_dapm_widgets	= ARRAY_SIZE(ak4642_dapm_widgets),
+	.dapm_routes		= ak4642_intercon,
+	.num_dapm_routes	= ARRAY_SIZE(ak4642_intercon),
+};
+
+static struct snd_soc_codec_driver soc_codec_dev_ak4648 = {
+	.probe			= ak4642_probe,
+	.remove			= ak4642_remove,
+	.resume			= ak4642_resume,
+	.set_bias_level		= ak4642_set_bias_level,
+	.reg_cache_default	= ak4648_reg,			/* ak4648 reg */
+	.reg_cache_size		= ARRAY_SIZE(ak4648_reg),	/* ak4648 reg */
 	.reg_word_size		= sizeof(u8),
-	.reg_cache_default	= ak4642_reg,
 	.dapm_widgets		= ak4642_dapm_widgets,
 	.num_dapm_widgets	= ARRAY_SIZE(ak4642_dapm_widgets),
 	.dapm_routes		= ak4642_intercon,
@@ -511,7 +537,8 @@ static __devinit int ak4642_i2c_probe(struct i2c_client *i2c,
 	ak4642->control_type = SND_SOC_I2C;
 
 	ret =  snd_soc_register_codec(&i2c->dev,
-			&soc_codec_dev_ak4642, &ak4642_dai, 1);
+				(struct snd_soc_codec_driver *)id->driver_data,
+				&ak4642_dai, 1);
 	if (ret < 0)
 		kfree(ak4642);
 	return ret;
@@ -525,8 +552,9 @@ static __devexit int ak4642_i2c_remove(struct i2c_client *client)
 }
 
 static const struct i2c_device_id ak4642_i2c_id[] = {
-	{ "ak4642", 0 },
-	{ "ak4643", 0 },
+	{ "ak4642", (kernel_ulong_t)&soc_codec_dev_ak4642 },
+	{ "ak4643", (kernel_ulong_t)&soc_codec_dev_ak4642 },
+	{ "ak4648", (kernel_ulong_t)&soc_codec_dev_ak4648 },
 	{ }
 };
 MODULE_DEVICE_TABLE(i2c, ak4642_i2c_id);
-- 
1.7.5.4

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

* Re: [PATCH 1/5] ASoC: ak4642: add ak4642_set_bias_level()
  2011-11-10  8:21   ` [PATCH 1/5] ASoC: ak4642: add ak4642_set_bias_level() Kuninori Morimoto
@ 2011-11-10 11:27     ` Mark Brown
  0 siblings, 0 replies; 30+ messages in thread
From: Mark Brown @ 2011-11-10 11:27 UTC (permalink / raw)
  To: Kuninori Morimoto; +Cc: Linux-ALSA, Kuninori Morimoto, Liam Girdwood

On Thu, Nov 10, 2011 at 12:21:13AM -0800, Kuninori Morimoto wrote:

> +	switch (level) {
> +	case SND_SOC_BIAS_OFF:
> +		snd_soc_write(codec, PW_MGMT1, 0x00);
> +		break;
> +	default:
> +		snd_soc_update_bits(codec, PW_MGMT1, PMVCM, PMVCM);
> +	}

Should have a break; here for coding style.

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

* Re: [PATCH 3/5] ASoC: ak4642: add headphone mute switch control
  2011-11-10  8:21   ` [PATCH 3/5] ASoC: ak4642: add headphone mute switch control Kuninori Morimoto
@ 2011-11-10 11:30     ` Mark Brown
  0 siblings, 0 replies; 30+ messages in thread
From: Mark Brown @ 2011-11-10 11:30 UTC (permalink / raw)
  To: Kuninori Morimoto; +Cc: Linux-ALSA, Kuninori Morimoto, Liam Girdwood

On Thu, Nov 10, 2011 at 12:21:39AM -0800, Kuninori Morimoto wrote:

> +
> +	SOC_SINGLE("Headphone Mute Switch", PW_MGMT2, 6, 1, 0),

Just plain "Headphone Switch".

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

* Re: ASoC: ak4642/fsi: add ak4648 support
  2011-11-10  8:20 ` ASoC: ak4642/fsi: add ak4648 support kuninori.morimoto.gx
                     ` (4 preceding siblings ...)
  2011-11-10  8:21   ` [PATCH 5/5] ASoC: ak4642: add ak4648 support Kuninori Morimoto
@ 2011-11-10 11:32   ` Mark Brown
  2011-11-11  0:20     ` ASoC: ak4642/fsi: add ak4648 support v2 kuninori.morimoto.gx
  5 siblings, 1 reply; 30+ messages in thread
From: Mark Brown @ 2011-11-10 11:32 UTC (permalink / raw)
  To: kuninori.morimoto.gx; +Cc: Linux-ALSA, Kuninori Morimoto, Liam Girdwood

On Thu, Nov 10, 2011 at 12:20:31AM -0800, kuninori.morimoto.gx@renesas.com wrote:

> This time I tried to use DAPM for "Output".
> I will try "Input" case in the future

This looks mostly good, a couple of minor coments but nothing major.

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

* Re: ASoC: ak4642/fsi: add ak4648 support v2
  2011-11-10 11:32   ` ASoC: ak4642/fsi: " Mark Brown
@ 2011-11-11  0:20     ` kuninori.morimoto.gx
  2011-11-11  0:21       ` [PATCH 1/5 v2] ASoC: ak4642: add ak4642_set_bias_level() Kuninori Morimoto
                         ` (5 more replies)
  0 siblings, 6 replies; 30+ messages in thread
From: kuninori.morimoto.gx @ 2011-11-11  0:20 UTC (permalink / raw)
  To: Mark Brown; +Cc: Linux-ALSA, Kuninori Morimoto, Liam Girdwood


Hi Mark, Liam

> > This time I tried to use DAPM for "Output".
> > I will try "Input" case in the future
> 
> This looks mostly good, a couple of minor coments but nothing major.

Thank you.
These are v2 patch set

Kuninori Morimoto (5):
      ASoC: ak4642: add ak4642_set_bias_level()
      ASoC: ak4642: add DAPM support for HeadPhone Output
      ASoC: ak4642: add headphone mute switch control
      ASoC: ak4642: add Line out support
      ASoC: ak4642: add ak4648 support

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

* [PATCH 1/5 v2] ASoC: ak4642: add ak4642_set_bias_level()
  2011-11-11  0:20     ` ASoC: ak4642/fsi: add ak4648 support v2 kuninori.morimoto.gx
@ 2011-11-11  0:21       ` Kuninori Morimoto
  2011-11-11  0:21       ` [PATCH 2/5 v2] ASoC: ak4642: add DAPM support for HeadPhone Output Kuninori Morimoto
                         ` (4 subsequent siblings)
  5 siblings, 0 replies; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-11  0:21 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood; +Cc: Linux-ALSA, Kuninori Morimoto

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
v1 -> v2

- add break; for switch default case

 sound/soc/codecs/ak4642.c |   33 +++++++++++++++++++++++++++++----
 1 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index b854eb0..004a093 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -196,8 +196,8 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream,
 		snd_soc_update_bits(codec, MD_CTL3, BST1, BST1);
 		snd_soc_write(codec, L_IVC, 0x91); /* volume */
 		snd_soc_write(codec, R_IVC, 0x91); /* volume */
-		snd_soc_update_bits(codec, PW_MGMT1, PMVCM | PMMIN | PMDAC,
-						     PMVCM | PMMIN | PMDAC);
+		snd_soc_update_bits(codec, PW_MGMT1, PMMIN | PMDAC,
+						     PMMIN | PMDAC);
 		snd_soc_update_bits(codec, PW_MGMT2, PMHP_MASK,	PMHP);
 		snd_soc_update_bits(codec, PW_MGMT2, HPMTN,	HPMTN);
 	} else {
@@ -217,8 +217,7 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream,
 		snd_soc_write(codec, SG_SL1, PMMP | MGAIN0);
 		snd_soc_write(codec, TIMER, ZTM(0x3) | WTM(0x3));
 		snd_soc_write(codec, ALC_CTL1, ALC | LMTH0);
-		snd_soc_update_bits(codec, PW_MGMT1, PMVCM | PMADL,
-						     PMVCM | PMADL);
+		snd_soc_update_bits(codec, PW_MGMT1, PMADL, PMADL);
 		snd_soc_update_bits(codec, PW_MGMT3, PMADR, PMADR);
 	}
 
@@ -376,6 +375,22 @@ static int ak4642_dai_hw_params(struct snd_pcm_substream *substream,
 	return 0;
 }
 
+static int ak4642_set_bias_level(struct snd_soc_codec *codec,
+				 enum snd_soc_bias_level level)
+{
+	switch (level) {
+	case SND_SOC_BIAS_OFF:
+		snd_soc_write(codec, PW_MGMT1, 0x00);
+		break;
+	default:
+		snd_soc_update_bits(codec, PW_MGMT1, PMVCM, PMVCM);
+		break;
+	}
+	codec->dapm.bias_level = level;
+
+	return 0;
+}
+
 static struct snd_soc_dai_ops ak4642_dai_ops = {
 	.startup	= ak4642_dai_startup,
 	.shutdown	= ak4642_dai_shutdown,
@@ -425,12 +440,22 @@ static int ak4642_probe(struct snd_soc_codec *codec)
 	snd_soc_add_controls(codec, ak4642_snd_controls,
 			     ARRAY_SIZE(ak4642_snd_controls));
 
+	ak4642_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+
+	return 0;
+}
+
+static int ak4642_remove(struct snd_soc_codec *codec)
+{
+	ak4642_set_bias_level(codec, SND_SOC_BIAS_OFF);
 	return 0;
 }
 
 static struct snd_soc_codec_driver soc_codec_dev_ak4642 = {
 	.probe			= ak4642_probe,
+	.remove			= ak4642_remove,
 	.resume			= ak4642_resume,
+	.set_bias_level		= ak4642_set_bias_level,
 	.reg_cache_size		= ARRAY_SIZE(ak4642_reg),
 	.reg_word_size		= sizeof(u8),
 	.reg_cache_default	= ak4642_reg,
-- 
1.7.5.4

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

* [PATCH 2/5 v2] ASoC: ak4642: add DAPM support for HeadPhone Output
  2011-11-11  0:20     ` ASoC: ak4642/fsi: add ak4648 support v2 kuninori.morimoto.gx
  2011-11-11  0:21       ` [PATCH 1/5 v2] ASoC: ak4642: add ak4642_set_bias_level() Kuninori Morimoto
@ 2011-11-11  0:21       ` Kuninori Morimoto
  2011-11-11  0:21       ` [PATCH 3/5 v2] ASoC: ak4642: add headphone mute switch control Kuninori Morimoto
                         ` (3 subsequent siblings)
  5 siblings, 0 replies; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-11  0:21 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood; +Cc: Linux-ALSA, Kuninori Morimoto

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
v1 -> v2

- same as v1

 sound/soc/codecs/ak4642.c |   44 +++++++++++++++++++++++++++++++++++---------
 1 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index 004a093..da9caf0 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -152,6 +152,37 @@ static const struct snd_kcontrol_new ak4642_snd_controls[] = {
 			 0, 0xFF, 1, out_tlv),
 };
 
+static const struct snd_kcontrol_new ak4642_hpout_mixer_controls[] = {
+	SOC_DAPM_SINGLE("DACH", MD_CTL4, 0, 1, 0),
+};
+
+static const struct snd_soc_dapm_widget ak4642_dapm_widgets[] = {
+
+	/* Outputs */
+	SND_SOC_DAPM_OUTPUT("HPOUTL"),
+	SND_SOC_DAPM_OUTPUT("HPOUTR"),
+
+	SND_SOC_DAPM_MIXER("HPOUTL Mixer", PW_MGMT2, 5, 0,
+			   &ak4642_hpout_mixer_controls[0],
+			   ARRAY_SIZE(ak4642_hpout_mixer_controls)),
+
+	SND_SOC_DAPM_MIXER("HPOUTR Mixer", PW_MGMT2, 4, 0,
+			   &ak4642_hpout_mixer_controls[0],
+			   ARRAY_SIZE(ak4642_hpout_mixer_controls)),
+
+	/* DAC */
+	SND_SOC_DAPM_DAC("DAC", "HiFi Playback", PW_MGMT1, 2, 0),
+};
+
+static const struct snd_soc_dapm_route ak4642_intercon[] = {
+
+	/* Outputs */
+	{"HPOUTL", NULL, "HPOUTL Mixer"},
+	{"HPOUTR", NULL, "HPOUTR Mixer"},
+
+	{"HPOUTL Mixer", "DACH", "DAC"},
+	{"HPOUTR Mixer", "DACH", "DAC"},
+};
 
 /* codec private data */
 struct ak4642_priv {
@@ -192,13 +223,8 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream,
 		 * This operation came from example code of
 		 * "ASAHI KASEI AK4642" (japanese) manual p97.
 		 */
-		snd_soc_update_bits(codec, MD_CTL4, DACH, DACH);
-		snd_soc_update_bits(codec, MD_CTL3, BST1, BST1);
 		snd_soc_write(codec, L_IVC, 0x91); /* volume */
 		snd_soc_write(codec, R_IVC, 0x91); /* volume */
-		snd_soc_update_bits(codec, PW_MGMT1, PMMIN | PMDAC,
-						     PMMIN | PMDAC);
-		snd_soc_update_bits(codec, PW_MGMT2, PMHP_MASK,	PMHP);
 		snd_soc_update_bits(codec, PW_MGMT2, HPMTN,	HPMTN);
 	} else {
 		/*
@@ -233,10 +259,6 @@ static void ak4642_dai_shutdown(struct snd_pcm_substream *substream,
 	if (is_play) {
 		/* stop headphone output */
 		snd_soc_update_bits(codec, PW_MGMT2, HPMTN,	0);
-		snd_soc_update_bits(codec, PW_MGMT2, PMHP_MASK,	0);
-		snd_soc_update_bits(codec, PW_MGMT1, PMMIN | PMDAC, 0);
-		snd_soc_update_bits(codec, MD_CTL3, BST1, 0);
-		snd_soc_update_bits(codec, MD_CTL4, DACH, 0);
 	} else {
 		/* stop stereo input */
 		snd_soc_update_bits(codec, PW_MGMT1, PMADL, 0);
@@ -459,6 +481,10 @@ static struct snd_soc_codec_driver soc_codec_dev_ak4642 = {
 	.reg_cache_size		= ARRAY_SIZE(ak4642_reg),
 	.reg_word_size		= sizeof(u8),
 	.reg_cache_default	= ak4642_reg,
+	.dapm_widgets		= ak4642_dapm_widgets,
+	.num_dapm_widgets	= ARRAY_SIZE(ak4642_dapm_widgets),
+	.dapm_routes		= ak4642_intercon,
+	.num_dapm_routes	= ARRAY_SIZE(ak4642_intercon),
 };
 
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-- 
1.7.5.4

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

* [PATCH 3/5 v2] ASoC: ak4642: add headphone mute switch control
  2011-11-11  0:20     ` ASoC: ak4642/fsi: add ak4648 support v2 kuninori.morimoto.gx
  2011-11-11  0:21       ` [PATCH 1/5 v2] ASoC: ak4642: add ak4642_set_bias_level() Kuninori Morimoto
  2011-11-11  0:21       ` [PATCH 2/5 v2] ASoC: ak4642: add DAPM support for HeadPhone Output Kuninori Morimoto
@ 2011-11-11  0:21       ` Kuninori Morimoto
  2011-11-11  0:21       ` [PATCH 4/5 v2] ASoC: ak4642: add Line out support Kuninori Morimoto
                         ` (2 subsequent siblings)
  5 siblings, 0 replies; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-11  0:21 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood; +Cc: Linux-ALSA, Kuninori Morimoto

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
v1 -> v2

- "Headphone Mute Switch" -> "Headphone Switch"

 sound/soc/codecs/ak4642.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index da9caf0..b2460c2 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -150,6 +150,8 @@ static const struct snd_kcontrol_new ak4642_snd_controls[] = {
 
 	SOC_DOUBLE_R_TLV("Digital Playback Volume", L_DVC, R_DVC,
 			 0, 0xFF, 1, out_tlv),
+
+	SOC_SINGLE("Headphone Switch", PW_MGMT2, 6, 1, 0),
 };
 
 static const struct snd_kcontrol_new ak4642_hpout_mixer_controls[] = {
@@ -225,7 +227,6 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream,
 		 */
 		snd_soc_write(codec, L_IVC, 0x91); /* volume */
 		snd_soc_write(codec, R_IVC, 0x91); /* volume */
-		snd_soc_update_bits(codec, PW_MGMT2, HPMTN,	HPMTN);
 	} else {
 		/*
 		 * start stereo input
@@ -257,8 +258,6 @@ static void ak4642_dai_shutdown(struct snd_pcm_substream *substream,
 	struct snd_soc_codec *codec = dai->codec;
 
 	if (is_play) {
-		/* stop headphone output */
-		snd_soc_update_bits(codec, PW_MGMT2, HPMTN,	0);
 	} else {
 		/* stop stereo input */
 		snd_soc_update_bits(codec, PW_MGMT1, PMADL, 0);
-- 
1.7.5.4

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

* [PATCH 4/5 v2] ASoC: ak4642: add Line out support
  2011-11-11  0:20     ` ASoC: ak4642/fsi: add ak4648 support v2 kuninori.morimoto.gx
                         ` (2 preceding siblings ...)
  2011-11-11  0:21       ` [PATCH 3/5 v2] ASoC: ak4642: add headphone mute switch control Kuninori Morimoto
@ 2011-11-11  0:21       ` Kuninori Morimoto
  2011-11-11  0:22       ` [PATCH 5/5 v2] ASoC: ak4642: add ak4648 support Kuninori Morimoto
  2011-11-11  8:43       ` ASoC: ak4642/fsi: add ak4648 support v2 Mark Brown
  5 siblings, 0 replies; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-11  0:21 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood; +Cc: Linux-ALSA, Kuninori Morimoto

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
v1 -> v2

- same as v1

 sound/soc/codecs/ak4642.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index b2460c2..daec5f75d 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -158,11 +158,16 @@ static const struct snd_kcontrol_new ak4642_hpout_mixer_controls[] = {
 	SOC_DAPM_SINGLE("DACH", MD_CTL4, 0, 1, 0),
 };
 
+static const struct snd_kcontrol_new ak4642_lout_mixer_controls[] = {
+	SOC_DAPM_SINGLE("DACL", SG_SL1, 4, 1, 0),
+};
+
 static const struct snd_soc_dapm_widget ak4642_dapm_widgets[] = {
 
 	/* Outputs */
 	SND_SOC_DAPM_OUTPUT("HPOUTL"),
 	SND_SOC_DAPM_OUTPUT("HPOUTR"),
+	SND_SOC_DAPM_OUTPUT("LINEOUT"),
 
 	SND_SOC_DAPM_MIXER("HPOUTL Mixer", PW_MGMT2, 5, 0,
 			   &ak4642_hpout_mixer_controls[0],
@@ -172,6 +177,10 @@ static const struct snd_soc_dapm_widget ak4642_dapm_widgets[] = {
 			   &ak4642_hpout_mixer_controls[0],
 			   ARRAY_SIZE(ak4642_hpout_mixer_controls)),
 
+	SND_SOC_DAPM_MIXER("LINEOUT Mixer", PW_MGMT1, 3, 0,
+			   &ak4642_lout_mixer_controls[0],
+			   ARRAY_SIZE(ak4642_lout_mixer_controls)),
+
 	/* DAC */
 	SND_SOC_DAPM_DAC("DAC", "HiFi Playback", PW_MGMT1, 2, 0),
 };
@@ -181,9 +190,11 @@ static const struct snd_soc_dapm_route ak4642_intercon[] = {
 	/* Outputs */
 	{"HPOUTL", NULL, "HPOUTL Mixer"},
 	{"HPOUTR", NULL, "HPOUTR Mixer"},
+	{"LINEOUT", NULL, "LINEOUT Mixer"},
 
 	{"HPOUTL Mixer", "DACH", "DAC"},
 	{"HPOUTR Mixer", "DACH", "DAC"},
+	{"LINEOUT Mixer", "DACL", "DAC"},
 };
 
 /* codec private data */
-- 
1.7.5.4

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

* [PATCH 5/5 v2] ASoC: ak4642: add ak4648 support
  2011-11-11  0:20     ` ASoC: ak4642/fsi: add ak4648 support v2 kuninori.morimoto.gx
                         ` (3 preceding siblings ...)
  2011-11-11  0:21       ` [PATCH 4/5 v2] ASoC: ak4642: add Line out support Kuninori Morimoto
@ 2011-11-11  0:22       ` Kuninori Morimoto
  2011-11-11  8:43       ` ASoC: ak4642/fsi: add ak4648 support v2 Mark Brown
  5 siblings, 0 replies; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-11  0:22 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood; +Cc: Linux-ALSA, Kuninori Morimoto

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
v1 -> v2

- same as v1

 sound/soc/codecs/ak4642.c |   44 ++++++++++++++++++++++++++++++++++++--------
 1 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index daec5f75d..859e015 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -20,6 +20,7 @@
  *
  * AK4642 is tested.
  * AK4643 is tested.
+ * AK4648 is tested.
  */
 
 #include <linux/delay.h>
@@ -71,8 +72,6 @@
 #define HP_MS		0x23
 #define SPK_MS		0x24
 
-#define AK4642_CACHEREGNUM 	0x25
-
 /* PW_MGMT1*/
 #define PMVCM		(1 << 6) /* VCOM Power Management */
 #define PMMIN		(1 << 5) /* MIN Input Power Management */
@@ -206,7 +205,7 @@ struct ak4642_priv {
 /*
  * ak4642 register cache
  */
-static const u8 ak4642_reg[AK4642_CACHEREGNUM] = {
+static const u8 ak4642_reg[] = {
 	0x00, 0x00, 0x01, 0x00,
 	0x02, 0x00, 0x00, 0x00,
 	0xe1, 0xe1, 0x18, 0x00,
@@ -219,6 +218,19 @@ static const u8 ak4642_reg[AK4642_CACHEREGNUM] = {
 	0x00,
 };
 
+static const u8 ak4648_reg[] = {
+	0x00, 0x00, 0x01, 0x00,
+	0x02, 0x00, 0x00, 0x00,
+	0xe1, 0xe1, 0x18, 0x00,
+	0xe1, 0x18, 0x11, 0xb8,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x88, 0x88, 0x08,
+};
+
 static int ak4642_dai_startup(struct snd_pcm_substream *substream,
 			      struct snd_soc_dai *dai)
 {
@@ -488,9 +500,23 @@ static struct snd_soc_codec_driver soc_codec_dev_ak4642 = {
 	.remove			= ak4642_remove,
 	.resume			= ak4642_resume,
 	.set_bias_level		= ak4642_set_bias_level,
-	.reg_cache_size		= ARRAY_SIZE(ak4642_reg),
+	.reg_cache_default	= ak4642_reg,			/* ak4642 reg */
+	.reg_cache_size		= ARRAY_SIZE(ak4642_reg),	/* ak4642 reg */
+	.reg_word_size		= sizeof(u8),
+	.dapm_widgets		= ak4642_dapm_widgets,
+	.num_dapm_widgets	= ARRAY_SIZE(ak4642_dapm_widgets),
+	.dapm_routes		= ak4642_intercon,
+	.num_dapm_routes	= ARRAY_SIZE(ak4642_intercon),
+};
+
+static struct snd_soc_codec_driver soc_codec_dev_ak4648 = {
+	.probe			= ak4642_probe,
+	.remove			= ak4642_remove,
+	.resume			= ak4642_resume,
+	.set_bias_level		= ak4642_set_bias_level,
+	.reg_cache_default	= ak4648_reg,			/* ak4648 reg */
+	.reg_cache_size		= ARRAY_SIZE(ak4648_reg),	/* ak4648 reg */
 	.reg_word_size		= sizeof(u8),
-	.reg_cache_default	= ak4642_reg,
 	.dapm_widgets		= ak4642_dapm_widgets,
 	.num_dapm_widgets	= ARRAY_SIZE(ak4642_dapm_widgets),
 	.dapm_routes		= ak4642_intercon,
@@ -512,7 +538,8 @@ static __devinit int ak4642_i2c_probe(struct i2c_client *i2c,
 	ak4642->control_type = SND_SOC_I2C;
 
 	ret =  snd_soc_register_codec(&i2c->dev,
-			&soc_codec_dev_ak4642, &ak4642_dai, 1);
+				(struct snd_soc_codec_driver *)id->driver_data,
+				&ak4642_dai, 1);
 	if (ret < 0)
 		kfree(ak4642);
 	return ret;
@@ -526,8 +553,9 @@ static __devexit int ak4642_i2c_remove(struct i2c_client *client)
 }
 
 static const struct i2c_device_id ak4642_i2c_id[] = {
-	{ "ak4642", 0 },
-	{ "ak4643", 0 },
+	{ "ak4642", (kernel_ulong_t)&soc_codec_dev_ak4642 },
+	{ "ak4643", (kernel_ulong_t)&soc_codec_dev_ak4642 },
+	{ "ak4648", (kernel_ulong_t)&soc_codec_dev_ak4648 },
 	{ }
 };
 MODULE_DEVICE_TABLE(i2c, ak4642_i2c_id);
-- 
1.7.5.4

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

* Re: ASoC: ak4642/fsi: add ak4648 support v2
  2011-11-11  0:20     ` ASoC: ak4642/fsi: add ak4648 support v2 kuninori.morimoto.gx
                         ` (4 preceding siblings ...)
  2011-11-11  0:22       ` [PATCH 5/5 v2] ASoC: ak4642: add ak4648 support Kuninori Morimoto
@ 2011-11-11  8:43       ` Mark Brown
  5 siblings, 0 replies; 30+ messages in thread
From: Mark Brown @ 2011-11-11  8:43 UTC (permalink / raw)
  To: kuninori.morimoto.gx; +Cc: Linux-ALSA, Kuninori Morimoto, Liam Girdwood

On Thu, Nov 10, 2011 at 04:20:02PM -0800, kuninori.morimoto.gx@renesas.com wrote:
> These are v2 patch set

Applied all, thanks.

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

* [PATCH 1/5][resend] ASoC: fsi-ak4642: modify specification method of FSI / ak464x
  2011-11-07  6:04 ` [PATCH 1/5] ASoC: fsi-ak4642: modify specification method of FSI / ak464x Kuninori Morimoto
@ 2011-11-24  0:55   ` Kuninori Morimoto
  2011-11-24 10:45     ` Mark Brown
  0 siblings, 1 reply; 30+ messages in thread
From: Kuninori Morimoto @ 2011-11-24  0:55 UTC (permalink / raw)
  To: Mark Brown; +Cc: Linux-ALSA, Paul Mundt, Kuninori Morimoto, Liam Girdwood

Current fsi-ak4642 was using id_entry name in order to specify
FSI port and ak464x codec.
But it was no sense, no flexibility.
Platform can specify FSI/ak464x pair by this patch.

Acked-by: Paul Mundt <lethal@linux-sh.org>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
- Mark

This is resend patch.
It had been got ack from Paul.

 arch/arm/mach-shmobile/board-ap4evb.c   |   15 ++++-
 arch/arm/mach-shmobile/board-mackerel.c |   14 ++++-
 arch/sh/boards/mach-se/7724/setup.c     |   14 ++++-
 include/sound/sh_fsi.h                  |   12 +++
 sound/soc/sh/fsi-ak4642.c               |  114 +++----------------------------
 5 files changed, 63 insertions(+), 106 deletions(-)

diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c
index a3aa0f6..ade98c2 100644
--- a/arch/arm/mach-shmobile/board-ap4evb.c
+++ b/arch/arm/mach-shmobile/board-ap4evb.c
@@ -762,9 +762,22 @@ static struct platform_device fsi_device = {
 	},
 };
 
+static struct fsi_ak4642_info fsi2_ak4643_info = {
+	.name		= "AK4643",
+	.card		= "FSI2A-AK4643",
+	.cpu_dai	= "fsia-dai",
+	.codec		= "ak4642-codec.0-0013",
+	.platform	= "sh_fsi2",
+	.id		= FSI_PORT_A,
+};
+
 static struct platform_device fsi_ak4643_device = {
-	.name		= "sh_fsi2_a_ak4643",
+	.name	= "fsi-ak4642-audio",
+	.dev	= {
+		.platform_data	= &fsi_info,
+	},
 };
+
 static struct sh_mobile_meram_cfg hdmi_meram_cfg = {
 	.icb[0] = {
 		.marker_icb     = 30,
diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c
index 9c5e598..a2908d4 100644
--- a/arch/arm/mach-shmobile/board-mackerel.c
+++ b/arch/arm/mach-shmobile/board-mackerel.c
@@ -990,8 +990,20 @@ static struct platform_device fsi_device = {
 	},
 };
 
+static struct fsi_ak4642_info fsi2_ak4643_info = {
+	.name		= "AK4643",
+	.card		= "FSI2A-AK4643",
+	.cpu_dai	= "fsia-dai",
+	.codec		= "ak4642-codec.0-0013",
+	.platform	= "sh_fsi2",
+	.id		= FSI_PORT_A,
+};
+
 static struct platform_device fsi_ak4643_device = {
-	.name		= "sh_fsi2_a_ak4643",
+	.name	= "fsi-ak4642-audio",
+	.dev	= {
+		.platform_data	= &fsi2_ak4643_info,
+	},
 };
 
 /*
diff --git a/arch/sh/boards/mach-se/7724/setup.c b/arch/sh/boards/mach-se/7724/setup.c
index b747c0a..b49723b 100644
--- a/arch/sh/boards/mach-se/7724/setup.c
+++ b/arch/sh/boards/mach-se/7724/setup.c
@@ -315,8 +315,20 @@ static struct platform_device fsi_device = {
 	},
 };
 
+static struct fsi_ak4642_info fsi_ak4642_info = {
+	.name		= "AK4642",
+	.card		= "FSIA-AK4642",
+	.cpu_dai	= "fsia-dai",
+	.codec		= "ak4642-codec.0-0012",
+	.platform	= "sh_fsi.0",
+	.id		= FSI_PORT_A,
+};
+
 static struct platform_device fsi_ak4642_device = {
-	.name		= "sh_fsi_a_ak4642",
+	.name	= "fsi-ak4642-audio",
+	.dev	= {
+		.platform_data	= &fsi_ak4642_info,
+	},
 };
 
 /* KEYSC in SoC (Needs SW33-2 set to ON) */
diff --git a/include/sound/sh_fsi.h b/include/sound/sh_fsi.h
index 9a155f9..9b1aaca 100644
--- a/include/sound/sh_fsi.h
+++ b/include/sound/sh_fsi.h
@@ -78,4 +78,16 @@ struct sh_fsi_platform_info {
 	int (*set_rate)(struct device *dev, int is_porta, int rate, int enable);
 };
 
+/*
+ * for fsi-ak4642
+ */
+struct fsi_ak4642_info {
+	const char *name;
+	const char *card;
+	const char *cpu_dai;
+	const char *codec;
+	const char *platform;
+	int id;
+};
+
 #endif /* __SOUND_FSI_H */
diff --git a/sound/soc/sh/fsi-ak4642.c b/sound/soc/sh/fsi-ak4642.c
index dff64b9..11d2d7f 100644
--- a/sound/soc/sh/fsi-ak4642.c
+++ b/sound/soc/sh/fsi-ak4642.c
@@ -58,27 +58,23 @@ static struct platform_device *fsi_snd_device;
 static int fsi_ak4642_probe(struct platform_device *pdev)
 {
 	int ret = -ENOMEM;
-	const struct platform_device_id	*id_entry;
-	struct fsi_ak4642_data *pdata;
+	struct fsi_ak4642_info *pinfo = pdev->dev.platform_data;
 
-	id_entry = pdev->id_entry;
-	if (!id_entry) {
-		dev_err(&pdev->dev, "unknown fsi ak4642\n");
-		return -ENODEV;
+	if (!pinfo) {
+		dev_err(&pdev->dev, "no info for fsi ak4642\n");
+		goto out;
 	}
 
-	pdata = (struct fsi_ak4642_data *)id_entry->driver_data;
-
-	fsi_snd_device = platform_device_alloc("soc-audio", pdata->id);
+	fsi_snd_device = platform_device_alloc("soc-audio", pinfo->id);
 	if (!fsi_snd_device)
 		goto out;
 
-	fsi_dai_link.name		= pdata->name;
-	fsi_dai_link.stream_name	= pdata->name;
-	fsi_dai_link.cpu_dai_name	= pdata->cpu_dai;
-	fsi_dai_link.platform_name	= pdata->platform;
-	fsi_dai_link.codec_name		= pdata->codec;
-	fsi_soc_card.name		= pdata->card;
+	fsi_dai_link.name		= pinfo->name;
+	fsi_dai_link.stream_name	= pinfo->name;
+	fsi_dai_link.cpu_dai_name	= pinfo->cpu_dai;
+	fsi_dai_link.platform_name	= pinfo->platform;
+	fsi_dai_link.codec_name		= pinfo->codec;
+	fsi_soc_card.name		= pinfo->card;
 
 	platform_set_drvdata(fsi_snd_device, &fsi_soc_card);
 	ret = platform_device_add(fsi_snd_device);
@@ -96,100 +92,12 @@ static int fsi_ak4642_remove(struct platform_device *pdev)
 	return 0;
 }
 
-static struct fsi_ak4642_data fsi_a_ak4642 = {
-	.name		= "AK4642",
-	.card		= "FSIA-AK4642",
-	.cpu_dai	= "fsia-dai",
-	.codec		= "ak4642-codec.0-0012",
-	.platform	= "sh_fsi.0",
-	.id		= FSI_PORT_A,
-};
-
-static struct fsi_ak4642_data fsi_b_ak4642 = {
-	.name		= "AK4642",
-	.card		= "FSIB-AK4642",
-	.cpu_dai	= "fsib-dai",
-	.codec		= "ak4642-codec.0-0012",
-	.platform	= "sh_fsi.0",
-	.id		= FSI_PORT_B,
-};
-
-static struct fsi_ak4642_data fsi_a_ak4643 = {
-	.name		= "AK4643",
-	.card		= "FSIA-AK4643",
-	.cpu_dai	= "fsia-dai",
-	.codec		= "ak4642-codec.0-0013",
-	.platform	= "sh_fsi.0",
-	.id		= FSI_PORT_A,
-};
-
-static struct fsi_ak4642_data fsi_b_ak4643 = {
-	.name		= "AK4643",
-	.card		= "FSIB-AK4643",
-	.cpu_dai	= "fsib-dai",
-	.codec		= "ak4642-codec.0-0013",
-	.platform	= "sh_fsi.0",
-	.id		= FSI_PORT_B,
-};
-
-static struct fsi_ak4642_data fsi2_a_ak4642 = {
-	.name		= "AK4642",
-	.card		= "FSI2A-AK4642",
-	.cpu_dai	= "fsia-dai",
-	.codec		= "ak4642-codec.0-0012",
-	.platform	= "sh_fsi2",
-	.id		= FSI_PORT_A,
-};
-
-static struct fsi_ak4642_data fsi2_b_ak4642 = {
-	.name		= "AK4642",
-	.card		= "FSI2B-AK4642",
-	.cpu_dai	= "fsib-dai",
-	.codec		= "ak4642-codec.0-0012",
-	.platform	= "sh_fsi2",
-	.id		= FSI_PORT_B,
-};
-
-static struct fsi_ak4642_data fsi2_a_ak4643 = {
-	.name		= "AK4643",
-	.card		= "FSI2A-AK4643",
-	.cpu_dai	= "fsia-dai",
-	.codec		= "ak4642-codec.0-0013",
-	.platform	= "sh_fsi2",
-	.id		= FSI_PORT_A,
-};
-
-static struct fsi_ak4642_data fsi2_b_ak4643 = {
-	.name		= "AK4643",
-	.card		= "FSI2B-AK4643",
-	.cpu_dai	= "fsib-dai",
-	.codec		= "ak4642-codec.0-0013",
-	.platform	= "sh_fsi2",
-	.id		= FSI_PORT_B,
-};
-
-static struct platform_device_id fsi_id_table[] = {
-	/* FSI */
-	{ "sh_fsi_a_ak4642",	(kernel_ulong_t)&fsi_a_ak4642 },
-	{ "sh_fsi_b_ak4642",	(kernel_ulong_t)&fsi_b_ak4642 },
-	{ "sh_fsi_a_ak4643",	(kernel_ulong_t)&fsi_a_ak4643 },
-	{ "sh_fsi_b_ak4643",	(kernel_ulong_t)&fsi_b_ak4643 },
-
-	/* FSI 2 */
-	{ "sh_fsi2_a_ak4642",	(kernel_ulong_t)&fsi2_a_ak4642 },
-	{ "sh_fsi2_b_ak4642",	(kernel_ulong_t)&fsi2_b_ak4642 },
-	{ "sh_fsi2_a_ak4643",	(kernel_ulong_t)&fsi2_a_ak4643 },
-	{ "sh_fsi2_b_ak4643",	(kernel_ulong_t)&fsi2_b_ak4643 },
-	{},
-};
-
 static struct platform_driver fsi_ak4642 = {
 	.driver = {
 		.name	= "fsi-ak4642-audio",
 	},
 	.probe		= fsi_ak4642_probe,
 	.remove		= fsi_ak4642_remove,
-	.id_table	= fsi_id_table,
 };
 
 static int __init fsi_ak4642_init(void)
-- 
1.7.5.4

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

* Re: [PATCH 1/5][resend] ASoC: fsi-ak4642: modify specification method of FSI / ak464x
  2011-11-24  0:55   ` [PATCH 1/5][resend] " Kuninori Morimoto
@ 2011-11-24 10:45     ` Mark Brown
  0 siblings, 0 replies; 30+ messages in thread
From: Mark Brown @ 2011-11-24 10:45 UTC (permalink / raw)
  To: Kuninori Morimoto
  Cc: Linux-ALSA, Paul Mundt, Kuninori Morimoto, Liam Girdwood

On Wed, Nov 23, 2011 at 04:55:34PM -0800, Kuninori Morimoto wrote:
> Current fsi-ak4642 was using id_entry name in order to specify
> FSI port and ak464x codec.
> But it was no sense, no flexibility.
> Platform can specify FSI/ak464x pair by this patch.

Applied, thanks.

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

end of thread, other threads:[~2011-11-24 10:45 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-07  6:03 ASoC: ak4642/fsi: add ak4648 support kuninori.morimoto.gx
2011-11-07  6:04 ` [PATCH 1/5] ASoC: fsi-ak4642: modify specification method of FSI / ak464x Kuninori Morimoto
2011-11-24  0:55   ` [PATCH 1/5][resend] " Kuninori Morimoto
2011-11-24 10:45     ` Mark Brown
2011-11-07  6:04 ` [PATCH 2/5] ASoC: ak4642: ak4642 was tested Kuninori Morimoto
2011-11-08 10:57   ` Mark Brown
2011-11-07  6:05 ` [PATCH 3/5] ASoC: ak4642: headphone/stereo-line output control Kuninori Morimoto
2011-11-08 10:55   ` Mark Brown
2011-11-08 11:22     ` Kuninori Morimoto
2011-11-08 11:40       ` Mark Brown
2011-11-07  6:05 ` [PATCH 4/5] ASoC: ak4642: add ak4648 support Kuninori Morimoto
2011-11-08 11:01   ` Mark Brown
2011-11-07  6:05 ` [PATCH 5/5] ASoC: fsi: add valid data position control support Kuninori Morimoto
2011-11-08 11:02   ` Mark Brown
2011-11-10  8:20 ` ASoC: ak4642/fsi: add ak4648 support kuninori.morimoto.gx
2011-11-10  8:21   ` [PATCH 1/5] ASoC: ak4642: add ak4642_set_bias_level() Kuninori Morimoto
2011-11-10 11:27     ` Mark Brown
2011-11-10  8:21   ` [PATCH 2/5] ASoC: ak4642: add DAPM support for HeadPhone Output Kuninori Morimoto
2011-11-10  8:21   ` [PATCH 3/5] ASoC: ak4642: add headphone mute switch control Kuninori Morimoto
2011-11-10 11:30     ` Mark Brown
2011-11-10  8:21   ` [PATCH 4/5] ASoC: ak4642: add Line out support Kuninori Morimoto
2011-11-10  8:21   ` [PATCH 5/5] ASoC: ak4642: add ak4648 support Kuninori Morimoto
2011-11-10 11:32   ` ASoC: ak4642/fsi: " Mark Brown
2011-11-11  0:20     ` ASoC: ak4642/fsi: add ak4648 support v2 kuninori.morimoto.gx
2011-11-11  0:21       ` [PATCH 1/5 v2] ASoC: ak4642: add ak4642_set_bias_level() Kuninori Morimoto
2011-11-11  0:21       ` [PATCH 2/5 v2] ASoC: ak4642: add DAPM support for HeadPhone Output Kuninori Morimoto
2011-11-11  0:21       ` [PATCH 3/5 v2] ASoC: ak4642: add headphone mute switch control Kuninori Morimoto
2011-11-11  0:21       ` [PATCH 4/5 v2] ASoC: ak4642: add Line out support Kuninori Morimoto
2011-11-11  0:22       ` [PATCH 5/5 v2] ASoC: ak4642: add ak4648 support Kuninori Morimoto
2011-11-11  8:43       ` ASoC: ak4642/fsi: add ak4648 support v2 Mark Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox