aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@ingics.com>2015-06-30 12:56:36 -0400
committerMark Brown <broonie@kernel.org>2015-07-07 08:58:31 -0400
commitf8ea6cebcfa6499949392da71fc427567c9e5a0e (patch)
tree19cfadc8cceefb325d80dc59ed0b0ff6dd09852e
parentd770e558e21961ad6cfdf0ff7df0eb5d7d4f0754 (diff)
ASoC: ak4642: Fix up max_register setting
The max_register setting for ak4642, ak4643 and ak4648 are wrong, fix it. According to the datasheet: the maximum valid register for ak4642 is 0x1f the maximum valid register for ak4643 is 0x24 the maximum valid register for ak4648 is 0x27 The default settings for ak4642 and ak4643 are the same for 0x0 ~ 0x1f registers, so it's fine to use the same reg_default table with differnt num_reg_defaults setting. Signed-off-by: Axel Lin <axel.lin@ingics.com> Tested-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--sound/soc/codecs/ak4642.c33
1 files changed, 26 insertions, 7 deletions
diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index 7c0f6552c229..fe963e17ceb4 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -64,12 +64,15 @@
64#define FIL1_0 0x1c 64#define FIL1_0 0x1c
65#define FIL1_1 0x1d 65#define FIL1_1 0x1d
66#define FIL1_2 0x1e 66#define FIL1_2 0x1e
67#define FIL1_3 0x1f 67#define FIL1_3 0x1f /* The maximum valid register for ak4642 */
68#define PW_MGMT4 0x20 68#define PW_MGMT4 0x20
69#define MD_CTL5 0x21 69#define MD_CTL5 0x21
70#define LO_MS 0x22 70#define LO_MS 0x22
71#define HP_MS 0x23 71#define HP_MS 0x23
72#define SPK_MS 0x24 72#define SPK_MS 0x24 /* The maximum valid register for ak4643 */
73#define EQ_FBEQAB 0x25
74#define EQ_FBEQCD 0x26
75#define EQ_FBEQE 0x27 /* The maximum valid register for ak4648 */
73 76
74/* PW_MGMT1*/ 77/* PW_MGMT1*/
75#define PMVCM (1 << 6) /* VCOM Power Management */ 78#define PMVCM (1 << 6) /* VCOM Power Management */
@@ -241,7 +244,7 @@ static const struct snd_soc_dapm_route ak4642_intercon[] = {
241/* 244/*
242 * ak4642 register cache 245 * ak4642 register cache
243 */ 246 */
244static const struct reg_default ak4642_reg[] = { 247static const struct reg_default ak4643_reg[] = {
245 { 0, 0x00 }, { 1, 0x00 }, { 2, 0x01 }, { 3, 0x00 }, 248 { 0, 0x00 }, { 1, 0x00 }, { 2, 0x01 }, { 3, 0x00 },
246 { 4, 0x02 }, { 5, 0x00 }, { 6, 0x00 }, { 7, 0x00 }, 249 { 4, 0x02 }, { 5, 0x00 }, { 6, 0x00 }, { 7, 0x00 },
247 { 8, 0xe1 }, { 9, 0xe1 }, { 10, 0x18 }, { 11, 0x00 }, 250 { 8, 0xe1 }, { 9, 0xe1 }, { 10, 0x18 }, { 11, 0x00 },
@@ -254,6 +257,14 @@ static const struct reg_default ak4642_reg[] = {
254 { 36, 0x00 }, 257 { 36, 0x00 },
255}; 258};
256 259
260/* The default settings for 0x0 ~ 0x1f registers are the same for ak4642
261 and ak4643. So we reuse the ak4643 reg_default for ak4642.
262 The valid registers for ak4642 are 0x0 ~ 0x1f which is a subset of ak4643,
263 so define NUM_AK4642_REG_DEFAULTS for ak4642.
264*/
265#define ak4642_reg ak4643_reg
266#define NUM_AK4642_REG_DEFAULTS (FIL1_3 + 1)
267
257static const struct reg_default ak4648_reg[] = { 268static const struct reg_default ak4648_reg[] = {
258 { 0, 0x00 }, { 1, 0x00 }, { 2, 0x01 }, { 3, 0x00 }, 269 { 0, 0x00 }, { 1, 0x00 }, { 2, 0x01 }, { 3, 0x00 },
259 { 4, 0x02 }, { 5, 0x00 }, { 6, 0x00 }, { 7, 0x00 }, 270 { 4, 0x02 }, { 5, 0x00 }, { 6, 0x00 }, { 7, 0x00 },
@@ -535,15 +546,23 @@ static struct snd_soc_codec_driver soc_codec_dev_ak4642 = {
535static const struct regmap_config ak4642_regmap = { 546static const struct regmap_config ak4642_regmap = {
536 .reg_bits = 8, 547 .reg_bits = 8,
537 .val_bits = 8, 548 .val_bits = 8,
538 .max_register = ARRAY_SIZE(ak4642_reg) + 1, 549 .max_register = FIL1_3,
539 .reg_defaults = ak4642_reg, 550 .reg_defaults = ak4642_reg,
540 .num_reg_defaults = ARRAY_SIZE(ak4642_reg), 551 .num_reg_defaults = NUM_AK4642_REG_DEFAULTS,
552};
553
554static const struct regmap_config ak4643_regmap = {
555 .reg_bits = 8,
556 .val_bits = 8,
557 .max_register = SPK_MS,
558 .reg_defaults = ak4643_reg,
559 .num_reg_defaults = ARRAY_SIZE(ak4643_reg),
541}; 560};
542 561
543static const struct regmap_config ak4648_regmap = { 562static const struct regmap_config ak4648_regmap = {
544 .reg_bits = 8, 563 .reg_bits = 8,
545 .val_bits = 8, 564 .val_bits = 8,
546 .max_register = ARRAY_SIZE(ak4648_reg) + 1, 565 .max_register = EQ_FBEQE,
547 .reg_defaults = ak4648_reg, 566 .reg_defaults = ak4648_reg,
548 .num_reg_defaults = ARRAY_SIZE(ak4648_reg), 567 .num_reg_defaults = ARRAY_SIZE(ak4648_reg),
549}; 568};
@@ -553,7 +572,7 @@ static const struct ak4642_drvdata ak4642_drvdata = {
553}; 572};
554 573
555static const struct ak4642_drvdata ak4643_drvdata = { 574static const struct ak4642_drvdata ak4643_drvdata = {
556 .regmap_config = &ak4642_regmap, 575 .regmap_config = &ak4643_regmap,
557}; 576};
558 577
559static const struct ak4642_drvdata ak4648_drvdata = { 578static const struct ak4642_drvdata ak4648_drvdata = {