Hi Charles, On 19. 5. 29. 오후 6:46, Charles Keepax wrote: > Ensure the case when regmap_update_bits_check fails and the change > variable is not updated is handled correctly. > > Signed-off-by: Charles Keepax <ckee...@opensource.cirrus.com> > --- > > Changes since v1: > - Print error message in driver remove > > Thanks, > Charles > > drivers/extcon/extcon-arizona.c | 33 ++++++++++++++++++++------------- > 1 file changed, 20 insertions(+), 13 deletions(-) > > diff --git a/drivers/extcon/extcon-arizona.c b/drivers/extcon/extcon-arizona.c > index 9327479c719c2..519e89aedd4a0 100644 > --- a/drivers/extcon/extcon-arizona.c > +++ b/drivers/extcon/extcon-arizona.c > @@ -335,10 +335,12 @@ static void arizona_start_mic(struct > arizona_extcon_info *info) > > arizona_extcon_pulse_micbias(info); > > - regmap_update_bits_check(arizona->regmap, ARIZONA_MIC_DETECT_1, > - ARIZONA_MICD_ENA, ARIZONA_MICD_ENA, > - &change); > - if (!change) { > + ret = regmap_update_bits_check(arizona->regmap, ARIZONA_MIC_DETECT_1, > + ARIZONA_MICD_ENA, ARIZONA_MICD_ENA, > + &change); > + if (ret < 0) { > + dev_err(arizona->dev, "Failed to enable micd: %d\n", ret); > + } else if (!change) { > regulator_disable(info->micvdd); > pm_runtime_put_autosuspend(info->dev); > } > @@ -350,12 +352,14 @@ static void arizona_stop_mic(struct arizona_extcon_info > *info) > const char *widget = arizona_extcon_get_micbias(info); > struct snd_soc_dapm_context *dapm = arizona->dapm; > struct snd_soc_component *component = snd_soc_dapm_to_component(dapm); > - bool change; > + bool change = false; > int ret; > > - regmap_update_bits_check(arizona->regmap, ARIZONA_MIC_DETECT_1, > - ARIZONA_MICD_ENA, 0, > - &change); > + ret = regmap_update_bits_check(arizona->regmap, ARIZONA_MIC_DETECT_1, > + ARIZONA_MICD_ENA, 0, > + &change); > + if (ret < 0) > + dev_err(arizona->dev, "Failed to disable micd: %d\n", ret); > > ret = snd_soc_component_disable_pin(component, widget); > if (ret != 0) > @@ -1727,12 +1731,15 @@ static int arizona_extcon_remove(struct > platform_device *pdev) > struct arizona *arizona = info->arizona; > int jack_irq_rise, jack_irq_fall; > bool change; > + int ret; > > - regmap_update_bits_check(arizona->regmap, ARIZONA_MIC_DETECT_1, > - ARIZONA_MICD_ENA, 0, > - &change); > - > - if (change) { > + ret = regmap_update_bits_check(arizona->regmap, ARIZONA_MIC_DETECT_1, > + ARIZONA_MICD_ENA, 0, > + &change); > + if (ret < 0) { > + dev_err(&pdev->dev, "Failed to disable micd on remove: %d\n", > + ret); > + } else if (change) { > regulator_disable(info->micvdd); > pm_runtime_put(info->dev); > } >
Applied it. Thanks. -- Best Regards, Chanwoo Choi Samsung Electronics