On 04 December 2018 18:36, Akshu Agrawal wrote: > Failed i2c transaction can lead to failure in reg read or write. > Need to have error check for each read write operation. > I'm not really clear what this gains you. If I2C is broken this won't solve anything, and you have far deeper problems. Seems to me like a lot of code which adds almost nothing. > Signed-off-by: Akshu Agrawal <akshu.agrawal@xxxxxxx> > --- > sound/soc/codecs/da7219.c | 323 +++++++++++++++++++++++++++++++++++- > ---------- > sound/soc/codecs/da7219.h | 2 +- > 2 files changed, 247 insertions(+), 78 deletions(-) > > diff --git a/sound/soc/codecs/da7219.c b/sound/soc/codecs/da7219.c index > e46e9f4..6757129 100644 > --- a/sound/soc/codecs/da7219.c > +++ b/sound/soc/codecs/da7219.c > @@ -312,69 +312,103 @@ static int da7219_enum_locked_put(struct > snd_kcontrol *kcontrol, } > > /* ALC */ > -static void da7219_alc_calib(struct snd_soc_component *component) > +static int da7219_alc_calib(struct snd_soc_component *component) > { > - u8 mic_ctrl, mixin_ctrl, adc_ctrl, calib_ctrl; > + int mic_ctrl, mixin_ctrl, adc_ctrl, calib_ctrl; > + int ret; > > /* Save current state of mic control register */ > mic_ctrl = snd_soc_component_read32(component, > DA7219_MIC_1_CTRL); > + if (mic_ctrl < 0) > + return mic_ctrl; > > /* Save current state of input mixer control register */ > mixin_ctrl = snd_soc_component_read32(component, > DA7219_MIXIN_L_CTRL); > + if (mixin_ctrl < 0) > + return mixin_ctrl; > > /* Save current state of input ADC control register */ > adc_ctrl = snd_soc_component_read32(component, > DA7219_ADC_L_CTRL); > + if (adc_ctrl < 0) > + return adc_ctrl; > > /* Enable then Mute MIC PGAs */ > - snd_soc_component_update_bits(component, DA7219_MIC_1_CTRL, > DA7219_MIC_1_AMP_EN_MASK, > + ret = snd_soc_component_update_bits(component, > DA7219_MIC_1_CTRL, > + DA7219_MIC_1_AMP_EN_MASK, > DA7219_MIC_1_AMP_EN_MASK); > - snd_soc_component_update_bits(component, DA7219_MIC_1_CTRL, > + if (ret < 0) > + return ret; > + > + ret = snd_soc_component_update_bits(component, > DA7219_MIC_1_CTRL, > DA7219_MIC_1_AMP_MUTE_EN_MASK, > DA7219_MIC_1_AMP_MUTE_EN_MASK); > + if (ret < 0) > + return ret; > > /* Enable input mixers unmuted */ > - snd_soc_component_update_bits(component, DA7219_MIXIN_L_CTRL, > + ret = snd_soc_component_update_bits(component, > DA7219_MIXIN_L_CTRL, > DA7219_MIXIN_L_AMP_EN_MASK | > DA7219_MIXIN_L_AMP_MUTE_EN_MASK, > DA7219_MIXIN_L_AMP_EN_MASK); > + if (ret < 0) > + return ret; > > /* Enable input filters unmuted */ > - snd_soc_component_update_bits(component, DA7219_ADC_L_CTRL, > + ret = snd_soc_component_update_bits(component, > DA7219_ADC_L_CTRL, > DA7219_ADC_L_MUTE_EN_MASK | > DA7219_ADC_L_EN_MASK, > DA7219_ADC_L_EN_MASK); > + if (ret < 0) > + return ret; > > /* Perform auto calibration */ > - snd_soc_component_update_bits(component, DA7219_ALC_CTRL1, > + ret = snd_soc_component_update_bits(component, > DA7219_ALC_CTRL1, > DA7219_ALC_AUTO_CALIB_EN_MASK, > DA7219_ALC_AUTO_CALIB_EN_MASK); > + if (ret < 0) > + return ret; > do { > calib_ctrl = snd_soc_component_read32(component, > DA7219_ALC_CTRL1); > + if (calib_ctrl < 0) > + return calib_ctrl; > } while (calib_ctrl & DA7219_ALC_AUTO_CALIB_EN_MASK); > > /* If auto calibration fails, disable DC offset, hybrid ALC */ > if (calib_ctrl & DA7219_ALC_CALIB_OVERFLOW_MASK) { > dev_warn(component->dev, > "ALC auto calibration failed with overflow\n"); > - snd_soc_component_update_bits(component, > DA7219_ALC_CTRL1, > + ret = snd_soc_component_update_bits(component, > DA7219_ALC_CTRL1, > DA7219_ALC_OFFSET_EN_MASK | > DA7219_ALC_SYNC_MODE_MASK, 0); > + if (ret < 0) > + return ret; > } else { > /* Enable DC offset cancellation, hybrid mode */ > - snd_soc_component_update_bits(component, > DA7219_ALC_CTRL1, > + ret = snd_soc_component_update_bits(component, > DA7219_ALC_CTRL1, > DA7219_ALC_OFFSET_EN_MASK | > DA7219_ALC_SYNC_MODE_MASK, > DA7219_ALC_OFFSET_EN_MASK | > DA7219_ALC_SYNC_MODE_MASK); > + if (ret < 0) > + return ret; > } > > /* Restore input filter control register to original state */ > - snd_soc_component_write(component, DA7219_ADC_L_CTRL, adc_ctrl); > + ret = snd_soc_component_write(component, DA7219_ADC_L_CTRL, > adc_ctrl); > + if (ret < 0) > + return ret; > > /* Restore input mixer control registers to original state */ > - snd_soc_component_write(component, DA7219_MIXIN_L_CTRL, > mixin_ctrl); > + ret = snd_soc_component_write(component, DA7219_MIXIN_L_CTRL, > + mixin_ctrl); > + if (ret < 0) > + return ret; > > /* Restore MIC control registers to original states */ > - snd_soc_component_write(component, DA7219_MIC_1_CTRL, mic_ctrl); > + ret = snd_soc_component_write(component, DA7219_MIC_1_CTRL, > mic_ctrl); > + if (ret < 0) > + return ret; > + > + return 0; > } > > static int da7219_mixin_gain_put(struct snd_kcontrol *kcontrol, @@ -391,7 > +425,7 @@ static int da7219_mixin_gain_put(struct snd_kcontrol *kcontrol, > * make sure calibrated offsets are updated. > */ > if ((ret == 1) && (da7219->alc_en)) > - da7219_alc_calib(component); > + ret = da7219_alc_calib(component); > > return ret; > } > @@ -401,11 +435,14 @@ static int da7219_alc_sw_put(struct snd_kcontrol > *kcontrol, { > struct snd_soc_component *component = > snd_soc_kcontrol_component(kcontrol); > struct da7219_priv *da7219 = > snd_soc_component_get_drvdata(component); > + int ret; > > > /* Force ALC offset calibration if enabling ALC */ > if ((ucontrol->value.integer.value[0]) && (!da7219->alc_en)) { > - da7219_alc_calib(component); > + ret = da7219_alc_calib(component); > + if (ret < 0) > + return ret; > da7219->alc_en = true; > } else { > da7219->alc_en = false; > @@ -813,16 +850,20 @@ static int da7219_dai_event(struct > snd_soc_dapm_widget *w, > return ret; > } > } else { > - snd_soc_component_update_bits(component, > + ret = > snd_soc_component_update_bits(component, > > DA7219_DAI_CLK_MODE, > > DA7219_DAI_CLK_EN_MASK, > > DA7219_DAI_CLK_EN_MASK); > + if (ret < 0) > + return ret; > } > } > > /* PC synchronised to DAI */ > - snd_soc_component_update_bits(component, > DA7219_PC_COUNT, > + ret = snd_soc_component_update_bits(component, > DA7219_PC_COUNT, > DA7219_PC_FREERUN_MASK, 0); > + if (ret < 0) > + return ret; > > /* Slave mode, if SRM not enabled no need for status checks */ > pll_ctrl = snd_soc_component_read32(component, > DA7219_PLL_CTRL); @@ -846,19 +887,23 @@ static int da7219_dai_event(struct > snd_soc_dapm_widget *w, > return 0; > case SND_SOC_DAPM_POST_PMD: > /* PC free-running */ > - snd_soc_component_update_bits(component, > DA7219_PC_COUNT, > + ret = snd_soc_component_update_bits(component, > DA7219_PC_COUNT, > DA7219_PC_FREERUN_MASK, > DA7219_PC_FREERUN_MASK); > + if (ret < 0) > + return ret; > > /* Disable DAI clks if in master mode */ > if (da7219->master) { > if (da7219->dai_clks) > clk_disable_unprepare(da7219->dai_clks); > else > - snd_soc_component_update_bits(component, > + ret = > snd_soc_component_update_bits(component, > > DA7219_DAI_CLK_MODE, > > DA7219_DAI_CLK_EN_MASK, > 0); > + if (ret < 0) > + return ret; > } > > return 0; > @@ -887,6 +932,7 @@ static int da7219_mixout_event(struct > snd_soc_dapm_widget *w, { > struct snd_soc_component *component = > snd_soc_dapm_to_component(w->dapm); > u8 hp_ctrl, min_gain_mask; > + int ret; > > switch (w->reg) { > case DA7219_MIXOUT_L_CTRL: > @@ -904,15 +950,20 @@ static int da7219_mixout_event(struct > snd_soc_dapm_widget *w, > switch (event) { > case SND_SOC_DAPM_PRE_PMD: > /* Enable minimum gain on HP to avoid pops */ > - snd_soc_component_update_bits(component, hp_ctrl, > min_gain_mask, > - min_gain_mask); > + ret = snd_soc_component_update_bits(component, hp_ctrl, > + min_gain_mask, min_gain_mask); > + if (ret < 0) > + return ret; > > msleep(DA7219_MIN_GAIN_DELAY); > > break; > case SND_SOC_DAPM_POST_PMU: > /* Remove minimum gain on HP */ > - snd_soc_component_update_bits(component, hp_ctrl, > min_gain_mask, 0); > + ret = snd_soc_component_update_bits(component, hp_ctrl, > + min_gain_mask, 0); > + if (ret < 0) > + return ret; > > break; > } > @@ -925,21 +976,29 @@ static int da7219_gain_ramp_event(struct > snd_soc_dapm_widget *w, { > struct snd_soc_component *component = > snd_soc_dapm_to_component(w->dapm); > struct da7219_priv *da7219 = > snd_soc_component_get_drvdata(component); > + int ret; > > switch (event) { > case SND_SOC_DAPM_PRE_PMU: > case SND_SOC_DAPM_PRE_PMD: > /* Ensure nominal gain ramping for DAPM sequence */ > - da7219->gain_ramp_ctrl = > - snd_soc_component_read32(component, > DA7219_GAIN_RAMP_CTRL); > - snd_soc_component_write(component, > DA7219_GAIN_RAMP_CTRL, > - DA7219_GAIN_RAMP_RATE_NOMINAL); > + da7219->gain_ramp_ctrl = > snd_soc_component_read32(component, > + DA7219_GAIN_RAMP_CTRL); > + if (da7219->gain_ramp_ctrl < 0) > + return da7219->gain_ramp_ctrl; > + ret = snd_soc_component_write(component, > + DA7219_GAIN_RAMP_CTRL, > + DA7219_GAIN_RAMP_RATE_NOMINAL); > + if (ret < 0) > + return ret; > break; > case SND_SOC_DAPM_POST_PMU: > case SND_SOC_DAPM_POST_PMD: > /* Restore previous gain ramp settings */ > - snd_soc_component_write(component, > DA7219_GAIN_RAMP_CTRL, > + ret = snd_soc_component_write(component, > DA7219_GAIN_RAMP_CTRL, > da7219->gain_ramp_ctrl); > + if (ret < 0) > + return ret; > break; > } > > @@ -1177,13 +1236,17 @@ static int da7219_set_dai_sysclk(struct snd_soc_dai > *codec_dai, > > switch (clk_id) { > case DA7219_CLKSRC_MCLK_SQR: > - snd_soc_component_update_bits(component, > DA7219_PLL_CTRL, > + ret = snd_soc_component_update_bits(component, > DA7219_PLL_CTRL, > DA7219_PLL_MCLK_SQR_EN_MASK, > DA7219_PLL_MCLK_SQR_EN_MASK); > + if (ret < 0) > + return ret; > break; > case DA7219_CLKSRC_MCLK: > - snd_soc_component_update_bits(component, > DA7219_PLL_CTRL, > + ret = snd_soc_component_update_bits(component, > DA7219_PLL_CTRL, > DA7219_PLL_MCLK_SQR_EN_MASK, 0); > + if (ret < 0) > + return ret; > break; > default: > dev_err(codec_dai->dev, "Unknown clock source %d\n", clk_id); > @@ -1219,6 +1282,7 @@ int da7219_set_pll(struct snd_soc_component > *component, int source, unsigned int > u8 pll_frac_top, pll_frac_bot, pll_integer; > u32 freq_ref; > u64 frac_div; > + int ret; > > /* Verify 2MHz - 54MHz MCLK provided, and set input divider */ > if (da7219->mclk_rate < 2000000) { > @@ -1252,9 +1316,11 @@ int da7219_set_pll(struct snd_soc_component > *component, int source, unsigned int > switch (source) { > case DA7219_SYSCLK_MCLK: > pll_ctrl |= DA7219_PLL_MODE_BYPASS; > - snd_soc_component_update_bits(component, > DA7219_PLL_CTRL, > + ret = snd_soc_component_update_bits(component, > DA7219_PLL_CTRL, > DA7219_PLL_INDIV_MASK | > DA7219_PLL_MODE_MASK, pll_ctrl); > + if (ret < 0) > + return ret; > return 0; > case DA7219_SYSCLK_PLL: > pll_ctrl |= DA7219_PLL_MODE_NORMAL; > @@ -1275,12 +1341,23 @@ int da7219_set_pll(struct snd_soc_component > *component, int source, unsigned int > pll_frac_bot = (frac_div) & DA7219_BYTE_MASK; > > /* Write PLL config & dividers */ > - snd_soc_component_write(component, DA7219_PLL_FRAC_TOP, > pll_frac_top); > - snd_soc_component_write(component, DA7219_PLL_FRAC_BOT, > pll_frac_bot); > - snd_soc_component_write(component, DA7219_PLL_INTEGER, > pll_integer); > - snd_soc_component_update_bits(component, DA7219_PLL_CTRL, > + ret = snd_soc_component_write(component, DA7219_PLL_FRAC_TOP, > + pll_frac_top); > + if (ret < 0) > + return ret; > + ret = snd_soc_component_write(component, DA7219_PLL_FRAC_BOT, > + pll_frac_bot); > + if (ret < 0) > + return ret; > + ret = snd_soc_component_write(component, DA7219_PLL_INTEGER, > + pll_integer); > + if (ret < 0) > + return ret; > + ret = snd_soc_component_update_bits(component, DA7219_PLL_CTRL, > DA7219_PLL_INDIV_MASK | > DA7219_PLL_MODE_MASK, > pll_ctrl); > + if (ret < 0) > + return ret; > > return 0; > } > @@ -1304,6 +1381,7 @@ static int da7219_set_dai_fmt(struct snd_soc_dai > *codec_dai, unsigned int fmt) > struct snd_soc_component *component = codec_dai->component; > struct da7219_priv *da7219 = > snd_soc_component_get_drvdata(component); > u8 dai_clk_mode = 0, dai_ctrl = 0; > + int ret; > > switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { > case SND_SOC_DAIFMT_CBM_CFM: > @@ -1379,12 +1457,16 @@ static int da7219_set_dai_fmt(struct snd_soc_dai > *codec_dai, unsigned int fmt) > /* By default 64 BCLKs per WCLK is supported */ > dai_clk_mode |= DA7219_DAI_BCLKS_PER_WCLK_64; > > - snd_soc_component_update_bits(component, > DA7219_DAI_CLK_MODE, > + ret = snd_soc_component_update_bits(component, > DA7219_DAI_CLK_MODE, > DA7219_DAI_BCLKS_PER_WCLK_MASK | > DA7219_DAI_CLK_POL_MASK | > DA7219_DAI_WCLK_POL_MASK, > dai_clk_mode); > - snd_soc_component_update_bits(component, DA7219_DAI_CTRL, > DA7219_DAI_FORMAT_MASK, > - dai_ctrl); > + if (ret < 0) > + return ret; > + ret = snd_soc_component_update_bits(component, DA7219_DAI_CTRL, > + DA7219_DAI_FORMAT_MASK, dai_ctrl); > + if (ret < 0) > + return ret; > > return 0; > } > @@ -1398,15 +1480,22 @@ static int da7219_set_dai_tdm_slot(struct > snd_soc_dai *dai, > u8 dai_bclks_per_wclk; > u16 offset; > u32 frame_size; > + int ret; > > /* No channels enabled so disable TDM, revert to 64-bit frames */ > if (!tx_mask) { > - snd_soc_component_update_bits(component, > DA7219_DAI_TDM_CTRL, > + ret = snd_soc_component_update_bits(component, > + DA7219_DAI_TDM_CTRL, > DA7219_DAI_TDM_CH_EN_MASK | > DA7219_DAI_TDM_MODE_EN_MASK, 0); > - snd_soc_component_update_bits(component, > DA7219_DAI_CLK_MODE, > + if (ret < 0) > + return ret; > + ret = snd_soc_component_update_bits(component, > + DA7219_DAI_CLK_MODE, > DA7219_DAI_BCLKS_PER_WCLK_MASK, > DA7219_DAI_BCLKS_PER_WCLK_64); > + if (ret < 0) > + return ret; > return 0; > } > > @@ -1444,19 +1533,25 @@ static int da7219_set_dai_tdm_slot(struct > snd_soc_dai *dai, > return -EINVAL; > } > > - snd_soc_component_update_bits(component, > DA7219_DAI_CLK_MODE, > + ret = snd_soc_component_update_bits(component, > DA7219_DAI_CLK_MODE, > DA7219_DAI_BCLKS_PER_WCLK_MASK, > dai_bclks_per_wclk); > + if (ret < 0) > + return ret; > > offset = cpu_to_le16(rx_mask); > - regmap_bulk_write(da7219->regmap, DA7219_DAI_OFFSET_LOWER, > + ret = regmap_bulk_write(da7219->regmap, > DA7219_DAI_OFFSET_LOWER, > &offset, sizeof(offset)); > + if (ret < 0) > + return ret; > > - snd_soc_component_update_bits(component, DA7219_DAI_TDM_CTRL, > + ret = snd_soc_component_update_bits(component, > DA7219_DAI_TDM_CTRL, > DA7219_DAI_TDM_CH_EN_MASK | > DA7219_DAI_TDM_MODE_EN_MASK, > (tx_mask << DA7219_DAI_TDM_CH_EN_SHIFT) | > DA7219_DAI_TDM_MODE_EN_MASK); > + if (ret < 0) > + return ret; > > return 0; > } > @@ -1468,6 +1563,7 @@ static int da7219_hw_params(struct > snd_pcm_substream *substream, > struct snd_soc_component *component = dai->component; > u8 dai_ctrl = 0, fs; > unsigned int channels; > + int ret; > > switch (params_width(params)) { > case 16: > @@ -1533,11 +1629,15 @@ static int da7219_hw_params(struct > snd_pcm_substream *substream, > return -EINVAL; > } > > - snd_soc_component_update_bits(component, DA7219_DAI_CTRL, > + ret = snd_soc_component_update_bits(component, DA7219_DAI_CTRL, > DA7219_DAI_WORD_LENGTH_MASK | > DA7219_DAI_CH_NUM_MASK, > dai_ctrl); > - snd_soc_component_write(component, DA7219_SR, fs); > + if (ret < 0) > + return ret; > + ret = snd_soc_component_write(component, DA7219_SR, fs); > + if (ret < 0) > + return ret; > > return 0; > } > @@ -1692,9 +1792,12 @@ static int da7219_set_bias_level(struct > snd_soc_component *component, > case SND_SOC_BIAS_STANDBY: > if (snd_soc_component_get_bias_level(component) == > SND_SOC_BIAS_OFF) > /* Master bias */ > - snd_soc_component_update_bits(component, > DA7219_REFERENCES, > + ret = snd_soc_component_update_bits(component, > + DA7219_REFERENCES, > DA7219_BIAS_EN_MASK, > DA7219_BIAS_EN_MASK); > + if (ret < 0) > + return ret; > > if (snd_soc_component_get_bias_level(component) == > SND_SOC_BIAS_PREPARE) { > /* Remove MCLK */ > @@ -1705,8 +1808,11 @@ static int da7219_set_bias_level(struct > snd_soc_component *component, > case SND_SOC_BIAS_OFF: > /* Only disable master bias if we're not a wake-up source */ > if (!da7219->wakeup_source) > - snd_soc_component_update_bits(component, > DA7219_REFERENCES, > + ret = snd_soc_component_update_bits(component, > + DA7219_REFERENCES, > DA7219_BIAS_EN_MASK, 0); > + if (ret < 0) > + return ret; > > break; > } > @@ -1754,10 +1860,16 @@ static int da7219_handle_supplies(struct > snd_soc_component *component) > } > > /* Ensure device in active mode */ > - snd_soc_component_write(component, DA7219_SYSTEM_ACTIVE, > DA7219_SYSTEM_ACTIVE_MASK); > + ret = snd_soc_component_write(component, DA7219_SYSTEM_ACTIVE, > + DA7219_SYSTEM_ACTIVE_MASK); > + if (ret < 0) > + return ret; > > /* Update IO voltage level range */ > - snd_soc_component_write(component, DA7219_IO_CTRL, > io_voltage_lvl); > + ret = snd_soc_component_write(component, DA7219_IO_CTRL, > + io_voltage_lvl); > + if (ret < 0) > + return ret; > > return 0; > } > @@ -1768,10 +1880,13 @@ static int da7219_dai_clks_prepare(struct clk_hw > *hw) > struct da7219_priv *da7219 = > container_of(hw, struct da7219_priv, dai_clks_hw); > struct snd_soc_component *component = da7219->aad->component; > + int ret; > > - snd_soc_component_update_bits(component, > DA7219_DAI_CLK_MODE, > + ret = snd_soc_component_update_bits(component, > DA7219_DAI_CLK_MODE, > DA7219_DAI_CLK_EN_MASK, > DA7219_DAI_CLK_EN_MASK); > + if (ret < 0) > + return ret; > > return 0; > } > @@ -1781,9 +1896,12 @@ static void da7219_dai_clks_unprepare(struct clk_hw > *hw) > struct da7219_priv *da7219 = > container_of(hw, struct da7219_priv, dai_clks_hw); > struct snd_soc_component *component = da7219->aad->component; > + int ret; > > - snd_soc_component_update_bits(component, > DA7219_DAI_CLK_MODE, > + ret = snd_soc_component_update_bits(component, > DA7219_DAI_CLK_MODE, > DA7219_DAI_CLK_EN_MASK, 0); > + if (ret < 0) > + dev_err(component->dev, "Failed to disable clk: %d\n", ret); > } > > static int da7219_dai_clks_is_prepared(struct clk_hw *hw) @@ -1791,9 +1909,11 > @@ static int da7219_dai_clks_is_prepared(struct clk_hw *hw) > struct da7219_priv *da7219 = > container_of(hw, struct da7219_priv, dai_clks_hw); > struct snd_soc_component *component = da7219->aad->component; > - u8 clk_reg; > + int clk_reg; > > clk_reg = snd_soc_component_read32(component, > DA7219_DAI_CLK_MODE); > + if (clk_reg < 0) > + return clk_reg; > > return !!(clk_reg & DA7219_DAI_CLK_EN_MASK); } @@ -1844,10 > +1964,11 @@ static void da7219_register_dai_clks(struct snd_soc_component > *component) static inline void da7219_register_dai_clks(struct > snd_soc_component *component) {} #endif /* CONFIG_COMMON_CLK */ > > -static void da7219_handle_pdata(struct snd_soc_component *component) > +static int da7219_handle_pdata(struct snd_soc_component *component) > { > struct da7219_priv *da7219 = > snd_soc_component_get_drvdata(component); > struct da7219_pdata *pdata = da7219->pdata; > + int ret; > > if (pdata) { > u8 micbias_lvl = 0; > @@ -1869,7 +1990,10 @@ static void da7219_handle_pdata(struct > snd_soc_component *component) > break; > } > > - snd_soc_component_write(component, DA7219_MICBIAS_CTRL, > micbias_lvl); > + ret = snd_soc_component_write(component, > DA7219_MICBIAS_CTRL, > + micbias_lvl); > + if (ret < 0) > + return ret; > > /* > * Calculate delay required to compensate for DC offset in @@ - > 1884,11 +2008,15 @@ static void da7219_handle_pdata(struct > snd_soc_component *component) > case DA7219_MIC_AMP_IN_SEL_DIFF: > case DA7219_MIC_AMP_IN_SEL_SE_P: > case DA7219_MIC_AMP_IN_SEL_SE_N: > - snd_soc_component_write(component, > DA7219_MIC_1_SELECT, > - pdata->mic_amp_in_sel); > + ret = snd_soc_component_write(component, > + DA7219_MIC_1_SELECT, > + pdata->mic_amp_in_sel); > + if (ret < 0) > + return ret; > break; > } > } > + return 0; > } > > static struct reg_sequence da7219_rev_aa_patch[] = { @@ -1934,7 +2062,9 @@ > static int da7219_probe(struct snd_soc_component *component) > if (!da7219->pdata) > da7219->pdata = da7219_fw_to_pdata(component); > > - da7219_handle_pdata(component); > + ret = da7219_handle_pdata(component); > + if (ret < 0) > + return ret; > > /* Check if MCLK provided */ > da7219->mclk = devm_clk_get(component->dev, "mclk"); @@ -1948,36 > +2078,57 @@ static int da7219_probe(struct snd_soc_component *component) > } > > /* Default PC counter to free-running */ > - snd_soc_component_update_bits(component, DA7219_PC_COUNT, > DA7219_PC_FREERUN_MASK, > - DA7219_PC_FREERUN_MASK); > + ret = snd_soc_component_update_bits(component, > DA7219_PC_COUNT, > + DA7219_PC_FREERUN_MASK, > DA7219_PC_FREERUN_MASK); > + if (ret < 0) > + return ret; > > /* Default gain ramping */ > - snd_soc_component_update_bits(component, DA7219_MIXIN_L_CTRL, > + ret = snd_soc_component_update_bits(component, > DA7219_MIXIN_L_CTRL, > DA7219_MIXIN_L_AMP_RAMP_EN_MASK, > DA7219_MIXIN_L_AMP_RAMP_EN_MASK); > - snd_soc_component_update_bits(component, DA7219_ADC_L_CTRL, > DA7219_ADC_L_RAMP_EN_MASK, > - DA7219_ADC_L_RAMP_EN_MASK); > - snd_soc_component_update_bits(component, DA7219_DAC_L_CTRL, > DA7219_DAC_L_RAMP_EN_MASK, > - DA7219_DAC_L_RAMP_EN_MASK); > - snd_soc_component_update_bits(component, DA7219_DAC_R_CTRL, > DA7219_DAC_R_RAMP_EN_MASK, > - DA7219_DAC_R_RAMP_EN_MASK); > - snd_soc_component_update_bits(component, DA7219_HP_L_CTRL, > + if (ret < 0) > + return ret; > + ret = snd_soc_component_update_bits(component, > DA7219_ADC_L_CTRL, > + DA7219_ADC_L_RAMP_EN_MASK, > DA7219_ADC_L_RAMP_EN_MASK); > + if (ret < 0) > + return ret; > + ret = snd_soc_component_update_bits(component, > DA7219_DAC_L_CTRL, > + DA7219_DAC_L_RAMP_EN_MASK, > DA7219_DAC_L_RAMP_EN_MASK); > + if (ret < 0) > + return ret; > + ret = snd_soc_component_update_bits(component, > DA7219_DAC_R_CTRL, > + DA7219_DAC_R_RAMP_EN_MASK, > DA7219_DAC_R_RAMP_EN_MASK); > + if (ret < 0) > + return ret; > + ret = snd_soc_component_update_bits(component, > DA7219_HP_L_CTRL, > DA7219_HP_L_AMP_RAMP_EN_MASK, > DA7219_HP_L_AMP_RAMP_EN_MASK); > - snd_soc_component_update_bits(component, DA7219_HP_R_CTRL, > + if (ret < 0) > + return ret; > + ret = snd_soc_component_update_bits(component, > DA7219_HP_R_CTRL, > DA7219_HP_R_AMP_RAMP_EN_MASK, > DA7219_HP_R_AMP_RAMP_EN_MASK); > + if (ret < 0) > + return ret; > > /* Default minimum gain on HP to avoid pops during DAPM sequencing > */ > - snd_soc_component_update_bits(component, DA7219_HP_L_CTRL, > + ret = snd_soc_component_update_bits(component, > DA7219_HP_L_CTRL, > DA7219_HP_L_AMP_MIN_GAIN_EN_MASK, > DA7219_HP_L_AMP_MIN_GAIN_EN_MASK); > - snd_soc_component_update_bits(component, DA7219_HP_R_CTRL, > + if (ret < 0) > + return ret; > + ret = snd_soc_component_update_bits(component, > DA7219_HP_R_CTRL, > DA7219_HP_R_AMP_MIN_GAIN_EN_MASK, > DA7219_HP_R_AMP_MIN_GAIN_EN_MASK); > + if (ret < 0) > + return ret; > > /* Default infinite tone gen, start/stop by Kcontrol */ > - snd_soc_component_write(component, DA7219_TONE_GEN_CYCLES, > DA7219_BEEP_CYCLES_MASK); > + ret = snd_soc_component_write(component, > DA7219_TONE_GEN_CYCLES, > + DA7219_BEEP_CYCLES_MASK); > + if (ret < 0) > + return ret; > > /* Initialise AAD block */ > ret = da7219_aad_init(component); > @@ -2221,16 +2372,28 @@ static int da7219_i2c_probe(struct i2c_client *i2c, > regcache_cache_bypass(da7219->regmap, true); > > /* Disable audio paths if still active from previous start */ > - regmap_read(da7219->regmap, DA7219_SYSTEM_ACTIVE, > &system_active); > + ret = regmap_read(da7219->regmap, DA7219_SYSTEM_ACTIVE, > &system_active); > + if (ret < 0) > + return ret; > if (system_active) { > - regmap_write(da7219->regmap, DA7219_GAIN_RAMP_CTRL, > + ret = regmap_write(da7219->regmap, > DA7219_GAIN_RAMP_CTRL, > DA7219_GAIN_RAMP_RATE_NOMINAL); > - regmap_write(da7219->regmap, > DA7219_SYSTEM_MODES_INPUT, 0x00); > - regmap_write(da7219->regmap, > DA7219_SYSTEM_MODES_OUTPUT, 0x01); > + if (ret < 0) > + return ret; > + ret = regmap_write(da7219->regmap, > DA7219_SYSTEM_MODES_INPUT, > + 0x00); > + if (ret < 0) > + return ret; > + ret = regmap_write(da7219->regmap, > DA7219_SYSTEM_MODES_OUTPUT, > + 0x01); > + if (ret < 0) > + return ret; > > for (i = 0; i < DA7219_SYS_STAT_CHECK_RETRIES; ++i) { > - regmap_read(da7219->regmap, > DA7219_SYSTEM_STATUS, > + ret = regmap_read(da7219->regmap, > DA7219_SYSTEM_STATUS, > &system_status); > + if (ret < 0) > + return ret; > if (!system_status) > break; > > @@ -2239,13 +2402,19 @@ static int da7219_i2c_probe(struct i2c_client *i2c, > } > > /* Soft reset component */ > - regmap_write_bits(da7219->regmap, DA7219_ACCDET_CONFIG_1, > + ret = regmap_write_bits(da7219->regmap, DA7219_ACCDET_CONFIG_1, > DA7219_ACCDET_EN_MASK, 0); > - regmap_write_bits(da7219->regmap, DA7219_CIF_CTRL, > + if (ret < 0) > + return ret; > + ret = regmap_write_bits(da7219->regmap, DA7219_CIF_CTRL, > DA7219_CIF_REG_SOFT_RESET_MASK, > DA7219_CIF_REG_SOFT_RESET_MASK); > - regmap_write_bits(da7219->regmap, DA7219_SYSTEM_ACTIVE, > + if (ret < 0) > + return ret; > + ret = regmap_write_bits(da7219->regmap, DA7219_SYSTEM_ACTIVE, > DA7219_SYSTEM_ACTIVE_MASK, 0); > + if (ret < 0) > + return ret; > > regcache_cache_bypass(da7219->regmap, false); > > diff --git a/sound/soc/codecs/da7219.h b/sound/soc/codecs/da7219.h index > 3a00686..0cf78a7 100644 > --- a/sound/soc/codecs/da7219.h > +++ b/sound/soc/codecs/da7219.h > @@ -832,7 +832,7 @@ struct da7219_priv { > bool alc_en; > bool micbias_on_event; > unsigned int mic_pga_delay; > - u8 gain_ramp_ctrl; > + int gain_ramp_ctrl; > }; > > int da7219_set_pll(struct snd_soc_component *component, int source, > unsigned int fout); > -- > 1.9.1 _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel