Signed-off-by: Wang Xingchao xingchao.wang@linux.intel.com
sound/pci/hda/hda_intel.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 8860dd5..a7ac7fd 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -2970,6 +2970,11 @@ static int azx_runtime_suspend(struct device
*dev)
{ struct snd_card *card = dev_get_drvdata(dev); struct azx *chip = card->private_data;
int status;
/* enable controller wake up event */
azx_writew(chip, WAKEEN, azx_readw(chip, WAKEEN) |
STATESTS_INT_MASK);azx_stop_chip(chip); azx_enter_link_reset(chip);
@@ -2983,11 +2988,31 @@ static int azx_runtime_resume(struct device
*dev)
{ struct snd_card *card = dev_get_drvdata(dev); struct azx *chip = card->private_data;
struct hda_bus *bus;
struct hda_codec *codec;
int status;
if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) hda_display_power(true);
/* Read STATESTS before controller reset */
status = azx_readw(chip, STATESTS);
azx_init_pci(chip); azx_init_chip(chip, 1);
bus = chip->bus;
if (status && bus) {
list_for_each_entry(codec, &bus->codec_list, list)if (status & (1 << codec->addr))queue_delayed_work(codec->bus->workq,&codec->jackpoll_work,codec->jackpoll_interval);
Is there a reason you want to move the jack detection to a delayed work, i e, why can't we just call:
snd_hda_jack_set_dirty_all(codec); snd_hda_jack_poll_all(codec);
...from here?
In fact it doesnot work for me, It will again call runtime_resume() and caused dead loop.
--xingchao
- }
- /* disable controller Wake Up event*/
- azx_writew(chip, WAKEEN, azx_readw(chip, WAKEEN) &
~STATESTS_INT_MASK);- return 0; }
-- David Henningsson, Canonical Ltd. https://launchpad.net/~diwic