From patchwork Thu Dec 28 02:57:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: bo liu X-Patchwork-Id: 183774 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:6f82:b0:100:9c79:88ff with SMTP id tb2csp2074694dyb; Thu, 28 Dec 2023 07:54:28 -0800 (PST) X-Google-Smtp-Source: AGHT+IF7s977q2ckowfcc/Vdm7c6sChIrT0cu3jn81hvbiq/wcSMmfFrOVwW6MGLMElXTGzflcX6 X-Received: by 2002:a17:906:6bc9:b0:a26:8c28:1b6b with SMTP id t9-20020a1709066bc900b00a268c281b6bmr5175863ejs.152.1703778868540; Thu, 28 Dec 2023 07:54:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1703778868; cv=none; d=google.com; s=arc-20160816; b=eB2zdwimMCytQCssFNA4pFmYN7aAU/eBMjbohgSIJMiEHOcXUVgnDuwOHkwA2t32ev FeZor0+maAz8yGihrN42XW9+Cnat3Qyre+EEOmP48irrxZvWZry84S4IVuErWO+O03bJ CI1UIx15BpUty7VRUn8/Z6Fahmt/kVx9HTlfiRKzUshPMPR9JpMdZZUrssg3TtY8Tf5l hc7r3o2Xo21oWv4lbaTZBy1DBEFH35bDRkrA2ZQKi7t9oMr4HxN/2Em7cehohDsfuivB fU/7PM31XWQvJcLWQoDzpQwR+fw35G6DNVUci3otwp/gjqD1Dgf5sAmN6hoC4v2hK57Q uUhw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-language:thread-index:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :message-id:date:subject:cc:to:from; bh=1y8VwdvQvOgQ4D0Sdr+j8rWyjb66OvomY1mbYzmLWkA=; fh=whamaF9263oa7R3PlEAOrKbF4ASyuaRB7rQ5ZhqNQbw=; b=M+mQBtiTY2tTi9K1YzshUDn8frrlMfj7cqnx0TGhQFr17wpaz8kw8kAAwy62kxOdHD 7VktzAvYpW+4GnDCQLwTa1cfs93XNXSiBWqLqNV5QSgRjpNpNxC6HPRtFpRyqBu1wamW 5/DAz5cejO6dZaT9DlGVllmfr2K6HYQrs/jLnud26mcbuDTl3u/MuJ8kB5RDH94Ggs1d bzUk2P978TLXmHpmFzpbEiySY2ZOJ1hULX7hITF8aWLo7B6A4anNIDrAH/072T2WP9yh rgdsWc3LDpTIwo0XkOZ4hVtA8PD3d0EplyOi3g+9gbJpFDKRTNqoQukHbbeUnT0qYmW9 G4BA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-12766-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-12766-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=senarytech.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id g19-20020a1709067c5300b00a1ce98016c7si7337258ejp.533.2023.12.28.07.54.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Dec 2023 07:54:28 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-12766-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-12766-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-12766-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=senarytech.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 2AEEE1F228D0 for ; Thu, 28 Dec 2023 15:54:28 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C2B52F9C5; Thu, 28 Dec 2023 15:54:12 +0000 (UTC) X-Original-To: linux-kernel@vger.kernel.org Received: from mail-m12773.qiye.163.com (mail-m12773.qiye.163.com [115.236.127.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 79FFAF4E3; Thu, 28 Dec 2023 15:54:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=senarytech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=senarytech.com Received: from liubo (unknown [61.183.143.78]) by mail-m12756.qiye.163.com (Hmail) with ESMTPA id B98DCDC035B; Thu, 28 Dec 2023 10:57:43 +0800 (CST) From: =?utf-8?b?5YiY5Y2a?= To: , Cc: , Subject: =?utf-8?q?Due_to_returning_the_email_and_resending_it//=E7=AD=94?= =?utf-8?q?=E5=A4=8D=3A_=5BPATCH_1/3=5D_Fix_headset_auto_detect_fail_in_cx80?= =?utf-8?q?70_and_SN6140?= Date: Thu, 28 Dec 2023 10:57:43 +0800 Message-ID: <009d01da3939$a1517440$e3f45cc0$@senarytech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: Ado5OZT0IQYjxbjwTr6PBszvuPulOQ== Content-Language: zh-cn X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWS1ZQUlXWQ8JGhUIEh9ZQVkaSx9JVh0ZHhkfH0IZTE0dHlUTARMWGhIXJBQOD1 lXWRgSC1lBWU1KVUpDSFVKT0hVTENZV1kWGg8SFR0UWUFZT0tIVUpNT0lOSFVKS0tVSkJLS1kG X-HM-Tid: 0a8cae5b3ba8b223kuuub98dcdc035b X-HM-MType: 1 X-HM-Sender-Digest: e1kMHhlZQR0aFwgeV1kSHx4VD1lBWUc6NUk6Vio5Kjw6CQ8SCC4tPxEL KAMKCy5VSlVKTEtITEhJSU1PTkpOVTMWGhIXVRkUVRcSDjsIHhUaCQIPHhgTVRgUFkVZV1kSC1lB WU1KVUpDSFVKT0hVTENZV1kIAVlBTU5OSjcG X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1786541630712990268 X-GMAIL-MSGID: 1786541630712990268 FYI Best Regards Bo Liu (刘博) Cell#: +86-18986160629  Email: bo.liu@senarytech.com 深圳前海深蕾半导体有限公司 湖北省武汉市东湖高新技术开发区关山大道355号铭丰大厦 16楼1601-1603室  Room 1601-1603,mTower, No. 355 Guanshan Avenue,  East Lake High-tech Development Zone, Wuhan, Hubei Province.   -----邮件原件----- 发件人: bo liu 发送时间: 2023年12月27日 15:10 收件人: perex@perex.cz; tiwai@suse.com 抄送: linux-sound@vger.kernel.org; linux-kernel@vger.kernel.org; bo liu 主题: [PATCH 1/3] Fix headset auto detect fail in cx8070 and SN6140 CX8070 and SN6140 will get wrong headset type when use OMTP headset, then the headset mic will not work. Signed-off-by: bo liu --- sound/pci/hda/patch_conexant.c | 75 +++++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) cxt_init_gpio_led(codec); snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_INIT); + switch (codec->core.vendor_id) { + case 0x14f11f86: + case 0x14f11f87: + /* fix some headset recognize fail issue */ + snd_hda_codec_write(codec, 0x1c, 0, 0x320, 0x010); + snd_hda_codec_write(codec, 0x1c, 0, 0x3b0, 0xe10); + 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) { + snd_hda_codec_write(codec, 0x19, 0, 0x707, 0x24); + } else { + snd_hda_codec_write(codec, 0x19, 0, 0x707, 0x20); + } + break; + } + return 0; } @@ -191,6 +209,60 @@ static void cx_auto_free(struct hda_codec *codec) cx_auto_shutdown(codec); snd_hda_gen_free(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 count=0; + + switch (codec->core.vendor_id) { + case 0x14f11f86: + case 0x14f11f87: + /* check hp&mic tag to process headset pulgin&plugout */ + phone_tag = snd_hda_codec_read(codec, 0x16, 0, 0xf08, 0x0); + mic_tag = snd_hda_codec_read(codec, 0x19, 0, 0xf08, 0x0); + if((phone_tag&(res>>26)) || (mic_tag&(res>>26))) { + //msleep(600); + phone_present = snd_hda_codec_read(codec, 0x16, 0, 0xf09, 0x0); + if(!(phone_present&0x80000000)) {/* headphone plugout */ + headset_present_flag = 0; + snd_hda_codec_write(codec, 0x19, 0, 0x707, 0x20); + break; + } + if (headset_present_flag == 0) { + headset_present_flag = 1; + } else if(headset_present_flag == 1) { + mic_persent = snd_hda_codec_read(codec, 0x19, 0, 0xf09, 0x0); + if ((phone_present&0x80000000)&&(mic_persent&0x80000000)) {/* headset is present */ + /* wait headset detect done */ + do { + val = snd_hda_codec_read(codec, 0x1c, 0, 0xca0, 0x0); + if(val&0x080) { + break; + } + msleep(10); + count += 1; + } while(count > 5); + val = snd_hda_codec_read(codec, 0x1c, 0, 0xcb0, 0x0); + if(val&0x800) { + codec_dbg(codec, "headset plugin, type is CTIA\n"); + snd_hda_codec_write(codec, 0x19, 0, 0x707, 0x24); + } else if(val&0x400) { + codec_dbg(codec, "headset plugin, type is OMTP\n"); + snd_hda_codec_write(codec, 0x19, 0, 0x707, 0x24); + } else { + codec_dbg(codec, "headphone plugin\n"); + } + headset_present_flag = 2; + } + } + } + break; + } + + snd_hda_jack_unsol_event(codec, res); +} #ifdef CONFIG_PM static int cx_auto_suspend(struct hda_codec *codec) @@ -205,7 +277,7 @@ static const struct hda_codec_ops cx_auto_patch_ops = { .build_pcms = snd_hda_gen_build_pcms, .init = cx_auto_init, .free = cx_auto_free, - .unsol_event = snd_hda_jack_unsol_event, + .unsol_event = cx_jack_unsol_event, #ifdef CONFIG_PM .suspend = cx_auto_suspend, .check_power_status = snd_hda_gen_check_power_status, @@ -1042,6 +1114,7 @@ static int patch_conexant_auto(struct hda_codec *codec) codec->spec = spec; codec->patch_ops = cx_auto_patch_ops; + headset_present_flag = 0; cx_auto_parse_eapd(codec); spec->gen.own_eapd_ctl = 1; -- 2.34.1 diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c index a889cccdd607..2d58595bfbdd 100644 --- a/sound/pci/hda/patch_conexant.c +++ b/sound/pci/hda/patch_conexant.c @@ -166,6 +166,7 @@ static void cxt_init_gpio_led(struct hda_codec *codec) static int cx_auto_init(struct hda_codec *codec) { + unsigned int mic_persent; struct conexant_spec *spec = codec->spec; snd_hda_gen_init(codec); if (!spec->dynamic_eapd) @@ -174,6 +175,23 @@ static int cx_auto_init(struct hda_codec *codec)