* 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