diff options
| -rw-r--r-- | sound/soc/tegra/tegra_i2s.c | 1 | ||||
| -rw-r--r-- | sound/soc/tegra/tegra_soc.h | 1 | ||||
| -rw-r--r-- | sound/soc/tegra/tegra_wired_jack.c | 28 | 
3 files changed, 24 insertions, 6 deletions
| diff --git a/sound/soc/tegra/tegra_i2s.c b/sound/soc/tegra/tegra_i2s.c index 004384041e99..e460a76968f6 100644 --- a/sound/soc/tegra/tegra_i2s.c +++ b/sound/soc/tegra/tegra_i2s.c @@ -366,6 +366,7 @@ int tegra_i2s_resume(struct snd_soc_dai *cpu_dai)  	tegra_das_set_all_regs(&info->das_regs);  	i2s_set_all_regs(cpu_dai->id, &info->i2s_regs); +	tegra_jack_resume();  	return 0;  } diff --git a/sound/soc/tegra/tegra_soc.h b/sound/soc/tegra/tegra_soc.h index 817aed035d89..8dd2efaa6d13 100644 --- a/sound/soc/tegra/tegra_soc.h +++ b/sound/soc/tegra/tegra_soc.h @@ -118,6 +118,7 @@ void tegra_controls_exit(void);  int tegra_jack_init(struct snd_soc_codec *codec);  void tegra_jack_exit(void); +void tegra_jack_resume(void);  void tegra_switch_set_state(int state);  void setup_i2s_dma_request(struct snd_pcm_substream *substream, diff --git a/sound/soc/tegra/tegra_wired_jack.c b/sound/soc/tegra/tegra_wired_jack.c index a3c5fa7afc08..211d69e45818 100644 --- a/sound/soc/tegra/tegra_wired_jack.c +++ b/sound/soc/tegra/tegra_wired_jack.c @@ -38,6 +38,14 @@ struct wired_jack_conf tegra_wired_jack_conf = {  	-1, -1, -1, -1, 0, NULL, NULL  }; +/* Based on hp_gpio and mic_gpio, hp_gpio is active low */ +enum { +	HEADSET_WITHOUT_MIC = 0x00, +	HEADSET_WITH_MIC = 0x01, +	NO_DEVICE = 0x10, +	MIC = 0x11, +}; +  /* jack */  static struct snd_soc_jack *tegra_wired_jack; @@ -83,7 +91,7 @@ void tegra_switch_set_state(int state)  	switch_set_state(&wired_switch_dev, state);  } -static int wired_swith_notify(struct notifier_block *self, +static int wired_switch_notify(struct notifier_block *self,  			      unsigned long action, void* dev)  {  	int state = 0; @@ -97,6 +105,8 @@ static int wired_swith_notify(struct notifier_block *self,  	if (tegra_wired_jack_conf.cdc_irq != -1)  		mic_gpio = gpio_get_value(tegra_wired_jack_conf.cdc_irq); +	pr_debug("hp_gpio:%d, mic_gpio:%d\n", hp_gpio, mic_gpio); +  	flag = (hp_gpio << 4) | mic_gpio;  	switch (action) { @@ -115,16 +125,16 @@ static int wired_swith_notify(struct notifier_block *self,  		break;  	default:  		switch (flag) { -		case 0x010: +		case NO_DEVICE:  			state = 0;  			break; -		case 0x01: +		case HEADSET_WITH_MIC:  			state = 1;  			break; -		case 0x11: +		case MIC:  			/* mic: would not report */  			break; -		case 0x00: +		case HEADSET_WITHOUT_MIC:  			state = 2;  			break;  		default: @@ -137,8 +147,14 @@ static int wired_swith_notify(struct notifier_block *self,  	return NOTIFY_OK;  } + +void tegra_jack_resume(void) +{ +	wired_switch_notify(NULL, SND_JACK_NO_TYPE_SPECIFIED, NULL); +} +  static struct notifier_block wired_switch_nb = { -	.notifier_call = wired_swith_notify, +	.notifier_call = wired_switch_notify,  };  #endif | 
