From patchwork Sun Dec 16 17:51:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Yan X-Patchwork-Id: 10732565 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 13F7C6C5 for ; Sun, 16 Dec 2018 17:51:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id ED50E28717 for ; Sun, 16 Dec 2018 17:51:33 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id DE98B29A3E; Sun, 16 Dec 2018 17:51:33 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E0CA628717 for ; Sun, 16 Dec 2018 17:51:32 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 647A12678D3; Sun, 16 Dec 2018 18:51:30 +0100 (CET) X-Original-To: alsa-devel@alsa-project.org Delivered-To: alsa-devel@alsa-project.org Received: by alsa0.perex.cz (Postfix, from userid 1000) id 033892678D3; Sun, 16 Dec 2018 18:51:27 +0100 (CET) Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by alsa0.perex.cz (Postfix) with ESMTP id D95272677E4; Sun, 16 Dec 2018 18:51:24 +0100 (CET) Received: by mail-pf1-f194.google.com with SMTP id b7so5191579pfi.8; Sun, 16 Dec 2018 09:51:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:from:to:cc:subject:date:in-reply-to:references:reply-to :mime-version:content-transfer-encoding; bh=1aq9itGinpo59MLmmsEBD3iFtDivaM8fC4Un9Af+cl0=; b=TAMPbf4qsuBGhbvU4E8tfLtOWjlP6xIppL/j3EDC7WX4O28y3GeBwxEprCxa9xs8ZN wHfakuRXDBFKbR0oGR4vnnUja5eGYkkZEcJFoS8dziHAOHb6Z9DcbwdIm0AH82c4ReQj HcXQ85TdCBfAb8BybpYBgf4LNfdPxJ2sVSpmUw37/MakXag6FjJUnFqwFjj6IIwIwsaT ZK3bTfprZbft3+77m9vvlvwTCLtKLVZlzV6FxldQXZ1lwG1YhZs+KE61PZewGR31o9+v Labwoqxwvmm0pBvIb5RxW5UOI34NbkhisNPgkXPWXod6Xpe5gawh7dzVjk6DTSDBGS4g bk7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:from:to:cc:subject:date:in-reply-to :references:reply-to:mime-version:content-transfer-encoding; bh=1aq9itGinpo59MLmmsEBD3iFtDivaM8fC4Un9Af+cl0=; b=WteCsogRonXRfLpyL1EKOZPDTNEpAdTCjp7opa2aUoVvmdBDVUNL8qUdMRYdXPiGa9 8sjTZJnve7ub8cxGQZE/N4I4Ty3cseU3lg/TlTSOIdQ8cwLDTc4Nr1twXDVXv8HQ9qgm HsU3ha0eVXFiWOyHUO1QqKqeST25GNwMTHgMtV6hgPk22HghnkfyfGCwPZOcsOGboXS4 UaofP54DMMk/3GRQOalQwhSCRZfMCxcGHYR3B/xx3u3YiP7C7LRbEqLxbOflyHPUs9BT mYmzOLI3kBHpBIqGu0Bb7oLXw3nHKEapDNaazdMndRVi9ipnly2KmU43JuhfaX3W9T7A cGDg== X-Gm-Message-State: AA+aEWaTUY2Sivbzp9pH6CXdwbaSKlczSHosqwZXDP7g4S0lP7mnK8FA XlvYc9JhvuEkApcnwg5rn6HmSKl3YAk= X-Google-Smtp-Source: AFSGD/WFKc/ZQOloj6M/y4WDNtUlqxTTbCAjDZFZ5T/oxVt1EBC8NrGXcIhws53Z5bdcAEySLgQXAw== X-Received: by 2002:a62:f247:: with SMTP id y7mr10095683pfl.25.1544982683083; Sun, 16 Dec 2018 09:51:23 -0800 (PST) Received: from localhost.localdomain (123202047155.ctinets.com. [123.202.47.155]) by smtp.gmail.com with ESMTPSA id u137sm16213464pfc.140.2018.12.16.09.51.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 16 Dec 2018 09:51:22 -0800 (PST) Message-ID: <5c16909a.1c69fb81.2150c.9583@mx.google.com> X-Google-Original-Message-ID: <20181216175110.1613-1-me> From: tom.ty89@gmail.com X-Google-Original-From: me To: patch@alsa-project.org Date: Mon, 17 Dec 2018 01:51:10 +0800 X-Mailer: git-send-email 2.20.0 In-Reply-To: <6b7d5f70-5e5a-59b4-9daf-315937a49639@ladisch.de> References: <6b7d5f70-5e5a-59b4-9daf-315937a49639@ladisch.de> MIME-Version: 1.0 Cc: alsa-devel@alsa-project.org, Tom Yan Subject: [alsa-devel] [PATCH 1/1] ALSA: virtuoso: add de-emphasis control X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: clemens@ladisch.de List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP From: Tom Yan Add control for the de-emphasis filter in the PCM179x DACs Signed-off-by: Tom Yan Acked-by: Clemens Ladisch diff --git a/sound/pci/oxygen/xonar_pcm179x.c b/sound/pci/oxygen/xonar_pcm179x.c index 24109d37ca09..429411d10e08 100644 --- a/sound/pci/oxygen/xonar_pcm179x.c +++ b/sound/pci/oxygen/xonar_pcm179x.c @@ -331,7 +331,7 @@ static void pcm1796_init(struct oxygen *chip) struct xonar_pcm179x *data = chip->model_data; data->pcm1796_regs[0][18 - PCM1796_REG_BASE] = - PCM1796_DMF_DISABLED | PCM1796_FMT_24_I2S | PCM1796_ATLD; + PCM1796_FMT_24_I2S | PCM1796_ATLD; if (!data->broken_i2c) data->pcm1796_regs[0][18 - PCM1796_REG_BASE] |= PCM1796_MUTE; data->pcm1796_regs[0][19 - PCM1796_REG_BASE] = @@ -621,6 +621,23 @@ static void update_pcm1796_oversampling(struct oxygen *chip) pcm1796_write_cached(chip, i, 20, reg); } +static void update_pcm1796_deemph(struct oxygen *chip) +{ + struct xonar_pcm179x *data = chip->model_data; + unsigned int i; + u8 reg; + + reg = data->pcm1796_regs[0][18 - PCM1796_REG_BASE] & ~PCM1796_DMF_MASK; + if (data->current_rate == 48000) + reg |= PCM1796_DMF_48; + else if (data->current_rate == 44100) + reg |= PCM1796_DMF_441; + else if (data->current_rate == 32000) + reg |= PCM1796_DMF_32; + for (i = 0; i < data->dacs; ++i) + pcm1796_write_cached(chip, i, 18, reg); +} + static void set_pcm1796_params(struct oxygen *chip, struct snd_pcm_hw_params *params) { @@ -629,6 +646,7 @@ static void set_pcm1796_params(struct oxygen *chip, msleep(1); data->current_rate = params_rate(params); update_pcm1796_oversampling(chip); + update_pcm1796_deemph(chip); } static void update_pcm1796_volume(struct oxygen *chip) @@ -653,9 +671,11 @@ static void update_pcm1796_mute(struct oxygen *chip) unsigned int i; u8 value; - value = PCM1796_DMF_DISABLED | PCM1796_FMT_24_I2S | PCM1796_ATLD; + value = data->pcm1796_regs[0][18 - PCM1796_REG_BASE]; if (chip->dac_mute) value |= PCM1796_MUTE; + else + value &= ~PCM1796_MUTE; for (i = 0; i < data->dacs; ++i) pcm1796_write_cached(chip, i, 18, value); } @@ -777,6 +797,50 @@ static const struct snd_kcontrol_new rolloff_control = { .put = rolloff_put, }; +static int deemph_get(struct snd_kcontrol *ctl, + struct snd_ctl_elem_value *value) +{ + struct oxygen *chip = ctl->private_data; + struct xonar_pcm179x *data = chip->model_data; + + value->value.integer.value[0] = + (data->pcm1796_regs[0][18 - PCM1796_REG_BASE] & + PCM1796_DME) != PCM1796_DMF_DISABLED; + return 0; +} + +static int deemph_put(struct snd_kcontrol *ctl, + struct snd_ctl_elem_value *value) +{ + struct oxygen *chip = ctl->private_data; + struct xonar_pcm179x *data = chip->model_data; + unsigned int i; + int changed; + u8 reg; + + mutex_lock(&chip->mutex); + reg = data->pcm1796_regs[0][18 - PCM1796_REG_BASE]; + if (!value->value.integer.value[0]) + reg &= ~PCM1796_DME; + else + reg |= PCM1796_DME; + changed = reg != data->pcm1796_regs[0][18 - PCM1796_REG_BASE]; + if (changed) { + for (i = 0; i < data->dacs; ++i) + pcm1796_write(chip, i, 18, reg); + } + mutex_unlock(&chip->mutex); + return changed; +} + +static const struct snd_kcontrol_new deemph_control = { + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = "De-emphasis Playback Switch", + .info = snd_ctl_boolean_mono_info, + .get = deemph_get, + .put = deemph_put, +}; + static const struct snd_kcontrol_new hdav_hdmi_control = { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "HDMI Playback Switch", @@ -1011,6 +1075,10 @@ static int add_pcm1796_controls(struct oxygen *chip) snd_ctl_new1(&rolloff_control, chip)); if (err < 0) return err; + err = snd_ctl_add(chip->card, + snd_ctl_new1(&deemph_control, chip)); + if (err < 0) + return err; } return 0; }