[alsa-devel] [PATCH] asoc: core - refactored DAPM pin control API.

Takashi Iwai tiwai at suse.de
Mon Jul 7 17:29:27 CEST 2008


At Mon, 07 Jul 2008 13:35:17 +0100,
Liam Girdwood wrote:
> 
> This time without the extras.....

Thanks, applied now.


Takashi

> 
> 
> 
> Refactored snd_soc_dapm_set_endpoint() to snd_soc_dapm_enable_pin() and
> snd_soc_dapm_disable_pin().
> 
> Renamed snd_soc_dapm_sync_endpoints() to snd_soc_dapm_sync().
> Renamed snd_soc_dapm_get_endpoint_status() to
> snd_soc_dapm_get_pin_status().
> 
> Signed-off-by: Liam Girdwood <lg at opensource.wolfsonmicro.com>
> ---
>  include/sound/soc-dapm.h           |   15 ++---
>  sound/soc/at91/eti_b1_wm8731.c     |   10 ++--
>  sound/soc/codecs/tlv320aic3x.c     |    4 +-
>  sound/soc/davinci/davinci-evm.c    |   16 +++---
>  sound/soc/omap/n810.c              |   27 ++++++---
>  sound/soc/pxa/corgi.c              |   42 +++++++------
>  sound/soc/pxa/poodle.c             |   24 ++++----
>  sound/soc/pxa/spitz.c              |   62 ++++++++++----------
>  sound/soc/pxa/tosa.c               |   30 +++++----
>  sound/soc/s3c24xx/neo1973_wm8753.c |  116 ++++++++++++++++++------------------
>  sound/soc/sh/sh7760-ac97.c         |    2 +-
>  sound/soc/soc-dapm.c               |   81 ++++++++++++++++---------
>  12 files changed, 230 insertions(+), 199 deletions(-)
> 
> diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h
> index b284953..3030fdc 100644
> --- a/include/sound/soc-dapm.h
> +++ b/include/sound/soc-dapm.h
> @@ -234,16 +234,11 @@ int snd_soc_dapm_set_bias_level(struct snd_soc_device *socdev,
>  /* dapm sys fs - used by the core */
>  int snd_soc_dapm_sys_add(struct device *dev);
>  
> -/* event handler for register modifier widget - used by the soc-dapm */
> -int dapm_reg_event(struct snd_soc_dapm_widget *w,
> -		   struct snd_kcontrol *kcontrol, int event);
> -
> -/* dapm audio endpoint control */
> -int snd_soc_dapm_set_endpoint(struct snd_soc_codec *codec,
> -	char *pin, int status);
> -int snd_soc_dapm_get_endpoint_status(struct snd_soc_codec *codec,
> -	char *pin);
> -int snd_soc_dapm_sync_endpoints(struct snd_soc_codec *codec);
> +/* dapm audio pin control and status */
> +int snd_soc_dapm_enable_pin(struct snd_soc_codec *codec, char *pin);
> +int snd_soc_dapm_disable_pin(struct snd_soc_codec *codec, char *pin);
> +int snd_soc_dapm_get_pin_status(struct snd_soc_codec *codec, char *pin);
> +int snd_soc_dapm_sync(struct snd_soc_codec *codec);
>  
>  /* dapm widget types */
>  enum snd_soc_dapm_type {
> diff --git a/sound/soc/at91/eti_b1_wm8731.c b/sound/soc/at91/eti_b1_wm8731.c
> index 4a383a4..ad971e7 100644
> --- a/sound/soc/at91/eti_b1_wm8731.c
> +++ b/sound/soc/at91/eti_b1_wm8731.c
> @@ -216,14 +216,14 @@ static int eti_b1_wm8731_init(struct snd_soc_codec *codec)
>  	snd_soc_dapm_add_route(codec, intercon, ARRAY_SIZE(intercon));
>  
>  	/* not connected */
> -	snd_soc_dapm_set_endpoint(codec, "RLINEIN", 0);
> -	snd_soc_dapm_set_endpoint(codec, "LLINEIN", 0);
> +	snd_soc_dapm_disable_pin(codec, "RLINEIN");
> +	snd_soc_dapm_disable_pin(codec, "LLINEIN");
>  
>  	/* always connected */
> -	snd_soc_dapm_set_endpoint(codec, "Int Mic", 1);
> -	snd_soc_dapm_set_endpoint(codec, "Ext Spk", 1);
> +	snd_soc_dapm_enable_pin(codec, "Int Mic");
> +	snd_soc_dapm_enable_pin(codec, "Ext Spk");
>  
> -	snd_soc_dapm_sync_endpoints(codec);
> +	snd_soc_dapm_sync(codec);
>  
>  	return 0;
>  }
> diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c
> index d138306..954d39b 100644
> --- a/sound/soc/codecs/tlv320aic3x.c
> +++ b/sound/soc/codecs/tlv320aic3x.c
> @@ -29,7 +29,7 @@
>   *  ---------------------------------------
>   *
>   *  Hence the machine layer should disable unsupported inputs/outputs by
> - *  snd_soc_dapm_set_endpoint(codec, "MONO_LOUT", 0), etc.
> + *  snd_soc_dapm_disable_pin(codec, "MONO_LOUT"), etc.
>   */
>  
>  #include <linux/module.h>
> @@ -206,7 +206,7 @@ static int snd_soc_dapm_put_volsw_aic3x(struct snd_kcontrol *kcontrol,
>  		}
>  
>  		if (found)
> -			snd_soc_dapm_sync_endpoints(widget->codec);
> +			snd_soc_dapm_sync(widget->codec);
>  	}
>  
>  	ret = snd_soc_update_bits(widget->codec, reg, val_mask, val);
> diff --git a/sound/soc/davinci/davinci-evm.c b/sound/soc/davinci/davinci-evm.c
> index 4c70a0e..091eae3 100644
> --- a/sound/soc/davinci/davinci-evm.c
> +++ b/sound/soc/davinci/davinci-evm.c
> @@ -103,17 +103,17 @@ static int evm_aic3x_init(struct snd_soc_codec *codec)
>  	snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
>  
>  	/* not connected */
> -	snd_soc_dapm_set_endpoint(codec, "MONO_LOUT", 0);
> -	snd_soc_dapm_set_endpoint(codec, "HPLCOM", 0);
> -	snd_soc_dapm_set_endpoint(codec, "HPRCOM", 0);
> +	snd_soc_dapm_disable_pin(codec, "MONO_LOUT");
> +	snd_soc_dapm_disable_pin(codec, "HPLCOM");
> +	snd_soc_dapm_disable_pin(codec, "HPRCOM");
>  
>  	/* always connected */
> -	snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 1);
> -	snd_soc_dapm_set_endpoint(codec, "Line Out", 1);
> -	snd_soc_dapm_set_endpoint(codec, "Mic Jack", 1);
> -	snd_soc_dapm_set_endpoint(codec, "Line In", 1);
> +	snd_soc_dapm_enable_pin(codec, "Headphone Jack");
> +	snd_soc_dapm_enable_pin(codec, "Line Out");
> +	snd_soc_dapm_enable_pin(codec, "Mic Jack");
> +	snd_soc_dapm_enable_pin(codec, "Line In");
>  
> -	snd_soc_dapm_sync_endpoints(codec);
> +	snd_soc_dapm_sync(codec);
>  
>  	return 0;
>  }
> diff --git a/sound/soc/omap/n810.c b/sound/soc/omap/n810.c
> index 767b39f..74f4599 100644
> --- a/sound/soc/omap/n810.c
> +++ b/sound/soc/omap/n810.c
> @@ -50,11 +50,22 @@ static int n810_dmic_func;
>  
>  static void n810_ext_control(struct snd_soc_codec *codec)
>  {
> -	snd_soc_dapm_set_endpoint(codec, "Ext Spk", n810_spk_func);
> -	snd_soc_dapm_set_endpoint(codec, "Headphone Jack", n810_jack_func);
> -	snd_soc_dapm_set_endpoint(codec, "DMic", n810_dmic_func);
> +	if (n810_spk_func)
> +		snd_soc_dapm_enable_pin(codec, "Ext Spk");
> +	else
> +		snd_soc_dapm_disable_pin(codec, "Ext Spk");
> +
> +	if (n810_jack_func)
> +		snd_soc_dapm_enable_pin(codec, "Headphone Jack");
> +	else
> +		snd_soc_dapm_disable_pin(codec, "Headphone Jack");
> +
> +	if (n810_dmic_func)
> +		snd_soc_dapm_enable_pin(codec, "DMic");
> +	else
> +		snd_soc_dapm_disable_pin(codec, "DMic);
>  
> -	snd_soc_dapm_sync_endpoints(codec);
> +	snd_soc_dapm_sync(codec);
>  }
>  
>  static int n810_startup(struct snd_pcm_substream *substream)
> @@ -236,9 +247,9 @@ static int n810_aic33_init(struct snd_soc_codec *codec)
>  	int i, err;
>  
>  	/* Not connected */
> -	snd_soc_dapm_set_endpoint(codec, "MONO_LOUT", 0);
> -	snd_soc_dapm_set_endpoint(codec, "HPLCOM", 0);
> -	snd_soc_dapm_set_endpoint(codec, "HPRCOM", 0);
> +	snd_soc_dapm_disable_pin(codec, "MONO_LOUT");
> +	snd_soc_dapm_disable_pin(codec, "HPLCOM");
> +	snd_soc_dapm_disable_pin(codec, "HPRCOM");
>  
>  	/* Add N810 specific controls */
>  	for (i = 0; i < ARRAY_SIZE(aic33_n810_controls); i++) {
> @@ -255,7 +266,7 @@ static int n810_aic33_init(struct snd_soc_codec *codec)
>  	/* Set up N810 specific audio path audio_map */
>  	snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
>  
> -	snd_soc_dapm_sync_endpoints(codec);
> +	snd_soc_dapm_sync(codec);
>  
>  	return 0;
>  }
> diff --git a/sound/soc/pxa/corgi.c b/sound/soc/pxa/corgi.c
> index edeea63..db18ef6 100644
> --- a/sound/soc/pxa/corgi.c
> +++ b/sound/soc/pxa/corgi.c
> @@ -50,47 +50,51 @@ static int corgi_spk_func;
>  
>  static void corgi_ext_control(struct snd_soc_codec *codec)
>  {
> -	int spk = 0, mic = 0, line = 0, hp = 0, hs = 0;
> -
>  	/* set up jack connection */
>  	switch (corgi_jack_func) {
>  	case CORGI_HP:
> -		hp = 1;
>  		/* set = unmute headphone */
>  		set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
>  		set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
> +		snd_soc_dapm_disable_pin(codec, "Mic Jack");
> +		snd_soc_dapm_disable_pin(codec, "Line Jack");
> +		snd_soc_dapm_enable_pin(codec, "Headphone Jack");
> +		snd_soc_dapm_disable_pin(codec, "Headset Jack");
>  		break;
>  	case CORGI_MIC:
> -		mic = 1;
>  		/* reset = mute headphone */
>  		reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
>  		reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
> +		snd_soc_dapm_enable_pin(codec, "Mic Jack");
> +		snd_soc_dapm_disable_pin(codec, "Line Jack");
> +		snd_soc_dapm_disable_pin(codec, "Headphone Jack");
> +		snd_soc_dapm_disable_pin(codec, "Headset Jack");
>  		break;
>  	case CORGI_LINE:
> -		line = 1;
>  		reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
>  		reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
> +		snd_soc_dapm_disable_pin(codec, "Mic Jack");
> +		snd_soc_dapm_enable_pin(codec, "Line Jack");
> +		snd_soc_dapm_disable_pin(codec, "Headphone Jack");
> +		snd_soc_dapm_disable_pin(codec, "Headset Jack");
>  		break;
>  	case CORGI_HEADSET:
> -		hs = 1;
> -		mic = 1;
>  		reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
>  		set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
> +		snd_soc_dapm_enable_pin(codec, "Mic Jack");
> +		snd_soc_dapm_disable_pin(codec, "Line Jack");
> +		snd_soc_dapm_disable_pin(codec, "Headphone Jack");
> +		snd_soc_dapm_enable_pin(codec, "Headset Jack");
>  		break;
>  	}
>  
>  	if (corgi_spk_func == CORGI_SPK_ON)
> -		spk = 1;
> -
> -	/* set the enpoints to their new connetion states */
> -	snd_soc_dapm_set_endpoint(codec, "Ext Spk", spk);
> -	snd_soc_dapm_set_endpoint(codec, "Mic Jack", mic);
> -	snd_soc_dapm_set_endpoint(codec, "Line Jack", line);
> -	snd_soc_dapm_set_endpoint(codec, "Headphone Jack", hp);
> -	snd_soc_dapm_set_endpoint(codec, "Headset Jack", hs);
> +		snd_soc_dapm_enable_pin(codec, "Ext Spk");
> +	else
> +		snd_soc_dapm_disable_pin(codec, "Ext Spk");
>  
>  	/* signal a DAPM event */
> -	snd_soc_dapm_sync_endpoints(codec);
> +	snd_soc_dapm_sync(codec);
>  }
>  
>  static int corgi_startup(struct snd_pcm_substream *substream)
> @@ -285,8 +289,8 @@ static int corgi_wm8731_init(struct snd_soc_codec *codec)
>  {
>  	int i, err;
>  
> -	snd_soc_dapm_set_endpoint(codec, "LLINEIN", 0);
> -	snd_soc_dapm_set_endpoint(codec, "RLINEIN", 0);
> +	snd_soc_dapm_disable_pin(codec, "LLINEIN");
> +	snd_soc_dapm_disable_pin(codec, "RLINEIN");
>  
>  	/* Add corgi specific controls */
>  	for (i = 0; i < ARRAY_SIZE(wm8731_corgi_controls); i++) {
> @@ -303,7 +307,7 @@ static int corgi_wm8731_init(struct snd_soc_codec *codec)
>  	/* Set up corgi specific audio path audio_map */
>  	snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
>  
> -	snd_soc_dapm_sync_endpoints(codec);
> +	snd_soc_dapm_sync(codec);
>  	return 0;
>  }
>  
> diff --git a/sound/soc/pxa/poodle.c b/sound/soc/pxa/poodle.c
> index 810f1fe..36cbf69 100644
> --- a/sound/soc/pxa/poodle.c
> +++ b/sound/soc/pxa/poodle.c
> @@ -48,8 +48,6 @@ static int poodle_spk_func;
>  
>  static void poodle_ext_control(struct snd_soc_codec *codec)
>  {
> -	int spk = 0;
> -
>  	/* set up jack connection */
>  	if (poodle_jack_func == POODLE_HP) {
>  		/* set = unmute headphone */
> @@ -57,23 +55,23 @@ static void poodle_ext_control(struct snd_soc_codec *codec)
>  			POODLE_LOCOMO_GPIO_MUTE_L, 1);
>  		locomo_gpio_write(&poodle_locomo_device.dev,
>  			POODLE_LOCOMO_GPIO_MUTE_R, 1);
> -		snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 1);
> +		snd_soc_dapm_enable_pin(codec, "Headphone Jack");
>  	} else {
>  		locomo_gpio_write(&poodle_locomo_device.dev,
>  			POODLE_LOCOMO_GPIO_MUTE_L, 0);
>  		locomo_gpio_write(&poodle_locomo_device.dev,
>  			POODLE_LOCOMO_GPIO_MUTE_R, 0);
> -		snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
> +		snd_soc_dapm_disable_pin(codec, "Headphone Jack");
>  	}
>  
> -	if (poodle_spk_func == POODLE_SPK_ON)
> -		spk = 1;
> -
>  	/* set the enpoints to their new connetion states */
> -	snd_soc_dapm_set_endpoint(codec, "Ext Spk", spk);
> +	if (poodle_spk_func == POODLE_SPK_ON)
> +		snd_soc_dapm_enable_pin(codec, "Ext Spk");
> +	else
> +		snd_soc_dapm_disable_pin(codec, "Ext Spk");
>  
>  	/* signal a DAPM event */
> -	snd_soc_dapm_sync_endpoints(codec);
> +	snd_soc_dapm_sync(codec);
>  }
>  
>  static int poodle_startup(struct snd_pcm_substream *substream)
> @@ -248,9 +246,9 @@ static int poodle_wm8731_init(struct snd_soc_codec *codec)
>  {
>  	int i, err;
>  
> -	snd_soc_dapm_set_endpoint(codec, "LLINEIN", 0);
> -	snd_soc_dapm_set_endpoint(codec, "RLINEIN", 0);
> -	snd_soc_dapm_set_endpoint(codec, "MICIN", 1);
> +	snd_soc_dapm_disable_pin(codec, "LLINEIN");
> +	snd_soc_dapm_disable_pin(codec, "RLINEIN");
> +	snd_soc_dapm_enable_pin(codec, "MICIN");
>  
>  	/* Add poodle specific controls */
>  	for (i = 0; i < ARRAY_SIZE(wm8731_poodle_controls); i++) {
> @@ -267,7 +265,7 @@ static int poodle_wm8731_init(struct snd_soc_codec *codec)
>  	/* Set up poodle specific audio path audio_map */
>  	snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
>  
> -	snd_soc_dapm_sync_endpoints(codec);
> +	snd_soc_dapm_sync(codec);
>  	return 0;
>  }
>  
> diff --git a/sound/soc/pxa/spitz.c b/sound/soc/pxa/spitz.c
> index 092b5c7..ec18163 100644
> --- a/sound/soc/pxa/spitz.c
> +++ b/sound/soc/pxa/spitz.c
> @@ -51,60 +51,60 @@ static int spitz_spk_func;
>  static void spitz_ext_control(struct snd_soc_codec *codec)
>  {
>  	if (spitz_spk_func == SPITZ_SPK_ON)
> -		snd_soc_dapm_set_endpoint(codec, "Ext Spk", 1);
> +		snd_soc_dapm_enable_pin(codec, "Ext Spk");
>  	else
> -		snd_soc_dapm_set_endpoint(codec, "Ext Spk", 0);
> +		snd_soc_dapm_disable_pin(codec, "Ext Spk");
>  
>  	/* set up jack connection */
>  	switch (spitz_jack_func) {
>  	case SPITZ_HP:
>  		/* enable and unmute hp jack, disable mic bias */
> -		snd_soc_dapm_set_endpoint(codec, "Headset Jack", 0);
> -		snd_soc_dapm_set_endpoint(codec, "Mic Jack", 0);
> -		snd_soc_dapm_set_endpoint(codec, "Line Jack", 0);
> -		snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 1);
> +		snd_soc_dapm_disable_pin(codec, "Headset Jack");
> +		snd_soc_dapm_disable_pin(codec, "Mic Jack");
> +		snd_soc_dapm_disable_pin(codec, "Line Jack");
> +		snd_soc_dapm_enable_pin(codec, "Headphone Jack");
>  		set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
>  		set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
>  		break;
>  	case SPITZ_MIC:
>  		/* enable mic jack and bias, mute hp */
> -		snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
> -		snd_soc_dapm_set_endpoint(codec, "Headset Jack", 0);
> -		snd_soc_dapm_set_endpoint(codec, "Line Jack", 0);
> -		snd_soc_dapm_set_endpoint(codec, "Mic Jack", 1);
> +		snd_soc_dapm_disable_pin(codec, "Headphone Jack");
> +		snd_soc_dapm_disable_pin(codec, "Headset Jack");
> +		snd_soc_dapm_disable_pin(codec, "Line Jack");
> +		snd_soc_dapm_enable_pin(codec, "Mic Jack");
>  		reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
>  		reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
>  		break;
>  	case SPITZ_LINE:
>  		/* enable line jack, disable mic bias and mute hp */
> -		snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
> -		snd_soc_dapm_set_endpoint(codec, "Headset Jack", 0);
> -		snd_soc_dapm_set_endpoint(codec, "Mic Jack", 0);
> -		snd_soc_dapm_set_endpoint(codec, "Line Jack", 1);
> +		snd_soc_dapm_disable_pin(codec, "Headphone Jack");
> +		snd_soc_dapm_disable_pin(codec, "Headset Jack");
> +		snd_soc_dapm_disable_pin(codec, "Mic Jack");
> +		snd_soc_dapm_enable_pin(codec, "Line Jack");
>  		reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
>  		reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
>  		break;
>  	case SPITZ_HEADSET:
>  		/* enable and unmute headset jack enable mic bias, mute L hp */
> -		snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
> -		snd_soc_dapm_set_endpoint(codec, "Mic Jack", 1);
> -		snd_soc_dapm_set_endpoint(codec, "Line Jack", 0);
> -		snd_soc_dapm_set_endpoint(codec, "Headset Jack", 1);
> +		snd_soc_dapm_disable_pin(codec, "Headphone Jack");
> +		snd_soc_dapm_enable_pin(codec, "Mic Jack");
> +		snd_soc_dapm_disable_pin(codec, "Line Jack");
> +		snd_soc_dapm_enable_pin(codec, "Headset Jack");
>  		reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
>  		set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
>  		break;
>  	case SPITZ_HP_OFF:
>  
>  		/* jack removed, everything off */
> -		snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
> -		snd_soc_dapm_set_endpoint(codec, "Headset Jack", 0);
> -		snd_soc_dapm_set_endpoint(codec, "Mic Jack", 0);
> -		snd_soc_dapm_set_endpoint(codec, "Line Jack", 0);
> +		snd_soc_dapm_disable_pin(codec, "Headphone Jack");
> +		snd_soc_dapm_disable_pin(codec, "Headset Jack");
> +		snd_soc_dapm_disable_pin(codec, "Mic Jack");
> +		snd_soc_dapm_disable_pin(codec, "Line Jack");
>  		reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
>  		reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
>  		break;
>  	}
> -	snd_soc_dapm_sync_endpoints(codec);
> +	snd_soc_dapm_sync(codec);
>  }
>  
>  static int spitz_startup(struct snd_pcm_substream *substream)
> @@ -291,13 +291,13 @@ static int spitz_wm8750_init(struct snd_soc_codec *codec)
>  	int i, err;
>  
>  	/* NC codec pins */
> -	snd_soc_dapm_set_endpoint(codec, "RINPUT1", 0);
> -	snd_soc_dapm_set_endpoint(codec, "LINPUT2", 0);
> -	snd_soc_dapm_set_endpoint(codec, "RINPUT2", 0);
> -	snd_soc_dapm_set_endpoint(codec, "LINPUT3", 0);
> -	snd_soc_dapm_set_endpoint(codec, "RINPUT3", 0);
> -	snd_soc_dapm_set_endpoint(codec, "OUT3", 0);
> -	snd_soc_dapm_set_endpoint(codec, "MONO", 0);
> +	snd_soc_dapm_disable_pin(codec, "RINPUT1");
> +	snd_soc_dapm_disable_pin(codec, "LINPUT2");
> +	snd_soc_dapm_disable_pin(codec, "RINPUT2");
> +	snd_soc_dapm_disable_pin(codec, "LINPUT3");
> +	snd_soc_dapm_disable_pin(codec, "RINPUT3");
> +	snd_soc_dapm_disable_pin(codec, "OUT3");
> +	snd_soc_dapm_disable_pin(codec, "MONO");
>  
>  	/* Add spitz specific controls */
>  	for (i = 0; i < ARRAY_SIZE(wm8750_spitz_controls); i++) {
> @@ -314,7 +314,7 @@ static int spitz_wm8750_init(struct snd_soc_codec *codec)
>  	/* Set up spitz specific audio paths */
>  	snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
>  
> -	snd_soc_dapm_sync_endpoints(codec);
> +	snd_soc_dapm_sync(codec);
>  	return 0;
>  }
>  
> diff --git a/sound/soc/pxa/tosa.c b/sound/soc/pxa/tosa.c
> index 465ff0f..dba7689 100644
> --- a/sound/soc/pxa/tosa.c
> +++ b/sound/soc/pxa/tosa.c
> @@ -52,29 +52,31 @@ static int tosa_spk_func;
>  
>  static void tosa_ext_control(struct snd_soc_codec *codec)
>  {
> -	int spk = 0, mic_int = 0, hp = 0, hs = 0;
> -
>  	/* set up jack connection */
>  	switch (tosa_jack_func) {
>  	case TOSA_HP:
> -		hp = 1;
> +		snd_soc_dapm_disable_pin(codec, "Mic (Internal)");
> +		snd_soc_dapm_enable_pin(codec, "Headphone Jack");
> +		snd_soc_dapm_disable_pin(codec, "Headset Jack");
>  		break;
>  	case TOSA_MIC_INT:
> -		mic_int = 1;
> +		snd_soc_dapm_enable_pin(codec, "Mic (Internal)");
> +		snd_soc_dapm_disable_pin(codec, "Headphone Jack");
> +		snd_soc_dapm_disable_pin(codec, "Headset Jack");
>  		break;
>  	case TOSA_HEADSET:
> -		hs = 1;
> +		snd_soc_dapm_disable_pin(codec, "Mic (Internal)");
> +		snd_soc_dapm_disable_pin(codec, "Headphone Jack");
> +		snd_soc_dapm_enable_pin(codec, "Headset Jack");
>  		break;
>  	}
>  
>  	if (tosa_spk_func == TOSA_SPK_ON)
> -		spk = 1;
> +		snd_soc_dapm_enable_pin(codec, "Speaker");
> +	else
> +		snd_soc_dapm_disable_pin(codec, "Speaker");
>  
> -	snd_soc_dapm_set_endpoint(codec, "Speaker", spk);
> -	snd_soc_dapm_set_endpoint(codec, "Mic (Internal)", mic_int);
> -	snd_soc_dapm_set_endpoint(codec, "Headphone Jack", hp);
> -	snd_soc_dapm_set_endpoint(codec, "Headset Jack", hs);
> -	snd_soc_dapm_sync_endpoints(codec);
> +	snd_soc_dapm_sync(codec);
>  }
>  
>  static int tosa_startup(struct snd_pcm_substream *substream)
> @@ -191,8 +193,8 @@ static int tosa_ac97_init(struct snd_soc_codec *codec)
>  {
>  	int i, err;
>  
> -	snd_soc_dapm_set_endpoint(codec, "OUT3", 0);
> -	snd_soc_dapm_set_endpoint(codec, "MONOOUT", 0);
> +	snd_soc_dapm_disable_pin(codec, "OUT3");
> +	snd_soc_dapm_disable_pin(codec, "MONOOUT");
>  
>  	/* add tosa specific controls */
>  	for (i = 0; i < ARRAY_SIZE(tosa_controls); i++) {
> @@ -209,7 +211,7 @@ static int tosa_ac97_init(struct snd_soc_codec *codec)
>  	/* set up tosa specific audio path audio_map */
>  	snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
>  
> -	snd_soc_dapm_sync_endpoints(codec);
> +	snd_soc_dapm_sync(codec);
>  	return 0;
>  }
>  
> diff --git a/sound/soc/s3c24xx/neo1973_wm8753.c b/sound/soc/s3c24xx/neo1973_wm8753.c
> index 3485123..f053e85 100644
> --- a/sound/soc/s3c24xx/neo1973_wm8753.c
> +++ b/sound/soc/s3c24xx/neo1973_wm8753.c
> @@ -250,77 +250,77 @@ static int set_scenario_endpoints(struct snd_soc_codec *codec, int scenario)
>  
>  	switch (neo1973_scenario) {
>  	case NEO_AUDIO_OFF:
> -		snd_soc_dapm_set_endpoint(codec, "Audio Out",    0);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line In",  0);
> -		snd_soc_dapm_set_endpoint(codec, "Headset Mic",  0);
> -		snd_soc_dapm_set_endpoint(codec, "Call Mic",     0);
> +		snd_soc_dapm_disable_pin(codec, "Audio Out");
> +		snd_soc_dapm_disable_pin(codec, "GSM Line Out");
> +		snd_soc_dapm_disable_pin(codec, "GSM Line In");
> +		snd_soc_dapm_disable_pin(codec, "Headset Mic");
> +		snd_soc_dapm_disable_pin(codec, "Call Mic");
>  		break;
>  	case NEO_GSM_CALL_AUDIO_HANDSET:
> -		snd_soc_dapm_set_endpoint(codec, "Audio Out",    1);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 1);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line In",  1);
> -		snd_soc_dapm_set_endpoint(codec, "Headset Mic",  0);
> -		snd_soc_dapm_set_endpoint(codec, "Call Mic",     1);
> +		snd_soc_dapm_enable_pin(codec, "Audio Out");
> +		snd_soc_dapm_enable_pin(codec, "GSM Line Out");
> +		snd_soc_dapm_enable_pin(codec, "GSM Line In");
> +		snd_soc_dapm_disable_pin(codec, "Headset Mic");
> +		snd_soc_dapm_enable_pin(codec, "Call Mic");
>  		break;
>  	case NEO_GSM_CALL_AUDIO_HEADSET:
> -		snd_soc_dapm_set_endpoint(codec, "Audio Out",    1);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 1);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line In",  1);
> -		snd_soc_dapm_set_endpoint(codec, "Headset Mic",  1);
> -		snd_soc_dapm_set_endpoint(codec, "Call Mic",     0);
> +		snd_soc_dapm_enable_pin(codec, "Audio Out");
> +		snd_soc_dapm_enable_pin(codec, "GSM Line Out");
> +		snd_soc_dapm_enable_pin(codec, "GSM Line In");
> +		snd_soc_dapm_enable_pin(codec, "Headset Mic");
> +		snd_soc_dapm_disable_pin(codec, "Call Mic");
>  		break;
>  	case NEO_GSM_CALL_AUDIO_BLUETOOTH:
> -		snd_soc_dapm_set_endpoint(codec, "Audio Out",    0);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 1);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line In",  1);
> -		snd_soc_dapm_set_endpoint(codec, "Headset Mic",  0);
> -		snd_soc_dapm_set_endpoint(codec, "Call Mic",     0);
> +		snd_soc_dapm_disable_pin(codec, "Audio Out");
> +		snd_soc_dapm_enable_pin(codec, "GSM Line Out");
> +		snd_soc_dapm_enable_pin(codec, "GSM Line In");
> +		snd_soc_dapm_disable_pin(codec, "Headset Mic");
> +		snd_soc_dapm_disable_pin(codec, "Call Mic");
>  		break;
>  	case NEO_STEREO_TO_SPEAKERS:
> -		snd_soc_dapm_set_endpoint(codec, "Audio Out",    1);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line In",  0);
> -		snd_soc_dapm_set_endpoint(codec, "Headset Mic",  0);
> -		snd_soc_dapm_set_endpoint(codec, "Call Mic",     0);
> +		snd_soc_dapm_enable_pin(codec, "Audio Out");
> +		snd_soc_dapm_disable_pin(codec, "GSM Line Out");
> +		snd_soc_dapm_disable_pin(codec, "GSM Line In");
> +		snd_soc_dapm_disable_pin(codec, "Headset Mic");
> +		snd_soc_dapm_disable_pin(codec, "Call Mic");
>  		break;
>  	case NEO_STEREO_TO_HEADPHONES:
> -		snd_soc_dapm_set_endpoint(codec, "Audio Out",    1);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line In",  0);
> -		snd_soc_dapm_set_endpoint(codec, "Headset Mic",  0);
> -		snd_soc_dapm_set_endpoint(codec, "Call Mic",     0);
> +		snd_soc_dapm_enable_pin(codec, "Audio Out");
> +		snd_soc_dapm_disable_pin(codec, "GSM Line Out");
> +		snd_soc_dapm_disable_pin(codec, "GSM Line In");
> +		snd_soc_dapm_disable_pin(codec, "Headset Mic");
> +		snd_soc_dapm_disable_pin(codec, "Call Mic");
>  		break;
>  	case NEO_CAPTURE_HANDSET:
> -		snd_soc_dapm_set_endpoint(codec, "Audio Out",    0);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line In",  0);
> -		snd_soc_dapm_set_endpoint(codec, "Headset Mic",  0);
> -		snd_soc_dapm_set_endpoint(codec, "Call Mic",     1);
> +		snd_soc_dapm_disable_pin(codec, "Audio Out");
> +		snd_soc_dapm_disable_pin(codec, "GSM Line Out");
> +		snd_soc_dapm_disable_pin(codec, "GSM Line In");
> +		snd_soc_dapm_disable_pin(codec, "Headset Mic");
> +		snd_soc_dapm_enable_pin(codec, "Call Mic");
>  		break;
>  	case NEO_CAPTURE_HEADSET:
> -		snd_soc_dapm_set_endpoint(codec, "Audio Out",    0);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line In",  0);
> -		snd_soc_dapm_set_endpoint(codec, "Headset Mic",  1);
> -		snd_soc_dapm_set_endpoint(codec, "Call Mic",     0);
> +		snd_soc_dapm_disable_pin(codec, "Audio Out");
> +		snd_soc_dapm_disable_pin(codec, "GSM Line Out");
> +		snd_soc_dapm_disable_pin(codec, "GSM Line In");
> +		snd_soc_dapm_enable_pin(codec, "Headset Mic");
> +		snd_soc_dapm_disable_pin(codec, "Call Mic");
>  		break;
>  	case NEO_CAPTURE_BLUETOOTH:
> -		snd_soc_dapm_set_endpoint(codec, "Audio Out",    0);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line In",  0);
> -		snd_soc_dapm_set_endpoint(codec, "Headset Mic",  0);
> -		snd_soc_dapm_set_endpoint(codec, "Call Mic",     0);
> +		snd_soc_dapm_disable_pin(codec, "Audio Out");
> +		snd_soc_dapm_disable_pin(codec, "GSM Line Out");
> +		snd_soc_dapm_disable_pin(codec, "GSM Line In");
> +		snd_soc_dapm_disable_pin(codec, "Headset Mic");
> +		snd_soc_dapm_disable_pin(codec, "Call Mic");
>  		break;
>  	default:
> -		snd_soc_dapm_set_endpoint(codec, "Audio Out",    0);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0);
> -		snd_soc_dapm_set_endpoint(codec, "GSM Line In",  0);
> -		snd_soc_dapm_set_endpoint(codec, "Headset Mic",  0);
> -		snd_soc_dapm_set_endpoint(codec, "Call Mic",     0);
> +		snd_soc_dapm_disable_pin(codec, "Audio Out");
> +		snd_soc_dapm_disable_pin(codec, "GSM Line Out");
> +		snd_soc_dapm_disable_pin(codec, "GSM Line In");
> +		snd_soc_dapm_disable_pin(codec, "Headset Mic");
> +		snd_soc_dapm_disable_pin(codec, "Call Mic");
>  	}
>  
> -	snd_soc_dapm_sync_endpoints(codec);
> +	snd_soc_dapm_sync(codec);
>  
>  	return 0;
>  }
> @@ -511,12 +511,12 @@ static int neo1973_wm8753_init(struct snd_soc_codec *codec)
>  	DBG("Entered %s\n", __func__);
>  
>  	/* set up NC codec pins */
> -	snd_soc_dapm_set_endpoint(codec, "LOUT2", 0);
> -	snd_soc_dapm_set_endpoint(codec, "ROUT2", 0);
> -	snd_soc_dapm_set_endpoint(codec, "OUT3",  0);
> -	snd_soc_dapm_set_endpoint(codec, "OUT4",  0);
> -	snd_soc_dapm_set_endpoint(codec, "LINE1", 0);
> -	snd_soc_dapm_set_endpoint(codec, "LINE2", 0);
> +	snd_soc_dapm_disable_pin(codec, "LOUT2");
> +	snd_soc_dapm_disable_pin(codec, "ROUT2");
> +	snd_soc_dapm_disable_pin(codec, "OUT3");
> +	snd_soc_dapm_disable_pin(codec, "OUT4");
> +	snd_soc_dapm_disable_pin(codec, "LINE1");
> +	snd_soc_dapm_disable_pin(codec, "LINE2");
>  
>  
>  	/* set endpoints to default mode */
> @@ -539,7 +539,7 @@ static int neo1973_wm8753_init(struct snd_soc_codec *codec)
>  	err = snd_soc_dapm_add_routes(codec, dapm_routes,
>  				      ARRAY_SIZE(dapm_routes));
>  
> -	snd_soc_dapm_sync_endpoints(codec);
> +	snd_soc_dapm_sync(codec);
>  	return 0;
>  }
>  
> diff --git a/sound/soc/sh/sh7760-ac97.c b/sound/soc/sh/sh7760-ac97.c
> index 2f91de8..846d1b3 100644
> --- a/sound/soc/sh/sh7760-ac97.c
> +++ b/sound/soc/sh/sh7760-ac97.c
> @@ -25,7 +25,7 @@ extern struct snd_soc_platform sh7760_soc_platform;
>  
>  static int machine_init(struct snd_soc_codec *codec)
>  {
> -	snd_soc_dapm_sync_endpoints(codec);
> +	snd_soc_dapm_sync(codec);
>  	return 0;
>  }
>  
> diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
> index 91cbbef..94296b5 100644
> --- a/sound/soc/soc-dapm.c
> +++ b/sound/soc/soc-dapm.c
> @@ -880,8 +880,25 @@ static void dapm_free_widgets(struct snd_soc_codec *codec)
>  	}
>  }
>  
> +static int snd_soc_dapm_set_pin(struct snd_soc_codec *codec,
> +	char *pin, int status)
> +{
> +	struct snd_soc_dapm_widget *w;
> +
> +	list_for_each_entry(w, &codec->dapm_widgets, list) {
> +		if (!strcmp(w->name, pin)) {
> +			dbg("dapm: %s: pin %s\n", codec->name, pin);
> +			w->connected = status;
> +			return 0;
> +		}
> +	}
> +
> +	dbg("dapm: %s: configuring unknown pin %s\n", codec->name, pin);
> +	return -EINVAL;
> +}
> +
>  /**
> - * snd_soc_dapm_sync_endpoints - scan and power dapm paths
> + * snd_soc_dapm_sync - scan and power dapm paths
>   * @codec: audio codec
>   *
>   * Walks all dapm audio paths and powers widgets according to their
> @@ -889,11 +906,11 @@ static void dapm_free_widgets(struct snd_soc_codec *codec)
>   *
>   * Returns 0 for success.
>   */
> -int snd_soc_dapm_sync_endpoints(struct snd_soc_codec *codec)
> +int snd_soc_dapm_sync(struct snd_soc_codec *codec)
>  {
>  	return dapm_power_widgets(codec, SND_SOC_DAPM_STREAM_NOP);
>  }
> -EXPORT_SYMBOL_GPL(snd_soc_dapm_sync_endpoints);
> +EXPORT_SYMBOL_GPL(snd_soc_dapm_sync);
>  
>  static int snd_soc_dapm_add_route(struct snd_soc_codec *codec,
>  	const char *sink, const char *control, const char *source)
> @@ -1441,53 +1458,57 @@ int snd_soc_dapm_set_bias_level(struct snd_soc_device *socdev,
>  }
>  
>  /**
> - * snd_soc_dapm_set_endpoint - set audio endpoint status
> - * @codec: audio codec
> - * @endpoint: audio signal endpoint (or start point)
> - * @status: point status
> - *
> - * Set audio endpoint status - connected or disconnected.
> + * snd_soc_dapm_enable_pin - enable pin.
> + * @snd_soc_codec: SoC codec
> + * @pin: pin name
>   *
> - * Returns 0 for success else error.
> + * Enables input/output pin and it's parents or children widgets iff there is
> + * a valid audio route and active audio stream.
> + * NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
> + * do any widget power switching.
>   */
> -int snd_soc_dapm_set_endpoint(struct snd_soc_codec *codec,
> -	char *endpoint, int status)
> +int snd_soc_dapm_enable_pin(struct snd_soc_codec *codec, char *pin)
>  {
> -	struct snd_soc_dapm_widget *w;
> -
> -	list_for_each_entry(w, &codec->dapm_widgets, list) {
> -		if (!strcmp(w->name, endpoint)) {
> -			w->connected = status;
> -			return 0;
> -		}
> -	}
> +	return snd_soc_dapm_set_pin(codec, pin, 1);
> +}
> +EXPORT_SYMBOL_GPL(snd_soc_dapm_enable_pin);
>  
> -	return -ENODEV;
> +/**
> + * snd_soc_dapm_disable_pin - disable pin.
> + * @codec: SoC codec
> + * @pin: pin name
> + *
> + * Disables input/output pin and it's parents or children widgets.
> + * NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
> + * do any widget power switching.
> + */
> +int snd_soc_dapm_disable_pin(struct snd_soc_codec *codec, char *pin)
> +{
> +	return snd_soc_dapm_set_pin(codec, pin, 0);
>  }
> -EXPORT_SYMBOL_GPL(snd_soc_dapm_set_endpoint);
> +EXPORT_SYMBOL_GPL(snd_soc_dapm_disable_pin);
>  
>  /**
> - * snd_soc_dapm_get_endpoint_status - get audio endpoint status
> + * snd_soc_dapm_get_pin_status - get audio pin status
>   * @codec: audio codec
> - * @endpoint: audio signal endpoint (or start point)
> + * @pin: audio signal pin endpoint (or start point)
>   *
> - * Get audio endpoint status - connected or disconnected.
> + * Get audio pin status - connected or disconnected.
>   *
> - * Returns status
> + * Returns 1 for connected otherwise 0.
>   */
> -int snd_soc_dapm_get_endpoint_status(struct snd_soc_codec *codec,
> -	char *endpoint)
> +int snd_soc_dapm_get_pin_status(struct snd_soc_codec *codec, char *pin)
>  {
>  	struct snd_soc_dapm_widget *w;
>  
>  	list_for_each_entry(w, &codec->dapm_widgets, list) {
> -		if (!strcmp(w->name, endpoint))
> +		if (!strcmp(w->name, pin))
>  			return w->connected;
>  	}
>  
>  	return 0;
>  }
> -EXPORT_SYMBOL_GPL(snd_soc_dapm_get_endpoint_status);
> +EXPORT_SYMBOL_GPL(snd_soc_dapm_get_pin_status);
>  
>  /**
>   * snd_soc_dapm_free - free dapm resources
> -- 
> 1.5.4.2
> 
> 
> 


More information about the Alsa-devel mailing list