[3/3] Fix headset auto detect fail in cx8070 and SN6140
Commit Message
CX8070 and SN6140 will get wrong headset type when use OMTP headset,
then the headset mic will not work.
Signed-off-by: bo liu <bo.liu@senarytech.com>
---
sound/pci/hda/patch_conexant.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
@@ -184,7 +184,7 @@ static int cx_auto_init(struct hda_codec *codec)
snd_hda_codec_write(codec, 0x1c, 0, 0x4f0, 0x0eb);
/* fix reboot headset recognize fail issue */
mic_persent = snd_hda_codec_read(codec, 0x19, 0, 0xf09, 0x0);
- if (mic_persent&0x80000000)
+ if (mic_persent&0x80000000)
snd_hda_codec_write(codec, 0x19, 0, 0x707, 0x24);
else
snd_hda_codec_write(codec, 0x19, 0, 0x707, 0x20);
@@ -212,7 +212,7 @@ static void cx_auto_free(struct hda_codec *codec)
static int headset_present_flag;
static void cx_jack_unsol_event(struct hda_codec *codec, unsigned int res)
{
- unsigned int val, phone_present, mic_persent,phone_tag, mic_tag;
+ unsigned int val, phone_present, mic_persent, phone_tag, mic_tag;
unsigned int count=0;
switch (codec->core.vendor_id) {
@@ -236,13 +236,11 @@ static void cx_jack_unsol_event(struct hda_codec *codec, unsigned int res)
if ((phone_present&0x80000000) && (mic_persent&0x80000000)) {
/* wait headset detect done */
do {
+ msleep(20);
val = snd_hda_codec_read(codec, 0x1c,
0, 0xca0, 0x0);
- if (val&0x080)
- break;
- msleep(20);
count += 1;
- } while (count > 3);
+ } while ((count > 3) || (val&0x080));
val = snd_hda_codec_read(codec, 0x1c, 0, 0xcb0, 0x0);
if (val&0x800) {
codec_dbg(codec, "headset plugin, type is CTIA\n");