All of 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 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.