[Hardy LPIA LUM]: RealTek hda-intel volume remapping for non-linear volume scales
Colin Ian King
colin.king at canonical.com
Tue Apr 21 15:51:21 UTC 2009
Hi Tim,
On Tue, 2009-04-21 at 09:33 -0600, Tim Gardner wrote:
> Colin Ian King wrote:
> > LP#249233 - sound volume too low.
> >
> > for Hardy LPIA LUM.
> >
[ Text deleted ]
> Is this really doing what you expect?
>
> static int slave_get_val(struct link_slave *slave,
> struct snd_ctl_elem_value *ucontrol)
> {
> @@ -305,8 +360,15 @@ static int master_put(struct snd_kcontrol *kcontrol,
> master->val = old_val;
> uval->id = slave->slave.id;
> slave_get_val(slave, uval);
> - master->val = ucontrol->value.integer.value[0];
> +
> + /* Put to slaves a remapped volume */
> + master->val = vol_remap(master->info.min_val,
> + master->info.max_val,
> + ucontrol->value.integer.value[0]);
> slave_put_val(slave, uval);
> + /* And actually save the original unremapped volume
> + for master_get() */
> + master->val = ucontrol->value.integer.value[0];
> }
> kfree(uval);
> return 1;
>
> I looks like master-val is simply set twice (unless there are side
> effects happening in slave_put_val()).
It's good to know your eye is keen...
The fact is that slave_put_val() requires a master->val to be set for
the volume to be set correctly (this case a remapped version). However
master->val can be interrogated later for the master volume setting, and
we need to return the expected value and not the remapped value else we
get ALSA confused. Without a major rewrite of slave_put_xval() I cannot
see around this.
Colin
>
> rtg
>
> --
> Tim Gardner tim.gardner at canonical.com
>
--
Colin King <colin.king at canonical.com>
"Me transmitte sursum, caledoni"
More information about the kernel-team
mailing list