Received: by 10.192.165.148 with SMTP id m20csp3776849imm; Mon, 7 May 2018 19:36:49 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqz4iL8hAPYys+cryzCdD3QKU0e5hGV6vLWW/BqTk42l+sTSoQWgBaznI98WXMeBSAsCbdM X-Received: by 2002:a65:558c:: with SMTP id j12-v6mr32135948pgs.262.1525747009140; Mon, 07 May 2018 19:36:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525747009; cv=none; d=google.com; s=arc-20160816; b=WNTfGYMoHt6ySJ8GonLuAJCbYf/4BMjnkLvqquz+xC1J6YTUHJ9Ta/rnoHo9JicbyM XE6EB4zdNgaqy72ILETqn3i0wwKSNfMhgXuqzkrzOJ8b1amrUh7FV/edWAyDY48emnYs voJsdNTDFFTAugFBbK9Zoy3WbwGyR7JpIMu50HW0oM+Wka2ATzk6Wl+FbzMwZuHnm6Hj h7GtjxHe3t+uns3WQnmxfgTyy6ZpG2PqaMvOLE0RkWaVMaSiD58dhUnfEsmVU0YfVN79 SvHtNAFS4MX8bpiv28GG9Duohs+gvyxqTbH9uHT/wAvl1CuyVNmL27L2mrP8TL6QoaUO EMbA== 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=RuesTpD8pLBHkHCsQahl+FembROoZ6Z5O5NB5GS3pMiJO8K2Zw0oEWeRYAVrYF3VJU YTzR0HPfGTSKzt5NOH/nMXxJAqOhtRXyp1Od/47EJ3t4xqopiDzL76HE0p9E37dgN6m6 eLh59HOQHxy3T+HudjMN4/JZmCFz+fvsLBCzH6YEyJt1jOr4glT/gB6zyroL1LMyN8ul VI5zRWXl6n+/X3FNfZDNOGMj/z02YwTWaFHKmmohbvavbgUWr34lxRmzOD7S0RM7EUtq ld7HQQrZTuQtbMUl+nlzO+QNYPvtNDc/E4eofloAo/C3B879lNYtAl+TvZLA+NA38STb SD3A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=qGQRQje+; 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 d6-v6si18487959pgc.140.2018.05.07.19.36.34; Mon, 07 May 2018 19:36:49 -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=qGQRQje+; 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 S1753961AbeEHCcJ (ORCPT + 99 others); Mon, 7 May 2018 22:32:09 -0400 Received: from mail-io0-f193.google.com ([209.85.223.193]:43435 "EHLO mail-io0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753943AbeEHCcH (ORCPT ); Mon, 7 May 2018 22:32:07 -0400 Received: by mail-io0-f193.google.com with SMTP id t23-v6so36578368ioc.10 for ; Mon, 07 May 2018 19:32:06 -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=qGQRQje+eE3IfKIUS9ioESMT6Dz0q7Y5kAd5dkoA1F5BzTlxmwpMkKvDVI3ofSTBay ZEG/vUZ77yHFCU2kYbOjdWEMYalJtOcc4F2aG1o9FD8F9XkXpHjCNtKa0kegAc/Yl821 5U8sua364+qs1ieSgC7clfu9UyIdnnXADGHDsxhHqK+UjmRokJLEPT8FqaL1vCsih6LK /clVLG0MJ/GU1KtOccpZSXYdIL8GsHgey6aHj0APR410mCdYfgYLfvOhpJC4SDmL3cux QX8lqd0v4d62tgNtW/anmvhwT1PYy200XfdkA3QUfr9PIg0yW3JFxIh+jFeWNaw6nWJE t3wQ== 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=aiRXaiLVFkhT8H+5CDSmHzyVOsp4jg76MI+NKdQXOvpSDttUEo6UOOpCUQQ+34A1yq B7exvl+Bo/qKaiRvfXy3tMJVk5iP0jH07ArWYG+4KA+5QAZYAie1emrzxwLBdEa0iwrm sy0LicTQZ2B5TG7Gmb2yrsa8BHiiE5/5StxDahtmyHxgYRvRxM6HCowtljboVllTYFt5 HMMZ8ykrePwKrFl2RyoR5WpLwSX0sae8ggj8AAQbxk76HU9D933eNPPpzupWrKLNs15U lbWNF+t7MGN1DKzgY+VdpISAMEqCDNLO/xDKuYnxJiWdPkbvpILVC69NNs7Nmsk/jP1z AldA== X-Gm-Message-State: ALQs6tBoCeLLHlEaVv7LCgo6XKdusP/n+8RDCsTaRbgPQdhVeTLUyQMC kVVRlrWDs40bggU+p1/bDEg= X-Received: by 2002:a5e:c001:: with SMTP id u1-v6mr23977659iol.10.1525746726308; Mon, 07 May 2018 19:32:06 -0700 (PDT) Received: from localhost.localdomain ([2605:a000:1316:4462:d951:8657:56b7:4002]) by smtp.googlemail.com with ESMTPSA id l22-v6sm4947954ita.8.2018.05.07.19.32.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 07 May 2018 19:32:05 -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 v4 02/13] ALSA: hda/ca0132: Add pincfg for SBZ + R3Di, add fp hp auto-detect Date: Mon, 7 May 2018 22:31:10 -0400 Message-Id: <1525746683-18535-3-git-send-email-conmanx360@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1525746683-18535-1-git-send-email-conmanx360@gmail.com> References: <1525746683-18535-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