diff options
Diffstat (limited to 'sound/soc/codecs/rt5682.c')
| -rw-r--r-- | sound/soc/codecs/rt5682.c | 24 | 
1 files changed, 8 insertions, 16 deletions
diff --git a/sound/soc/codecs/rt5682.c b/sound/soc/codecs/rt5682.c index 415ec564c82e..0a0ec4a021e1 100644 --- a/sound/soc/codecs/rt5682.c +++ b/sound/soc/codecs/rt5682.c @@ -922,15 +922,13 @@ static void rt5682_enable_push_button_irq(struct snd_soc_component *component,   *   * Returns detect status.   */ -int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert) +static int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert)  {  	struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);  	struct snd_soc_dapm_context *dapm = &component->dapm;  	unsigned int val, count;  	if (jack_insert) { -		snd_soc_dapm_mutex_lock(dapm); -  		snd_soc_component_update_bits(component, RT5682_PWR_ANLG_1,  			RT5682_PWR_VREF2 | RT5682_PWR_MB,  			RT5682_PWR_VREF2 | RT5682_PWR_MB); @@ -981,8 +979,6 @@ int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert)  		snd_soc_component_update_bits(component, RT5682_MICBIAS_2,  			RT5682_PWR_CLK25M_MASK | RT5682_PWR_CLK1M_MASK,  			RT5682_PWR_CLK25M_PU | RT5682_PWR_CLK1M_PU); - -		snd_soc_dapm_mutex_unlock(dapm);  	} else {  		rt5682_enable_push_button_irq(component, false);  		snd_soc_component_update_bits(component, RT5682_CBJ_CTRL_1, @@ -1011,7 +1007,6 @@ int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert)  	dev_dbg(component->dev, "jack_type = %d\n", rt5682->jack_type);  	return rt5682->jack_type;  } -EXPORT_SYMBOL_GPL(rt5682_headset_detect);  static int rt5682_set_jack_detect(struct snd_soc_component *component,  		struct snd_soc_jack *hs_jack, void *data) @@ -1094,6 +1089,7 @@ void rt5682_jack_detect_handler(struct work_struct *work)  {  	struct rt5682_priv *rt5682 =  		container_of(work, struct rt5682_priv, jack_detect_work.work); +	struct snd_soc_dapm_context *dapm;  	int val, btn_type;  	while (!rt5682->component) @@ -1102,7 +1098,9 @@ void rt5682_jack_detect_handler(struct work_struct *work)  	while (!rt5682->component->card->instantiated)  		usleep_range(10000, 15000); -	mutex_lock(&rt5682->jdet_mutex); +	dapm = snd_soc_component_get_dapm(rt5682->component); + +	snd_soc_dapm_mutex_lock(dapm);  	mutex_lock(&rt5682->calibrate_mutex);  	val = snd_soc_component_read(rt5682->component, RT5682_AJD1_CTRL) @@ -1162,6 +1160,9 @@ void rt5682_jack_detect_handler(struct work_struct *work)  		rt5682->irq_work_delay_time = 50;  	} +	mutex_unlock(&rt5682->calibrate_mutex); +	snd_soc_dapm_mutex_unlock(dapm); +  	snd_soc_jack_report(rt5682->hs_jack, rt5682->jack_type,  		SND_JACK_HEADSET |  		SND_JACK_BTN_0 | SND_JACK_BTN_1 | @@ -1174,9 +1175,6 @@ void rt5682_jack_detect_handler(struct work_struct *work)  		else  			cancel_delayed_work_sync(&rt5682->jd_check_work);  	} - -	mutex_unlock(&rt5682->calibrate_mutex); -	mutex_unlock(&rt5682->jdet_mutex);  }  EXPORT_SYMBOL_GPL(rt5682_jack_detect_handler); @@ -1526,7 +1524,6 @@ static int rt5682_hp_event(struct snd_soc_dapm_widget *w,  {  	struct snd_soc_component *component =  		snd_soc_dapm_to_component(w->dapm); -	struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);  	switch (event) {  	case SND_SOC_DAPM_PRE_PMU: @@ -1538,17 +1535,12 @@ static int rt5682_hp_event(struct snd_soc_dapm_widget *w,  			RT5682_DEPOP_1, 0x60, 0x60);  		snd_soc_component_update_bits(component,  			RT5682_DAC_ADC_DIG_VOL1, 0x00c0, 0x0080); - -		mutex_lock(&rt5682->jdet_mutex); -  		snd_soc_component_update_bits(component, RT5682_HP_CTRL_2,  			RT5682_HP_C2_DAC_L_EN | RT5682_HP_C2_DAC_R_EN,  			RT5682_HP_C2_DAC_L_EN | RT5682_HP_C2_DAC_R_EN);  		usleep_range(5000, 10000);  		snd_soc_component_update_bits(component, RT5682_CHARGE_PUMP_1,  			RT5682_CP_SW_SIZE_MASK, RT5682_CP_SW_SIZE_L); - -		mutex_unlock(&rt5682->jdet_mutex);  		break;  	case SND_SOC_DAPM_POST_PMD:  | 
