mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 14:41:39 +00:00
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: Sergej Sawazki <sergej@taudac.com> Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
36b1599340
commit
e9418629e2
@ -196,7 +196,7 @@ static int wm8741_hw_params(struct snd_pcm_substream *substream,
|
||||
{
|
||||
struct snd_soc_component *component = dai->component;
|
||||
struct wm8741_priv *wm8741 = snd_soc_component_get_drvdata(component);
|
||||
unsigned int iface;
|
||||
unsigned int iface, mode;
|
||||
int i;
|
||||
|
||||
/* 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,
|
||||
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",
|
||||
params_width(params), params_rate(params));
|
||||
|
||||
snd_soc_component_update_bits(component, WM8741_FORMAT_CONTROL, WM8741_IWL_MASK,
|
||||
iface);
|
||||
snd_soc_component_update_bits(component, WM8741_MODE_CONTROL_1, WM8741_OSR_MASK,
|
||||
mode);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user