diff options
| -rw-r--r-- | drivers/extcon/extcon-arizona.c | 16 | 
1 files changed, 8 insertions, 8 deletions
diff --git a/drivers/extcon/extcon-arizona.c b/drivers/extcon/extcon-arizona.c index d9918421e80..dc357a4051f 100644 --- a/drivers/extcon/extcon-arizona.c +++ b/drivers/extcon/extcon-arizona.c @@ -56,6 +56,7 @@ struct arizona_extcon_info {  	struct delayed_work hpdet_work;  	bool hpdet_active; +	bool hpdet_done;  	int num_hpdet_res;  	unsigned int hpdet_res[3]; @@ -394,7 +395,6 @@ static int arizona_hpdet_do_id(struct arizona_extcon_info *info, int *reading)  {  	struct arizona *arizona = info->arizona;  	int id_gpio = arizona->pdata.hpdet_id_gpio; -	int ret;  	/*  	 * If we're using HPDET for accessory identification we need @@ -463,13 +463,7 @@ static int arizona_hpdet_do_id(struct arizona_extcon_info *info, int *reading)  		    (id_gpio && info->hpdet_res[2] > 10)) {  			dev_dbg(arizona->dev, "Detected mic\n");  			info->mic = true; -			ret = extcon_set_cable_state_(&info->edev, -						      ARIZONA_CABLE_MICROPHONE, -						      true); -			if (ret != 0) { -				dev_err(arizona->dev, -					"Failed to report mic: %d\n", ret); -			} +			info->detecting = true;  		} else {  			dev_dbg(arizona->dev, "Detected headphone\n");  		} @@ -586,6 +580,8 @@ done:  		info->hpdet_active = false;  	} +	info->hpdet_done = true; +  out:  	mutex_unlock(&info->lock); @@ -597,6 +593,9 @@ static void arizona_identify_headphone(struct arizona_extcon_info *info)  	struct arizona *arizona = info->arizona;  	int ret; +	if (info->hpdet_done) +		return; +  	dev_dbg(arizona->dev, "Starting HPDET\n");  	/* Make sure we keep the device enabled during the measurement */ @@ -923,6 +922,7 @@ static irqreturn_t arizona_jackdet(int irq, void *data)  		for (i = 0; i < ARRAY_SIZE(info->hpdet_res); i++)  			info->hpdet_res[i] = 0;  		info->mic = false; +		info->hpdet_done = false;  		for (i = 0; i < ARIZONA_NUM_BUTTONS; i++)  			input_report_key(info->input,  |