From bf14ee5a460276a99ed35f9034bae9e74b01600f Mon Sep 17 00:00:00 2001 From: Mark Brown Date: Tue, 5 Feb 2013 20:20:17 +0000 Subject: extcon: arizona: Use MICDET for final microphone identification When using HPDET to identify the accessory still run MICDET before we report a microphone in order to ensure that the accessory identified is compatible with the MICDET detection ranges after having confirmed that the device is not using a headphone. Signed-off-by: Mark Brown --- drivers/extcon/extcon-arizona.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/extcon/extcon-arizona.c b/drivers/extcon/extcon-arizona.c index d9918421e80b..dc357a4051f6 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, -- cgit v1.2.3