Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp1094429imm; Wed, 8 Aug 2018 10:37:00 -0700 (PDT) X-Google-Smtp-Source: AA+uWPzhIyoxYISW4KpsKwjW66BN/kXpNXLtPerYUdt+uGOkb8YEvVy0FgNkEby7Tu+BDbuntXXU X-Received: by 2002:a63:9856:: with SMTP id l22-v6mr3490412pgo.208.1533749820012; Wed, 08 Aug 2018 10:37:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1533749819; cv=none; d=google.com; s=arc-20160816; b=XhyHxA7f7O5xLBC16q652urb3QMD0JdDKFdRVvxb0FwZowWtY5+kR2zPc0CR7B+NBa vWDH7xDe2qa8mb9Y9Jgwd8icgRBonMvfhcEAhNXU/0WnjyA9tYoacN1fezo88dZ0thie 5A2HsdX+A86J7Z61Q4xlGD5+i5sphlqYAwFTnaM0L+kE4XJDwWzYK2Ukl+sX+dFlfzj7 0fLCd3IaAJ9BEjOgFdpwgOq+sr4MgmQ8FeKqP4TCFefZvKSsC4wgoll2oKHIw3Sd7Gme 510u8dekt25LHTf1fAgCPml2K9NgFRMtcZXIkpnmokGpynRAuvlRZ8WbLicwpE5chCi6 Rf+A== 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=+9f7zTXJ4QOfKKLYJKw9ZAtieZE64pO6HLEMANKX2gQ=; b=nYst3vWBTNS+gxudJjeYJDLz1aLTBjCgdDY+1vr7FSQUPjtI28RxGEjNcL1PvYbjgH yu9CsFt1r8UA42NElp4V3HyI0U96deNAHViYWt2If/0IWHmiA5C5CDE6rWBapMeNH/Rd 4v8cbWSxIaccTupnKLYVEfSBHU2Wumzy6OeBW1oZkS9XJzt1Id9dozdgNZlRB8lfFpk4 WDw+ke6qrrYokMPC4k9DDCldeT1ynXGe8drw08ibzyz8+bTIKO0dd5FCg33fUZ8bzLVe LpUgd5jtKeF+s6LHDppTDnmMqf46DyOI4aPf+3R14inHAzmFsTRGtjBS0Lemo3yQnzma w8SA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=uH2Bdh4U; 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 p14-v6si3547619plo.357.2018.08.08.10.36.45; Wed, 08 Aug 2018 10:36:59 -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=uH2Bdh4U; 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 S1729989AbeHHT4B (ORCPT + 99 others); Wed, 8 Aug 2018 15:56:01 -0400 Received: from mail-it0-f67.google.com ([209.85.214.67]:55944 "EHLO mail-it0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727062AbeHHT4B (ORCPT ); Wed, 8 Aug 2018 15:56:01 -0400 Received: by mail-it0-f67.google.com with SMTP id d10-v6so4519849itj.5 for ; Wed, 08 Aug 2018 10:35:19 -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=+9f7zTXJ4QOfKKLYJKw9ZAtieZE64pO6HLEMANKX2gQ=; b=uH2Bdh4Uwj6gWufdrc6wGmt2Y+1GrmkGaULqpEKIXczcB/JiqNHh4kaYIb5Q43gX0e VV1eeWyMtNlzjG41ulj8VGM8u3E+HyjVHplPzyTLsbMPNK7q2WVI6tefB67m3lIkG3YE DHVQkauK/qlksPowkxMRZPUYsbo4B8MbHfJXPuIxwzjpNxNBTbK+JVyTi+Gsg8qm/Kug zExowXcaQmm11bwrZtl2FrPpOKmPRl6qa3F+EaNVsKk+w7jYDGhx0Cv5ddJbRVlLVtFs qGKwoRP35UnLLm9JM4DxbA2AuJlZslvFeKfB0Saer/GQmY5jPfFVrLFo+Aiygy/JKmHI lnzw== 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=+9f7zTXJ4QOfKKLYJKw9ZAtieZE64pO6HLEMANKX2gQ=; b=BgMEfiPB3c0PBAkj3OjiOXR/cM8viPmkTwaOxVkxxEK0BrQDi2fSUOlnoG8LFNc+h9 G4rYDNSRigyB2xgMgZfp7O+cj5W7R33d6iRIo7SWAjMQeRL3xMsOBHovTUDGHtuTKsZL DliHQWEgD4p/ti0cqSIeCMCFm57jFMX2Bpqlx3Nru/BkvD8CpWJjRhdVTnUhW/rrocd1 DizUEMFVokftHUMkiGlr627XJfm2rnk2DohRboZlw8YsNorVNy2KHCbcwPdOtLCe4+fS uRUUad0cl5uGP0mcz3YOWMIYUddQbQI5Wm6k/yzklTJO192LeyHGirA/vcW7otc0pt4i /uPg== X-Gm-Message-State: AOUpUlHShD9di6Xb9RbeM6OEqpHfKv+dfR50kpnw7ngM+gIzNR3NN8I/ Ay8IiPKaOYw5xohG62IDEU4= X-Received: by 2002:a02:b4a4:: with SMTP id k33-v6mr3203331jaj.53.1533749719063; Wed, 08 Aug 2018 10:35:19 -0700 (PDT) Received: from localhost.localdomain ([2605:a000:1316:45c1:6d6b:de32:e032:aa21]) by smtp.googlemail.com with ESMTPSA id d8-v6sm1977480itj.10.2018.08.08.10.35.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 08 Aug 2018 10:35:18 -0700 (PDT) From: Connor McAdams Cc: Connor McAdams , Jaroslav Kysela , Takashi Iwai , Takashi Sakamoto , Alastair Bridgewater , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org Subject: [PATCH 07/11] ALSA: hda/ca0132 - Add Recon3D startup functions and setup Date: Wed, 8 Aug 2018 13:34:18 -0400 Message-Id: <1533749663-8200-8-git-send-email-conmanx360@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1533749663-8200-1-git-send-email-conmanx360@gmail.com> References: <1533749663-8200-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 functions for Recon3D startup, and sets values for things such as use_pci_mmio. It also renames some functions and tables from the sbz prefix into ca0132, as the Recon3D uses them as well. Signed-off-by: Connor McAdams --- sound/pci/hda/patch_ca0132.c | 49 ++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c index b35b179..cb84648 100644 --- a/sound/pci/hda/patch_ca0132.c +++ b/sound/pci/hda/patch_ca0132.c @@ -897,7 +897,7 @@ struct ca0132_spec { const struct hda_verb *base_init_verbs; const struct hda_verb *base_exit_verbs; const struct hda_verb *chip_init_verbs; - const struct hda_verb *sbz_init_verbs; + const struct hda_verb *desktop_init_verbs; struct hda_verb *spec_init_verbs; struct auto_pin_cfg autocfg; @@ -6840,8 +6840,8 @@ static struct hda_verb ca0132_init_verbs0[] = { {} }; -/* Extra init verbs for SBZ */ -static struct hda_verb sbz_init_verbs[] = { +/* Extra init verbs for desktop cards. */ +static struct hda_verb ca0132_init_verbs1[] = { {0x15, 0x70D, 0x20}, {0x15, 0x70E, 0x19}, {0x15, 0x707, 0x00}, @@ -7136,9 +7136,27 @@ static void sbz_pre_dsp_setup(struct hda_codec *codec) AC_VERB_SET_PIN_WIDGET_CONTROL, 0x44); } -/* - * Extra commands that don't really fit anywhere else. - */ +static void r3d_pre_dsp_setup(struct hda_codec *codec) +{ + + snd_hda_codec_write(codec, 0x15, 0, 0xd00, 0xfc); + snd_hda_codec_write(codec, 0x15, 0, 0xd00, 0xfd); + snd_hda_codec_write(codec, 0x15, 0, 0xd00, 0xfe); + snd_hda_codec_write(codec, 0x15, 0, 0xd00, 0xff); + + chipio_write(codec, 0x18b0a4, 0x000000c2); + + snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, + VENDOR_CHIPIO_8051_ADDRESS_LOW, 0x1E); + snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, + VENDOR_CHIPIO_8051_ADDRESS_HIGH, 0x1C); + snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, + VENDOR_CHIPIO_8051_DATA_WRITE, 0x5B); + + snd_hda_codec_write(codec, 0x11, 0, + AC_VERB_SET_PIN_WIDGET_CONTROL, 0x44); +} + static void r3di_pre_dsp_setup(struct hda_codec *codec) { chipio_write(codec, 0x18b0a4, 0x000000c2); @@ -7163,13 +7181,12 @@ static void r3di_pre_dsp_setup(struct hda_codec *codec) AC_VERB_SET_PIN_WIDGET_CONTROL, 0x04); } - /* * These are sent before the DSP is downloaded. Not sure * what they do, or if they're necessary. Could possibly * be removed. Figure they're better to leave in. */ -static void sbz_region2_startup(struct hda_codec *codec) +static void ca0132_mmio_init(struct hda_codec *codec) { struct ca0132_spec *spec = codec->spec; @@ -7209,7 +7226,7 @@ static void ca0132_alt_init(struct hda_codec *codec) ca0132_gpio_init(codec); sbz_pre_dsp_setup(codec); snd_hda_sequence_write(codec, spec->chip_init_verbs); - snd_hda_sequence_write(codec, spec->sbz_init_verbs); + snd_hda_sequence_write(codec, spec->desktop_init_verbs); break; case QUIRK_R3DI: codec_dbg(codec, "R3DI alt_init"); @@ -7220,6 +7237,11 @@ static void ca0132_alt_init(struct hda_codec *codec) snd_hda_sequence_write(codec, spec->chip_init_verbs); snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x6FF, 0xC4); break; + case QUIRK_R3D: + r3d_pre_dsp_setup(codec); + snd_hda_sequence_write(codec, spec->chip_init_verbs); + snd_hda_sequence_write(codec, spec->desktop_init_verbs); + break; } } @@ -7256,8 +7278,8 @@ static int ca0132_init(struct hda_codec *codec) spec->dsp_state = DSP_DOWNLOAD_INIT; spec->curr_chip_addx = INVALID_CHIP_ADDRESS; - if (spec->quirk == QUIRK_SBZ) - sbz_region2_startup(codec); + if (spec->use_pci_mmio) + ca0132_mmio_init(codec); snd_hda_power_up_pm(codec); @@ -7508,8 +7530,8 @@ static int ca0132_prepare_verbs(struct hda_codec *codec) struct ca0132_spec *spec = codec->spec; spec->chip_init_verbs = ca0132_init_verbs0; - if (spec->quirk == QUIRK_SBZ) - spec->sbz_init_verbs = sbz_init_verbs; + if (spec->quirk == QUIRK_SBZ || spec->quirk == QUIRK_R3D) + spec->desktop_init_verbs = ca0132_init_verbs1; spec->spec_init_verbs = kcalloc(NUM_SPEC_VERBS, sizeof(struct hda_verb), GFP_KERNEL); @@ -7586,6 +7608,7 @@ static int patch_ca0132(struct hda_codec *codec) /* Setup whether or not to use alt functions/controls/pci_mmio */ switch (spec->quirk) { case QUIRK_SBZ: + case QUIRK_R3D: spec->use_alt_controls = true; spec->use_alt_functions = true; spec->use_pci_mmio = true; -- 2.7.4