提交 a6c65736 编写于 作者: M Mark Brown

ASoC: Remove current PGA control handling

A code audit reveals that there are currently no users of the widget
controls on PGAs. This is likely to continue to be the case since
while there are useful things that can be done with integrating the
PGA gain and mute controls with the power sequencing userspace
generally wants stereo controls for output stages which this doesn't
map onto well.

In preparation for implementing something more useful strip out the
existing code, leaving the parameters there for use by the new code.
Signed-off-by: NMark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: NLiam Girdwood <lrg@slimlogic.co.uk>
上级 2a0761a3
......@@ -321,54 +321,6 @@ static int dapm_update_bits(struct snd_soc_dapm_widget *widget)
return change;
}
/* ramps the volume up or down to minimise pops before or after a
* DAPM power event */
static int dapm_set_pga(struct snd_soc_dapm_widget *widget, int power)
{
const struct snd_kcontrol_new *k = widget->kcontrols;
if (widget->muted && !power)
return 0;
if (!widget->muted && power)
return 0;
if (widget->num_kcontrols && k) {
struct soc_mixer_control *mc =
(struct soc_mixer_control *)k->private_value;
unsigned int reg = mc->reg;
unsigned int shift = mc->shift;
int max = mc->max;
unsigned int mask = (1 << fls(max)) - 1;
unsigned int invert = mc->invert;
if (power) {
int i;
/* power up has happended, increase volume to last level */
if (invert) {
for (i = max; i > widget->saved_value; i--)
snd_soc_update_bits(widget->codec, reg, mask, i);
} else {
for (i = 0; i < widget->saved_value; i++)
snd_soc_update_bits(widget->codec, reg, mask, i);
}
widget->muted = 0;
} else {
/* power down is about to occur, decrease volume to mute */
int val = snd_soc_read(widget->codec, reg);
int i = widget->saved_value = (val >> shift) & mask;
if (invert) {
for (; i < mask; i++)
snd_soc_update_bits(widget->codec, reg, mask, i);
} else {
for (; i > 0; i--)
snd_soc_update_bits(widget->codec, reg, mask, i);
}
widget->muted = 1;
}
}
return 0;
}
/* create new dapm mixer control */
static int dapm_new_mixer(struct snd_soc_codec *codec,
struct snd_soc_dapm_widget *w)
......@@ -463,20 +415,10 @@ static int dapm_new_mux(struct snd_soc_codec *codec,
static int dapm_new_pga(struct snd_soc_codec *codec,
struct snd_soc_dapm_widget *w)
{
struct snd_kcontrol *kcontrol;
int ret = 0;
if (!w->num_kcontrols)
return -EINVAL;
if (w->num_kcontrols)
pr_err("asoc: PGA controls not supported: '%s'\n", w->name);
kcontrol = snd_soc_cnew(&w->kcontrols[0], w, w->name);
ret = snd_ctl_add(codec->card, kcontrol);
if (ret < 0) {
printk(KERN_ERR "asoc: failed to add kcontrol %s\n", w->name);
return ret;
}
return ret;
return 0;
}
/* reset 'walked' bit for each dapm path */
......@@ -632,16 +574,8 @@ static int dapm_generic_apply_power(struct snd_soc_dapm_widget *w)
return ret;
}
/* Lower PGA volume to reduce pops */
if (w->id == snd_soc_dapm_pga && !w->power)
dapm_set_pga(w, w->power);
dapm_update_bits(w);
/* Raise PGA volume to reduce pops */
if (w->id == snd_soc_dapm_pga && w->power)
dapm_set_pga(w, w->power);
/* power up post event */
if (w->power && w->event &&
(w->event_flags & SND_SOC_DAPM_POST_PMU)) {
......@@ -808,10 +742,6 @@ static void dapm_seq_run_coalesced(struct snd_soc_codec *codec,
pr_err("%s: pre event failed: %d\n",
w->name, ret);
}
/* Lower PGA volume to reduce pops */
if (w->id == snd_soc_dapm_pga && !w->power)
dapm_set_pga(w, w->power);
}
if (reg >= 0) {
......@@ -823,10 +753,6 @@ static void dapm_seq_run_coalesced(struct snd_soc_codec *codec,
}
list_for_each_entry(w, pending, power_list) {
/* Raise PGA volume to reduce pops */
if (w->id == snd_soc_dapm_pga && w->power)
dapm_set_pga(w, w->power);
/* power up post event */
if (w->power && w->event &&
(w->event_flags & SND_SOC_DAPM_POST_PMU)) {
......@@ -1596,12 +1522,6 @@ int snd_soc_dapm_get_volsw(struct snd_kcontrol *kcontrol,
unsigned int invert = mc->invert;
unsigned int mask = (1 << fls(max)) - 1;
/* return the saved value if we are powered down */
if (widget->id == snd_soc_dapm_pga && !widget->power) {
ucontrol->value.integer.value[0] = widget->saved_value;
return 0;
}
ucontrol->value.integer.value[0] =
(snd_soc_read(widget->codec, reg) >> shift) & mask;
if (shift != rshift)
......@@ -1661,13 +1581,6 @@ int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol,
mutex_lock(&widget->codec->mutex);
widget->value = val;
/* save volume value if the widget is powered down */
if (widget->id == snd_soc_dapm_pga && !widget->power) {
widget->saved_value = val;
mutex_unlock(&widget->codec->mutex);
return 1;
}
if (snd_soc_test_bits(widget->codec, reg, val_mask, val)) {
if (val)
/* new connection */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册