Commit e9418629 authored by Sergej Sawazki's avatar Sergej Sawazki Committed by Mark Brown

ASoC: wm8741: Set OSR mode in hw_params()

For correct operation of the digital filtering and other processing on the
WM8741, the user must ensure the correct value of OSR[1:0] is set at all
times.[1] Hence, depending the selected sampling rate, set the OSR (over-
sampling rate) mode in hw_params().

References:
	[1] "WM8741 Data Sheet"
Signed-off-by: default avatarSergej Sawazki <sergej@taudac.com>
Acked-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 36b15993
...@@ -196,7 +196,7 @@ static int wm8741_hw_params(struct snd_pcm_substream *substream, ...@@ -196,7 +196,7 @@ static int wm8741_hw_params(struct snd_pcm_substream *substream,
{ {
struct snd_soc_component *component = dai->component; struct snd_soc_component *component = dai->component;
struct wm8741_priv *wm8741 = snd_soc_component_get_drvdata(component); struct wm8741_priv *wm8741 = snd_soc_component_get_drvdata(component);
unsigned int iface; unsigned int iface, mode;
int i; int i;
/* The set of sample rates that can be supported depends on the /* The set of sample rates that can be supported depends on the
...@@ -240,11 +240,21 @@ static int wm8741_hw_params(struct snd_pcm_substream *substream, ...@@ -240,11 +240,21 @@ static int wm8741_hw_params(struct snd_pcm_substream *substream,
return -EINVAL; return -EINVAL;
} }
/* oversampling rate */
if (params_rate(params) > 96000)
mode = 0x40;
else if (params_rate(params) > 48000)
mode = 0x20;
else
mode = 0x00;
dev_dbg(component->dev, "wm8741_hw_params: bit size param = %d, rate param = %d", dev_dbg(component->dev, "wm8741_hw_params: bit size param = %d, rate param = %d",
params_width(params), params_rate(params)); params_width(params), params_rate(params));
snd_soc_component_update_bits(component, WM8741_FORMAT_CONTROL, WM8741_IWL_MASK, snd_soc_component_update_bits(component, WM8741_FORMAT_CONTROL, WM8741_IWL_MASK,
iface); iface);
snd_soc_component_update_bits(component, WM8741_MODE_CONTROL_1, WM8741_OSR_MASK,
mode);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment