Quoting Srinivasa Rao Mandadapu (2022-02-12 04:24:31) > diff --git a/sound/soc/codecs/wcd938x.c b/sound/soc/codecs/wcd938x.c > index eff200a..08d16a9 100644 > --- a/sound/soc/codecs/wcd938x.c > +++ b/sound/soc/codecs/wcd938x.c > @@ -194,6 +194,7 @@ struct wcd938x_priv { > int ear_rx_path; > int variant; > int reset_gpio; > + int us_euro_gpio; > u32 micb1_mv; > u32 micb2_mv; > u32 micb3_mv; > @@ -4196,6 +4197,33 @@ static void wcd938x_dt_parse_micbias_info(struct device *dev, struct wcd938x_pri > dev_info(dev, "%s: Micbias4 DT property not found\n", __func__); > } > > +static bool wcd938x_swap_gnd_mic(struct snd_soc_component *component, bool active) > +{ > + int value; > + > + struct wcd938x_priv *wcd938x; > + > + if (!component) { So component is NULL > + dev_err(component->dev, "%s component is NULL\n", __func__); And now we deref component. Great NULL pointer exception Batman! Please test your code and remove useless checks. It makes the code harder to read and slows things down. > + return false; > + } > + > + wcd938x = snd_soc_component_get_drvdata(component); > + if (!wcd938x) { > + dev_err(component->dev, "%s private data is NULL\n", __func__); Is this possible? I doubt it so can we just remove it? > + return false; > + } > + > + value = gpio_get_value(wcd938x->us_euro_gpio); > + > + gpio_set_value(wcd938x->us_euro_gpio, !value); > + /* 20us sleep required after changing the gpio state*/ Add a space before ending comment with */ > + usleep_range(20, 30); > + > + return true; > +} > + > + > static int wcd938x_populate_dt_data(struct wcd938x_priv *wcd938x, struct device *dev) > { > struct wcd_mbhc_config *cfg = &wcd938x->mbhc_cfg; > @@ -4208,6 +4236,16 @@ static int wcd938x_populate_dt_data(struct wcd938x_priv *wcd938x, struct device > return wcd938x->reset_gpio; > } > > + wcd938x->us_euro_gpio = of_get_named_gpio(dev->of_node, "us-euro-gpios", 0); Why do we need to use of GPIO APIs here? Can this driver be converted to use GPIO descriptors via the gpiod APIs? > + if (wcd938x->us_euro_gpio < 0) { > + dev_err(dev, "Failed to get us-euro-gpios gpio: err = %d\n", wcd938x->us_euro_gpio); > + } else { > + cfg->swap_gnd_mic = wcd938x_swap_gnd_mic; > + gpio_direction_output(wcd938x->us_euro_gpio, 0); > + /* 20us sleep required after pulling the reset gpio to LOW */ > + usleep_range(20, 30); > + } > +