Received: by 10.192.165.148 with SMTP id m20csp322533imm; Thu, 3 May 2018 21:22:56 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpua5VAJbrZu/l7anR6dzUcP1HdeoibcxJUqtri2t/EUGAPSqYxXCZ1Uyg9u4RTdpurqHSM X-Received: by 2002:a63:6ec6:: with SMTP id j189-v6mr20726607pgc.86.1525407776075; Thu, 03 May 2018 21:22:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525407776; cv=none; d=google.com; s=arc-20160816; b=vych/7+Xnz2+6DDJVeq+DB0h6BU95IzbRAoTPfMS5qg9cDNRcCKlsIuEqDniqi9GAy dgIGh5rwjuCmil3mXHNpi2AkwZVM/oy2ExoADuQQnuXeYQKgfTQkwImMi8KU2hcS+wZu ucdFba0jHiRZzZums5N/C7oIl+pEjgp7TnYQ884/zIHO+z+OVTZi8OjD4WUhHeAv5+VD UVPGYOHitrR0gcrLDb8kPyToUmdZvA+uZ7B3XkuSytyGqoQHT0TvxUJDcHEF6f2RiT3A 8M1+V5nCg/esu7Y6wP34VUSpEpwEV5h0hvPMKX65DettZIoUUrGv58mb/K09QQfuRS5s jynw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:to:references:in-reply-to:message-id:date :subject:cc:from:dkim-signature:arc-authentication-results; bh=qTdOQ53l5SbDUY1aDLKhLj4dbyV2hHgfu65ZsNayYck=; b=FZOZYaLH0B9nrqL7OHaIgWNQ2rvw8n8CPPmVUExOdEeW3O9Rc8EUub63lRv6ViMhIz C1OCNyEdQlhf6uKhKuBR23tG9zqJP6szz/4KE0PKQTDPBND2s2PPqWzpjzs8g6EvMWw0 kGIuT2pySNwbQQxId7oMn6YVKJL6RxS0HPpGQNOmusvO1KV9ZyvO1qxC/AtyAe0cfKc1 4JqWKyYU1OW8HwrOali144+S9ovkiVUQo+9flzUwRmaRAR1E5TR3uDqHpW+IRZ4oAx8M znr6f7d17VPVEJnBX7CR5+mLS4GsbUDz/B/hgHvSZd7uAh5+ZqN4AGeFCLfh0wi+togH d21Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=Z32kjSGK; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g6-v6si12835351pgr.72.2018.05.03.21.22.41; Thu, 03 May 2018 21:22:56 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=Z32kjSGK; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751399AbeEDEUb (ORCPT + 99 others); Fri, 4 May 2018 00:20:31 -0400 Received: from mail-io0-f194.google.com ([209.85.223.194]:39897 "EHLO mail-io0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751354AbeEDEU3 (ORCPT ); Fri, 4 May 2018 00:20:29 -0400 Received: by mail-io0-f194.google.com with SMTP id r9-v6so24203313iod.6 for ; Thu, 03 May 2018 21:20:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=qTdOQ53l5SbDUY1aDLKhLj4dbyV2hHgfu65ZsNayYck=; b=Z32kjSGKvIm2MVSIh4gUpqjaP7+Xf6DJjKxS8awRt0+7MwB1EGRTYgf847ohMZK+ts hx28FQcp/Y3hTsgVh6i1LR9JyHQYDIRp7wfEqaqLdKoBJ/iryUJMXh5fmVjeIq146P7x 0iX3fgPRu0YeYzQDYluQz6Nq+NJCQBVCbSSowQeUCzRaBmIDANEgaHmIdzX2RB0i90n7 BfAXaYoraMDRSYqZfx3x0NSDPFNpKmIJk924nDHl/l0kzY3BpS3k3Oq7IC9IHUC8xp1l JITZSlEUFz1QfOXArQwjAXBF3wI1EVKvdqcHzVSYjhL6d1pR+CEa4cOICT6uQedbY+fo PHdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=qTdOQ53l5SbDUY1aDLKhLj4dbyV2hHgfu65ZsNayYck=; b=UnI1GWss9nFPqL0aspKM7RGFKzm9P54fH8r+JyMuIttocfDoQTWFp6RNmgY8rtPFB1 4EkF8vFAk1xxwdEyMEMaFJd5WsM4hYh38rqQ/jtKXyql4VFoCL7x+sFiwjCuDnW1yAI3 y/NkUfPF03F//b5DE2CWWfhs0CFqISkj8rD35cSTGB46FYQKm+nqw/866wb6drxf1MI6 aaJNGo4JgyEfsb59pOZhUD3q6qWt3Rj36q7pBSkWzhox8ehDiqsm4CuRUtym1M0CjQh2 fExpY3/w9cI90OiWXt8ITwwqi9WdbxT840o/5mhX8lAZRHP6IEbOrW7B/WlrNHowJCtV nvJQ== X-Gm-Message-State: ALQs6tBjvAIvxumv863TzwpcHrhOrn3NEkTZMfAJuIx4AKVOz4H7gIRb JgxGqzWYfFFHY8qPrxx1YLI= X-Received: by 2002:a6b:307:: with SMTP id 7-v6mr29300990iod.66.1525407628796; Thu, 03 May 2018 21:20:28 -0700 (PDT) Received: from localhost.localdomain ([2605:a000:1316:4462:790f:f81c:25a6:fe65]) by smtp.googlemail.com with ESMTPSA id k1-v6sm605341iti.42.2018.05.03.21.20.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 03 May 2018 21:20:28 -0700 (PDT) From: Connor McAdams Cc: o-takashi@sakamocchi.jp, Connor McAdams , Jaroslav Kysela , Takashi Iwai , =?UTF-8?q?J=C3=A9r=C3=A9my=20Lefaure?= , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/9] Add pincfg for SBZ + R3Di, add fp hp auto-detect Date: Fri, 4 May 2018 00:19:45 -0400 Message-Id: <1525407594-25644-2-git-send-email-conmanx360@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1525407594-25644-1-git-send-email-conmanx360@gmail.com> References: <1525407594-25644-1-git-send-email-conmanx360@gmail.com> To: unlisted-recipients:; (no To-header on input) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch adds an unsolicited response tag for the front headphone panel which uses the same hp_callback as the rear headphone detection. This patch also adds pincfgs for the R3Di and SBZ which were taken from the Windows driver. The pins are also defined in the function ca0132_config. Both the R3Di and SBZ are also given a max out channel value of 6 to handle 5.1 surround sound in later patches. Signed-off-by: Connor McAdams --- sound/pci/hda/patch_ca0132.c | 111 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 108 insertions(+), 3 deletions(-) diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c index 8346100..02238fe 100644 --- a/sound/pci/hda/patch_ca0132.c +++ b/sound/pci/hda/patch_ca0132.c @@ -723,6 +723,7 @@ struct ca0132_spec { hda_nid_t shared_mic_nid; hda_nid_t shared_out_nid; hda_nid_t unsol_tag_hp; + hda_nid_t unsol_tag_front_hp; /* for desktop ca0132 codecs */ hda_nid_t unsol_tag_amic1; /* chip access */ @@ -785,6 +786,36 @@ static const struct hda_pintbl alienware_pincfgs[] = { {} }; +/* Sound Blaster Z pin configs taken from Windows Driver */ +static const struct hda_pintbl sbz_pincfgs[] = { + { 0x0b, 0x01017010 }, /* Port G -- Lineout FRONT L/R */ + { 0x0c, 0x014510f0 }, /* SPDIF Out 1 */ + { 0x0d, 0x014510f0 }, /* Digital Out */ + { 0x0e, 0x01c510f0 }, /* SPDIF In */ + { 0x0f, 0x0221701f }, /* Port A -- BackPanel HP */ + { 0x10, 0x01017012 }, /* Port D -- Center/LFE or FP Hp */ + { 0x11, 0x01017014 }, /* Port B -- LineMicIn2 / Rear L/R */ + { 0x12, 0x01a170f0 }, /* Port C -- LineIn1 */ + { 0x13, 0x908700f0 }, /* What U Hear In*/ + { 0x18, 0x50d000f0 }, /* N/A */ + {} +}; + +/* Recon3D integrated pin configs taken from Windows Driver */ +static const struct hda_pintbl r3di_pincfgs[] = { + { 0x0b, 0x01014110 }, /* Port G -- Lineout FRONT L/R */ + { 0x0c, 0x014510f0 }, /* SPDIF Out 1 */ + { 0x0d, 0x014510f0 }, /* Digital Out */ + { 0x0e, 0x41c520f0 }, /* SPDIF In */ + { 0x0f, 0x0221401f }, /* Port A -- BackPanel HP */ + { 0x10, 0x01016011 }, /* Port D -- Center/LFE or FP Hp */ + { 0x11, 0x01011014 }, /* Port B -- LineMicIn2 / Rear L/R */ + { 0x12, 0x02a090f0 }, /* Port C -- LineIn1 */ + { 0x13, 0x908700f0 }, /* What U Hear In*/ + { 0x18, 0x500000f0 }, /* N/A */ + {} +}; + static const struct snd_pci_quirk ca0132_quirks[] = { SND_PCI_QUIRK(0x1028, 0x0685, "Alienware 15 2015", QUIRK_ALIENWARE), SND_PCI_QUIRK(0x1028, 0x0688, "Alienware 17 2015", QUIRK_ALIENWARE), @@ -4503,6 +4534,10 @@ static void ca0132_init_unsol(struct hda_codec *codec) amic_callback); snd_hda_jack_detect_enable_callback(codec, UNSOL_TAG_DSP, ca0132_process_dsp_response); + /* Front headphone jack detection */ + if (spec->quirk == QUIRK_SBZ || spec->quirk == QUIRK_R3DI) + snd_hda_jack_detect_enable_callback(codec, + spec->unsol_tag_front_hp, hp_callback); } /* @@ -4684,9 +4719,14 @@ static void ca0132_config(struct hda_codec *codec) spec->multiout.dac_nids = spec->dacs; spec->multiout.num_dacs = 3; - spec->multiout.max_channels = 2; - if (spec->quirk == QUIRK_ALIENWARE) { + if (spec->quirk == QUIRK_NONE || spec->quirk == QUIRK_ALIENWARE) + spec->multiout.max_channels = 2; + else + spec->multiout.max_channels = 6; + + switch (spec->quirk) { + case QUIRK_ALIENWARE: codec_dbg(codec, "ca0132_config: QUIRK_ALIENWARE applied.\n"); snd_hda_apply_pincfgs(codec, alienware_pincfgs); @@ -4706,7 +4746,71 @@ static void ca0132_config(struct hda_codec *codec) spec->input_pins[2] = 0x13; spec->shared_mic_nid = 0x7; spec->unsol_tag_amic1 = 0x11; - } else { + break; + case QUIRK_SBZ: + codec_dbg(codec, "%s: QUIRK_SBZ applied.\n", __func__); + snd_hda_apply_pincfgs(codec, sbz_pincfgs); + + spec->num_outputs = 2; + spec->out_pins[0] = 0x0B; /* Line out */ + spec->out_pins[1] = 0x0F; /* Rear headphone out */ + spec->out_pins[2] = 0x10; /* Front Headphone / Center/LFE*/ + spec->out_pins[3] = 0x11; /* Rear surround */ + spec->shared_out_nid = 0x2; + spec->unsol_tag_hp = spec->out_pins[1]; + spec->unsol_tag_front_hp = spec->out_pins[2]; + + spec->adcs[0] = 0x7; /* Rear Mic / Line-in */ + spec->adcs[1] = 0x8; /* Front Mic, but only if no DSP */ + spec->adcs[2] = 0xa; /* what u hear */ + + spec->num_inputs = 2; + spec->input_pins[0] = 0x12; /* Rear Mic / Line-in */ + spec->input_pins[1] = 0x13; /* What U Hear */ + spec->shared_mic_nid = 0x7; + spec->unsol_tag_amic1 = spec->input_pins[0]; + + /* SPDIF I/O */ + spec->dig_out = 0x05; + spec->multiout.dig_out_nid = spec->dig_out; + cfg->dig_out_pins[0] = 0x0c; + cfg->dig_outs = 1; + cfg->dig_out_type[0] = HDA_PCM_TYPE_SPDIF; + spec->dig_in = 0x09; + cfg->dig_in_pin = 0x0e; + cfg->dig_in_type = HDA_PCM_TYPE_SPDIF; + break; + case QUIRK_R3DI: + codec_dbg(codec, "%s: QUIRK_R3DI applied.\n", __func__); + snd_hda_apply_pincfgs(codec, r3di_pincfgs); + + spec->num_outputs = 2; + spec->out_pins[0] = 0x0B; /* Line out */ + spec->out_pins[1] = 0x0F; /* Rear headphone out */ + spec->out_pins[2] = 0x10; /* Front Headphone / Center/LFE*/ + spec->out_pins[3] = 0x11; /* Rear surround */ + spec->shared_out_nid = 0x2; + spec->unsol_tag_hp = spec->out_pins[1]; + spec->unsol_tag_front_hp = spec->out_pins[2]; + + spec->adcs[0] = 0x07; /* Rear Mic / Line-in */ + spec->adcs[1] = 0x08; /* Front Mic, but only if no DSP */ + spec->adcs[2] = 0x0a; /* what u hear */ + + spec->num_inputs = 2; + spec->input_pins[0] = 0x12; /* Rear Mic / Line-in */ + spec->input_pins[1] = 0x13; /* What U Hear */ + spec->shared_mic_nid = 0x7; + spec->unsol_tag_amic1 = spec->input_pins[0]; + + /* SPDIF I/O */ + spec->dig_out = 0x05; + spec->multiout.dig_out_nid = spec->dig_out; + cfg->dig_out_pins[0] = 0x0c; + cfg->dig_outs = 1; + cfg->dig_out_type[0] = HDA_PCM_TYPE_SPDIF; + break; + default: spec->num_outputs = 2; spec->out_pins[0] = 0x0b; /* speaker out */ spec->out_pins[1] = 0x10; /* headphone out */ @@ -4733,6 +4837,7 @@ static void ca0132_config(struct hda_codec *codec) spec->dig_in = 0x09; cfg->dig_in_pin = 0x0e; cfg->dig_in_type = HDA_PCM_TYPE_SPDIF; + break; } } -- 2.7.4