Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 355075
b: refs/heads/master
c: 0e27bd3
h: refs/heads/master
i:
  355073: 85f3a27
  355071: e26e593
v: v3
  • Loading branch information
Mark Brown committed Feb 11, 2013
1 parent 0362f93 commit 74471ec
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e339af1c4567b1e63209329e2665781e598709f2
refs/heads/master: 0e27bd3137778ac9e856fec99b1752bf054a987c
22 changes: 20 additions & 2 deletions trunk/drivers/extcon/extcon-arizona.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ struct arizona_extcon_info {
bool micd_reva;
bool micd_clamp;

struct delayed_work hpdet_work;

bool hpdet_active;

int num_hpdet_res;
Expand Down Expand Up @@ -640,7 +642,7 @@ static void arizona_start_hpdet_acc_id(struct arizona_extcon_info *info)
dev_dbg(arizona->dev, "Starting identification via HPDET\n");

/* Make sure we keep the device enabled during the measurement */
pm_runtime_get(info->dev);
pm_runtime_get_sync(info->dev);

info->hpdet_active = true;

Expand Down Expand Up @@ -813,6 +815,17 @@ static irqreturn_t arizona_micdet(int irq, void *data)
return IRQ_HANDLED;
}

static void arizona_hpdet_work(struct work_struct *work)
{
struct arizona_extcon_info *info = container_of(work,
struct arizona_extcon_info,
hpdet_work.work);

mutex_lock(&info->lock);
arizona_start_hpdet_acc_id(info);
mutex_unlock(&info->lock);
}

static irqreturn_t arizona_jackdet(int irq, void *data)
{
struct arizona_extcon_info *info = data;
Expand All @@ -822,6 +835,8 @@ static irqreturn_t arizona_jackdet(int irq, void *data)

pm_runtime_get_sync(info->dev);

cancel_delayed_work_sync(&info->hpdet_work);

mutex_lock(&info->lock);

if (arizona->pdata.jd_gpio5) {
Expand Down Expand Up @@ -857,7 +872,8 @@ static irqreturn_t arizona_jackdet(int irq, void *data)

arizona_start_mic(info);
} else {
arizona_start_hpdet_acc_id(info);
schedule_delayed_work(&info->hpdet_work,
msecs_to_jiffies(250));
}

regmap_update_bits(arizona->regmap,
Expand Down Expand Up @@ -927,6 +943,7 @@ static int arizona_extcon_probe(struct platform_device *pdev)
mutex_init(&info->lock);
info->arizona = arizona;
info->dev = &pdev->dev;
INIT_DELAYED_WORK(&info->hpdet_work, arizona_hpdet_work);
platform_set_drvdata(pdev, info);

switch (arizona->type) {
Expand Down Expand Up @@ -1173,6 +1190,7 @@ static int arizona_extcon_remove(struct platform_device *pdev)
arizona_free_irq(arizona, ARIZONA_IRQ_MICDET, info);
arizona_free_irq(arizona, jack_irq_rise, info);
arizona_free_irq(arizona, jack_irq_fall, info);
cancel_delayed_work_sync(&info->hpdet_work);
regmap_update_bits(arizona->regmap, ARIZONA_JACK_DETECT_ANALOGUE,
ARIZONA_JD1_ENA, 0);
arizona_clk32k_disable(arizona);
Expand Down

0 comments on commit 74471ec

Please sign in to comment.