diff --git a/audio/audio.c b/audio/audio.c index 3d88ec33d43..9125adbe4e3 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -354,18 +354,19 @@ static int audio_configure(FAR struct audio_upperhalf_s *upper, #else ret = lower->ops->configure(lower, caps); #endif - - if (ret == OK && (caps->ac_type == AUDIO_TYPE_INPUT || - caps->ac_type == AUDIO_TYPE_OUTPUT)) + if (ret < 0 || (caps->ac_type != AUDIO_TYPE_INPUT && + caps->ac_type != AUDIO_TYPE_OUTPUT)) { - audio_setstate(upper, AUDIO_STATE_PREPARED); - upper->info.format = caps->ac_subtype; - upper->info.channels = caps->ac_channels; - upper->info.subformat = caps->ac_controls.b[2]; - upper->info.samplerate = caps->ac_controls.hw[0] | - (caps->ac_controls.b[3] << 16); + return ret; } + audio_setstate(upper, AUDIO_STATE_PREPARED); + upper->info.format = caps->ac_subtype; + upper->info.channels = caps->ac_channels; + upper->info.subformat = caps->ac_controls.b[2]; + upper->info.samplerate = + caps->ac_controls.hw[0] | (caps->ac_controls.b[3] << 16); + return ret; }