|
@@ -2676,8 +2676,13 @@ static int get_kctl_0dB_offset(struct snd_kcontrol *kctl)
|
|
set_fs(fs);
|
|
set_fs(fs);
|
|
} else if (kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_TLV_READ)
|
|
} else if (kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_TLV_READ)
|
|
tlv = kctl->tlv.p;
|
|
tlv = kctl->tlv.p;
|
|
- if (tlv && tlv[0] == SNDRV_CTL_TLVT_DB_SCALE)
|
|
|
|
- val = -tlv[2] / tlv[3];
|
|
|
|
|
|
+ if (tlv && tlv[0] == SNDRV_CTL_TLVT_DB_SCALE) {
|
|
|
|
+ int step = tlv[3];
|
|
|
|
+ step &= ~TLV_DB_SCALE_MUTE;
|
|
|
|
+ if (!step)
|
|
|
|
+ return -1;
|
|
|
|
+ val = -tlv[2] / step;
|
|
|
|
+ }
|
|
return val;
|
|
return val;
|
|
}
|
|
}
|
|
|
|
|