Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp2917296ybx; Fri, 8 Nov 2019 11:14:44 -0800 (PST) X-Google-Smtp-Source: APXvYqwUTKJBHMsSo4eyhfO6KIzpztflNVXodnCa5JW0Fymq6WBXuy9DSyWR2pvzYtysQnwCHhRV X-Received: by 2002:a17:906:134c:: with SMTP id x12mr10701055ejb.269.1573240484227; Fri, 08 Nov 2019 11:14:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573240484; cv=none; d=google.com; s=arc-20160816; b=WmCPuat8HohEQwY829ODQD+Ide70cWQKckv7iOQ1zM2fiMqHGbLPCweGCE2wWMemMz IFlsXvf9//OBl6AeDApYaGsOsOeoZ7I17kfim1rjcWMLPgkC1YDkuIUHUoXzPoHN5TUW UfYwqaAU3172kWs1Zf0a2Q971AQiTEtqqH8PbOatzacQDhWNS5CGjAYH1V+4C4eTaCUB mCfKPtFw+bSmnwCzAwEDJpzDBAyDXAE0RLQ6DfMdUBwIdFWDoYzNaa+rOe7AOfsj5vd6 5dkBd4CtzZ9unfxQYYQZp6NS77aQ6kPXgQ2ENAyUEXgT6xiseFdtIX4qPMYBN3BJAFyt op4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=UPIE72vT1zKg2sDCdDf0tv4wJ01r7bQ0JX/G58y1p2M=; b=zmXAj1wWJg/V1Np+OVxoXiLvE718z4ksyizDp4B4XVdnEYo3SWbdKfkvEPtg5I8H71 /uYRCLcRvP5aW7OVQ/lo0Kr/aVOV5X/uevI3/BWsPZ2slkqpmGWNrTqqoZeZg07/thWQ A+gA2s8xfmeTZTDHVK2S8IUcA+rog6C/jicyb7acJFQI9u5VPAbboYIR31k2QIQcoyEJ kg1P5QgbjAh+me26BoyAwQ8FH1KWVEgOELVg8pdZxlgcGuJnUHkuseU6QNA89tcFH/jc fRvh3cGntJ/SttBJ+EoS/ZcCR3LsnQd34UyUD6RwSK8HlTNpJmmqoJxY2Ahn++uuGFcU pqMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=whACLfSn; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s15si5430466eds.217.2019.11.08.11.14.20; Fri, 08 Nov 2019 11:14:44 -0800 (PST) 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=pass header.i=@kernel.org header.s=default header.b=whACLfSn; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391387AbfKHTHA (ORCPT + 99 others); Fri, 8 Nov 2019 14:07:00 -0500 Received: from mail.kernel.org ([198.145.29.99]:37590 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391384AbfKHTG6 (ORCPT ); Fri, 8 Nov 2019 14:06:58 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id DC601222C6; Fri, 8 Nov 2019 19:06:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1573240017; bh=9gjFkp5kO1oP3E8xCnnU6ER7abXY5+MJTsp64cWYHpw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=whACLfSnykrVh7NfV/Yi9CDocnH8IdfaT055uU0UuMCzoBaBHHxBnr37dD3IbjhEL pvtHV0Zp2eAmjNSYtshsesPtRk8+Iko1RhG58S+W+eEbgTQFJ0K1NgiH8Phqy2wPnS zIHD1gR/Ab59pcw/Xh+ayqUB4gb8IdxLKlg35yHk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Dragos Tarcatu , Pierre-Louis Bossart , Mark Brown , Sasha Levin Subject: [PATCH 5.3 059/140] ASoC: SOF: control: return true when kcontrol values change Date: Fri, 8 Nov 2019 19:49:47 +0100 Message-Id: <20191108174908.995980180@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191108174900.189064908@linuxfoundation.org> References: <20191108174900.189064908@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dragos Tarcatu [ Upstream commit 95a32c98055f664f9b3f34c41e153d4dcedd0eff ] All the kcontrol put() functions are currently returning 0 when successful. This does not go well with alsamixer as it does not seem to get notified on SND_CTL_EVENT_MASK_VALUE callbacks when values change for (some of) the sof kcontrols. This patch fixes that by returning true for volume, switch and enum type kcontrols when values do change in put(). Signed-off-by: Dragos Tarcatu Signed-off-by: Pierre-Louis Bossart Link: https://lore.kernel.org/r/20191018123806.18063-1-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/sof/control.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/sound/soc/sof/control.c b/sound/soc/sof/control.c index a4983f90ff5b3..2b8711eda362b 100644 --- a/sound/soc/sof/control.c +++ b/sound/soc/sof/control.c @@ -60,13 +60,16 @@ int snd_sof_volume_put(struct snd_kcontrol *kcontrol, struct snd_sof_dev *sdev = scontrol->sdev; struct sof_ipc_ctrl_data *cdata = scontrol->control_data; unsigned int i, channels = scontrol->num_channels; + bool change = false; + u32 value; /* update each channel */ for (i = 0; i < channels; i++) { - cdata->chanv[i].value = - mixer_to_ipc(ucontrol->value.integer.value[i], + value = mixer_to_ipc(ucontrol->value.integer.value[i], scontrol->volume_table, sm->max + 1); + change = change || (value != cdata->chanv[i].value); cdata->chanv[i].channel = i; + cdata->chanv[i].value = value; } /* notify DSP of mixer updates */ @@ -76,8 +79,7 @@ int snd_sof_volume_put(struct snd_kcontrol *kcontrol, SOF_CTRL_TYPE_VALUE_CHAN_GET, SOF_CTRL_CMD_VOLUME, true); - - return 0; + return change; } int snd_sof_switch_get(struct snd_kcontrol *kcontrol, @@ -105,11 +107,15 @@ int snd_sof_switch_put(struct snd_kcontrol *kcontrol, struct snd_sof_dev *sdev = scontrol->sdev; struct sof_ipc_ctrl_data *cdata = scontrol->control_data; unsigned int i, channels = scontrol->num_channels; + bool change = false; + u32 value; /* update each channel */ for (i = 0; i < channels; i++) { - cdata->chanv[i].value = ucontrol->value.integer.value[i]; + value = ucontrol->value.integer.value[i]; + change = change || (value != cdata->chanv[i].value); cdata->chanv[i].channel = i; + cdata->chanv[i].value = value; } /* notify DSP of mixer updates */ @@ -120,7 +126,7 @@ int snd_sof_switch_put(struct snd_kcontrol *kcontrol, SOF_CTRL_CMD_SWITCH, true); - return 0; + return change; } int snd_sof_enum_get(struct snd_kcontrol *kcontrol, @@ -148,11 +154,15 @@ int snd_sof_enum_put(struct snd_kcontrol *kcontrol, struct snd_sof_dev *sdev = scontrol->sdev; struct sof_ipc_ctrl_data *cdata = scontrol->control_data; unsigned int i, channels = scontrol->num_channels; + bool change = false; + u32 value; /* update each channel */ for (i = 0; i < channels; i++) { - cdata->chanv[i].value = ucontrol->value.enumerated.item[i]; + value = ucontrol->value.enumerated.item[i]; + change = change || (value != cdata->chanv[i].value); cdata->chanv[i].channel = i; + cdata->chanv[i].value = value; } /* notify DSP of enum updates */ @@ -163,7 +173,7 @@ int snd_sof_enum_put(struct snd_kcontrol *kcontrol, SOF_CTRL_CMD_ENUM, true); - return 0; + return change; } int snd_sof_bytes_get(struct snd_kcontrol *kcontrol, -- 2.20.1