Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp5567755imm; Tue, 18 Sep 2018 11:35:35 -0700 (PDT) X-Google-Smtp-Source: ANB0Vdbf40F8xrz8LcYhAYm1llaOm9c1iO5ZWUrUUP9ybXMWNaZUCPVkwIFD6+9dh0259mnO+7yH X-Received: by 2002:a62:5302:: with SMTP id h2-v6mr32550222pfb.183.1537295735903; Tue, 18 Sep 2018 11:35:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537295735; cv=none; d=google.com; s=arc-20160816; b=j7zybiqA/Wbd8RXyoMZL+t9iuIgAPqTDNTBOH/JYoAWM9BpQygtUYtxP/gyAjjGEzi MuN0XtBNCpe/GBaHjBukggg2k88O6kx0Vh94vWR34RmiRXpUgPln40/4N3eDwnJ3x+8w f+Op6YAH4CBZo/tH5mfKONWAZoaD10M0TSBeOMwWZYUn/t39EntrA2x/2icOkuFBF56E onMmLZykjhLjkjk4sy44wm11iGr/tRDKg49TOiJUNuCUDia6fG8FfihG64QyqJ9Jhmf2 NT2DsPJ+zCmd98chjGpe8rwwy7hzNmt624MtRhohwpJawuq5/dtfyCKoAeA6+NpKq8EE 4GTg== 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; bh=lFicO5AqZMpddpFIiw4TuNuvFUsAeCl8GWqQiMgt0p4=; b=d9o5z+046lp7m/uvDbgS7Yd+buJ1CBSJP6MeEMslrUfUJjuwkCFeV4W1eeISdmf0qd oV8ADW/xTzF5Hl+Qy59wkaeqLG5dg9UiByUm7XQR6TLqDjHKn1P4C4lzUuj1LxudfrkT VegKe8/W09ughdK1KepVLlQN29heJedL9jCbmqsWTGOeDlgkf8gpUVGqivsKbWwfhqO/ AnbQ/o/efT9uXAht0DT754i8x948gTMk0CA4WwHvF4HuY78c818y46NkQm1wRnjEcKi9 0wGQNd6bCeyD00nmUwaXa2LWBtbhW84xNWKJ4A0x6PNooYgue1DlYuBitZNRWXWBkZaN F0PQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=l7h2WK0W; 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 g7-v6si18301329plq.163.2018.09.18.11.35.14; Tue, 18 Sep 2018 11:35:35 -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=l7h2WK0W; 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 S1730657AbeISAIm (ORCPT + 99 others); Tue, 18 Sep 2018 20:08:42 -0400 Received: from mail-qt0-f196.google.com ([209.85.216.196]:33623 "EHLO mail-qt0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730456AbeISAIl (ORCPT ); Tue, 18 Sep 2018 20:08:41 -0400 Received: by mail-qt0-f196.google.com with SMTP id r37-v6so2702202qtc.0 for ; Tue, 18 Sep 2018 11:34:50 -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=lFicO5AqZMpddpFIiw4TuNuvFUsAeCl8GWqQiMgt0p4=; b=l7h2WK0WRIrGj1/nML6y/e54BnUyeTg5Di9jKNLr7bW45D0BrH9H6WBrd81/rObAtB jlBABv1Cdgbcoqb54XjUeGQCUg2WqCzZiQTfbFwhM83x5z8JYyFENfHX+M0cnS8J2uUV xD6Iss1T9cuH8WlgxxKlUE6LEorV25C0OCnJwLJgS3qZT2o7ZlthWkV6b67myUdeUkCH D2IIObf6hgSjvX/kPkX/KtSJegaNVzHdZ7qdjWqFrta5QuDomhdXaz1qhYN2Wl9EG0OQ ukAnxDn9B8dlBrBWhD0ijaN5qvdDBfsUUiqAufr1hAof9UUTgy8nmYVoFs8YnbAnPjgg 9LuQ== 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=lFicO5AqZMpddpFIiw4TuNuvFUsAeCl8GWqQiMgt0p4=; b=FT+IM7lm6jDN0Ips+RTLLvG4PUiTuck6u7lVFDAMcXvgqDAD0XiU13mIPmyCWTyin2 G3E23TCykxA+9ZQHF1Nv2O69tQsqCesgUOUFvFIScVZRikFE2m6fludkfdNYyRHWCFvs w/jmWT6nDqOrkAg5xOK8XEg52zTZS3j+XoB+hIoZwT6u3c6nNL9IkdXXBGUsfUigRgC5 z2T0X4bItedzvhF62nrxshIEjBfAv7ZkDMKz9/xx4MpGUXfGAC3FTiuHOJwKm8DQoXkC HivYObOs1++5f41ivJux3GtVJnp2KcEOVLL1jvNwbugYXOfyZ3g2Lp1CT8lbZj9zMguT YQNA== X-Gm-Message-State: APzg51AV5dNn3fZjPR+EAdTQJbQCyG+kFcLOG+3pogr5bxvDdr9xvREP 7krYkwYd4b5HbLl0VYQqZQn73X3C X-Received: by 2002:ac8:38ca:: with SMTP id g10-v6mr22580964qtc.288.1537295689575; Tue, 18 Sep 2018 11:34:49 -0700 (PDT) Received: from localhost.localdomain ([2605:a000:1316:4273:719d:df26:b0cf:931a]) by smtp.googlemail.com with ESMTPSA id m15-v6sm13819101qki.1.2018.09.18.11.34.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 18 Sep 2018 11:34:49 -0700 (PDT) From: Connor McAdams Cc: conmanx360@gmail.com, Jaroslav Kysela , Takashi Iwai , Takashi Sakamoto , Alastair Bridgewater , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org Subject: [PATCH 11/15] ALSA: hda/ca0132 - Clean up ca0132_alt_out_select Date: Tue, 18 Sep 2018 14:33:39 -0400 Message-Id: <1537295625-8082-12-git-send-email-conmanx360@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1537295625-8082-1-git-send-email-conmanx360@gmail.com> References: <1537295625-8082-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 cleans up ca0132_alt_out_select by moving the card specific output commands into a separate function. As more cards are added, the function ca0132_alt_out_select is going to get more bloated with these, so moving into a separate function tries to keep that from happening. Signed-off-by: Connor McAdams --- sound/pci/hda/patch_ca0132.c | 121 +++++++++++++++++++++++++------------------ 1 file changed, 70 insertions(+), 51 deletions(-) diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c index a625e9d..4de94d7 100644 --- a/sound/pci/hda/patch_ca0132.c +++ b/sound/pci/hda/patch_ca0132.c @@ -4026,6 +4026,73 @@ static int ca0132_select_out(struct hda_codec *codec) } /* + * These are the commands needed to setup output on each of the different card + * types. + */ +static void ca0132_alt_select_out_quirk_handler(struct hda_codec *codec) +{ + struct ca0132_spec *spec = codec->spec; + unsigned int tmp; + + switch (spec->cur_out_type) { + case SPEAKER_OUT: + switch (spec->quirk) { + case QUIRK_SBZ: + ca0113_mmio_gpio_set(codec, 7, false); + ca0113_mmio_gpio_set(codec, 4, true); + ca0113_mmio_gpio_set(codec, 1, true); + chipio_set_control_param(codec, 0x0D, 0x18); + break; + case QUIRK_R3DI: + chipio_set_control_param(codec, 0x0D, 0x24); + r3di_gpio_out_set(codec, R3DI_LINE_OUT); + break; + case QUIRK_R3D: + chipio_set_control_param(codec, 0x0D, 0x24); + ca0113_mmio_gpio_set(codec, 1, true); + break; + } + break; + case HEADPHONE_OUT: + switch (spec->quirk) { + case QUIRK_SBZ: + ca0113_mmio_gpio_set(codec, 7, true); + ca0113_mmio_gpio_set(codec, 4, true); + ca0113_mmio_gpio_set(codec, 1, false); + chipio_set_control_param(codec, 0x0D, 0x12); + break; + case QUIRK_R3DI: + chipio_set_control_param(codec, 0x0D, 0x21); + r3di_gpio_out_set(codec, R3DI_HEADPHONE_OUT); + break; + case QUIRK_R3D: + chipio_set_control_param(codec, 0x0D, 0x21); + ca0113_mmio_gpio_set(codec, 0x1, false); + break; + } + break; + case SURROUND_OUT: + switch (spec->quirk) { + case QUIRK_SBZ: + ca0113_mmio_gpio_set(codec, 7, false); + ca0113_mmio_gpio_set(codec, 4, true); + ca0113_mmio_gpio_set(codec, 1, true); + chipio_set_control_param(codec, 0x0D, 0x18); + break; + case QUIRK_R3DI: + chipio_set_control_param(codec, 0x0D, 0x24); + r3di_gpio_out_set(codec, R3DI_LINE_OUT); + break; + case QUIRK_R3D: + ca0113_mmio_gpio_set(codec, 1, true); + chipio_set_control_param(codec, 0x0D, 0x24); + break; + } + break; + } +} + +/* * This function behaves similarly to the ca0132_select_out funciton above, * except with a few differences. It adds the ability to select the current * output with an enumerated control "output source" if the auto detect @@ -4075,26 +4142,11 @@ static int ca0132_alt_select_out(struct hda_codec *codec) if (err < 0) goto exit; + ca0132_alt_select_out_quirk_handler(codec); + switch (spec->cur_out_type) { case SPEAKER_OUT: codec_dbg(codec, "%s speaker\n", __func__); - /*speaker out config*/ - switch (spec->quirk) { - case QUIRK_SBZ: - ca0113_mmio_gpio_set(codec, 7, false); - ca0113_mmio_gpio_set(codec, 4, true); - ca0113_mmio_gpio_set(codec, 1, true); - chipio_set_control_param(codec, 0x0D, 0x18); - break; - case QUIRK_R3DI: - chipio_set_control_param(codec, 0x0D, 0x24); - r3di_gpio_out_set(codec, R3DI_LINE_OUT); - break; - case QUIRK_R3D: - chipio_set_control_param(codec, 0x0D, 0x24); - ca0113_mmio_gpio_set(codec, 1, true); - break; - } /* disable headphone node */ pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, @@ -4118,23 +4170,6 @@ static int ca0132_alt_select_out(struct hda_codec *codec) break; case HEADPHONE_OUT: codec_dbg(codec, "%s hp\n", __func__); - /* Headphone out config*/ - switch (spec->quirk) { - case QUIRK_SBZ: - ca0113_mmio_gpio_set(codec, 7, true); - ca0113_mmio_gpio_set(codec, 4, true); - ca0113_mmio_gpio_set(codec, 1, false); - chipio_set_control_param(codec, 0x0D, 0x12); - break; - case QUIRK_R3DI: - chipio_set_control_param(codec, 0x0D, 0x21); - r3di_gpio_out_set(codec, R3DI_HEADPHONE_OUT); - break; - case QUIRK_R3D: - chipio_set_control_param(codec, 0x0D, 0x21); - ca0113_mmio_gpio_set(codec, 0x1, false); - break; - } snd_hda_codec_write(codec, spec->out_pins[0], 0, AC_VERB_SET_EAPD_BTLENABLE, 0x00); @@ -4164,23 +4199,7 @@ static int ca0132_alt_select_out(struct hda_codec *codec) break; case SURROUND_OUT: codec_dbg(codec, "%s surround\n", __func__); - /* Surround out config*/ - switch (spec->quirk) { - case QUIRK_SBZ: - ca0113_mmio_gpio_set(codec, 7, false); - ca0113_mmio_gpio_set(codec, 4, true); - ca0113_mmio_gpio_set(codec, 1, true); - chipio_set_control_param(codec, 0x0D, 0x18); - break; - case QUIRK_R3DI: - chipio_set_control_param(codec, 0x0D, 0x24); - r3di_gpio_out_set(codec, R3DI_LINE_OUT); - break; - case QUIRK_R3D: - ca0113_mmio_gpio_set(codec, 1, true); - chipio_set_control_param(codec, 0x0D, 0x24); - break; - } + /* enable line out node */ pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, AC_VERB_GET_PIN_WIDGET_CONTROL, 0); -- 2.7.4