From nobody Tue Dec 2 01:04:48 2025 Received: from mail-qk1-f181.google.com (mail-qk1-f181.google.com [209.85.222.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C0BCF2DFF19 for ; Mon, 24 Nov 2025 06:50:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763967036; cv=none; b=CwItI42MORXLvWfCEz//+NzoQ1KtQKxKDKsCsmOZ6bXX/uH9fVjv4F4sqIqbe1gr9jPw3c4oxlz4yLGfTCzbbS+egF+oIPCBN2aKDibY9NR9ocaYTP24sKl1q0Sq/pk848JKk1875O2yLRwgBQeH0ZY44Oi3Xab7pu5yx0oq09c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763967036; c=relaxed/simple; bh=d6WN5H/+767vMaQcJjAjNCbjrtbpcRP4HbSZ+EaFPAg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ubd7Be/E31Ev3LpBx05aXcXd4BOUzgVgKa4JY9yMNekNxBrSToemeBVEzedLmEdlpH1cIewO6k9Xuw5+Pg/pIKiDJPWTMsEQ0HMUAdHuowtoYZa/fOUa1RG6SrKlmVGh9jHs7t5awAsQdnHv7+QnWJ+iZg3R3wLEhhZ//d3ztJE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=marek.ca; spf=pass smtp.mailfrom=marek.ca; dkim=pass (2048-bit key) header.d=marek.ca header.i=@marek.ca header.b=SMGIUgTR; arc=none smtp.client-ip=209.85.222.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=marek.ca Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=marek.ca Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=marek.ca header.i=@marek.ca header.b="SMGIUgTR" Received: by mail-qk1-f181.google.com with SMTP id af79cd13be357-8b220ddc189so470788385a.0 for ; Sun, 23 Nov 2025 22:50:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marek.ca; s=google; t=1763967034; x=1764571834; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0SbhPk+cIbagc0g7g2HIdLEmkXHw9QB9UvdhnuSgHsc=; b=SMGIUgTRRxYH5DGNp4MNCP7vjvOGwdhbRDTax/z21Rc0bgYIp225y7W9DQsxlVpquj t5MweCmOFXhL5GiyCpld9Dd/6qsfRWKhQCSVP+PyUlQzk+JrJI4LWzVi0B7TbiiVMP/a Yflp4xK/gz7axfTMW0F3t0syDQRPCY52LIhTuoOcvCy4ISmw9lXBhDwmdIJpZF7K4xmX isU+OTtwgbJxUuCJR7rPumSXVi/mnt+dc0+jXtlCpaXMCcDUWsd9aziXGkMaW6kmI/Zg 6XNFuMqFVt7obA0HD8fQKRRcDU5AMplniL70xqznhgoonifSEy9mQv4uEoBxqMEHrAjO cPWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763967034; x=1764571834; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=0SbhPk+cIbagc0g7g2HIdLEmkXHw9QB9UvdhnuSgHsc=; b=vIipWUm6OV4vEiX0fFWkiFePShO46mg2ZFC/bsospt8wjgWTb9iMRX/tiNk0ANilkK BlurwqK86Wsq5moahnix1Eru0zoG8YVyhloaz/wnqg4LFzlTzeov42kbbQd0ilE2Suzs 94F6NwjYF2dpyTAXuTbdtI1tFLUpI9LrJ3uUWNUm9Mw3zfrXcKia4/z/MfH1JuyP4ZDA x9Ac6pHluHNKxldM8p7LjAzZUQ0j+AEPogtTIl2r5H+H5vn5otULW1Vfpr8bI1HLQDUJ Z4ax+9X/+AFuTuYYwPccnA7Q4krS9x4A6fmqgGAwP89S43TnqSeyM2GoC7H4jOWU21dg 35zw== X-Forwarded-Encrypted: i=1; AJvYcCXz133Ih4NKqS36EXMx/fzBL4oh9P9dpeQbNB/yPniKCfHpe98A03Xr7HpMKXzh9uO96w6fOwpH/z3zOGA=@vger.kernel.org X-Gm-Message-State: AOJu0YyAix9UUTgidjlelqHSFrYDIg5Dku7iufeKKD40gTlA8wheLsIz /tKOg8ljBpwAdxyH5cSvzN/23UdVNiGqqDhdweoorrF1r20bdbJbesAut6BVxFgHqqo= X-Gm-Gg: ASbGncsdda2aPQKg8f65wnVXtMIIajMwrhcg8LOgIj0sW7ePCDnQHtxy1dVKvNG+lrj +xbnG3gGLTAUSmA1fwGL80UXOCWTUqrFPeNLWEwkwmuR10J7aocvA6bwLL24+LDkKWTNUhyjLx9 XLgBkH9xmiL6F/OtfkxG7H+i4Qh0uhCKmsSmn+DCHH1E/y7qNZEFnYZ8yYGxBxIWyEY1RQ+dore qj16hq/EIx1k+P6RTSWM3H+E9BSquBrQth0XSvYxHCI/jfJppII5tqqiqRMKGO1SO95vmDMAQ6X EN+rBU3HlPzGXFHqyyjKJ5zyFUuxlmd/IwNgQS6QXWmh7VX2HvWbT1CCktRr8RlPlcqGFgFcXrk U8M2XM7AzWBw6nupN5xHf7vrH8ASjqaiU9TC7pRsw2rm0UEhdPSXkwNXe2Xzk6SMd8v1FvuebbU TBDtYRWKZVAFnAxdVv0csHW5Z9m52c8EMoEeZCiLBH4Jcdh3qu/b+Fs7LsQRtnNdfEYQ== X-Google-Smtp-Source: AGHT+IEBHwNCw3W+jfg9jESuLTfvci7rPCprytBblNB0K+hOqYvW2BCwSblqlDokDkAkj9jWN2s1ew== X-Received: by 2002:a05:620a:450c:b0:8b2:e922:529a with SMTP id af79cd13be357-8b33d1f93acmr1221802585a.19.1763967032817; Sun, 23 Nov 2025 22:50:32 -0800 (PST) Received: from localhost.localdomain (modemcable125.110-19-135.mc.videotron.ca. [135.19.110.125]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8b3295db8b1sm889075185a.40.2025.11.23.22.50.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Nov 2025 22:50:31 -0800 (PST) From: Jonathan Marek To: linux-arm-msm@vger.kernel.org Cc: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Krzysztof Kozlowski , Neil Armstrong , linux-sound@vger.kernel.org (open list:QCOM AUDIO (ASoC) DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 1/6] ASoC: codecs: wsa884x: remove mute_unmute_on_trigger Date: Mon, 24 Nov 2025 01:45:54 -0500 Message-ID: <20251124064850.15419-2-jonathan@marek.ca> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251124064850.15419-1-jonathan@marek.ca> References: <20251124064850.15419-1-jonathan@marek.ca> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" trigger is atomic (non-schedulable), and soundwire register writes are not safe to run in an atomic context. (bus is locked with a mutex, and qcom driver's callback can also sleep if the FIFO is full). The important part of fixing the click/pop issue was removing the PA_EN writes from the dapm events, AFAICT this flag doesn't help anyway. Fixes: 28b0b18d5346 ("ASoC: codec: wsa884x: make use of new mute_unmute_on_= trigger flag") Signed-off-by: Jonathan Marek --- sound/soc/codecs/wsa884x.c | 1 - 1 file changed, 1 deletion(-) diff --git a/sound/soc/codecs/wsa884x.c b/sound/soc/codecs/wsa884x.c index 2484d4b8e2d94..0218dfc13bc77 100644 --- a/sound/soc/codecs/wsa884x.c +++ b/sound/soc/codecs/wsa884x.c @@ -1840,7 +1840,6 @@ static const struct snd_soc_dai_ops wsa884x_dai_ops = =3D { .hw_free =3D wsa884x_hw_free, .mute_stream =3D wsa884x_mute_stream, .set_stream =3D wsa884x_set_stream, - .mute_unmute_on_trigger =3D true, }; =20 static struct snd_soc_dai_driver wsa884x_dais[] =3D { --=20 2.51.0 From nobody Tue Dec 2 01:04:48 2025 Received: from mail-qk1-f174.google.com (mail-qk1-f174.google.com [209.85.222.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BF0682DFF1D for ; Mon, 24 Nov 2025 06:50:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763967038; cv=none; b=ocZIGJc/+nTNP8bFF2YsgynEGCwFEV3Z7Zbe0QbXyT+0csznm5SsEuTN3Wl1Pg13D0TiaRTA0PZohoLVMN+f7oH8zxufoLjPmI716FSW09BefOFs+P8sL3pd7EZ6XRlUfxGZH9DR1SkWvxob+C1QVLUlKIW7hPVV0u7kwLQiz98= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763967038; c=relaxed/simple; bh=c+evDW9Elw7Jyi8FB04DPqmRYklgmrA1qBTttF7Xz90=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CRsTMR68o/wBdKtZ0rnLeg1U+zU+asmL6aykuGAKQT/MErPg8zc0siY9SV9ALH13JqyvRpTDqxrAPNFgOAlLA8XGvk5StVoxH92j7tcHO359hMu60hoiFtbbiWtLqX/ygzKT4K4hu7lq8Rry5Z2Iu0DCDaW9lB0l9suklDQxuOU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=marek.ca; spf=pass smtp.mailfrom=marek.ca; dkim=pass (2048-bit key) header.d=marek.ca header.i=@marek.ca header.b=A3xEhEF+; arc=none smtp.client-ip=209.85.222.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=marek.ca Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=marek.ca Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=marek.ca header.i=@marek.ca header.b="A3xEhEF+" Received: by mail-qk1-f174.google.com with SMTP id af79cd13be357-8b2ed01b95dso403124185a.0 for ; Sun, 23 Nov 2025 22:50:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marek.ca; s=google; t=1763967036; x=1764571836; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=skch7R/1lPkeyinutaXG2JeYSmt7c1u7ahV+p8uoSAQ=; b=A3xEhEF+omTdzdqkWNz6hWHQ0wnvhSm6xIJm8qDK1vDrsRmiRF4yRuNyOEW7mFwMuy 3xYrGFsz7VzRGs73pLmSW94ncSEN8ht5CgzYC8K/CayyY9WUxnK8Mmt1f/pWZzws/fKT s7voHp0FQWwqSFCOVfh2dsePSW7/8j6P6vSX/rIwUsqowuotz+0plifVfzYATHZ0gOMn jlHFIkDxBtRjmYGgMZNXTj1wf4AiLNv5Oc0cw6/7yNrqlHQNgwHK03ZqyCdbJxc77dc0 tp3m+OypecaeJVAwRKyFtfwGIgNaad+890fJhp+g55jNUH2yC7VgZ2FMXh4O7on28HoU +dbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763967036; x=1764571836; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=skch7R/1lPkeyinutaXG2JeYSmt7c1u7ahV+p8uoSAQ=; b=VvVaDlGDqMmED15xYXDx86YhUUqeAvQgtMFxCbNbd0kuMCbgcR9/etwDJ/FUcfu6O1 m7OkrG1kCqg7mWSdkFsiKipcahnSmHRqEys/pBIaLD/ShhzGALe2tk4p1qz/L0yZEskN BTdWRErnRtRchtuVdHUZK/HMUCbX1MyUAiAcat3RN9sLwgh+L/9DNUAiw0Z0gJPInEQA hukZAGbUiQa998v1RQFh558j9rpK5dW/1E8lP6xXtAa9jR6/OiSp+JBCO9p6MUuuJ9gO R/HKjN8pfV3L1lgBumyiT6LBRaYIDdnFSwCNQxwP0+5WzLm0SMGVZKm1W72+0M9odCIM ipzw== X-Forwarded-Encrypted: i=1; AJvYcCUYAh/byKbaf+i3sy5vvkugKu6A23GIb6qqKvSvpUqEMovGKa9Ju+vlHLDuE1LSphOSccKOFdJewO7zjj4=@vger.kernel.org X-Gm-Message-State: AOJu0Ywq+MIWpeXgyDFJ6Nh1L0nth1W6W2fOCB6RRySQKHFMpR9qfAlA DDOEaO3kpj/7A/W3buBA2TAAZE5TxvjqoJ+uwo00/ycprK+HHOBIoLL4sVTicJdN5FI= X-Gm-Gg: ASbGncu4rLpMNbHTA0XoikxCHP4G82eI4O1146xsucDLWOwfRczvjCmaw4LsPh1r+Ng uRud6Cigv6sW+UHU8k6nPv9UVEwNo+UvmtVcTwVS90sJ3Acf5GCgITHzrTuM/xHV78vkUzGV9qF jS3pXvH+2gZZqYXJV1Y/7pq8fY3LdIn4Im9JQkPkMEZYlyPpjd2rTmEsUxnb8egstOj6gMGBCHZ RUHbNcZWKq1LfepG3pqpvwOqGmAd3nkGFmfSW/OD9i0fOcCU20mPsZF7BO7nvCBQ3Lp75lCr1uF lxU7X924l1Jy3wow6r7qsc8oR8GeAdr6F/tx+Z/Da9wJnN5RkREg1CptI67FT24Da/z/3kLMeDJ QgYNCqFugbvvpQncLDkHAcnTyQjvmIIrIDuPz+Fl1XXFcRGAAEHAvbqwv//J3hWY5+8wpaqoQ8d oEo6j+45kBqd6XDuFJfpEs5l7dOzUUnSY6OxMRAPgshkoMS/QdMRJweWSg9Np028Rjuw== X-Google-Smtp-Source: AGHT+IHhRRyQV5IXdiBdHoXPIY1Kec5ywogEhdJKq7fTD97tVKBwhIq12TY3XSAEWfkk2ZC6mRZpSA== X-Received: by 2002:a05:620a:31a6:b0:8b2:dd5b:fe80 with SMTP id af79cd13be357-8b33d48706amr1402951785a.79.1763967035481; Sun, 23 Nov 2025 22:50:35 -0800 (PST) Received: from localhost.localdomain (modemcable125.110-19-135.mc.videotron.ca. [135.19.110.125]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8b3295db8b1sm889075185a.40.2025.11.23.22.50.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Nov 2025 22:50:34 -0800 (PST) From: Jonathan Marek To: linux-arm-msm@vger.kernel.org Cc: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , linux-sound@vger.kernel.org (open list:QCOM AUDIO (ASoC) DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 2/6] ASoC: codecs: wsa883x: remove mute_unmute_on_trigger Date: Mon, 24 Nov 2025 01:45:55 -0500 Message-ID: <20251124064850.15419-3-jonathan@marek.ca> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251124064850.15419-1-jonathan@marek.ca> References: <20251124064850.15419-1-jonathan@marek.ca> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" trigger is atomic (non-schedulable), and soundwire register writes are not safe to run in an atomic context. (bus is locked with a mutex, and qcom driver's callback can also sleep if the FIFO is full). The important part of fixing the click/pop issue was removing the PA_EN writes from the dapm events, AFAICT this flag doesn't help anyway. Note I only tested the equivalent wsa884x change. Fixes: 805ce81826c8 ("ASoC: codecs: wsa883x: make use of new mute_unmute_on= _trigger flag") Signed-off-by: Jonathan Marek --- sound/soc/codecs/wsa883x.c | 1 - 1 file changed, 1 deletion(-) diff --git a/sound/soc/codecs/wsa883x.c b/sound/soc/codecs/wsa883x.c index ca4520ade79aa..06e963b5e853e 100644 --- a/sound/soc/codecs/wsa883x.c +++ b/sound/soc/codecs/wsa883x.c @@ -1396,7 +1396,6 @@ static const struct snd_soc_dai_ops wsa883x_dai_ops = =3D { .hw_free =3D wsa883x_hw_free, .mute_stream =3D wsa883x_digital_mute, .set_stream =3D wsa883x_set_sdw_stream, - .mute_unmute_on_trigger =3D true, }; =20 static struct snd_soc_dai_driver wsa883x_dais[] =3D { --=20 2.51.0 From nobody Tue Dec 2 01:04:48 2025 Received: from mail-qk1-f182.google.com (mail-qk1-f182.google.com [209.85.222.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 725732E1EE7 for ; Mon, 24 Nov 2025 06:50:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763967041; cv=none; b=Kv5iWQeYdDUmVOV+0EFrnPmleRpStueQU+9UL5MI2+1Xb27ZmTa4sr2GoxNJwPRlStio0qID3Xru10GpYiLSg2Xpfa8vN38Fbt7a50A+EMmXlAcLqqhixBOqH/MfsdqR5Bl1a2ymASNAEkCMn7Lqc/rN5zDBw3kBRDbQJufgk7c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763967041; c=relaxed/simple; bh=ODKZZ6llYfgYgWR/6DbA7mxg/k8lgmUIfV1DzxX9fS4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=s3DoiDgnt7erhBHC8dObVp/2Pa1WYxExdJJ9ALxTXqPR4fUm5yXZx6s2viVEsqObFfInkiaWHJYtW6JLfhl8u5GrxISxJnY233L3yYLPKzbugrM1IrdotjrDMR9T+IvVTseV9Z5Q5p1ewiP1RmmmtJMGp8xCQpuAExCVeTTMGsg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=marek.ca; spf=pass smtp.mailfrom=marek.ca; dkim=pass (2048-bit key) header.d=marek.ca header.i=@marek.ca header.b=DXeIr3C4; arc=none smtp.client-ip=209.85.222.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=marek.ca Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=marek.ca Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=marek.ca header.i=@marek.ca header.b="DXeIr3C4" Received: by mail-qk1-f182.google.com with SMTP id af79cd13be357-8b28f983333so399751685a.3 for ; Sun, 23 Nov 2025 22:50:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marek.ca; s=google; t=1763967038; x=1764571838; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vyGmcBay0+DkW1QEBakkTS1fQ2rSDF+O9yJM76nIi/s=; b=DXeIr3C4hVT3OH7+yuu6U5c9isGid6hXkwBply/Kf2nmbxDAnFtxaw/uT6Lo6wFSgB iCafZOw6fUR9U8Yc4HXk//qNZQMrqlQ6Uzdh8ZR73HBvfh3bOybfoBg2js2k7ty4NIxR T7142pqDRCjVmRqI4byZyKekR4yeBJ/MuxSh5tM/mDG4RBt26jwTizYGys0BdydRg3Jc o2pL5PpeKQMGhtnXoSelZtqq7oe4P1IhREetWqgWErOwAzxVoDshuV3HQxFSstuzXub9 U/CW2Arz3KIRCfs8xEH52b9kE5l00Gu9xcYutgmnB1ZBWp9BzZNFDvfb4l5VEC0oPh5O kblQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763967038; x=1764571838; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=vyGmcBay0+DkW1QEBakkTS1fQ2rSDF+O9yJM76nIi/s=; b=RXFW//4BxWGqmwNtG5XBxDZbBsjQUxUQrxAmMOgUo/f1JlX9YlhpIkvznb6P95zZ2j sY4TEyGTdshUwI0PPIZWzQWV5KX7ZNkVCTy4v9QsZfR4sDS7KMfjOkEhfkyggQxkXO4s MzF6JQ0VjUTAZ6cc0DucTQRUTm7YzptmUiopL20WIVXZbyj2lT+8D5GkKPOm0D3gD2tQ aImjxuYZSez/XWwcUQhtKoI7f8fds6v05IAPGBUhytDdIvKFzgU6iG83sCL/rgBYYGBH iveaRX+GDykLNkpoX0RjpAXObqMvuIwje5h90BvoaR5Or+zCBhLs3m3bY2NOPBspc8jp iJVA== X-Forwarded-Encrypted: i=1; AJvYcCWGRoTM2VA8xS37oLnXozOemCyYM+tWoPMDFemheuDNV1SvlUoZ0ewR26xZwi6bGCFUpz22zZ7J7Y6HYn0=@vger.kernel.org X-Gm-Message-State: AOJu0Yxp2xiEt8HG3RgPZovI00OjOAt8X58ZFW5YjGaXd0TQ+xZYxkdo 5k0RO7YGUwEfx2xPFzAOqMIcJXKdM0iN/niU+/OcbHC0S8GOHng1odzXgTHPzZ134Zg= X-Gm-Gg: ASbGncuW7RtKXpAmGZufjfVY3t1I7pmRz4KUDj8ig6/MhWP2y1QapoChSdybA/+1Mlg HmTDptgQ9ELxZuqBHkK8bWo6mQ7kM7uk9FYx0dAyUOwrM8OIDbgi/crduf1Z+AUdrbwLP1/0lpZ br1bY0Lxx5gKrzmifJjgYYnnpXtBTuII706e4QZ/oumu8XUPBRQ0XY7QsEM62KS6HDUkegl/KHt UdBpB/vsPI1w7X18dFtyUJVWMU9XTX2S5H9T2b+ZNv4P1Z3vPDIpItlm1g95JiyI3IN+0wmlDRn WYkNKhuzvc95ZOFJN5d1PoYqV/ULX5ZR6cKfcJEozbG+hb9f+iYcnXBu+Nk0Maa+gW6fzA8eFX1 PvDYyNaKyuiGqQldlWkenTi14RBJz1ktmD1Kt2w0jUnCFuHdd5mne2bst3dReITByosQF6Ud6AE ttSvTM+5RXNGx8n1RFGgyrm9zIBi4AbJJ4xv1JHNnp/EqYJPKrzjtqGRP0dk9ZpgMQlA== X-Google-Smtp-Source: AGHT+IEGinri7FfzNXmmlyC2Q7pb+oH0NVL9SOp/e15LApRFrCRvqXP61oERVCDhDxN1m/8j+Rq6/g== X-Received: by 2002:a05:620a:c44:b0:849:d117:e86a with SMTP id af79cd13be357-8b33d4734d4mr1291646985a.59.1763967038248; Sun, 23 Nov 2025 22:50:38 -0800 (PST) Received: from localhost.localdomain (modemcable125.110-19-135.mc.videotron.ca. [135.19.110.125]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8b3295db8b1sm889075185a.40.2025.11.23.22.50.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Nov 2025 22:50:37 -0800 (PST) From: Jonathan Marek To: linux-arm-msm@vger.kernel.org Cc: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , linux-sound@vger.kernel.org (open list:QCOM AUDIO (ASoC) DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 3/6] ASoC: codecs: wcd939x: fix headphone pop/click sound Date: Mon, 24 Nov 2025 01:45:56 -0500 Message-ID: <20251124064850.15419-4-jonathan@marek.ca> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251124064850.15419-1-jonathan@marek.ca> References: <20251124064850.15419-1-jonathan@marek.ca> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" PA enable must happen while the soundwire stream is enabled (between sdw_enable_stream and sdw_disable_stream) to avoid issues. This is between the link prepare and hw_free for qcom drivers. Move the PA enable/disable to a mute_stream callback, which satisfies this condition. Note the dapm events already cleared HPHL_ENABLE/etc. bits, so only writes to set them need to be added. I used the DAC events to determine if PA should be enabled, which is not exactly the same as before, but practically it shouldn't make a difference. Signed-off-by: Jonathan Marek --- sound/soc/codecs/wcd939x.c | 84 ++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 45 deletions(-) diff --git a/sound/soc/codecs/wcd939x.c b/sound/soc/codecs/wcd939x.c index e74e6f0131318..48f82a92722dd 100644 --- a/sound/soc/codecs/wcd939x.c +++ b/sound/soc/codecs/wcd939x.c @@ -209,6 +209,8 @@ struct wcd939x_priv { bool comp1_enable; bool comp2_enable; bool ldoh; + bool hphl_enable; + bool hphr_enable; }; =20 static const char * const wcd939x_supplies[] =3D { @@ -508,6 +510,7 @@ static int wcd939x_codec_hphl_dac_event(struct snd_soc_= dapm_widget *w, =20 switch (event) { case SND_SOC_DAPM_PRE_PMU: + wcd939x->hphl_enable =3D true; snd_soc_component_write_field(component, WCD939X_HPH_RDAC_CLK_CTL1, WCD939X_RDAC_CLK_CTL1_OPAMP_CHOP_CLK_EN, false); @@ -547,6 +550,7 @@ static int wcd939x_codec_hphl_dac_event(struct snd_soc_= dapm_widget *w, WCD939X_RDAC_HD2_CTL_L_HD2_RES_DIV_CTL_L, 1); snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_HPH_GAIN_CT= L, WCD939X_CDC_HPH_GAIN_CTL_HPHL_RX_EN, false); + wcd939x->hphl_enable =3D false; break; } =20 @@ -565,6 +569,7 @@ static int wcd939x_codec_hphr_dac_event(struct snd_soc_= dapm_widget *w, =20 switch (event) { case SND_SOC_DAPM_PRE_PMU: + wcd939x->hphr_enable =3D true; snd_soc_component_write_field(component, WCD939X_HPH_RDAC_CLK_CTL1, WCD939X_RDAC_CLK_CTL1_OPAMP_CHOP_CLK_EN, false); @@ -603,6 +608,7 @@ static int wcd939x_codec_hphr_dac_event(struct snd_soc_= dapm_widget *w, WCD939X_RDAC_HD2_CTL_R_HD2_RES_DIV_CTL_R, 1); snd_soc_component_write_field(component, WCD939X_DIGITAL_CDC_HPH_GAIN_CT= L, WCD939X_CDC_HPH_GAIN_CTL_HPHR_RX_EN, false); + wcd939x->hphr_enable =3D false; break; } =20 @@ -641,16 +647,12 @@ static int wcd939x_codec_ear_dac_event(struct snd_soc= _dapm_widget *w, return 0; } =20 -static int wcd939x_codec_enable_hphr_pa(struct snd_soc_dapm_widget *w, - struct snd_kcontrol *kcontrol, - int event) +static void wcd939x_codec_enable_hphr_pa(struct snd_soc_component *compone= nt, int enable) { - struct snd_soc_component *component =3D snd_soc_dapm_to_component(w->dapm= ); struct wcd939x_priv *wcd939x =3D snd_soc_component_get_drvdata(component); int hph_mode =3D wcd939x->hph_mode; =20 - switch (event) { - case SND_SOC_DAPM_PRE_PMU: + if (enable) { if (wcd939x->ldoh) snd_soc_component_write_field(component, WCD939X_LDOH_MODE, WCD939X_MODE_LDOH_EN, true); @@ -679,8 +681,7 @@ static int wcd939x_codec_enable_hphr_pa(struct snd_soc_= dapm_widget *w, set_bit(HPH_PA_DELAY, &wcd939x->status_mask); snd_soc_component_write_field(component, WCD939X_DIGITAL_PDM_WD_CTL1, WCD939X_PDM_WD_CTL1_PDM_WD_EN, 3); - break; - case SND_SOC_DAPM_POST_PMU: + /* * 7ms sleep is required if compander is enabled as per * HW requirement. If compander is disabled, then @@ -708,9 +709,11 @@ static int wcd939x_codec_enable_hphr_pa(struct snd_soc= _dapm_widget *w, WCD939X_RX_SUPPLIES_REGULATOR_MODE, true); =20 + snd_soc_component_write_field(component, WCD939X_ANA_HPH, + WCD939X_HPH_HPHR_ENABLE, true); + enable_irq(wcd939x->hphr_pdm_wd_int); - break; - case SND_SOC_DAPM_PRE_PMD: + } else { disable_irq_nosync(wcd939x->hphr_pdm_wd_int); /* * 7ms sleep is required if compander is enabled as per @@ -728,8 +731,7 @@ static int wcd939x_codec_enable_hphr_pa(struct snd_soc_= dapm_widget *w, wcd_mbhc_event_notify(wcd939x->wcd_mbhc, WCD_EVENT_PRE_HPHR_PA_OFF); set_bit(HPH_PA_DELAY, &wcd939x->status_mask); - break; - case SND_SOC_DAPM_POST_PMD: + /* * 7ms sleep is required if compander is enabled as per * HW requirement. If compander is disabled, then @@ -755,25 +757,15 @@ static int wcd939x_codec_enable_hphr_pa(struct snd_so= c_dapm_widget *w, if (wcd939x->ldoh) snd_soc_component_write_field(component, WCD939X_LDOH_MODE, WCD939X_MODE_LDOH_EN, false); - break; } - - return 0; } =20 -static int wcd939x_codec_enable_hphl_pa(struct snd_soc_dapm_widget *w, - struct snd_kcontrol *kcontrol, - int event) +static void wcd939x_codec_enable_hphl_pa(struct snd_soc_component *compone= nt, bool enable) { - struct snd_soc_component *component =3D snd_soc_dapm_to_component(w->dapm= ); struct wcd939x_priv *wcd939x =3D snd_soc_component_get_drvdata(component); int hph_mode =3D wcd939x->hph_mode; =20 - dev_dbg(component->dev, "%s wname: %s event: %d\n", __func__, - w->name, event); - - switch (event) { - case SND_SOC_DAPM_PRE_PMU: + if (enable) { if (wcd939x->ldoh) snd_soc_component_write_field(component, WCD939X_LDOH_MODE, WCD939X_MODE_LDOH_EN, true); @@ -802,8 +794,7 @@ static int wcd939x_codec_enable_hphl_pa(struct snd_soc_= dapm_widget *w, set_bit(HPH_PA_DELAY, &wcd939x->status_mask); snd_soc_component_write_field(component, WCD939X_DIGITAL_PDM_WD_CTL0, WCD939X_PDM_WD_CTL0_PDM_WD_EN, 3); - break; - case SND_SOC_DAPM_POST_PMU: + /* * 7ms sleep is required if compander is enabled as per * HW requirement. If compander is disabled, then @@ -829,9 +820,12 @@ static int wcd939x_codec_enable_hphl_pa(struct snd_soc= _dapm_widget *w, snd_soc_component_write_field(component, WCD939X_ANA_RX_SUPPLIES, WCD939X_RX_SUPPLIES_REGULATOR_MODE, true); + + snd_soc_component_write_field(component, WCD939X_ANA_HPH, + WCD939X_HPH_HPHL_ENABLE, true); + enable_irq(wcd939x->hphl_pdm_wd_int); - break; - case SND_SOC_DAPM_PRE_PMD: + } else { disable_irq_nosync(wcd939x->hphl_pdm_wd_int); /* * 7ms sleep is required if compander is enabled as per @@ -848,8 +842,7 @@ static int wcd939x_codec_enable_hphl_pa(struct snd_soc_= dapm_widget *w, =20 wcd_mbhc_event_notify(wcd939x->wcd_mbhc, WCD_EVENT_PRE_HPHL_PA_OFF); set_bit(HPH_PA_DELAY, &wcd939x->status_mask); - break; - case SND_SOC_DAPM_POST_PMD: + /* * 7ms sleep is required if compander is enabled as per * HW requirement. If compander is disabled, then @@ -873,10 +866,7 @@ static int wcd939x_codec_enable_hphl_pa(struct snd_soc= _dapm_widget *w, if (wcd939x->ldoh) snd_soc_component_write_field(component, WCD939X_LDOH_MODE, WCD939X_MODE_LDOH_EN, false); - break; } - - return 0; } =20 static int wcd939x_codec_enable_ear_pa(struct snd_soc_dapm_widget *w, @@ -2736,14 +2726,6 @@ static const struct snd_soc_dapm_widget wcd939x_dapm= _widgets[] =3D { wcd939x_codec_enable_ear_pa, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD), - SND_SOC_DAPM_PGA_E("HPHL PGA", WCD939X_ANA_HPH, 7, 0, NULL, 0, - wcd939x_codec_enable_hphl_pa, - SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | - SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD), - SND_SOC_DAPM_PGA_E("HPHR PGA", WCD939X_ANA_HPH, 6, 0, NULL, 0, - wcd939x_codec_enable_hphr_pa, - SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | - SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD), =20 SND_SOC_DAPM_DAC_E("RDAC1", NULL, SND_SOC_NOPM, 0, 0, wcd939x_codec_hphl_dac_event, @@ -2858,8 +2840,7 @@ static const struct snd_soc_dapm_route wcd939x_audio_= map[] =3D { {"RX1", NULL, "RXCLK"}, {"RDAC1", NULL, "RX1"}, {"HPHL_RDAC", "Switch", "RDAC1"}, - {"HPHL PGA", NULL, "HPHL_RDAC"}, - {"HPHL", NULL, "HPHL PGA"}, + {"HPHL", NULL, "HPHL_RDAC"}, =20 {"IN2_HPHR", NULL, "VDD_BUCK"}, {"IN2_HPHR", NULL, "CLS_H_PORT"}, @@ -2867,8 +2848,7 @@ static const struct snd_soc_dapm_route wcd939x_audio_= map[] =3D { {"RDAC2", NULL, "RX2"}, {"RX2", NULL, "RXCLK"}, {"HPHR_RDAC", "Switch", "RDAC2"}, - {"HPHR PGA", NULL, "HPHR_RDAC"}, - {"HPHR", NULL, "HPHR PGA"}, + {"HPHR", NULL, "HPHR_RDAC"}, =20 {"IN3_EAR", NULL, "VDD_BUCK"}, {"RX3", NULL, "IN3_EAR"}, @@ -3258,6 +3238,19 @@ static int wcd939x_codec_free(struct snd_pcm_substre= am *substream, return wcd939x_sdw_free(wcd, substream, dai); } =20 +static int wcd939x_codec_mute_stream(struct snd_soc_dai *dai, int mute, in= t stream) +{ + struct wcd939x_priv *wcd939x =3D dev_get_drvdata(dai->dev); + struct snd_soc_component *component =3D dai->component; + + if (wcd939x->hphl_enable) + wcd939x_codec_enable_hphl_pa(component, !mute); + if (wcd939x->hphr_enable) + wcd939x_codec_enable_hphr_pa(component, !mute); + + return 0; +} + static int wcd939x_codec_set_sdw_stream(struct snd_soc_dai *dai, void *stream, int direction) { @@ -3270,6 +3263,7 @@ static int wcd939x_codec_set_sdw_stream(struct snd_so= c_dai *dai, static const struct snd_soc_dai_ops wcd939x_sdw_dai_ops =3D { .hw_params =3D wcd939x_codec_hw_params, .hw_free =3D wcd939x_codec_free, + .mute_stream =3D wcd939x_codec_mute_stream, .set_stream =3D wcd939x_codec_set_sdw_stream, }; =20 --=20 2.51.0 From nobody Tue Dec 2 01:04:48 2025 Received: from mail-qk1-f181.google.com (mail-qk1-f181.google.com [209.85.222.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 534BA2E1F0E for ; Mon, 24 Nov 2025 06:50:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763967043; cv=none; b=NiVvFJuiwqF4QwFlWKhxHW+OTToTV3AAm86Ft0UZtK9baiqn2g7e5FNaAMsVl2MPhdZ+sQgiHrVVcokDRbAYcsT52P6/NTdwI9H/jf7uSH2oNU5PCwd6uHC21Zy/mKcckbdW2sKDmc8yEuOnac3IYDe4Sp+6b+dpFs1e3sCCQ3s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763967043; c=relaxed/simple; bh=5/7645nxDX/Ve3gQvZ4qFnsgT3qAFRZ+rGIFBNbXT/k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BmflvTNyo7zd6Q1B3STKi0CMGzI26K/oN+9iIXc0uzNIm1AOK3p6KEET5XNJfAqZDU52cqExg9hdHmMyK3BEQaPNwMfL9Y+nj+H+uf9SRcjjlJe8tma9a0FErZASogRnqiHXjYlNR5exQpwI/mrwloNnA7NElZcHOwmnB38Wp6A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=marek.ca; spf=pass smtp.mailfrom=marek.ca; dkim=pass (2048-bit key) header.d=marek.ca header.i=@marek.ca header.b=OnD4W1Oa; arc=none smtp.client-ip=209.85.222.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=marek.ca Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=marek.ca Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=marek.ca header.i=@marek.ca header.b="OnD4W1Oa" Received: by mail-qk1-f181.google.com with SMTP id af79cd13be357-8b21fc25ae1so384397885a.1 for ; Sun, 23 Nov 2025 22:50:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marek.ca; s=google; t=1763967040; x=1764571840; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9x25JhqrWPc6PenBsCSlUchighQZUVytI0VSm4UmqVs=; b=OnD4W1OadJ1KAw/yvjezz9/XU47rrjYfYMqPYD+RebVVSXUAdXs8oohyFzGXBib/ad x6v/EuqsBwulY3/fkfmHiNeMcbTt2cKPny7cPMnH5rMNYHu/Hczu3UVByV4C9aCJneCg UBhPgUArKyBhdkA4UM6G0TLDrb6D4/GOR3o5J/D9I1nFyCtA6D+CIV0IVnN20BPNS2rf k+pHPLmrafGxjOM3FVPuhM0qNFrvzyJef5z7a8hvMQIesojrAzo4ZRrCNO9WL/bqfyK+ oIPnryKl6uQ9lJYjGbinGHV1ho6COS8stlV++/ek0XJh0HJkia8p3Ey2mC0nnKb6+VY2 976A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763967040; x=1764571840; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=9x25JhqrWPc6PenBsCSlUchighQZUVytI0VSm4UmqVs=; b=npeof3lQNoX6AyStHIWDnNUIROBZu4AgPUnIiT+KRIPeM0pLw60JdHRysSMF1U0p5I uX56C5KnRUM4/zihaFIKwFwoPkND8OkBAae9Q3LPmOIGIL8ZvUzwGdKyIBo12/X54aK2 cnhjzEOKV46wzHfGNXrzvBL/6M0rOffUENC1/pjKu4ULzUlkOjIMldnM5tXNPypOuCUp 6kC/VTjTHtbyRN4x73naEV3gMdgey4p5dm7fDTkvIXKWtSvr0gUaUidBIz2oVNb/lzCr 9SLosnV5nES2QtxmlyDndBEiFFW8rgkuKgyaqmnKrPXdNkpZKSgTAgrA3TgIwY9UOK1H TgJQ== X-Forwarded-Encrypted: i=1; AJvYcCUZebRvfaBddahwC6BAu6Sn7IDoE5QGGNrZ9oGknmT04oiBV2mWNmf6a1WaAAktcfPWlMoGz3q030e+BiY=@vger.kernel.org X-Gm-Message-State: AOJu0Ywd1s9aK+mS09JcWds2Q3eBdUETzNyMQ9Y6adWKpHxPUPX0sNN5 Z2CHuVLEhB+Xeuow2PgBSunXxBLep0ly8yMuPczXDZFOUC/1AkZjaE8xlVTeBwBt+d8= X-Gm-Gg: ASbGncufez8URArxwT4nMnnOkc6g4sb1VsxWUv56KIkG108u2dxTO93tMOE1prjQh5K DvbTGd18IpPT8CEnWNVooUPTezpTdG+a7ojWy9zXqSEybCUmB42PT6MDglwCKdowgJKg/jXFPDL 1xPXrRJoAY2gP/C2C8vCIX/fvQpAQ19BiB7nsKv0q2F0Ol6qrYHc6SYVTvq56idy69ALrjt/L7i 4heowTFn37bl+UauKhqeoipBbOOY1IJ2JmFEhiZnb5GWF0yZYHGWfsd9eepOjCrQX2/UF2IVkMt vwPL0LhOTgMW0614NrFYbBqTZxueeAzPhIfwaIoRl+egSodJkSAO70/E1GiiXm81BL++BrTf4cL my3orAslpUznfpNoCQBMDNwNunlJ+DooGdsimv1KoBG4/G8vPCoc+ojv6F8hxNYOcM3OUKxr0a+ TsM1CYEKKIy/LuigHXKXZPNfh5GM9tRqh+Hz4oKJGwRPg3iwB1T7giG0B8dW6u5L1FZg== X-Google-Smtp-Source: AGHT+IEpkuVHBzWewZQk3g1CEp6i2qPris1Z82ut2quCTt3sgemBBQi7s2esHFyyypx9wmv/rA7dBg== X-Received: by 2002:a05:620a:450f:b0:8b2:213a:e2e4 with SMTP id af79cd13be357-8b33d4c834emr1329101385a.84.1763967040238; Sun, 23 Nov 2025 22:50:40 -0800 (PST) Received: from localhost.localdomain (modemcable125.110-19-135.mc.videotron.ca. [135.19.110.125]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8b3295db8b1sm889075185a.40.2025.11.23.22.50.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Nov 2025 22:50:39 -0800 (PST) From: Jonathan Marek To: linux-arm-msm@vger.kernel.org Cc: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , linux-sound@vger.kernel.org (open list:QCOM AUDIO (ASoC) DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 4/6] ASoC: codecs: wcd938x: fix headphone pop/click sound Date: Mon, 24 Nov 2025 01:45:57 -0500 Message-ID: <20251124064850.15419-5-jonathan@marek.ca> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251124064850.15419-1-jonathan@marek.ca> References: <20251124064850.15419-1-jonathan@marek.ca> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" PA enable must happen while the soundwire stream is enabled (between sdw_enable_stream and sdw_disable_stream) to avoid issues. This is between the link prepare and hw_free for qcom drivers. Move the PA enable/disable to a mute_stream callback, which satisfies this condition. Note the dapm events already cleared HPHL_ENABLE/etc. bits, so only writes to set them need to be added. I used the DAC events to determine if PA should be enabled, which is not exactly the same as before, but practically it shouldn't make a difference. Signed-off-by: Jonathan Marek --- sound/soc/codecs/wcd938x.c | 76 ++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 40 deletions(-) diff --git a/sound/soc/codecs/wcd938x.c b/sound/soc/codecs/wcd938x.c index e1a4783b984c1..cf15190dd61a4 100644 --- a/sound/soc/codecs/wcd938x.c +++ b/sound/soc/codecs/wcd938x.c @@ -178,6 +178,8 @@ struct wcd938x_priv { bool comp2_enable; bool ldoh; bool mux_setup_done; + bool hphl_enable; + bool hphr_enable; }; =20 static const char * const wcd938x_supplies[] =3D { @@ -468,6 +470,7 @@ static int wcd938x_codec_hphl_dac_event(struct snd_soc_= dapm_widget *w, =20 switch (event) { case SND_SOC_DAPM_PRE_PMU: + wcd938x->hphl_enable =3D true; snd_soc_component_write_field(component, WCD938X_DIGITAL_CDC_DIG_CLK_CTL, WCD938X_RXD0_CLK_EN_MASK, 0x01); @@ -507,6 +510,7 @@ static int wcd938x_codec_hphl_dac_event(struct snd_soc_= dapm_widget *w, snd_soc_component_write_field(component, WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_R, WCD938X_HPH_RES_DIV_MASK, 0x1); + wcd938x->hphl_enable =3D false; break; } =20 @@ -522,6 +526,7 @@ static int wcd938x_codec_hphr_dac_event(struct snd_soc_= dapm_widget *w, =20 switch (event) { case SND_SOC_DAPM_PRE_PMU: + wcd938x->hphr_enable =3D true; snd_soc_component_write_field(component, WCD938X_DIGITAL_CDC_DIG_CLK_CTL, WCD938X_RXD1_CLK_EN_MASK, 1); @@ -558,6 +563,7 @@ static int wcd938x_codec_hphr_dac_event(struct snd_soc_= dapm_widget *w, } break; case SND_SOC_DAPM_POST_PMD: + wcd938x->hphr_enable =3D false; snd_soc_component_write_field(component, WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_R, WCD938X_HPH_RES_DIV_MASK, 0x01); @@ -683,15 +689,12 @@ static int wcd938x_codec_aux_dac_event(struct snd_soc= _dapm_widget *w, =20 } =20 -static int wcd938x_codec_enable_hphr_pa(struct snd_soc_dapm_widget *w, - struct snd_kcontrol *kcontrol, int event) +static void wcd938x_codec_enable_hphr_pa(struct snd_soc_component *compone= nt, int enable) { - struct snd_soc_component *component =3D snd_soc_dapm_to_component(w->dapm= ); struct wcd938x_priv *wcd938x =3D snd_soc_component_get_drvdata(component); int hph_mode =3D wcd938x->hph_mode; =20 - switch (event) { - case SND_SOC_DAPM_PRE_PMU: + if (enable) { if (wcd938x->ldoh) snd_soc_component_write_field(component, WCD938X_LDOH_MODE, WCD938X_LDOH_EN_MASK, 1); @@ -714,8 +717,7 @@ static int wcd938x_codec_enable_hphr_pa(struct snd_soc_= dapm_widget *w, snd_soc_component_write_field(component, WCD938X_DIGITAL_PDM_WD_CTL1, WCD938X_PDM_WD_EN_MASK, 0x3); - break; - case SND_SOC_DAPM_POST_PMU: + /* * 7ms sleep is required if compander is enabled as per * HW requirement. If compander is disabled, then @@ -741,9 +743,10 @@ static int wcd938x_codec_enable_hphr_pa(struct snd_soc= _dapm_widget *w, snd_soc_component_write_field(component, WCD938X_ANA_RX_SUPPLIES, WCD938X_REGULATOR_MODE_MASK, WCD938X_REGULATOR_MODE_CLASS_AB); + snd_soc_component_write_field(component, WCD938X_ANA_HPH, + WCD938X_HPHR_EN_MASK, 1); enable_irq(wcd938x->hphr_pdm_wd_int); - break; - case SND_SOC_DAPM_PRE_PMD: + } else { disable_irq_nosync(wcd938x->hphr_pdm_wd_int); /* * 7ms sleep is required if compander is enabled as per @@ -759,8 +762,7 @@ static int wcd938x_codec_enable_hphr_pa(struct snd_soc_= dapm_widget *w, wcd_mbhc_event_notify(wcd938x->wcd_mbhc, WCD_EVENT_PRE_HPHR_PA_OFF); set_bit(HPH_PA_DELAY, &wcd938x->status_mask); - break; - case SND_SOC_DAPM_POST_PMD: + /* * 7ms sleep is required if compander is enabled as per * HW requirement. If compander is disabled, then @@ -784,21 +786,15 @@ static int wcd938x_codec_enable_hphr_pa(struct snd_so= c_dapm_widget *w, if (wcd938x->ldoh) snd_soc_component_write_field(component, WCD938X_LDOH_MODE, WCD938X_LDOH_EN_MASK, 0); - break; } - - return 0; } =20 -static int wcd938x_codec_enable_hphl_pa(struct snd_soc_dapm_widget *w, - struct snd_kcontrol *kcontrol, int event) +static void wcd938x_codec_enable_hphl_pa(struct snd_soc_component *compone= nt, int enable) { - struct snd_soc_component *component =3D snd_soc_dapm_to_component(w->dapm= ); struct wcd938x_priv *wcd938x =3D snd_soc_component_get_drvdata(component); int hph_mode =3D wcd938x->hph_mode; =20 - switch (event) { - case SND_SOC_DAPM_PRE_PMU: + if (enable) { if (wcd938x->ldoh) snd_soc_component_write_field(component, WCD938X_LDOH_MODE, WCD938X_LDOH_EN_MASK, 1); @@ -820,8 +816,7 @@ static int wcd938x_codec_enable_hphl_pa(struct snd_soc_= dapm_widget *w, snd_soc_component_write_field(component, WCD938X_DIGITAL_PDM_WD_CTL0, WCD938X_PDM_WD_EN_MASK, 0x3); - break; - case SND_SOC_DAPM_POST_PMU: + /* * 7ms sleep is required if compander is enabled as per * HW requirement. If compander is disabled, then @@ -847,9 +842,10 @@ static int wcd938x_codec_enable_hphl_pa(struct snd_soc= _dapm_widget *w, snd_soc_component_write_field(component, WCD938X_ANA_RX_SUPPLIES, WCD938X_REGULATOR_MODE_MASK, WCD938X_REGULATOR_MODE_CLASS_AB); + snd_soc_component_write_field(component, WCD938X_ANA_HPH, + WCD938X_HPHL_EN_MASK, 1); enable_irq(wcd938x->hphl_pdm_wd_int); - break; - case SND_SOC_DAPM_PRE_PMD: + } else { disable_irq_nosync(wcd938x->hphl_pdm_wd_int); /* * 7ms sleep is required if compander is enabled as per @@ -864,8 +860,7 @@ static int wcd938x_codec_enable_hphl_pa(struct snd_soc_= dapm_widget *w, WCD938X_HPHL_EN_MASK, 0); wcd_mbhc_event_notify(wcd938x->wcd_mbhc, WCD_EVENT_PRE_HPHL_PA_OFF); set_bit(HPH_PA_DELAY, &wcd938x->status_mask); - break; - case SND_SOC_DAPM_POST_PMD: + /* * 7ms sleep is required if compander is enabled as per * HW requirement. If compander is disabled, then @@ -889,10 +884,7 @@ static int wcd938x_codec_enable_hphl_pa(struct snd_soc= _dapm_widget *w, if (wcd938x->ldoh) snd_soc_component_write_field(component, WCD938X_LDOH_MODE, WCD938X_LDOH_EN_MASK, 0); - break; } - - return 0; } =20 static int wcd938x_codec_enable_aux_pa(struct snd_soc_dapm_widget *w, @@ -2815,14 +2807,6 @@ static const struct snd_soc_dapm_widget wcd938x_dapm= _widgets[] =3D { wcd938x_codec_enable_aux_pa, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD), - SND_SOC_DAPM_PGA_E("HPHL PGA", WCD938X_ANA_HPH, 7, 0, NULL, 0, - wcd938x_codec_enable_hphl_pa, - SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | - SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD), - SND_SOC_DAPM_PGA_E("HPHR PGA", WCD938X_ANA_HPH, 6, 0, NULL, 0, - wcd938x_codec_enable_hphr_pa, - SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | - SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD), =20 SND_SOC_DAPM_DAC_E("RDAC1", NULL, SND_SOC_NOPM, 0, 0, wcd938x_codec_hphl_dac_event, @@ -2935,8 +2919,7 @@ static const struct snd_soc_dapm_route wcd938x_audio_= map[] =3D { {"RX1", NULL, "RXCLK"}, {"RDAC1", NULL, "RX1"}, {"HPHL_RDAC", "Switch", "RDAC1"}, - {"HPHL PGA", NULL, "HPHL_RDAC"}, - {"HPHL", NULL, "HPHL PGA"}, + {"HPHL", NULL, "HPHL_RDAC"}, =20 {"IN2_HPHR", NULL, "VDD_BUCK"}, {"IN2_HPHR", NULL, "CLS_H_PORT"}, @@ -2944,8 +2927,7 @@ static const struct snd_soc_dapm_route wcd938x_audio_= map[] =3D { {"RDAC2", NULL, "RX2"}, {"RX2", NULL, "RXCLK"}, {"HPHR_RDAC", "Switch", "RDAC2"}, - {"HPHR PGA", NULL, "HPHR_RDAC"}, - {"HPHR", NULL, "HPHR PGA"}, + {"HPHR", NULL, "HPHR_RDAC"}, =20 {"IN3_AUX", NULL, "VDD_BUCK"}, {"IN3_AUX", NULL, "CLS_H_PORT"}, @@ -3290,6 +3272,19 @@ static int wcd938x_codec_free(struct snd_pcm_substre= am *substream, return wcd938x_sdw_free(wcd, substream, dai); } =20 +static int wcd938x_codec_mute_stream(struct snd_soc_dai *dai, int mute, in= t stream) +{ + struct wcd938x_priv *wcd938x =3D dev_get_drvdata(dai->dev); + struct snd_soc_component *component =3D dai->component; + + if (wcd938x->hphl_enable) + wcd938x_codec_enable_hphl_pa(component, !mute); + if (wcd938x->hphr_enable) + wcd938x_codec_enable_hphr_pa(component, !mute); + + return 0; +} + static int wcd938x_codec_set_sdw_stream(struct snd_soc_dai *dai, void *stream, int direction) { @@ -3303,6 +3298,7 @@ static int wcd938x_codec_set_sdw_stream(struct snd_so= c_dai *dai, static const struct snd_soc_dai_ops wcd938x_sdw_dai_ops =3D { .hw_params =3D wcd938x_codec_hw_params, .hw_free =3D wcd938x_codec_free, + .mute_stream =3D wcd938x_codec_mute_stream, .set_stream =3D wcd938x_codec_set_sdw_stream, }; =20 --=20 2.51.0 From nobody Tue Dec 2 01:04:48 2025 Received: from mail-qk1-f173.google.com (mail-qk1-f173.google.com [209.85.222.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 23BC92E2EF2 for ; Mon, 24 Nov 2025 06:50:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763967046; cv=none; b=Zrssmu4LgzhiZ2W2Mvx1gI7ObO/Uwj7PbKpxMBb4DhDs/qC6AeM/vNjpW4CC0KmVJbd/Pyu1TcnozwpnYqkmOnE+tBPmond9tChpijfe+m9Ci1IXdpLG7maxlLmmQdjY4X/AQEJ81oK6i9WHTy/KDzLxWl89dgvwloTWucNV5Rc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763967046; c=relaxed/simple; bh=hPxffe85SE/feRXKwYw8pMZU/39AmCqapyWMwo4D6cQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ebC3DOaGoJSe1Jnx8O96p18j4fcPyrV0pa6HZS0Q52kn3AtS1/BdcWW5I5GvBGF90v7Cw6K2UzCghzOEmfrbYCnQI4ZN4tF6AQF+E4YWJitW4yxbgssVc5iy1IwObtGgBpRtch1/5fB8E4ilxL1BJlepY0gFVTuPCqMjUtTn2pg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=marek.ca; spf=pass smtp.mailfrom=marek.ca; dkim=pass (2048-bit key) header.d=marek.ca header.i=@marek.ca header.b=bGsyp2Y0; arc=none smtp.client-ip=209.85.222.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=marek.ca Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=marek.ca Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=marek.ca header.i=@marek.ca header.b="bGsyp2Y0" Received: by mail-qk1-f173.google.com with SMTP id af79cd13be357-8b2d6df99c5so551451285a.1 for ; Sun, 23 Nov 2025 22:50:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marek.ca; s=google; t=1763967043; x=1764571843; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hBzF9N1dKK9aG8cBCXibRQcXrqo/BdkER+uqsD1fva0=; b=bGsyp2Y0ElvH/UVMAk/BWcyJ9AnJfiMuyt8Dfd16p1fJPskhLYxBS+5SP+ndYmWNtp zNK8CiYI+FezF1KkAD1fha1njF9p8KJn/h+ZwSW6LFQXx1AJZASQTlSFaC8GvoAc4fOM ll3CP5z0sez2n69Z6UPK85NHMQBwIuJxCohrZAJw9qoxUG26hn+sBzGQPxZo8aXBr1cD CQ3UjndRrfqfpFWH2jDIUimlW53uRMssPX0EDjIQdYk/3C/xWoW6C/qEWjYpm6xLyzBH JS8KfVvwVmXAG/KUND7wpf3S0ZN8RdK4CI4vDZt4Wc4BA4ENfA0DjA+qZYrPOAzsifCw 7bpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763967043; x=1764571843; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=hBzF9N1dKK9aG8cBCXibRQcXrqo/BdkER+uqsD1fva0=; b=GkQ+6bn5zs2oc8U1TZMW/uyjmIEOUVv3r+TniA+IpgBqPldBYCQ41/05nLpNCGZ346 1l3LWQ4iF4rN1qR88IDFXnQZvCTrRMs+9uWkE5Yhm42xVqmbwOgtE1IGe/IxGlemrvxw P+7OMs9PyGnJ8YEj79uyRpc+3SwgxsVaVQy+J9TUBltSknPQMazbvRlofBWQFrKccq57 51Hfx4jnmlEIMMal99pEqdzw8vi7wm9xdOr4WejFlhuqGlAOy1rgL9e8TABukCy1Hzaj 1MKBG3v6w2ZO/VOBJYLTKqVehDQaS9PCk7Ef+hDThUJ9iUOlmlg61tA2QaLTDRsljM21 9Elg== X-Forwarded-Encrypted: i=1; AJvYcCWQASSYKyzERIJMKFUmr/OwtHo3yL5c998YsI7jHhCqe4hn6PtBTtMU0dvje9J+d2adQgbR7ITi8RczmGY=@vger.kernel.org X-Gm-Message-State: AOJu0YxIRRR51qYGSj6L5bcMAt4h/KYvpj2TBZ8B87X6SI6ijfuJaWJr xU/55Jxe6Td6+TW6N27UMHD2T7Y6xtTm5VqnuA2tDw1gVelskjGH6FMViBBI5QRjN7Q= X-Gm-Gg: ASbGncvqMwXUc2Rx/kr4JGcn6iJ8hSJ0Gne4wyWQ4iQ+/X2fgj7WHeEh1XiIuhQa2ID 92jxEXPdAwS0o6ogCxJlMJmRlza5vtgzdOoLjWkyOCqio+/Ye3qdNMur3tt5yilr/wZqtxUl3CX ZXXPQu+ANeZNa386aO7IDl4XsX4VdSqAmuHREBSAPyMy8HJTdL83MxFsbtwa+77co0o9Nk47yuP ajF4HQQsU9VUDYxu2WYjKDvF5BfN6L3b+6V5Qg91SlVgyQnPHjlwxtNx9qLXwnPexdM/HCRNjgX ZFmSL9yA/mkjYKVnR38ZmkIkLDf65L3kP9kMntwQkhFULXlEH0YuVsKJjVt8inGQf2EeVX4YcSu Ezs295WmoLvP2FUMKt7u+vtx92AqnzwMFR6abFuabXPQLgLKHnUd0+PKu9zaiM4nLmQfGsg9YDi h1kiBiqrTpCGWW+SJos4BRYtHzGpevAnjkuk1E/xp79rUCecwiBfoCgmLa8Oksm8r3Hg== X-Google-Smtp-Source: AGHT+IGeadpXTYxre3q5TarwP90JExiHx4plmAto9YjMNpDKthPh+yqnWxesSrme8bdG5dYdEFE8Rw== X-Received: by 2002:a05:620a:3949:b0:8b2:f102:b907 with SMTP id af79cd13be357-8b32af2f63emr1931671485a.37.1763967042983; Sun, 23 Nov 2025 22:50:42 -0800 (PST) Received: from localhost.localdomain (modemcable125.110-19-135.mc.videotron.ca. [135.19.110.125]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8b3295db8b1sm889075185a.40.2025.11.23.22.50.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Nov 2025 22:50:41 -0800 (PST) From: Jonathan Marek To: linux-arm-msm@vger.kernel.org Cc: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , linux-sound@vger.kernel.org (open list:QCOM AUDIO (ASoC) DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 5/6] ASoC: codecs: wcd939x: fix get_swr_port behavior Date: Mon, 24 Nov 2025 01:45:58 -0500 Message-ID: <20251124064850.15419-6-jonathan@marek.ca> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251124064850.15419-1-jonathan@marek.ca> References: <20251124064850.15419-1-jonathan@marek.ca> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" For example trying to do this: amixer sset HPHL on amixer sset HPHR on Both HPHL and HPHR share the same "portidx" value. After HPHL is enabled, wcd939x_get_swr_port returns an 'on' state for HPHR as well, and nothing happens when trying to set HPHR on because it looks like it is already on. The result is audio plays only on the left side. To fix this, drop the port_enable array and use ch_mask in port_config to determine if the switch was enabled. Signed-off-by: Jonathan Marek --- sound/soc/codecs/wcd939x.c | 8 ++++---- sound/soc/codecs/wcd939x.h | 1 - 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/sound/soc/codecs/wcd939x.c b/sound/soc/codecs/wcd939x.c index 48f82a92722dd..8a95fe39792ea 100644 --- a/sound/soc/codecs/wcd939x.c +++ b/sound/soc/codecs/wcd939x.c @@ -1783,8 +1783,10 @@ static int wcd939x_get_swr_port(struct snd_kcontrol = *kcontrol, struct wcd939x_priv *wcd939x =3D snd_soc_component_get_drvdata(comp); struct wcd939x_sdw_priv *wcd =3D wcd939x->sdw_priv[mixer->shift]; unsigned int portidx =3D wcd->ch_info[mixer->reg].port_num; + u8 ch_mask =3D wcd->ch_info[mixer->reg].ch_mask; + struct sdw_port_config *port_config =3D &wcd->port_config[portidx - 1]; =20 - ucontrol->value.integer.value[0] =3D wcd->port_enable[portidx] ? 1 : 0; + ucontrol->value.integer.value[0] =3D !!(port_config->ch_mask & ch_mask); =20 return 0; } @@ -1811,9 +1813,7 @@ static int wcd939x_set_swr_port(struct snd_kcontrol *= kcontrol, struct wcd939x_sdw_priv *wcd =3D wcd939x->sdw_priv[mixer->shift]; unsigned int portidx =3D wcd->ch_info[mixer->reg].port_num; =20 - wcd->port_enable[portidx] =3D !!ucontrol->value.integer.value[0]; - - wcd939x_connect_port(wcd, portidx, mixer->reg, wcd->port_enable[portidx]); + wcd939x_connect_port(wcd, portidx, mixer->reg, !!ucontrol->value.integer.= value[0]); =20 return 1; } diff --git a/sound/soc/codecs/wcd939x.h b/sound/soc/codecs/wcd939x.h index 6bd2366587a8f..dab7ef108b485 100644 --- a/sound/soc/codecs/wcd939x.h +++ b/sound/soc/codecs/wcd939x.h @@ -899,7 +899,6 @@ struct wcd939x_sdw_priv { struct sdw_stream_runtime *sruntime; struct sdw_port_config port_config[WCD939X_MAX_SWR_PORTS]; const struct wcd_sdw_ch_info *ch_info; - bool port_enable[WCD939X_MAX_SWR_CH_IDS]; int active_ports; bool is_tx; struct wcd939x_priv *wcd939x; --=20 2.51.0 From nobody Tue Dec 2 01:04:48 2025 Received: from mail-qk1-f169.google.com (mail-qk1-f169.google.com [209.85.222.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E65182E611B for ; Mon, 24 Nov 2025 06:50:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763967050; cv=none; b=YD0JJgOKIhX4hFiVUsEXVjxXkcMo/G5S4gdYzcXmaVdZ2SUUCKc+41Pl3TwPOwmCZqygfh+XN7v8MKoZJ9OpUDeydo8du6AXsMqPMGIyiuT2JO/Nr8HCK1lX1DWUm9iZrmrVZDMB0lkG3u4EnjDbuGa+COhSFAr9Jt58520T5MM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763967050; c=relaxed/simple; bh=CDShQlU/cSjcTsIpI2njOpO2txWPLMTvYbcfH6GtBUo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lXL18c7LVMuncOKDzq843c1b+qXjf9FVM/c+yxugVFgwd7WzIWCmzOTj8zm+fzzBz+7JIZh5gfXVZi/zegwk/a8EyZBGVLahaZ/q/0EOJvcVS7JF9QFXxAEnILRpTKV84M+btk/cBZkEDzFEQTx7OubqBagmA8+E9VSphS1PkMw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=marek.ca; spf=pass smtp.mailfrom=marek.ca; dkim=pass (2048-bit key) header.d=marek.ca header.i=@marek.ca header.b=AsFMxLsQ; arc=none smtp.client-ip=209.85.222.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=marek.ca Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=marek.ca Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=marek.ca header.i=@marek.ca header.b="AsFMxLsQ" Received: by mail-qk1-f169.google.com with SMTP id af79cd13be357-8b22b1d3e7fso405455685a.3 for ; Sun, 23 Nov 2025 22:50:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marek.ca; s=google; t=1763967046; x=1764571846; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=64NexCTfBJLKpFJlS/fd0Q6ob7ab6FhTIMphcAktnfI=; b=AsFMxLsQaSEyfjz4zb1xlHCFC4f0M6/KidjnJ7VuO+oUhbMU4+hA3lRgtOL/nex9Op uQk0Ogc4pq7mxTx6+y+2GlFodvw0ZI3UnmELOZ97hYU0XVGE8LSF8SS+FGjlkE2WXrtY oRRuMaQ4UHx6inX7ueCR/Ko4gr5Fbcnb1ZyP0PeJrPHl4jyP0TqMWKEFh6iTpk5ee5Sn caNQYo1el2pvH2RQ9t/0x6lvUCgglWbRaHMWbsudNfwTiXaw/vAB6YTj2vlRVdXVSBzb yopBxLFcFNp0B9wpYEpzuxqgZtKuP3hK7IhvL6Gwv1XfQDWdBaFzRDUmGfPfF9jQWBAL IqKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763967046; x=1764571846; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=64NexCTfBJLKpFJlS/fd0Q6ob7ab6FhTIMphcAktnfI=; b=JKUQBroPHHgVS3hwpqH6Nglqha/fw6QgRrjavr/yfSsVmaDaYYOhd+/lfQncd5kcFV z5QkDr0hrbMAKRYVYr5dQCyl7sJTXUNihEeidpGR0Xq/5N6/GH86f4gbDl7q9ktUU7yj 4hpJ6/5Z6rXy71Uw/Aa4O9VuDBo+yaQyHZPomdxq1Z46Wm+0ODuHOiWsdCP5arVRwc7u TYesXglEt8vqaH2Iku2FNRRqpdFiCAyjHCczRx+6XjTfvC4l0KF2ozbhRs2yqfU15abe MQSkpFrmseuc/KJBt9uliMkCkAxWFzEwsqnthf8o6OoGz1BQe0fVZsjelp5pizNfGvSa 06sw== X-Forwarded-Encrypted: i=1; AJvYcCVGJRqwjTlYdN6E1LZqqQZ79upvs3hXzuQBpuZ588X0aERkmkowiLIszK9dCiqzl9zpTzY0BP6W0AZwVso=@vger.kernel.org X-Gm-Message-State: AOJu0YzpywNcuFRhb33wlj+fCvr9047aqP3MNPa2ymAIGSFNgKJ0CYWR +4LLNjoS6RQUy/yVrQFJ7I+bjYnTtcEr4P/g4nuv9w9AxccGZHzHuZVlYo19ogJmNvg= X-Gm-Gg: ASbGncvRGRjUZDQhiGVEfZ+Q7c6f+JLaTI6c8T6OioaOTGqYUxBUD9FArI0qqDEEvPY ugPhKecrAg6tuRH0+ifsjQbjr8YeMXmkOR1mynfhnsIVbHNM6QEOjkM2oZpXxrGL1ESZgSMBhvc KTPqMCzjz9g9Ok1PA9NyduZSitVb75rnhPuBZRrJ362tdeFVB/zBdKxe4ejda5sfBJtNtj6sDOU aVO+8Dw1+WQdll7RyjqyfGzDochGP/zOvQJVexiC+MRoDqkxZZvOvDnJz9yqxlt7at4gr74wGiv J6E5dVvFVOrxHw7CT487FJxqAOaxM4ixoitG9Y55QvdunV7ypgGAY17e8Rq0WVe8TyewsgbnWYX q5JgByyAqrdF2qhDVjp7qtF2d26ZPWTmTmmPUXD8HTzR3fPhXaW9qlojUSI0lO0HP1RseOuU6QW JJqqpUFoRaRV4kl/w7bgHFA8SKv59DCRTZRMWE0bOsPZnRBx8YDK8u2+mge+HUUW0iEw== X-Google-Smtp-Source: AGHT+IF6no5UKhBX9SHPBCL+XUi89blDXI7xfpEX7F/7tAobu7a/8TUxHIlqxsStDopfRUyd1LswXA== X-Received: by 2002:a05:620a:4606:b0:8b2:f191:2b3b with SMTP id af79cd13be357-8b33d5e2e3fmr1386347885a.67.1763967045778; Sun, 23 Nov 2025 22:50:45 -0800 (PST) Received: from localhost.localdomain (modemcable125.110-19-135.mc.videotron.ca. [135.19.110.125]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8b3295db8b1sm889075185a.40.2025.11.23.22.50.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Nov 2025 22:50:44 -0800 (PST) From: Jonathan Marek To: linux-arm-msm@vger.kernel.org Cc: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , linux-sound@vger.kernel.org (open list:QCOM AUDIO (ASoC) DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 6/6] ASoC: codecs: wcd938x: fix get_swr_port behavior Date: Mon, 24 Nov 2025 01:45:59 -0500 Message-ID: <20251124064850.15419-7-jonathan@marek.ca> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251124064850.15419-1-jonathan@marek.ca> References: <20251124064850.15419-1-jonathan@marek.ca> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" For example trying to do this: amixer sset HPHL on amixer sset HPHR on Both HPHL and HPHR share the same "portidx" value. After HPHL is enabled, wcd939x_get_swr_port returns an 'on' state for HPHR as well, and nothing happens when trying to set HPHR on because it looks like it is already on. The result is audio plays only on the left side. To fix this, drop the port_enable array and use ch_mask in port_config to determine if the switch was enabled. Signed-off-by: Jonathan Marek --- sound/soc/codecs/wcd938x.c | 9 +++++---- sound/soc/codecs/wcd938x.h | 1 - 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sound/soc/codecs/wcd938x.c b/sound/soc/codecs/wcd938x.c index cf15190dd61a4..1768209e35ea0 100644 --- a/sound/soc/codecs/wcd938x.c +++ b/sound/soc/codecs/wcd938x.c @@ -1839,14 +1839,17 @@ static int wcd938x_get_swr_port(struct snd_kcontrol= *kcontrol, struct wcd938x_priv *wcd938x =3D snd_soc_component_get_drvdata(comp); struct wcd938x_sdw_priv *wcd; struct soc_mixer_control *mixer =3D (struct soc_mixer_control *)kcontrol-= >private_value; + struct sdw_port_config *port_config; int dai_id =3D mixer->shift; - int portidx, ch_idx =3D mixer->reg; + int portidx, ch_idx =3D mixer->reg, ch_mask; =20 =20 wcd =3D wcd938x->sdw_priv[dai_id]; portidx =3D wcd->ch_info[ch_idx].port_num; + ch_mask =3D wcd->ch_info[ch_idx].ch_mask; + port_config =3D &wcd->port_config[portidx - 1]; =20 - ucontrol->value.integer.value[0] =3D wcd->port_enable[portidx]; + ucontrol->value.integer.value[0] =3D !!(port_config->ch_mask & ch_mask); =20 return 0; } @@ -1872,8 +1875,6 @@ static int wcd938x_set_swr_port(struct snd_kcontrol *= kcontrol, else enable =3D false; =20 - wcd->port_enable[portidx] =3D enable; - wcd938x_connect_port(wcd, portidx, ch_idx, enable); =20 return 1; diff --git a/sound/soc/codecs/wcd938x.h b/sound/soc/codecs/wcd938x.h index c18610466d7d8..6650c3788d6e5 100644 --- a/sound/soc/codecs/wcd938x.h +++ b/sound/soc/codecs/wcd938x.h @@ -639,7 +639,6 @@ struct wcd938x_sdw_priv { struct sdw_stream_runtime *sruntime; struct sdw_port_config port_config[WCD938X_MAX_SWR_PORTS]; const struct wcd_sdw_ch_info *ch_info; - bool port_enable[WCD938X_MAX_SWR_CH_IDS]; int active_ports; bool is_tx; struct wcd938x_priv *wcd938x; --=20 2.51.0