From f9386282dc64484fe9fd99dfb674a9b16cd5feab Mon Sep 17 00:00:00 2001 From: mks2183 Date: Mon, 17 Jul 2023 18:48:00 +0530 Subject: [PATCH] driver/audio: low level reset must always succeed - considering simplicity and design assumption, the reset function must work without flaw. If it fails, there is no way to recover but to reset again. so checking return status does not bring additional benefit - There is unnecessary switch inside switch which is making code not too readable Signed-off-by: mks2183 --- drivers/audio/es8311.c | 118 +++++++++++++++-------------------------- 1 file changed, 43 insertions(+), 75 deletions(-) diff --git a/drivers/audio/es8311.c b/drivers/audio/es8311.c index a3616fda6e971..29d417a0a26fc 100644 --- a/drivers/audio/es8311.c +++ b/drivers/audio/es8311.c @@ -145,7 +145,7 @@ static int es8311_release(FAR struct audio_lowerhalf_s *dev); static void *es8311_workerthread(pthread_addr_t pvarg); static void es8311_audio_output(FAR struct es8311_dev_s *priv); static void es8311_audio_input(FAR struct es8311_dev_s *priv); -static int es8311_reset(FAR struct es8311_dev_s *priv); +static void es8311_reset(FAR struct es8311_dev_s *priv); static int es8311_get_mclk_src(void); /**************************************************************************** @@ -819,22 +819,18 @@ static int es8311_getcaps(FAR struct audio_lowerhalf_s *dev, int type, caps->ac_channels = 1; /* Mono output */ - switch (caps->ac_subtype) + if (caps->ac_subtype == AUDIO_TYPE_QUERY) { - case AUDIO_TYPE_QUERY: - /* The types of audio units we implement */ caps->ac_controls.b[0] = AUDIO_TYPE_INPUT | AUDIO_TYPE_OUTPUT | AUDIO_TYPE_FEATURE; break; - - default: - caps->ac_controls.b[0] = AUDIO_SUBFMT_END; - break; } + caps->ac_controls.b[0] = AUDIO_SUBFMT_END; + break; /* Provide capabilities of our OUTPUT unit */ @@ -843,10 +839,8 @@ static int es8311_getcaps(FAR struct audio_lowerhalf_s *dev, int type, caps->ac_channels = 1; - switch (caps->ac_subtype) + if (caps->ac_subtype == AUDIO_TYPE_QUERY) { - case AUDIO_TYPE_QUERY: - /* Report the Sample rates we support */ /* 8kHz is hardware dependent */ @@ -857,10 +851,7 @@ static int es8311_getcaps(FAR struct audio_lowerhalf_s *dev, int type, AUDIO_SAMP_RATE_44K | AUDIO_SAMP_RATE_48K; caps->ac_controls.b[1] = 0; break; - - default: - break; - } + } break; @@ -868,10 +859,8 @@ static int es8311_getcaps(FAR struct audio_lowerhalf_s *dev, int type, caps->ac_channels = 1; - switch (caps->ac_subtype) + if (caps->ac_subtype == AUDIO_TYPE_QUERY) { - case AUDIO_TYPE_QUERY: - /* Report supported input sample rates */ caps->ac_controls.b[0] = @@ -880,10 +869,8 @@ static int es8311_getcaps(FAR struct audio_lowerhalf_s *dev, int type, AUDIO_SAMP_RATE_44K | AUDIO_SAMP_RATE_48K; caps->ac_controls.b[1] = 0; break; + } - default: - break; - } break; /* Provide capabilities of our FEATURE units */ @@ -978,11 +965,10 @@ static int es8311_configure(FAR struct audio_lowerhalf_s *dev, if (volume >= 0 && volume <= 1000) { es8311_setvolume(priv, priv->audio_mode, volume); + break; } - else - { - ret = -EDOM; - } + + ret = -EDOM; } break; #endif /* CONFIG_AUDIO_EXCLUDE_VOLUME */ @@ -1053,11 +1039,9 @@ static int es8311_configure(FAR struct audio_lowerhalf_s *dev, priv->bpsamp = caps->ac_controls.b[2]; es8311_audio_output(priv); - ret |= es8311_reset(priv); + es8311_reset(priv); es8311_setsamplerate(priv); es8311_setbitspersample(priv); - - ret = OK; } break; @@ -1099,8 +1083,6 @@ static int es8311_configure(FAR struct audio_lowerhalf_s *dev, es8311_reset(priv); es8311_setsamplerate(priv); es8311_setbitspersample(priv); - - ret = OK; } break; @@ -2143,12 +2125,14 @@ static void *es8311_workerthread(pthread_addr_t pvarg) * priv - A reference to the driver state structure. * * Returned Value: - * OK on success; a negated errno value on failure. + * None * ****************************************************************************/ -static int es8311_reset(FAR struct es8311_dev_s *priv) +static void es8311_reset(FAR struct es8311_dev_s *priv) { + uint8_t regconfig; + /* Put audio back to its initial configuration */ audinfo("ES8311 reset triggered.\n"); @@ -2159,71 +2143,55 @@ static int es8311_reset(FAR struct es8311_dev_s *priv) * default state. */ - uint8_t regconfig; - int ret = 0; - - ret |= es8311_writereg(priv, ES8311_CLK_MANAGER_REG01, 0x30); - ret |= es8311_writereg(priv, ES8311_CLK_MANAGER_REG02, 0x00); - ret |= es8311_writereg(priv, ES8311_CLK_MANAGER_REG03, 0x10); - ret |= es8311_writereg(priv, ES8311_ADC_REG16, 0x24); - ret |= es8311_writereg(priv, ES8311_CLK_MANAGER_REG04, 0x10); - ret |= es8311_writereg(priv, ES8311_CLK_MANAGER_REG05, 0x00); - ret |= es8311_writereg(priv, ES8311_SYSTEM_REG0B, 0x00); - ret |= es8311_writereg(priv, ES8311_SYSTEM_REG0C, 0x00); - ret |= es8311_writereg(priv, ES8311_SYSTEM_REG10, 0x1f); - ret |= es8311_writereg(priv, ES8311_SYSTEM_REG11, 0x7f); - ret |= es8311_writereg(priv, ES8311_RESET_REG00, 0x80); - + es8311_writereg(priv, ES8311_CLK_MANAGER_REG01, 0x30); + es8311_writereg(priv, ES8311_CLK_MANAGER_REG02, 0x00); + es8311_writereg(priv, ES8311_CLK_MANAGER_REG03, 0x10); + es8311_writereg(priv, ES8311_ADC_REG16, 0x24); + es8311_writereg(priv, ES8311_CLK_MANAGER_REG04, 0x10); + es8311_writereg(priv, ES8311_CLK_MANAGER_REG05, 0x00); + es8311_writereg(priv, ES8311_SYSTEM_REG0B, 0x00); + es8311_writereg(priv, ES8311_SYSTEM_REG0C, 0x00); + es8311_writereg(priv, ES8311_SYSTEM_REG10, 0x1f); + es8311_writereg(priv, ES8311_SYSTEM_REG11, 0x7f); + es8311_writereg(priv, ES8311_RESET_REG00, 0x80); + + audinfo("ES8311 in Slave mode.\n"); regconfig = es8311_readreg(priv, ES8311_RESET_REG00); regconfig &= 0xbf; - ret |= es8311_writereg(priv, ES8311_RESET_REG00, regconfig); - ret |= es8311_writereg(priv, ES8311_CLK_MANAGER_REG01, 0x3f); + es8311_writereg(priv, ES8311_RESET_REG00, regconfig); + es8311_writereg(priv, ES8311_CLK_MANAGER_REG01, 0x3f); if (es8311_get_mclk_src() == ES8311_MCLK_FROM_MCLK_PIN) { regconfig = es8311_readreg(priv, ES8311_CLK_MANAGER_REG01); regconfig &= 0x7f; - ret |= es8311_writereg(priv, ES8311_CLK_MANAGER_REG01, regconfig); + es8311_writereg(priv, ES8311_CLK_MANAGER_REG01, regconfig); } else { regconfig = es8311_readreg(priv, ES8311_CLK_MANAGER_REG01); regconfig |= 0x80; - ret |= es8311_writereg(priv, ES8311_CLK_MANAGER_REG01, regconfig); + es8311_writereg(priv, ES8311_CLK_MANAGER_REG01, regconfig); } - ret |= es8311_setsamplerate(priv); - ret |= es8311_setbitspersample(priv); + es8311_setsamplerate(priv); + es8311_setbitspersample(priv); regconfig = es8311_readreg(priv, ES8311_CLK_MANAGER_REG01); regconfig &= ~(0x40); - ret |= es8311_writereg(priv, ES8311_CLK_MANAGER_REG01, regconfig); + es8311_writereg(priv, ES8311_CLK_MANAGER_REG01, regconfig); regconfig = es8311_readreg(priv, ES8311_CLK_MANAGER_REG06); regconfig &= ~(0x20); - ret |= es8311_writereg(priv, ES8311_CLK_MANAGER_REG06, regconfig); - - ret |= es8311_writereg(priv, ES8311_SYSTEM_REG13, 0x10); - ret |= es8311_writereg(priv, ES8311_ADC_REG1B, 0x0a); - ret |= es8311_writereg(priv, ES8311_ADC_REG1C, 0x6a); - - ret |= es8311_setvolume(priv, ES_MODULE_ADC, - CONFIG_ES8311_INPUT_INITVOLUME); - ret |= es8311_setvolume(priv, ES_MODULE_DAC, - CONFIG_ES8311_OUTPUT_INITVOLUME); + es8311_writereg(priv, ES8311_CLK_MANAGER_REG06, regconfig); + es8311_writereg(priv, ES8311_SYSTEM_REG13, 0x10); + es8311_writereg(priv, ES8311_ADC_REG1B, 0x0a); + es8311_writereg(priv, ES8311_ADC_REG1C, 0x6a); + es8311_setvolume(priv, ES_MODULE_ADC, CONFIG_ES8311_INPUT_INITVOLUME); + es8311_setvolume(priv, ES_MODULE_DAC, CONFIG_ES8311_OUTPUT_INITVOLUME); es8311_dump_registers(&priv->dev, "After reset"); - - if (ret < 0) - { - auderr("Failed to reset the ES8311.\n"); - return -EIO; - } - else - { - audinfo("ES8311 reset complete.\n"); - return OK; - } + audinfo("ES8311 reset complete.\n"); } /****************************************************************************