|
@@ -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 @@ err:
|
|
|
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 */
|