On 03/05/2024 20:55, Artur Weber wrote: > Some Samsung devices that use the midas_wm1811 driver use a GPIO-based > method for detecting whether the headset jack is plugged in, as well as > detecting which headset buttons are pressed. There are two GPIOs: > a "headset detect" GPIO responsible for detecting jack insertion, and > a "headset key" GPIO which triggers when a button on the headset is > pressed. The plug type and the button pressed are determined based > on information from an ADC channel. ... > > @@ -433,6 +590,9 @@ static int midas_probe(struct platform_device *pdev) > struct snd_soc_card *card = &midas_card; > struct device *dev = &pdev->dev; > static struct snd_soc_dai_link *dai_link; > + enum iio_chan_type channel_type; > + u32 fourpole_threshold[2]; > + u32 button_threshold[3]; > struct midas_priv *priv; > int ret, i; > > @@ -468,6 +628,91 @@ static int midas_probe(struct platform_device *pdev) > return PTR_ERR(priv->gpio_lineout_sel); > } > > + priv->gpio_headset_detect = devm_gpiod_get_optional(dev, > + "headset-detect", GPIOD_IN); > + if (IS_ERR(priv->gpio_headset_detect)) { > + dev_err(dev, "Failed to get headset jack detect GPIO\n"); syntax is: return dev_err_probe() > + return PTR_ERR(priv->gpio_headset_detect); > + } > + > + if (priv->gpio_headset_detect) { > + priv->adc_headset_detect = devm_iio_channel_get(dev, > + "headset-detect"); > + if (IS_ERR(priv->adc_headset_detect)) { > + dev_err(dev, "Failed to get ADC channel\n"); return dev_err_probe() > + return PTR_ERR(priv->adc_headset_detect); > + } > + > + ret = iio_get_channel_type(priv->adc_headset_detect, > + &channel_type); > + if (ret) { > + dev_err(dev, "Failed to get ADC channel type\n"); > + return ret; > + } > + > + if (channel_type != IIO_VOLTAGE) { > + dev_err(dev, "ADC channel is not voltage\n"); > + return ret; > + } > + > + priv->gpio_headset_key = devm_gpiod_get(dev, "headset-key", > + GPIOD_IN); > + if (IS_ERR(priv->gpio_headset_key)) { > + dev_err(dev, "Failed to get headset key gpio\n"); return dev_err_probe() Best regards, Krzysztof