* and compare the returned value after ioctl for checking
* the validity of TLV.
*/
- tlv[0] = -1;
- tlv[1] = 0;
+ tlv[SNDRV_CTL_TLVO_TYPE] = -1;
+ tlv[SNDRV_CTL_TLVO_LEN] = 0;
err = snd_ctl_tlv_do(ctl, 0, id, tlv, tlv_size);
- if (err >= 0 && tlv[0] == (unsigned int)-1)
+ if (err >= 0 && tlv[SNDRV_CTL_TLVO_TYPE] == (unsigned int)-1)
err = -ENXIO;
return err;
}
const unsigned int *tlv)
{
assert(ctl && id && (id->name[0] || id->numid) && tlv);
- return snd_ctl_tlv_do(ctl, 1, id, (unsigned int *)tlv, tlv[1] + 2 * sizeof(unsigned int));
+ return snd_ctl_tlv_do(ctl, 1, id, (unsigned int *)tlv,
+ tlv[SNDRV_CTL_TLVO_LEN] + 2 * sizeof(unsigned int));
}
/**
const unsigned int *tlv)
{
assert(ctl && id && (id->name[0] || id->numid) && tlv);
- return snd_ctl_tlv_do(ctl, -1, id, (unsigned int *)tlv, tlv[1] + 2 * sizeof(unsigned int));
+ return snd_ctl_tlv_do(ctl, -1, id, (unsigned int *)tlv,
+ tlv[SNDRV_CTL_TLVO_LEN] + 2 * sizeof(unsigned int));
}
/**
int err;
*db_tlvp = NULL;
- type = tlv[0];
- size = tlv[1];
+ type = tlv[SNDRV_CTL_TLVO_TYPE];
+ size = tlv[SNDRV_CTL_TLVO_LEN];
tlv_size -= 2 * sizeof(int);
if (size > tlv_size) {
SNDERR("TLV size error");
return err; /* error */
if (err > 0)
return err; /* found */
- len = int_index(tlv[1]) + 2;
+ len = int_index(tlv[SNDRV_CTL_TLVO_LEN]) + 2;
size -= len * sizeof(int);
tlv += len;
}
{
int err;
- switch (tlv[0]) {
+ switch (tlv[SNDRV_CTL_TLVO_TYPE]) {
case SND_CTL_TLVT_DB_RANGE: {
unsigned int pos, len;
- len = int_index(tlv[1]);
+ len = int_index(tlv[SNDRV_CTL_TLVO_LEN]);
if (len > MAX_TLV_RANGE_SIZE)
return -EINVAL;
pos = 2;
}
case SND_CTL_TLVT_DB_SCALE: {
int step;
- if (tlv[3] & 0x10000)
+ if (tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] & 0x10000)
*min = SND_CTL_TLV_DB_GAIN_MUTE;
else
- *min = (int)tlv[2];
- step = (tlv[3] & 0xffff);
- *max = (int)tlv[2] + step * (rangemax - rangemin);
+ *min = (int)tlv[SNDRV_CTL_TLVO_DB_SCALE_MIN];
+ step = (tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] & 0xffff);
+ *max = (int)tlv[SNDRV_CTL_TLVO_DB_SCALE_MIN] +
+ step * (rangemax - rangemin);
return 0;
}
case SND_CTL_TLVT_DB_MINMAX:
case SND_CTL_TLVT_DB_LINEAR:
- *min = (int)tlv[2];
- *max = (int)tlv[3];
+ *min = (int)tlv[SNDRV_CTL_TLVO_DB_LINEAR_MIN];
+ *max = (int)tlv[SNDRV_CTL_TLVO_DB_LINEAR_MAX];
return 0;
case SND_CTL_TLVT_DB_MINMAX_MUTE:
*min = SND_CTL_TLV_DB_GAIN_MUTE;
- *max = (int)tlv[3];
+ *max = (int)tlv[SNDRV_CTL_TLVO_DB_MINMAX_MAX];
return 0;
}
return -EINVAL;
int snd_tlv_convert_to_dB(unsigned int *tlv, long rangemin, long rangemax,
long volume, long *db_gain)
{
- switch (tlv[0]) {
+ unsigned int type = tlv[SNDRV_CTL_TLVO_TYPE];
+
+ switch (type) {
case SND_CTL_TLVT_DB_RANGE: {
unsigned int pos, len;
- len = int_index(tlv[1]);
+ len = int_index(tlv[SNDRV_CTL_TLVO_LEN]);
if (len > MAX_TLV_RANGE_SIZE)
return -EINVAL;
pos = 2;
}
case SND_CTL_TLVT_DB_SCALE: {
int min, step, mute;
- min = tlv[2];
- step = (tlv[3] & 0xffff);
- mute = (tlv[3] >> 16) & 1;
+ min = tlv[SNDRV_CTL_TLVO_DB_SCALE_MIN];
+ step = (tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] & 0xffff);
+ mute = (tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] >> 16) & 1;
if (mute && volume <= rangemin)
*db_gain = SND_CTL_TLV_DB_GAIN_MUTE;
else
case SND_CTL_TLVT_DB_MINMAX:
case SND_CTL_TLVT_DB_MINMAX_MUTE: {
int mindb, maxdb;
- mindb = tlv[2];
- maxdb = tlv[3];
+ mindb = tlv[SNDRV_CTL_TLVO_DB_MINMAX_MIN];
+ maxdb = tlv[SNDRV_CTL_TLVO_DB_MINMAX_MAX];
if (volume <= rangemin || rangemax <= rangemin) {
- if (tlv[0] == SND_CTL_TLVT_DB_MINMAX_MUTE)
+ if (type == SND_CTL_TLVT_DB_MINMAX_MUTE)
*db_gain = SND_CTL_TLV_DB_GAIN_MUTE;
else
*db_gain = mindb;
}
#ifndef HAVE_SOFT_FLOAT
case SND_CTL_TLVT_DB_LINEAR: {
- int mindb = tlv[2];
- int maxdb = tlv[3];
+ int mindb = tlv[SNDRV_CTL_TLVO_DB_LINEAR_MIN];
+ int maxdb = tlv[SNDRV_CTL_TLVO_DB_LINEAR_MAX];
if (volume <= rangemin || rangemax <= rangemin)
*db_gain = mindb;
else if (volume >= rangemax)
int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax,
long db_gain, long *value, int xdir)
{
- switch (tlv[0]) {
+ unsigned int type = tlv[SNDRV_CTL_TLVO_TYPE];
+
+ switch (type) {
case SND_CTL_TLVT_DB_RANGE: {
long dbmin, dbmax, prev_submax;
unsigned int pos, len;
- len = int_index(tlv[1]);
+ len = int_index(tlv[SNDRV_CTL_TLVO_LEN]);
if (len < 6 || len > MAX_TLV_RANGE_SIZE)
return -EINVAL;
pos = 2;
return 0;
}
case SND_CTL_TLVT_DB_SCALE: {
- int min, step, max;
- min = tlv[2];
- step = (tlv[3] & 0xffff);
+ int min, step, max, mute;
+ min = tlv[SNDRV_CTL_TLVO_DB_SCALE_MIN];
+ step = tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] & 0xffff;
+ mute = tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] & 0x10000;
max = min + (int)(step * (rangemax - rangemin));
if (db_gain <= min)
if (db_gain > SND_CTL_TLV_DB_GAIN_MUTE && xdir > 0 &&
- (tlv[3] & 0x10000))
+ mute)
*value = rangemin + 1;
else
*value = rangemin;
case SND_CTL_TLVT_DB_MINMAX:
case SND_CTL_TLVT_DB_MINMAX_MUTE: {
int min, max;
- min = tlv[2];
- max = tlv[3];
+ min = tlv[SNDRV_CTL_TLVO_DB_MINMAX_MIN];
+ max = tlv[SNDRV_CTL_TLVO_DB_MINMAX_MAX];
if (db_gain <= min)
if (db_gain > SND_CTL_TLV_DB_GAIN_MUTE && xdir > 0 &&
- tlv[0] == SND_CTL_TLVT_DB_MINMAX_MUTE)
+ type == SND_CTL_TLVT_DB_MINMAX_MUTE)
*value = rangemin + 1;
else
*value = rangemin;
#ifndef HAVE_SOFT_FLOAT
case SND_CTL_TLVT_DB_LINEAR: {
int min, max;
- min = tlv[2];
- max = tlv[3];
+ min = tlv[SNDRV_CTL_TLVO_DB_LINEAR_MIN];
+ max = tlv[SNDRV_CTL_TLVO_DB_LINEAR_MAX];
if (db_gain <= min)
*value = rangemin;
else if (db_gain >= max)