case AUDIO_PROPERTY_INPUT_VOLUME:
/* Map linear volume (0-100%) to SGTL5000 Mic Preamp Gain (0x0024) */
/* 0x0 = 0dB, 0x1 = +20dB, 0x2 = +30dB, 0x3 = +40dB */
{
uint16_t mic_gain_bits;
if (val.vol < 25) {
mic_gain_bits = 0x0; /* 0 dB */
} else if (val.vol < 50) {
mic_gain_bits = 0x1; /* +20 dB */
} else if (val.vol < 75) {
mic_gain_bits = 0x2; /* +30 dB */
} else {
mic_gain_bits = 0x3; /* +40 dB */
}
/* Address 0x0024: CHIP_MIC_CTRL. Mask 0x0003 affects only PREAMP_GAIN */
ret = sgtl5000_update_reg(dev, 0x0024, 0x0003, mic_gain_bits);
}
break;