static int ask_dB_vol_ops(snd_mixer_elem_t *elem, int dir, long dbValue, long *value, int xdir) { selem_none_t *s = snd_mixer_elem_get_private(elem); selem_ctl_t *c; c = get_selem_ctl(s, dir); if (! c) return -EINVAL; return convert_from_dB(c->elem, &s->str[dir], dbValue, value, xdir); }
static int get_dB_range_ops(snd_mixer_elem_t *elem, int dir, long *min, long *max) { selem_none_t *s = snd_mixer_elem_get_private(elem); selem_ctl_t *c; c = get_selem_ctl(s, dir); if (! c) return -EINVAL; return get_dB_range(c->elem, &s->str[dir], min, max); }
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 set_dB_ops(snd_mixer_elem_t *elem, int dir, snd_mixer_selem_channel_id_t channel, long db_gain, int xdir) { selem_none_t *s = snd_mixer_elem_get_private(elem); selem_ctl_t *c; long value; int err; c = get_selem_ctl(s, dir); if (! c) return -EINVAL; err = convert_from_dB(c->elem, &s->str[dir], db_gain, &value, xdir); if (err < 0) return err; return set_volume_ops(elem, dir, channel, value); }
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; }