Received: by 10.192.165.148 with SMTP id m20csp4566748imm; Tue, 8 May 2018 10:25:47 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpoXnktIQFOZ2Ff1Cfy8KT5Ia3ozMwqbw1SNmPb+DBOSrTCR1b2GhDonNZ+xWeyl4UZgrlZ X-Received: by 10.98.76.83 with SMTP id z80mr41162746pfa.181.1525800346930; Tue, 08 May 2018 10:25:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525800346; cv=none; d=google.com; s=arc-20160816; b=siTs7d7HtFgAi+j2uIKwVUqPPba/tLsr/7rIEuK1mF6hsl6at9dZj71pd4eHL9lM0y AB/wHzUV2PHdf8AosPl8bpqZ0kH5uFPN7ZfDJCoEyTYvDX8nCW7VPkbLOOx5+PnFv9Fy 9+unsLneRzO5YNL74JxG9te1ruTkffJ3ISUf8vxXcnCUXpLxmI+NeHeXOToU15LC/1TY cSHAx6K2d3ronvugR6Gu95B24JmL5wMEla4B7AOrZLWRNjnhKi9s572LVwWAb8ZkUwnq GlaEzNbnR2jeYFyBEZgh/XmSdsnoIRs9AXXvdEZsTQRfxm0LLkfhRyEkAZ6N5jYjtNZZ xicA== 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=SjWtQs4sS2psWdvIUOJhAyWUwQxPX5GwPlbjMi3SPQG1Ymk83OuvBNfh2DvaiKMA9I L97gdb7fZjerrdtaW+LVvKI/Nm/ZQQhTCf99/kdttG2rwvWboS41TmSri81lqgCZQQRT zkyHqSZufAypZ6r+n+TcgZCcihv6U0cd2Sdm94CmjdSfy0iX7llCWDEj2MyvJfkWhuiY 3p4R/eup5HLtcJXiZB7aFMJ+yuYqxTUbLX604waRpSrK0GYroNUFj9Sn90yvKsAmKDkS TulzoNQ7TDZ6oJBVwcKFtqhCReYt2+6xH4MuLW5MBCzRM/ZbB9iJnLnyelsA7FoG4ZWu XqNQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=NDZ4uzNL; 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 w6-v6si24608999plq.382.2018.05.08.10.25.32; Tue, 08 May 2018 10:25:46 -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=NDZ4uzNL; 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 S1755548AbeEHRYl (ORCPT + 99 others); Tue, 8 May 2018 13:24:41 -0400 Received: from mail-io0-f194.google.com ([209.85.223.194]:46255 "EHLO mail-io0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932339AbeEHRUs (ORCPT ); Tue, 8 May 2018 13:20:48 -0400 Received: by mail-io0-f194.google.com with SMTP id f21-v6so39330614iob.13 for ; Tue, 08 May 2018 10:20:48 -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=NDZ4uzNLAr8181CSVY6PNcX1sttiwUMo1Zb/sygvl2Bn5slhRkDfEE4/i0cGmEhfb/ F1FVMBgvNjxck7/GEK2hW0lNBs+RZypDdS8m3CYZn51d1yOaVVpV7hBFVQ2dsjInsuDY hoG912fpQ1oRLiuh5U4BoVKcLtXpZtBonNQmxVjPem3rqM37ELy6Rwxlz6YLSU8MwPmm TMoJEYL7kRgTUPIHlTczE16xWRePFWhxAIOngLDTTcZGN6An8/guPVPR70qZstgrFA4F xzSY530d37nFG1UrTsY+DhOEPa+hI12H0e0LOVSsKJQOZJv3PL6A+dOjVM/k+1FjFJ0R cOAw== 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=Wl0iNvtGTx4D5Px34FCNHASQPn1QEMTqT48SAcbKkjHKX65iVKaIcIVwC2/yakrn1E VXI0dNPrrWPsl5j0WpsngH+YAeYfnEac0L03w02VJEWfjeaX1MTpqNR4F/JlxoLchHUV EA/scqmKb84Lq4pBMrGT1rGXcGJitCWB2d6fdK3Zdg12SGCSoz5mTwxkIEvVWcDxB4Ur S4Fiv4a8HSElm1l86I4E2jYAmbDmTC2NboSmbGG84MMK5YnLxSR8+wRfDXBC9luqq1ps Ys02GzQF91J9UlhHRdARe5Sq4P+pgHznUaUt/Dn0xznIEV8nDYQ+zBbPpJF99pON0kzw /GfQ== X-Gm-Message-State: ALQs6tCGMqMLOggNRu6E+ycny+P9Dk9ImvlqiiirHlsKU5fi0AmuahF7 ehvTaOn2g3SYH2zBjxeu03LbQSRP X-Received: by 2002:a6b:83da:: with SMTP id n87-v6mr46817248ioi.268.1525800047654; Tue, 08 May 2018 10:20:47 -0700 (PDT) Received: from localhost.localdomain ([2605:a000:1316:4462:80cc:335d:e307:b5cb]) by smtp.googlemail.com with ESMTPSA id k62-v6sm13160209ioo.23.2018.05.08.10.20.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 08 May 2018 10:20:47 -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 v5 02/13] ALSA: hda/ca0132: Add pincfg for SBZ + R3Di, add fp hp auto-detect Date: Tue, 8 May 2018 13:20:02 -0400 Message-Id: <1525800015-2920-3-git-send-email-conmanx360@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1525800015-2920-1-git-send-email-conmanx360@gmail.com> References: <1525800015-2920-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