Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3396606pxf; Mon, 22 Mar 2021 05:36:40 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwg/71BlS/Y2NJ5zPL9IFAmgXe0GzyjkMAyH+w39JE8xDkDf/nvcfd18lZEtUbx0tqCcMqa X-Received: by 2002:a17:906:1956:: with SMTP id b22mr19761128eje.114.1616416600302; Mon, 22 Mar 2021 05:36:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616416600; cv=none; d=google.com; s=arc-20160816; b=Kjj7XkBqWO95SFT3PC5QNoVoA+djFkS2ss6V9sCCeZWMxh9PUZf2CQEzxebwBZtMRS jz/m+/w7VXSDo8ILgpp74OuKmT9JQAFWkYH7x07P6U9UL8w3wJOoIqji54kD09+uJsvt /PvjmpAh+c9yJBTj5rK9GnfMTHvaQ23ZzSI+9NQdJdrj3njrv6dbbHt0koBJz078bIHe q3TyJ8D/MbxNK4w+qLf9AZYqks02qcy7vAJk6upMpADA5PIxNV41o+h99vICe+U4SmCZ QAlawaC1Y/WFzdJCvqG1HcG6eCwstC+S5z2y5EpOaUTZ0yWOe2B7UAE6lDnwJmwEPElR dPCg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=4dDJEi0G5UOo5fUD5Xl9fs5XTxzlOdrqX5juoD5r08w=; b=Ugma2QRelwyEP1TbQXuFFwfShGRWHv7t4SnuN99P7OjOdXp7lrcHNCEp4hUuQaRrkv m5u29dyo0/+1Upmtrr1XEfdTozQoEB+GoB6RfzZhlzNKfB/tY1lMPgRxBNsuFEZBbV1P mphYgpeoW3kOKPn+DDh7xucklQ7l2gRQEY79ulYUCgVInFACNs8SFK9LNUZX+O6HBKg3 PI3UmxFSboT6Ri7kmlVmBjYwKMXl2DyV8n8M/goKAHIxgujepSlnRkozyLw6AABcta7U tzJSN0mOeWcY1WzzH9Fr0kljWmBeFb88gnEsCqLlenmgvZ3p4YlHS40mLp00zrozzh3w 8gCw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=QVkQCLWM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id n1si10911715edv.538.2021.03.22.05.36.17; Mon, 22 Mar 2021 05:36:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=QVkQCLWM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231286AbhCVMfS (ORCPT + 99 others); Mon, 22 Mar 2021 08:35:18 -0400 Received: from mail.kernel.org ([198.145.29.99]:55518 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230239AbhCVMcm (ORCPT ); Mon, 22 Mar 2021 08:32:42 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 428E5619A2; Mon, 22 Mar 2021 12:32:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1616416361; bh=70DLq73q6UI4LCgVXa81q17CNFdeyeVDpQpHZ4G/API=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QVkQCLWMlsal6JelsS63+KUGrmm3veYgTyz95eDZ2n/J8VZQ0qFgHB+3jt6CuAoVM fbzIHJHW2f0voBBHb+/P1oUdo+ilUmr5Vwt9nwXMHM5bft7CdyQwlInQFTICfBa0F7 wKOQdwZ6pb45bljYQBbkiJbS4PgG7OL/mKDyxhHg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jonathan Marek , Srinivas Kandagatla , Mark Brown , Sasha Levin Subject: [PATCH 5.11 070/120] ASoC: codecs: lpass-va-macro: mute/unmute all active decimators Date: Mon, 22 Mar 2021 13:27:33 +0100 Message-Id: <20210322121932.019509347@linuxfoundation.org> X-Mailer: git-send-email 2.31.0 In-Reply-To: <20210322121929.669628946@linuxfoundation.org> References: <20210322121929.669628946@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jonathan Marek [ Upstream commit 5346f0e80b7160c91fb599d4545fd12560c286ed ] An interface can have multiple decimators enabled, so loop over all active decimators. Otherwise only one channel will be unmuted, and other channels will be zero. This fixes recording from dual DMIC as a single two channel stream. Also remove the now unused "active_decimator" field. Fixes: 908e6b1df26e ("ASoC: codecs: lpass-va-macro: Add support to VA Macro") Signed-off-by: Jonathan Marek Reviewed-by: Srinivas Kandagatla Link: https://lore.kernel.org/r/20210304215646.17956-1-jonathan@marek.ca Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/codecs/lpass-va-macro.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/sound/soc/codecs/lpass-va-macro.c b/sound/soc/codecs/lpass-va-macro.c index 91e6890d6efc..3d6976a3d9e4 100644 --- a/sound/soc/codecs/lpass-va-macro.c +++ b/sound/soc/codecs/lpass-va-macro.c @@ -189,7 +189,6 @@ struct va_macro { struct device *dev; unsigned long active_ch_mask[VA_MACRO_MAX_DAIS]; unsigned long active_ch_cnt[VA_MACRO_MAX_DAIS]; - unsigned long active_decimator[VA_MACRO_MAX_DAIS]; u16 dmic_clk_div; int dec_mode[VA_MACRO_NUM_DECIMATORS]; @@ -549,11 +548,9 @@ static int va_macro_tx_mixer_put(struct snd_kcontrol *kcontrol, if (enable) { set_bit(dec_id, &va->active_ch_mask[dai_id]); va->active_ch_cnt[dai_id]++; - va->active_decimator[dai_id] = dec_id; } else { clear_bit(dec_id, &va->active_ch_mask[dai_id]); va->active_ch_cnt[dai_id]--; - va->active_decimator[dai_id] = -1; } snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, enable, update); @@ -880,18 +877,19 @@ static int va_macro_digital_mute(struct snd_soc_dai *dai, int mute, int stream) struct va_macro *va = snd_soc_component_get_drvdata(component); u16 tx_vol_ctl_reg, decimator; - decimator = va->active_decimator[dai->id]; - - tx_vol_ctl_reg = CDC_VA_TX0_TX_PATH_CTL + - VA_MACRO_TX_PATH_OFFSET * decimator; - if (mute) - snd_soc_component_update_bits(component, tx_vol_ctl_reg, - CDC_VA_TX_PATH_PGA_MUTE_EN_MASK, - CDC_VA_TX_PATH_PGA_MUTE_EN); - else - snd_soc_component_update_bits(component, tx_vol_ctl_reg, - CDC_VA_TX_PATH_PGA_MUTE_EN_MASK, - CDC_VA_TX_PATH_PGA_MUTE_DISABLE); + for_each_set_bit(decimator, &va->active_ch_mask[dai->id], + VA_MACRO_DEC_MAX) { + tx_vol_ctl_reg = CDC_VA_TX0_TX_PATH_CTL + + VA_MACRO_TX_PATH_OFFSET * decimator; + if (mute) + snd_soc_component_update_bits(component, tx_vol_ctl_reg, + CDC_VA_TX_PATH_PGA_MUTE_EN_MASK, + CDC_VA_TX_PATH_PGA_MUTE_EN); + else + snd_soc_component_update_bits(component, tx_vol_ctl_reg, + CDC_VA_TX_PATH_PGA_MUTE_EN_MASK, + CDC_VA_TX_PATH_PGA_MUTE_DISABLE); + } return 0; } -- 2.30.1