From nobody Mon Feb 9 09:32:39 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (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 4CE182DE703 for ; Tue, 9 Dec 2025 09:32:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765272746; cv=none; b=LA6nhetZdpKP98VoNWunc+B92RlTKrTC85dDHoRJLgwOUgj68E3Msa5Qpt4Al03M16/0bchti9DXCq5eTPx/54A1Ye5bcEoLSNsFVvs5MmC8HowdJTzEDp73TLUlAW00dWh4jZW7RWv39vC+pv2BiLSXB14B0oZYi8bdNjqEa+c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765272746; c=relaxed/simple; bh=hQ3yIQ+LRbuFbg4idC7Bt8j/T1Iri2PmTgdBl9Lz8Vw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mIcDVe3mQ48NOkY3WYp/JitKhQ661un3fiHhEiKn72Ru3CCaG1wG+j5cnqQ8Gj2CBqjbC1eFmIkkeoYMzprTjAgq//6N7Jy9/B5zmuN9Snr3XopDO9oksUV6HuTEf2GgzOMIX2xWdYPD6lMFOj01677r0X7326fbQlph/7VV5Mc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=FvFVeafZ; arc=none smtp.client-ip=209.85.216.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="FvFVeafZ" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-349b711d106so2129250a91.1 for ; Tue, 09 Dec 2025 01:32:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765272744; x=1765877544; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=sytcPbDCFIWJAyTshVfbcn49iCD+Fu/IyW5F/eizSLg=; b=FvFVeafZckq03GfFuwKbU9C/u/VSTKUq3I6XzbGrVdxdsHNQLFwECM4CSBgZkWrnbv KqPzsY2d6hlqXnDnL/BGI9Ik581eosTEI3CfXHl6nMZ5fQSxgUMMPeLpsNZNlUN7IGJo J8UgRBm50o9Z4JHThaW0IAdSVOtzbsBDIsfMutPsLoPxWe1idMmhIcLb+Ipivs+449XS 7+kCXtvnz86QDkHrSX2gj8SjGieaTlaMlu626BslqBEGpaew0154Xy+bGi0E4BkwUAvV FZLg2XMSbQBI5Znb6JrBwmAe9q+iXanhvQFOOx35l2ZndL2ASk0OqtDqEyvsJWE1E8Xe 8rHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765272744; x=1765877544; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=sytcPbDCFIWJAyTshVfbcn49iCD+Fu/IyW5F/eizSLg=; b=or6T2xPzbRjXvoQj3WU9XhDm3bx5lfGgWihruFn1sX3YLpq8XseyuKzwYZ5/nlvnpD CUrOKSYjFNbHN/ehQLXergxq9OKP5MwXqltiNMRrYV54Yc0y3c8JxY/Nm8RbDWUV7FQJ CFbsj7SwgdeJ6JapHNU7bpE9d+lx7a5RqHsDznt73ylN+DT41s7APZrh+/KZJ4DF4Ce0 gLN9fnm9xKgrhNYuzHoqODlZ0oetEWG4oe5zhlOKbZG7dFEa0uYexEPKwVBNnUYl5OmW GY6/90U60BpcNh8cNbBt6WFe4fSJmOQ5nXp6BMy5cJzd0v52SbqnmrYDDs5TRUJuFYmh vPrA== X-Forwarded-Encrypted: i=1; AJvYcCV7XpOXpZ5f7SsdoQaV7BP/G5cEcNJ6Du9cWKH0FfQLMTwj6Iv0s2pZvcIh8bRbqut4DQi8n24XSdrIzTs=@vger.kernel.org X-Gm-Message-State: AOJu0YxXnXKbN/ppTKeI0HkDu9aIs0zxgl8d+kA60mZKchxXmH9mWoJq NCssAIHCPCV2Pty1hbwkXw2bVec1sSOQ5jXkCFRcSsU8EqBxYHM87QzB X-Gm-Gg: ASbGncs5CgDOw0lhkYmjW7+oXDUqbl3BLQfIr3jr53zswXVuKWn9BE3XFpJpfQXFcDf Jaq5dRW5sO9kVuqFlXgnkzIr74xTx/I1P2HH25v9mbgcxALAVpdSinUTkTs3ogNOqn5w067hq+t nxJa3znGMCt6jR5DMXQaog55XvBm7twvFQuOBOICt1TMPUJLPIDf9dojAEH9jf2WubR2NCOaYeY 0GxbGfHC0AZ1mCsEb2c1FU96XPDlNoXkwg1MybRx2xvilZaCOYV+vy3RpmqZJoLZ4dzmjPSTyVM 6G+faAZU+j7IOSvQDgU/M8EYMJzlg+llZq0kdjxh6DAh+oTV3yivOE3FLWYXXHK2B+YDDleKXZK cwCCI1udIrRSn2H9rg3MhnuptdbebflSqT1jpTZG2vJQ84Jm6ASDTpH1J3QCR8Jm7EsiGLzfXnc 32FW6IxeFCj9VGygoOqQPBd7A8qR/IBVWZYqI6IvXwa5ceac/UjRsoC4jLqacDTQtCz3jtRMshh 1Pv/8DXNpTWl7yNsdD/y77CpdvJtAmCtpQ5pW4QK0mAS+dINkrmGl1tfE6UXg/8vrMKv+iytuD4 mN72Aa+1+a/YX6UrQQKQMZ5D7MXFmvrrYp1f56hWvHhwLnWH7xFBQwarM0V23g== X-Google-Smtp-Source: AGHT+IHshWKoIvDGYXvDIhmbIHXx+eRzKnkbv3j7ltjnhSQGKLSVw2gL9b8YPyFcCo5W0olsRE/M9w== X-Received: by 2002:a17:90b:390f:b0:340:f05a:3ed3 with SMTP id 98e67ed59e1d1-349a268665bmr9074422a91.17.1765272744486; Tue, 09 Dec 2025 01:32:24 -0800 (PST) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-34a49658704sm1800408a91.6.2025.12.09.01.32.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Dec 2025 01:32:24 -0800 (PST) From: James Calligeros Date: Tue, 09 Dec 2025 19:31:20 +1000 Subject: [PATCH 7/7] ASoC: tas2770: expose SDOUT bus keeper via set_tdm_idle Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251209-tdm-idle-slots-v1-7-38dabf6bc01e@gmail.com> References: <20251209-tdm-idle-slots-v1-0-38dabf6bc01e@gmail.com> In-Reply-To: <20251209-tdm-idle-slots-v1-0-38dabf6bc01e@gmail.com> To: Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Kuninori Morimoto , Shengjiu Wang , Jaroslav Kysela , Takashi Iwai , Shenghao Ding , Kevin Lu , Baojun Xu Cc: linux-sound@vger.kernel.org, devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, asahi@lists.linux.dev, James Calligeros X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4520; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=hQ3yIQ+LRbuFbg4idC7Bt8j/T1Iri2PmTgdBl9Lz8Vw=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDJnmb7IPlyhL6Uu6eG8tPd/1Q3SR2v6KynBNJ+Oqo+syC zJyDzN3TGRhEONisBRTZNnQJOQx24jtZr9I5V6YOaxMIEOkRRoYgICFgS83Ma/USMdIz1TbUM/Q UMdYx4iBi1MApvpPJsM/020srMGnkqR/HGyTX+x85Moq67CKyEOXP/GGJqm+Fr2/ipFhuf4ktV0 Fqk9nqfjJLHtnY16gJWL952ahxyKW61suer3kAQA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 TAS2770 includes a bus keeper which can be used to control the behaviour of the SDOUT pin during specified TDM slots. The chip can either pull the pin to ground, actively transmit zeroes, or keep the pin floating (default/uninitialised behaviour). Expose the bus keeper via the set_tdm_idle DAI op so that it can be configured by consumers. Signed-off-by: James Calligeros --- sound/soc/codecs/tas2770.c | 75 +++++++++++++++++++++++++ sound/soc/codecs/tas2770.h | 12 ++++ 2 files changed, 87 insertions(+) diff --git a/sound/soc/codecs/tas2770.c b/sound/soc/codecs/tas2770.c index 6f878b01716f..d4d7d056141b 100644 --- a/sound/soc/codecs/tas2770.c +++ b/sound/soc/codecs/tas2770.c @@ -492,11 +492,86 @@ static int tas2770_set_dai_tdm_slot(struct snd_soc_da= i *dai, return 0; } =20 +static int tas2770_set_dai_tdm_idle(struct snd_soc_dai *dai, + unsigned int tx_mask, + unsigned int rx_mask, + int tx_mode, int rx_mode) +{ + struct snd_soc_component *component =3D dai->component; + struct tas2770_priv *tas2770 =3D snd_soc_component_get_drvdata(component); + int ret; + + /* We don't support setting anything for SDIN */ + if (rx_mode) + return -EOPNOTSUPP; + + if (tas2770->idle_tx_mode =3D=3D tx_mode) + return 0; + + switch (tx_mode) { + case SND_SOC_DAI_TDM_IDLE_PULLDOWN: + ret =3D snd_soc_component_update_bits(component, TAS2770_DIN_PD, + TAS2770_DIN_PD_SDOUT, + TAS2770_DIN_PD_SDOUT); + if (ret) + return ret; + + break; + case SND_SOC_DAI_TDM_IDLE_ZERO: + ret =3D snd_soc_component_update_bits(component, TAS2770_TDM_CFG_REG4, + TAS2770_TDM_CFG_REG4_TX_KEEPER, + TAS2770_TDM_CFG_REG4_TX_KEEPER); + if (ret) + return ret; + + ret =3D snd_soc_component_update_bits(component, TAS2770_TDM_CFG_REG4, + TAS2770_TDM_CFG_REG4_TX_FILL, 0); + if (ret) + return ret; + + break; + case SND_SOC_DAI_TDM_IDLE_HIZ: + ret =3D snd_soc_component_update_bits(component, TAS2770_TDM_CFG_REG4, + TAS2770_TDM_CFG_REG4_TX_KEEPER, + TAS2770_TDM_CFG_REG4_TX_KEEPER); + if (ret) + return ret; + + ret =3D snd_soc_component_update_bits(component, TAS2770_TDM_CFG_REG4, + TAS2770_TDM_CFG_REG4_TX_FILL, + TAS2770_TDM_CFG_REG4_TX_FILL); + if (ret) + return ret; + + break; + case SND_SOC_DAI_TDM_IDLE_OFF: + ret =3D snd_soc_component_update_bits(component, TAS2770_DIN_PD, + TAS2770_DIN_PD_SDOUT, 0); + if (ret) + return ret; + + ret =3D snd_soc_component_update_bits(component, TAS2770_TDM_CFG_REG4, + TAS2770_TDM_CFG_REG4_TX_KEEPER, 0); + if (ret) + return ret; + + break; + + default: + return -EOPNOTSUPP; + } + + tas2770->idle_tx_mode =3D tx_mode; + + return 0; +} + static const struct snd_soc_dai_ops tas2770_dai_ops =3D { .mute_stream =3D tas2770_mute, .hw_params =3D tas2770_hw_params, .set_fmt =3D tas2770_set_fmt, .set_tdm_slot =3D tas2770_set_dai_tdm_slot, + .set_tdm_idle =3D tas2770_set_dai_tdm_idle, .no_capture_mute =3D 1, }; =20 diff --git a/sound/soc/codecs/tas2770.h b/sound/soc/codecs/tas2770.h index 3fd2e7003c50..102040b6bdf8 100644 --- a/sound/soc/codecs/tas2770.h +++ b/sound/soc/codecs/tas2770.h @@ -67,6 +67,14 @@ #define TAS2770_TDM_CFG_REG3_RXS_SHIFT 0x4 #define TAS2770_TDM_CFG_REG3_30_MASK GENMASK(3, 0) #define TAS2770_TDM_CFG_REG3_30_SHIFT 0 + /* TDM Configuration Reg4 */ +#define TAS2770_TDM_CFG_REG4 TAS2770_REG(0X0, 0x0E) +#define TAS2770_TDM_CFG_REG4_TX_LSB_CFG BIT(7) +#define TAS2770_TDM_CFG_REG4_TX_KEEPER_CFG BIT(6) +#define TAS2770_TDM_CFG_REG4_TX_KEEPER BIT(5) +#define TAS2770_TDM_CFG_REG4_TX_FILL BIT(4) +#define TAS2770_TDM_CFG_REG4_TX_OFFSET_MASK GENMASK(3, 1) +#define TAS2770_TDM_CFG_REG4_TX_EDGE_FALLING BIT(0) /* TDM Configuration Reg5 */ #define TAS2770_TDM_CFG_REG5 TAS2770_REG(0X0, 0x0F) #define TAS2770_TDM_CFG_REG5_VSNS_MASK BIT(6) @@ -115,6 +123,9 @@ #define TAS2770_TEMP_LSB TAS2770_REG(0X0, 0x2A) /* Interrupt Configuration */ #define TAS2770_INT_CFG TAS2770_REG(0X0, 0x30) + /* Data In Pull-Down */ +#define TAS2770_DIN_PD TAS2770_REG(0X0, 0x31) +#define TAS2770_DIN_PD_SDOUT BIT(7) /* Misc IRQ */ #define TAS2770_MISC_IRQ TAS2770_REG(0X0, 0x32) /* Clock Configuration */ @@ -146,6 +157,7 @@ struct tas2770_priv { int pdm_slot; bool dac_powered; bool unmuted; + int idle_tx_mode; }; =20 #endif /* __TAS2770__ */ --=20 2.52.0