Received: by 10.192.165.148 with SMTP id m20csp1441365imm; Sat, 5 May 2018 12:07:56 -0700 (PDT) X-Google-Smtp-Source: AB8JxZp45/U1Foh29TrIvGDjg9lN9FWlObRcVeG1ME1VBkg3KC5eTxvJ7uwBvJHoVY4LHpImT6un X-Received: by 2002:a17:902:b94c:: with SMTP id h12-v6mr361247pls.322.1525547276928; Sat, 05 May 2018 12:07:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525547276; cv=none; d=google.com; s=arc-20160816; b=YqTxFLMejEIwjel0mqpgmMv9Vkn5ti7Uy+SS9ZuMCZc3xWqsqIEawZO7L0qgfjImV+ Bujf7mYJ+zucISErW2+3GpjM4Bm9GADUjWPg0RHD6yyPXTAclvJgYRe37IRdeqrizVpL 0cET3f5zPHu1cTmw16v2lZZiHE0TbPxswKkFyQGPlVCaY+N/j4b9+ylw7yD5Fq94/RRA MMHfa4i1U8cOZVJX9R2txEZkKZlLT6kePLgWYpaPwAj1Pgf1n8EKNTx/pJ5NgF3iUhNQ UhHBvaZCc00+HJ0sNAKCJgk5vrZNPyyEYotDuF4jpmMgzH/D5gyoJqTDs9ggPoMeMwyx oMmQ== 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=VsE3KsVhTib2d4k/hM/GJnL1WNuXUH3BxcM3ZugAbhJBh0R+ps9NW/39Cg8hTg7CQo e2Hxu9n4UPoOLTBBr4YQxaSsEODmAShLKPkq6rL3/wLMrW23SdWCu0drZ07OPM1pNfr+ GB6vBKAiTbYMCO0p7HkNwI2MAK2pAck387vM2qBvZw6dwiJcEYc+Mw8RusDJqYxgLYSZ p/Zy7QYZwrXSGSnS6/fmrP021se9AOYuVvA/JB4t8PAgpyMfaNp6VXp458ce258DU7WO z7MZtrMCwoPnjGiy6LTiEVqDRk8yj7zDsmzJFFQHO7MfwQygFlWuTLhVgNYHFeXgqf7t dWCQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=XujficZ/; 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 g59-v6si19362711plb.381.2018.05.05.12.07.42; Sat, 05 May 2018 12:07: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=XujficZ/; 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 S1752046AbeEETGr (ORCPT + 99 others); Sat, 5 May 2018 15:06:47 -0400 Received: from mail-io0-f195.google.com ([209.85.223.195]:44521 "EHLO mail-io0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751825AbeEETEJ (ORCPT ); Sat, 5 May 2018 15:04:09 -0400 Received: by mail-io0-f195.google.com with SMTP id d11-v6so29282988iof.11 for ; Sat, 05 May 2018 12:04:09 -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=XujficZ/Zn5VPClIceqi6RIdpDHXOlnXtjmAvVosq14QHZS2b9JS/n+g2m9XJ8wv8q iofW3gWVHCcDnjdrwyTihUqesRaVkGNSFy02Up5YqILt0kn7rVBxzkUtBDg6AWPK3RJG fmu/2YrmNlo0oAeJxdf7Rtp6mcC9KYSu93zZebO2Dr8YmzztOiwd8jxfdQv6KV8TyFZB jJl7am95zNX1nCgRkigydSJaERONQZ7F9yZledcfJ/k5LCeDWqSFn50QJJ1xbbNUWhLz 6pzHS7t4C4WdXr2hU45CB5WGgQ5BgibuFMXbal5P0Et+U+U1OM8eb1rl+jzi+8ZJQ078 VkVA== 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=iLa15E/R4lbMNnR9f4+hdJ/KzQyDd5bJ7jOvVCbTRc7xqlu2JkkQ4aQNHSYFAWZkAB yYed1w0sZHcVOuXFwChTwST7KC08jbOYBGyc0S2tja1r01ybKFhdhVr2ejgyxZ5qqoGt eWhejKrWQqKpWf3B/DVfjavDczQObMaLr60XlrSbwpk7+7AZJ+bRZLKghh+GBMaI06U5 JdjXnlOdOyYWFZQVEHN1ZOKzCM0lJy+YD4M4pf/v9vIRabzLliGITjY+KzDQXuNm8aIg cHH81wrLbrerkDqlXGwVsH910R/4rGTHF2UA+7yd8bu8tLrEQLqbScK/YNCEcTZB7oCj 9Yzg== X-Gm-Message-State: ALQs6tA/nWMybw9Lo+nBlTb3M6NHIpHZPo7Otuqa3XCFg+Xg787lDGfj erPwIFlilYDLAN50Xl2g74UB1jxv X-Received: by 2002:a6b:a9d1:: with SMTP id f78-v6mr32162537ioj.277.1525547048910; Sat, 05 May 2018 12:04:08 -0700 (PDT) Received: from localhost.localdomain ([2605:a000:1316:4462:961:633e:9990:7115]) by smtp.googlemail.com with ESMTPSA id q21-v6sm3314945itb.4.2018.05.05.12.04.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 05 May 2018 12:04:08 -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 v3 2/9] ALSA: hda/ca0132: Add pincfg for SBZ + R3Di, add fp hp auto-detect Date: Sat, 5 May 2018 15:03:13 -0400 Message-Id: <1525547001-17588-3-git-send-email-conmanx360@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1525547001-17588-1-git-send-email-conmanx360@gmail.com> References: <1525547001-17588-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