Skip to content

Commit

Permalink
ASoC: rt5645: Add the workqueue of the jack detect function for the d…
Browse files Browse the repository at this point in the history
…ebouncing

Add the workqueue of the jack detect function for the debouncing.

Signed-off-by: Oder Chiou <oder_chiou@realtek.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Oder Chiou authored and Mark Brown committed Oct 20, 2014
1 parent f114040 commit cd6e82b
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
15 changes: 14 additions & 1 deletion sound/soc/codecs/rt5645.c
Original file line number Diff line number Diff line change
Expand Up @@ -2166,11 +2166,20 @@ int rt5645_set_jack_detect(struct snd_soc_codec *codec,
}
EXPORT_SYMBOL_GPL(rt5645_set_jack_detect);

static void rt5645_jack_detect_work(struct work_struct *work)
{
struct rt5645_priv *rt5645 =
container_of(work, struct rt5645_priv, jack_detect_work.work);

rt5645_jack_detect(rt5645->codec, rt5645->jack);
}

static irqreturn_t rt5645_irq(int irq, void *data)
{
struct rt5645_priv *rt5645 = data;

rt5645_jack_detect(rt5645->codec, rt5645->jack);
queue_delayed_work(system_power_efficient_wq,
&rt5645->jack_detect_work, msecs_to_jiffies(250));

return IRQ_HANDLED;
}
Expand Down Expand Up @@ -2436,6 +2445,8 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
dev_err(&i2c->dev, "Fail gpio_direction hp_det_gpio\n");
}

INIT_DELAYED_WORK(&rt5645->jack_detect_work, rt5645_jack_detect_work);

return snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt5645,
rt5645_dai, ARRAY_SIZE(rt5645_dai));
}
Expand All @@ -2447,6 +2458,8 @@ static int rt5645_i2c_remove(struct i2c_client *i2c)
if (i2c->irq)
free_irq(i2c->irq, rt5645);

cancel_delayed_work_sync(&rt5645->jack_detect_work);

if (gpio_is_valid(rt5645->pdata.hp_det_gpio))
gpio_free(rt5645->pdata.hp_det_gpio);

Expand Down
1 change: 1 addition & 0 deletions sound/soc/codecs/rt5645.h
Original file line number Diff line number Diff line change
Expand Up @@ -2168,6 +2168,7 @@ struct rt5645_priv {
struct regmap *regmap;
struct i2c_client *i2c;
struct snd_soc_jack *jack;
struct delayed_work jack_detect_work;

int sysclk;
int sysclk_src;
Expand Down

0 comments on commit cd6e82b

Please sign in to comment.