Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp1095221imm; Wed, 8 Aug 2018 10:37:49 -0700 (PDT) X-Google-Smtp-Source: AA+uWPymQ2o3ONosij3F8SXfQl1PwlpGU8S8U5yejkwWQIpMTzvU4VIX7PuSheN5HBp3DDYgQ3/9 X-Received: by 2002:a17:902:9a06:: with SMTP id v6-v6mr3522845plp.316.1533749869690; Wed, 08 Aug 2018 10:37:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1533749869; cv=none; d=google.com; s=arc-20160816; b=qkHdeR7iTc/AsF4BK//fkFb6uhQNrhqRwLQxZ1QDGMQmo9syW3f1cyR9gh2IMlbXp5 ymyyPlpxeDPfVdF95KoiouGYxdBaAfiU7z7eQK4XoYtX/K3T5E+5uDmvI9rrYLGcmve/ 33osluoKFMGCM5hGugWyZ9oFQ3MdRfsAQH6IeD2lKk+6vX95fXN9KRQPy0dXlmCsdGyh YCxanqe7vNR3OWY3E++OhxoN0VdSsqtcDSkbKTUiemaBi1CpNRGeEXdA2P+YUodWTzDN FJ5ZJi7HDCOW+f3oJUkzpn7lVXjnMoij08QtaQL5o2NmcRHUIzINVCMvbfT/Ve2/SZhP y24g== 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=FJpyd41qAC8imAN1StMw64515r0067ueDIdBahh60U0=; b=ofRqqUYH4HuQySNdd1KKcCF1IDYK/BhfqGbGhlm4idHBLKxQiD0qxOige4176jkYK4 jdG85l1axvi6O6EzrJm/YWeP6iLJY4VIeqay7cLS+jADJOCQ8kiQedG/CiTpBsXVh348 mHpKbVxDGapXuEe0tLm5jlka67g+5M9plfjnZv7OoU+r58SUxLKFMcoScld6CRK7G4u0 lrbxC9gpHcmViGiowkCBR3+KqaRXHtl0z2VH6GomK3Wim9s4fgjRrzvjZafH7md3DMex F8kfI96E/ogvoJn/TZdUMBrFkMJiUeiPLkLyongBLZ7ts0mHD5Kwmk1y9vhD2iKaceOi bKaQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=Ok5j+2lz; 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 95-v6si4076340plc.466.2018.08.08.10.37.35; Wed, 08 Aug 2018 10:37: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=Ok5j+2lz; 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 S1729638AbeHHTzt (ORCPT + 99 others); Wed, 8 Aug 2018 15:55:49 -0400 Received: from mail-io0-f193.google.com ([209.85.223.193]:44933 "EHLO mail-io0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727062AbeHHTzs (ORCPT ); Wed, 8 Aug 2018 15:55:48 -0400 Received: by mail-io0-f193.google.com with SMTP id q19-v6so2463248ioh.11 for ; Wed, 08 Aug 2018 10:35:07 -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=FJpyd41qAC8imAN1StMw64515r0067ueDIdBahh60U0=; b=Ok5j+2lzESuF3aDoi2JHKYspVR/RglWR0gILQ1LVlln3QgCB7l7z0eqNuRQKuhQdvw re/mRQX4IzXtmQzPsTt0/7F+vh3rv4N4QIAMNwh14KFj3IIDyXRWm0qpTGYqYNl8oepY D2D1CvRAAS9hHy+qENuBrIA5hFqIM6qKuvxfTMHqOf9KTR5A84Z+Fcox5bU1MlcOuzJh PYBo9vUpzs38+tL9FAstITmiLIz2f+FgR7PX8q/mFShB+sGbkaJ/CAy6erBswOIMLX1p 4+euNK2Er/4Volar4sOJTCOLc/hWX97V6iWonZafPJnzqgC+DQFYUS/ORfWWsa0A+oaK wurQ== 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=FJpyd41qAC8imAN1StMw64515r0067ueDIdBahh60U0=; b=L9EnWNqWhIwWDQC4BaNZv+S2xJs9qRj41WKkJtveL5+f5fPjILD87DmjeI6man/f2C f/weiVuQob1LTLONiD2qRDA1+lpSNKZE3KU3HZUTYjQFGY6WBBUP86ZfVPeYKpfpZzw3 Z7jPBtthvrT1TYBqDpVjeXPD6zrKYwga9P1pTZxLexyypqFdESCx8IYAL154uYvW7IOC cXD5CoTRrVIRjsIZr7aL20YtCwy0bUYiZyjyiNLh8vVtl7XaqmpmaewiFSjWEzZcavFc /3HyqybviBKWPmthV/kmSkIS+TdZnQMvtLH/rxewyUGtRFSufcYePeYdbV4ezeL5IjLt YlNg== X-Gm-Message-State: AOUpUlFjICFteXYsSuHbmWx5NCHseTeOeTvpZ6+L1hpsL9ZlIcQH2HL/ RYijSM5v9+DZjGi41GeFMfg= X-Received: by 2002:a6b:b452:: with SMTP id d79-v6mr3100059iof.163.1533749706816; Wed, 08 Aug 2018 10:35:06 -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.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 08 Aug 2018 10:35:06 -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 01/11] ALSA: hda/ca0132 - Create mmio gpio function to make code clearer Date: Wed, 8 Aug 2018 13:34:12 -0400 Message-Id: <1533749663-8200-2-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 a new function, ca0132_mmio_gpio_set, to clear up what is going on with writes to mmio region 0x320. Signed-off-by: Connor McAdams --- sound/pci/hda/patch_ca0132.c | 62 +++++++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c index 321e95c..9a92a64 100644 --- a/sound/pci/hda/patch_ca0132.c +++ b/sound/pci/hda/patch_ca0132.c @@ -3073,6 +3073,24 @@ static bool dspload_wait_loaded(struct hda_codec *codec) */ /* + * For cards with PCI-E region2 (Sound Blaster Z/ZxR, Recon3D, and AE-5) + * the mmio address 0x320 is used to set GPIO pins. The format for the data + * The first eight bits are just the number of the pin. So far, I've only seen + * this number go to 7. + */ +static void ca0132_mmio_gpio_set(struct hda_codec *codec, unsigned int gpio_pin, + bool enable) +{ + struct ca0132_spec *spec = codec->spec; + unsigned short gpio_data; + + gpio_data = gpio_pin & 0xF; + gpio_data |= ((enable << 8) & 0x100); + + writew(gpio_data, spec->mem_base + 0x320); +} + +/* * Sets up the GPIO pins so that they are discoverable. If this isn't done, * the card shows as having no GPIO pins. */ @@ -3947,9 +3965,9 @@ static int ca0132_alt_select_out(struct hda_codec *codec) /*speaker out config*/ switch (spec->quirk) { case QUIRK_SBZ: - writew(0x0007, spec->mem_base + 0x320); - writew(0x0104, spec->mem_base + 0x320); - writew(0x0101, spec->mem_base + 0x320); + ca0132_mmio_gpio_set(codec, 7, false); + ca0132_mmio_gpio_set(codec, 4, true); + ca0132_mmio_gpio_set(codec, 1, true); chipio_set_control_param(codec, 0x0D, 0x18); break; case QUIRK_R3DI: @@ -3983,9 +4001,9 @@ static int ca0132_alt_select_out(struct hda_codec *codec) /* Headphone out config*/ switch (spec->quirk) { case QUIRK_SBZ: - writew(0x0107, spec->mem_base + 0x320); - writew(0x0104, spec->mem_base + 0x320); - writew(0x0001, spec->mem_base + 0x320); + ca0132_mmio_gpio_set(codec, 7, true); + ca0132_mmio_gpio_set(codec, 4, true); + ca0132_mmio_gpio_set(codec, 1, false); chipio_set_control_param(codec, 0x0D, 0x12); break; case QUIRK_R3DI: @@ -4025,9 +4043,9 @@ static int ca0132_alt_select_out(struct hda_codec *codec) /* Surround out config*/ switch (spec->quirk) { case QUIRK_SBZ: - writew(0x0007, spec->mem_base + 0x320); - writew(0x0104, spec->mem_base + 0x320); - writew(0x0101, spec->mem_base + 0x320); + ca0132_mmio_gpio_set(codec, 7, false); + ca0132_mmio_gpio_set(codec, 4, true); + ca0132_mmio_gpio_set(codec, 1, true); chipio_set_control_param(codec, 0x0D, 0x18); break; case QUIRK_R3DI: @@ -4291,7 +4309,7 @@ static int ca0132_alt_select_in(struct hda_codec *codec) case REAR_MIC: switch (spec->quirk) { case QUIRK_SBZ: - writew(0x0000, spec->mem_base + 0x320); + ca0132_mmio_gpio_set(codec, 0, false); tmp = FLOAT_THREE; break; case QUIRK_R3DI: @@ -4323,7 +4341,7 @@ static int ca0132_alt_select_in(struct hda_codec *codec) ca0132_mic_boost_set(codec, 0); switch (spec->quirk) { case QUIRK_SBZ: - writew(0x0000, spec->mem_base + 0x320); + ca0132_mmio_gpio_set(codec, 0, false); break; case QUIRK_R3DI: r3di_gpio_mic_set(codec, R3DI_REAR_MIC); @@ -4349,8 +4367,8 @@ static int ca0132_alt_select_in(struct hda_codec *codec) case FRONT_MIC: switch (spec->quirk) { case QUIRK_SBZ: - writew(0x0100, spec->mem_base + 0x320); - writew(0x0005, spec->mem_base + 0x320); + ca0132_mmio_gpio_set(codec, 0, true); + ca0132_mmio_gpio_set(codec, 5, false); tmp = FLOAT_THREE; break; case QUIRK_R3DI: @@ -6891,16 +6909,12 @@ static void sbz_region2_exit(struct hda_codec *codec) writeb(0x0, spec->mem_base + 0x100); for (i = 0; i < 8; i++) writeb(0xb3, spec->mem_base + 0x304); - /* - * I believe these are GPIO, with the right most hex digit being the - * gpio pin, and the second digit being on or off. We see this more in - * the input/output select functions. - */ - writew(0x0000, spec->mem_base + 0x320); - writew(0x0001, spec->mem_base + 0x320); - writew(0x0104, spec->mem_base + 0x320); - writew(0x0005, spec->mem_base + 0x320); - writew(0x0007, spec->mem_base + 0x320); + + ca0132_mmio_gpio_set(codec, 0, false); + ca0132_mmio_gpio_set(codec, 1, false); + ca0132_mmio_gpio_set(codec, 4, true); + ca0132_mmio_gpio_set(codec, 5, false); + ca0132_mmio_gpio_set(codec, 7, false); } static void sbz_set_pin_ctl_default(struct hda_codec *codec) @@ -7237,7 +7251,7 @@ static int ca0132_init(struct hda_codec *codec) ca0132_refresh_widget_caps(codec); if (spec->quirk == QUIRK_SBZ) - writew(0x0107, spec->mem_base + 0x320); + ca0132_mmio_gpio_set(codec, 7, true); switch (spec->quirk) { case QUIRK_R3DI: -- 2.7.4