[alsa-devel] [PATCH v2 1/2] ASoC: rt5645: change gpio to gpiod APIs

Michele Curti michele.curti at gmail.com
Fri May 29 16:23:25 CEST 2015


On Fri, May 29, 2015 at 06:16:46PM +0800, Bard Liao wrote:
> Move gpio to gpio_desc and use gpiod APIs in codec driver.

I don't get these errors anymore :)

[    1.805330] rt5645 i2c-10EC5648:00: Fail gpio_request hp_det_gpio
[    1.805439] rt5645 i2c-10EC5648:00: Fail gpio_direction hp_det_gpio

Thanks,
Michele

> 
> Signed-off-by: Bard Liao <bardliao at realtek.com>
> ---
>  include/sound/rt5645.h    |  3 ---
>  sound/soc/codecs/rt5645.c | 47 +++++++++++++----------------------------------
>  sound/soc/codecs/rt5645.h |  1 +
>  3 files changed, 14 insertions(+), 37 deletions(-)
> 
> diff --git a/include/sound/rt5645.h b/include/sound/rt5645.h
> index 652cb9e..22734bc 100644
> --- a/include/sound/rt5645.h
> +++ b/include/sound/rt5645.h
> @@ -20,9 +20,6 @@ struct rt5645_platform_data {
>  	unsigned int dmic2_data_pin;
>  	/* 0 = IN2P; 1 = GPIO6; 2 = GPIO10; 3 = GPIO12 */
>  
> -	unsigned int hp_det_gpio;
> -	bool gpio_hp_det_active_high;
> -
>  	unsigned int jd_mode;
>  };
>  
> diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
> index aaede45..0cb4942 100644
> --- a/sound/soc/codecs/rt5645.c
> +++ b/sound/soc/codecs/rt5645.c
> @@ -2938,17 +2938,11 @@ static int rt5645_irq_detection(struct rt5645_priv *rt5645)
>  
>  	switch (rt5645->pdata.jd_mode) {
>  	case 0: /* Not using rt5645 JD */
> -		if (gpio_is_valid(rt5645->pdata.hp_det_gpio)) {
> -			gpio_state = gpio_get_value(rt5645->pdata.hp_det_gpio);
> -			dev_dbg(rt5645->codec->dev, "gpio = %d(%d)\n",
> -				rt5645->pdata.hp_det_gpio, gpio_state);
> -		}
> -		if ((rt5645->pdata.gpio_hp_det_active_high && gpio_state) ||
> -			(!rt5645->pdata.gpio_hp_det_active_high &&
> -			 !gpio_state)) {
> -			report = rt5645_jack_detect(rt5645->codec, 1);
> -		} else {
> -			report = rt5645_jack_detect(rt5645->codec, 0);
> +		if (rt5645->gpiod_hp_det) {
> +			gpio_state = gpiod_get_value(rt5645->gpiod_hp_det);
> +			dev_dbg(rt5645->codec->dev, "gpio_state = %d\n",
> +				gpio_state);
> +			report = rt5645_jack_detect(rt5645->codec, gpio_state);
>  		}
>  		snd_soc_jack_report(rt5645->hp_jack,
>  				    report, SND_JACK_HEADPHONE);
> @@ -3253,19 +3247,17 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
>  	} else {
>  		if (dmi_check_system(dmi_platform_intel_braswell)) {
>  			rt5645->pdata = *rt5645_pdata;
> -			gpiod = devm_gpiod_get_index(&i2c->dev, "rt5645", 0);
> -
> -			if (IS_ERR(gpiod) || gpiod_direction_input(gpiod)) {
> -				rt5645->pdata.hp_det_gpio = -1;
> -				dev_err(&i2c->dev, "failed to initialize gpiod\n");
> -			} else {
> -				rt5645->pdata.hp_det_gpio = desc_to_gpio(gpiod);
> -				rt5645->pdata.gpio_hp_det_active_high
> -						= !gpiod_is_active_low(gpiod);
> -			}
>  		}
>  	}
>  
> +	rt5645->gpiod_hp_det = devm_gpiod_get_index(&i2c->dev, "rt5645", 0);
> +
> +	if (IS_ERR(rt5645->gpiod_hp_det) ||
> +	    gpiod_direction_input(rt5645->gpiod_hp_det)) {
> +		rt5645->gpiod_hp_det = NULL;
> +		dev_err(&i2c->dev, "failed to initialize gpiod\n");
> +	}
> +
>  	rt5645->regmap = devm_regmap_init_i2c(i2c, &rt5645_regmap);
>  	if (IS_ERR(rt5645->regmap)) {
>  		ret = PTR_ERR(rt5645->regmap);
> @@ -3425,16 +3417,6 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
>  			dev_err(&i2c->dev, "Failed to reguest IRQ: %d\n", ret);
>  	}
>  
> -	if (gpio_is_valid(rt5645->pdata.hp_det_gpio)) {
> -		ret = gpio_request(rt5645->pdata.hp_det_gpio, "rt5645");
> -		if (ret)
> -			dev_err(&i2c->dev, "Fail gpio_request hp_det_gpio\n");
> -
> -		ret = gpio_direction_input(rt5645->pdata.hp_det_gpio);
> -		if (ret)
> -			dev_err(&i2c->dev, "Fail gpio_direction hp_det_gpio\n");
> -	}
> -
>  	INIT_DELAYED_WORK(&rt5645->jack_detect_work, rt5645_jack_detect_work);
>  
>  	return snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt5645,
> @@ -3450,9 +3432,6 @@ static int rt5645_i2c_remove(struct i2c_client *i2c)
>  
>  	cancel_delayed_work_sync(&rt5645->jack_detect_work);
>  
> -	if (gpio_is_valid(rt5645->pdata.hp_det_gpio))
> -		gpio_free(rt5645->pdata.hp_det_gpio);
> -
>  	snd_soc_unregister_codec(&i2c->dev);
>  
>  	return 0;
> diff --git a/sound/soc/codecs/rt5645.h b/sound/soc/codecs/rt5645.h
> index 9ec4e89..0353a6a 100644
> --- a/sound/soc/codecs/rt5645.h
> +++ b/sound/soc/codecs/rt5645.h
> @@ -2182,6 +2182,7 @@ struct rt5645_priv {
>  	struct rt5645_platform_data pdata;
>  	struct regmap *regmap;
>  	struct i2c_client *i2c;
> +	struct gpio_desc *gpiod_hp_det;
>  	struct snd_soc_jack *hp_jack;
>  	struct snd_soc_jack *mic_jack;
>  	struct snd_soc_jack *btn_jack;
> -- 
> 1.8.1.1.439.g50a6b54
> 
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel


More information about the Alsa-devel mailing list