static int sgtl5000_set_property(const struct device *dev, audio_property_t property,
audio_channel_t channel, audio_property_value_t val)
{
int ret = -1;
uint16_t reg_val;
uint16_t i2s_pwr = SGTL5000_I2S_IN_POWERUP;
switch (property) {
case AUDIO_PROPERTY_OUTPUT_VOLUME:
/* Linear volume (0-100%) to SGTL5000 hw steps*/
/*0x3C (0dB, max) to 0xF0 (-90dB, min) */
if (val.vol == 0) {
reg_val = (0xFC << 8) | 0xFC; /* (Mute) */
} else {
uint8_t steps = (uint8_t)(0x3C + ((100 - val.vol) * (0xF0 - 0x3C)) / 100);
reg_val = (steps << 8) | steps;
}
ret = sgtl5000_write_reg(dev, SGTL5000_CHIP_DAC_VOL, reg_val);
case AUDIO_PROPERTY_OUTPUT_MUTE:
ret = sgtl5000_update_reg(dev, SGTL5000_CHIP_ANA_CTRL, SGTL5000_HP_MUTE, val.mute ? SGTL5000_HP_MUTE : 0);
/*
* During 'digital mute' do not mute DAC
* because LINE_IN would be muted aswell. We want to mute
* only I2S block - this can be done by powering it off
*/
ret = sgtl5000_update_reg(dev, SGTL5000_CHIP_DIG_POWER,i2s_pwr, val.mute ? 0 : i2s_pwr);
default:
break;
}
return ret;
}
надо вставить установку AUDIO_PROPERTY_INPUT_VOLUME,AUDIO_PROPERTY_INPUT_MUTE. Комментарии к коду на английском языке