Merge branch 'upstream' of git://git.infradead.org/users/pcmoore/audit
[firefly-linux-kernel-4.4.55.git] / sound / soc / codecs / ak4642.c
index 7c0f6552c229b641ab8a81c83080411be9724ae9..4a90143d0e907b5034d0f4caa506c97000500f71 100644 (file)
 #define FIL1_0         0x1c
 #define FIL1_1         0x1d
 #define FIL1_2         0x1e
-#define FIL1_3         0x1f
+#define FIL1_3         0x1f    /* The maximum valid register for ak4642 */
 #define PW_MGMT4       0x20
 #define MD_CTL5                0x21
 #define LO_MS          0x22
 #define HP_MS          0x23
-#define SPK_MS         0x24
+#define SPK_MS         0x24    /* The maximum valid register for ak4643 */
+#define EQ_FBEQAB      0x25
+#define EQ_FBEQCD      0x26
+#define EQ_FBEQE       0x27    /* The maximum valid register for ak4648 */
 
 /* PW_MGMT1*/
 #define PMVCM          (1 << 6) /* VCOM Power Management */
@@ -241,7 +244,7 @@ static const struct snd_soc_dapm_route ak4642_intercon[] = {
 /*
  * ak4642 register cache
  */
-static const struct reg_default ak4642_reg[] = {
+static const struct reg_default ak4643_reg[] = {
        {  0, 0x00 }, {  1, 0x00 }, {  2, 0x01 }, {  3, 0x00 },
        {  4, 0x02 }, {  5, 0x00 }, {  6, 0x00 }, {  7, 0x00 },
        {  8, 0xe1 }, {  9, 0xe1 }, { 10, 0x18 }, { 11, 0x00 },
@@ -254,6 +257,14 @@ static const struct reg_default ak4642_reg[] = {
        { 36, 0x00 },
 };
 
+/* The default settings for 0x0 ~ 0x1f registers are the same for ak4642
+   and ak4643. So we reuse the ak4643 reg_default for ak4642.
+   The valid registers for ak4642 are 0x0 ~ 0x1f which is a subset of ak4643,
+   so define NUM_AK4642_REG_DEFAULTS for ak4642.
+*/
+#define ak4642_reg ak4643_reg
+#define NUM_AK4642_REG_DEFAULTS        (FIL1_3 + 1)
+
 static const struct reg_default ak4648_reg[] = {
        {  0, 0x00 }, {  1, 0x00 }, {  2, 0x01 }, {  3, 0x00 },
        {  4, 0x02 }, {  5, 0x00 }, {  6, 0x00 }, {  7, 0x00 },
@@ -535,15 +546,23 @@ static struct snd_soc_codec_driver soc_codec_dev_ak4642 = {
 static const struct regmap_config ak4642_regmap = {
        .reg_bits               = 8,
        .val_bits               = 8,
-       .max_register           = ARRAY_SIZE(ak4642_reg) + 1,
+       .max_register           = FIL1_3,
        .reg_defaults           = ak4642_reg,
-       .num_reg_defaults       = ARRAY_SIZE(ak4642_reg),
+       .num_reg_defaults       = NUM_AK4642_REG_DEFAULTS,
+};
+
+static const struct regmap_config ak4643_regmap = {
+       .reg_bits               = 8,
+       .val_bits               = 8,
+       .max_register           = SPK_MS,
+       .reg_defaults           = ak4643_reg,
+       .num_reg_defaults       = ARRAY_SIZE(ak4643_reg),
 };
 
 static const struct regmap_config ak4648_regmap = {
        .reg_bits               = 8,
        .val_bits               = 8,
-       .max_register           = ARRAY_SIZE(ak4648_reg) + 1,
+       .max_register           = EQ_FBEQE,
        .reg_defaults           = ak4648_reg,
        .num_reg_defaults       = ARRAY_SIZE(ak4648_reg),
 };
@@ -553,7 +572,7 @@ static const struct ak4642_drvdata ak4642_drvdata = {
 };
 
 static const struct ak4642_drvdata ak4643_drvdata = {
-       .regmap_config = &ak4642_regmap,
+       .regmap_config = &ak4643_regmap,
 };
 
 static const struct ak4642_drvdata ak4648_drvdata = {
@@ -626,7 +645,6 @@ MODULE_DEVICE_TABLE(i2c, ak4642_i2c_id);
 static struct i2c_driver ak4642_i2c_driver = {
        .driver = {
                .name = "ak4642-codec",
-               .owner = THIS_MODULE,
                .of_match_table = ak4642_of_match,
        },
        .probe          = ak4642_i2c_probe,