static int ask_vol_dB_ops(snd_mixer_elem_t *elem, int dir, long value, long *dBvalue) { selem_none_t *s = snd_mixer_elem_get_private(elem); selem_ctl_t *c; c = get_selem_ctl(s, dir); if (! c) return -EINVAL; int res = convert_to_dB(c->elem, &s->str[dir], value, dBvalue); return res; }
static int get_dB_ops(snd_mixer_elem_t *elem, int dir, snd_mixer_selem_channel_id_t channel, long *value) { selem_none_t *s = snd_mixer_elem_get_private(elem); selem_ctl_t *c; int err; long volume, db_gain; c = get_selem_ctl(s, dir); if (! c) return -EINVAL; if ((err = get_volume_ops(elem, dir, channel, &volume)) < 0) goto _err; if ((err = convert_to_dB(c->elem, &s->str[dir], volume, &db_gain)) < 0) goto _err; err = 0; *value = db_gain; _err: return err; }