summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorRavindra Lokhande <rlokhande@nvidia.com>2012-09-17 14:52:03 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2013-09-14 12:34:51 -0700
commit09ac468c8def57a6c61ed50b60105508a9bb38c4 (patch)
treea86da10b189175db0b670adedd0cc7f2d67ae3d3 /sound
parent960b28552a9a6787ffa7abb124af9e673c3c2ff5 (diff)
asoc: max98088: enable DC offset filter for DAI1
(cherry picked from commit ac235cad736fdf5f73c4f61026d390e9a35483a0) Change-Id: Id1e6c6734446e7d2ee3df0d92167d03d24060913 Signed-off-by: Ravindra Lokhande <rlokhande@nvidia.com> Reviewed-on: http://git-master/r/134830 Reviewed-by: Simone Willett <swillett@nvidia.com> Tested-by: Simone Willett <swillett@nvidia.com> Rebase-Id: R3291eed58ee8448f82fcb098684ce832ca56527a
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/codecs/max98088.c56
-rw-r--r--sound/soc/codecs/max98088.h3
2 files changed, 36 insertions, 23 deletions
diff --git a/sound/soc/codecs/max98088.c b/sound/soc/codecs/max98088.c
index 60c6dcfd4f67..601dd95b06bc 100644
--- a/sound/soc/codecs/max98088.c
+++ b/sound/soc/codecs/max98088.c
@@ -1337,6 +1337,16 @@ static int max98088_dai1_hw_params(struct snd_pcm_substream *substream,
snd_soc_update_bits(codec, M98088_REG_18_DAI1_FILTERS,
M98088_DAI_DHF, M98088_DAI_DHF);
+ if (rate > 24000)
+ snd_soc_update_bits(codec, M98088_REG_18_DAI1_FILTERS,
+ M98088_DAI_MODE, M98088_DAI_MODE);
+ else
+ snd_soc_update_bits(codec, M98088_REG_18_DAI1_FILTERS,
+ M98088_DAI_MODE, 0);
+
+ snd_soc_update_bits(codec, M98088_REG_18_DAI1_FILTERS,
+ M98088_DAI_AVFLT_MASK, 5<<M98088_DAI_AVFLT_SHIFT);
+
snd_soc_update_bits(codec, M98088_REG_51_PWR_SYS, M98088_SHDNRUN,
M98088_SHDNRUN);
@@ -1729,15 +1739,15 @@ static const char *eq_mode_name[] = {"EQ1 Mode", "EQ2 Mode"};
static int max98088_get_channel(struct snd_soc_codec *codec, const char *name)
{
- int i;
+ int i;
- for (i = 0; i < ARRAY_SIZE(eq_mode_name); i++)
- if (strcmp(name, eq_mode_name[i]) == 0)
- return i;
+ for (i = 0; i < ARRAY_SIZE(eq_mode_name); i++)
+ if (strcmp(name, eq_mode_name[i]) == 0)
+ return i;
- /* Shouldn't happen */
- dev_err(codec->dev, "Bad EQ channel name '%s'\n", name);
- return -EINVAL;
+ /* Shouldn't happen */
+ dev_err(codec->dev, "Bad EQ channel name '%s'\n", name);
+ return -EINVAL;
}
static void max98088_setup_eq1(struct snd_soc_codec *codec)
@@ -1846,7 +1856,7 @@ static int max98088_put_eq_enum(struct snd_kcontrol *kcontrol,
int sel = ucontrol->value.integer.value[0];
if (channel < 0)
- return channel;
+ return channel;
cdata = &max98088->dai[channel];
@@ -1876,7 +1886,7 @@ static int max98088_get_eq_enum(struct snd_kcontrol *kcontrol,
struct max98088_cdata *cdata;
if (channel < 0)
- return channel;
+ return channel;
cdata = &max98088->dai[channel];
ucontrol->value.enumerated.item[0] = cdata->eq_sel;
@@ -2178,23 +2188,23 @@ static int max98088_remove(struct snd_soc_codec *codec)
#ifdef CONFIG_PM
static int max98088_suspend(struct snd_soc_codec *codec)
{
- struct max98088_priv *max98088 = snd_soc_codec_get_drvdata(codec);
+ struct max98088_priv *max98088 = snd_soc_codec_get_drvdata(codec);
- disable_irq(max98088->irq);
- max98088_set_bias_level(codec, SND_SOC_BIAS_OFF);
+ disable_irq(max98088->irq);
+ max98088_set_bias_level(codec, SND_SOC_BIAS_OFF);
- return 0;
+ return 0;
}
static int max98088_resume(struct snd_soc_codec *codec)
{
- struct max98088_priv *max98088 = snd_soc_codec_get_drvdata(codec);
+ struct max98088_priv *max98088 = snd_soc_codec_get_drvdata(codec);
- max98088_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
- max98088_report_jack(codec);
- enable_irq(max98088->irq);
+ max98088_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+ max98088_report_jack(codec);
+ enable_irq(max98088->irq);
- return 0;
+ return 0;
}
#else
#define max98088_suspend NULL
@@ -2211,10 +2221,10 @@ static struct snd_soc_codec_driver soc_codec_dev_max98088 = {
.reg_word_size = sizeof(u8),
.reg_cache_default = max98088_reg,
.volatile_register = max98088_volatile_register,
- .dapm_widgets = max98088_dapm_widgets,
- .num_dapm_widgets = ARRAY_SIZE(max98088_dapm_widgets),
- .dapm_routes = max98088_audio_map,
- .num_dapm_routes = ARRAY_SIZE(max98088_audio_map),
+ .dapm_widgets = max98088_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(max98088_dapm_widgets),
+ .dapm_routes = max98088_audio_map,
+ .num_dapm_routes = ARRAY_SIZE(max98088_audio_map),
};
static int max98088_i2c_probe(struct i2c_client *i2c,
@@ -2224,7 +2234,7 @@ static int max98088_i2c_probe(struct i2c_client *i2c,
int ret;
max98088 = devm_kzalloc(&i2c->dev, sizeof(struct max98088_priv),
- GFP_KERNEL);
+ GFP_KERNEL);
if (max98088 == NULL)
return -ENOMEM;
diff --git a/sound/soc/codecs/max98088.h b/sound/soc/codecs/max98088.h
index 81ccf4b4caee..b648954e734f 100644
--- a/sound/soc/codecs/max98088.h
+++ b/sound/soc/codecs/max98088.h
@@ -118,6 +118,9 @@
/* M98088_REG_18_DAI1_FILTERS, M98088_REG_20_DAI2_FILTERS */
#define M98088_DAI_DHF (1<<3)
+ #define M98088_DAI_AVFLT_MASK (7<<4)
+ #define M98088_DAI_AVFLT_SHIFT 4
+ #define M98088_DAI_MODE (1<<7)
/* M98088_REG_22_MIX_DAC */
#define M98088_DAI1L_TO_DACL (1<<7)