hda/cs8904: Fix jack detection after resume

From: Christian A. Ehrhardt
Date: Fri Dec 31 2021 - 08:55:01 EST



Hi,

while debugging something different, I found the following
jack detection related bug in the cs8904 driver on my DELL
Inspirion 3501:
- Plug in a headset, play some sound to make sure that
the headset is detected.
- Stop the sound, wait for the codec to go into suspend (30s
should be plenty enough time)
- Unplug the headset while the codec is in suspend.
- Try to play sound on the internal speakers. Notice that
the the driver still thinks the headset is connected. As a result
there is no sound on the internal speakers.

AFAICS the bug was introduced by the following commit:
| commit 424e531b47f83da87490464c5bf633dfb624fe6a
| Author: Stefan Binding <sbinding@xxxxxxxxxxxxxxxxxxxxx>
| Date: Fri Aug 27 12:02:51 2021 +0100
|
| ALSA: hda/cs8409: Ensure Type Detection is only run on startup when
| necessary

The bug is with the hp_jack_in and mic_jack_in flags that are used
to determine if jack detection should be run etc. These flags
are cleared in the suspend path. This prevents a status change from
being detected after resume as hp_jack_in is cleared by suspend and
there is no jack due to the unplug of the headset.

This status change was never reported to the HDA core, though.
On suspend this is not done, only hd_jack_in is cleared and on
resume the driver thinks that there is no change the needs reporting.

Proposed fix below, please consider inclusion.

regards Christian