All of lore.kernel.org
 help / color / mirror / Atom feed
From: James Calligeros <jcalligeros99@gmail.com>
To: Liam Girdwood <lgirdwood@gmail.com>,
	Mark Brown <broonie@kernel.org>,
	 Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	 Shenghao Ding <shenghao-ding@ti.com>, Kevin Lu <kevin-lu@ti.com>,
	 Baojun Xu <baojun.xu@ti.com>, Dan Murphy <dmurphy@ti.com>,
	 Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	 Conor Dooley <conor+dt@kernel.org>,
	Shi Fu <shifu0704@thundersoft.com>,
	 Jean Delvare <jdelvare@suse.com>,
	Guenter Roeck <linux@roeck-us.net>
Cc: "Alyssa Rosenzweig" <alyssa@rosenzweig.io>,
	"Martin Povišer" <povik+lin@cutebit.org>,
	"Hector Martin" <marcan@marcan.st>,
	linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org,
	devicetree@vger.kernel.org, asahi@lists.linux.dev,
	linux-hwmon@vger.kernel.org, "Neal Gompa" <neal@gompa.dev>,
	"James Calligeros" <jcalligeros99@gmail.com>
Subject: [PATCH v3 18/20] ASoC: tas2770: Add zero-fill and pull-down controls
Date: Thu, 27 Feb 2025 22:07:45 +1000	[thread overview]
Message-ID: <20250227-apple-codec-changes-v3-18-cbb130030acf@gmail.com> (raw)
In-Reply-To: <20250227-apple-codec-changes-v3-0-cbb130030acf@gmail.com>

From: Hector Martin <marcan@marcan.st>

Expose the bits that control the behavior of the SDOUT pin when not
actively transmitting slot data. Zero-fill is useful when there is a
single amp on the SDOUT bus (e.g. Apple machines with mono speakers or a
single stereo pair, where L/R are on separate buses).

Pull-down is useful, though not perfect, when multiple amps share a
bus. It typically takes around 2 bits for the line to transition from
high to low after going Hi-Z, with the pull-down.

Reviewed-by: Neal Gompa <neal@gompa.dev>
Signed-off-by: Hector Martin <marcan@marcan.st>
Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
---
 sound/soc/codecs/tas2770.c | 17 +++++++++++++++++
 sound/soc/codecs/tas2770.h | 13 +++++++++++++
 2 files changed, 30 insertions(+)

diff --git a/sound/soc/codecs/tas2770.c b/sound/soc/codecs/tas2770.c
index 787356a4f4256627a55e35c851a9e78a1cf29771..252c65ae839a28fdaf7aaa39faf49891905741a0 100644
--- a/sound/soc/codecs/tas2770.c
+++ b/sound/soc/codecs/tas2770.c
@@ -632,6 +632,20 @@ static int tas2770_codec_probe(struct snd_soc_component *component)
 			return ret;
 	}
 
+	ret = snd_soc_component_update_bits(component, TAS2770_TDM_CFG_REG4,
+					    TAS2770_TDM_CFG_REG4_TX_FILL,
+					    tas2770->sdout_zfill ? 0 :
+					    TAS2770_TDM_CFG_REG4_TX_FILL);
+	if (ret < 0)
+		return ret;
+
+	ret = snd_soc_component_update_bits(component, TAS2770_DIN_PD,
+					    TAS2770_DIN_PD_SDOUT,
+					    tas2770->sdout_pd ?
+					    TAS2770_DIN_PD_SDOUT : 0);
+	if (ret < 0)
+		return ret;
+
 	return 0;
 }
 
@@ -771,6 +785,9 @@ static int tas2770_parse_dt(struct device *dev, struct tas2770_priv *tas2770)
 		tas2770->v_sense_slot = -1;
 	}
 
+	tas2770->sdout_pd = fwnode_property_read_bool(dev->fwnode, "ti,sdout-pull-down");
+	tas2770->sdout_zfill = fwnode_property_read_bool(dev->fwnode, "ti,sdout-zero-fill");
+
 	tas2770->sdz_gpio = devm_gpiod_get_optional(dev, "shutdown", GPIOD_OUT_HIGH);
 	if (IS_ERR(tas2770->sdz_gpio)) {
 		if (PTR_ERR(tas2770->sdz_gpio) == -EPROBE_DEFER)
diff --git a/sound/soc/codecs/tas2770.h b/sound/soc/codecs/tas2770.h
index f75f40781ab136cccbe1c272f7129ddd3e4a22a3..7da60d2746e8b03faa9d17319c4c41cad7f8cdbd 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)
@@ -110,6 +118,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 */
@@ -138,6 +149,8 @@ struct tas2770_priv {
 	struct device *dev;
 	int v_sense_slot;
 	int i_sense_slot;
+	bool sdout_pd;
+	bool sdout_zfill;
 	bool dac_powered;
 	bool unmuted;
 };

-- 
2.48.1


  parent reply	other threads:[~2025-02-27 12:11 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-27 12:07 [PATCH v3 00/20] ASoC: tas27{64,70}: improve support for Apple codec variants James Calligeros
2025-02-27 12:07 ` [PATCH v3 01/20] ASoC: dt-bindings: tas27xx: add compatible for SN012776 James Calligeros
2025-02-27 12:07 ` [PATCH v3 02/20] ASoC: dt-bindings: tas2770: add compatible for TAS5770L James Calligeros
2025-02-27 12:07 ` [PATCH v3 03/20] ASoC: tas2764: Extend driver to SN012776 James Calligeros
2025-02-27 12:07 ` [PATCH v3 04/20] ASoC: tas2764: Add control concerning overcurrent events James Calligeros
2025-02-27 12:07 ` [PATCH v3 05/20] ASoC: tas2770: Factor out set_ivsense_slots James Calligeros
2025-02-27 12:07 ` [PATCH v3 06/20] ASoC: tas2770: Fix and redo I/V sense TDM slot setting logic James Calligeros
2025-02-27 12:07 ` [PATCH v3 07/20] ASoC: tas2764: Reinit cache on part reset James Calligeros
2025-02-27 14:09   ` Mark Brown
2025-02-27 12:07 ` [PATCH v3 08/20] ASoC: dt-bindings: tas27xx: document ti,sdout-force-zero-mask property James Calligeros
2025-02-28 20:22   ` Rob Herring (Arm)
2025-02-27 12:07 ` [PATCH v3 09/20] ASoC: tas2764: Configure zeroing of SDOUT slots James Calligeros
2025-02-27 12:07 ` [PATCH v3 10/20] ASoC: tas2764: Apply Apple quirks James Calligeros
2025-02-27 12:07 ` [PATCH v3 11/20] ASoC: tas2764: Raise regmap range maximum James Calligeros
2025-02-27 12:07 ` [PATCH v3 12/20] ASoC: tas2770: expose die temp to hwmon James Calligeros
2025-02-27 12:45   ` Guenter Roeck
2025-02-27 14:04     ` Mark Brown
2025-02-27 12:07 ` [PATCH v3 13/20] ASoC: tas2764: " James Calligeros
2025-02-27 12:07 ` [PATCH v3 14/20] ASoC: tas2764: Crop SDOUT zero-out mask based on BCLK ratio James Calligeros
2025-02-27 16:22   ` Mark Brown
2025-02-27 12:07 ` [PATCH v3 15/20] ASoC: tas2764: Enable main IRQs James Calligeros
2025-02-27 16:23   ` Mark Brown
2025-02-27 21:58     ` James Calligeros
2025-02-28 13:53       ` Mark Brown
2025-02-27 12:07 ` [PATCH v3 16/20] ASoC: tas2770: Power cycle amp on ISENSE/VSENSE change James Calligeros
2025-02-27 12:07 ` [PATCH v3 17/20] ASoC: dt-bindings: tas2770: add flags for SDOUT pulldown and zero-fill James Calligeros
2025-03-04 13:50   ` Rob Herring
2025-03-05  1:19     ` James Calligeros
2025-03-05 13:22       ` Rob Herring
2025-03-07  6:18         ` James Calligeros
2025-03-07 20:51           ` Rob Herring
2025-03-10  9:30             ` James Calligeros
2025-03-12 12:58               ` Rob Herring
2025-03-13  0:49                 ` James Calligeros
2025-03-14 13:23                 ` Martin Povišer
2025-02-27 12:07 ` James Calligeros [this message]
2025-02-27 12:07 ` [PATCH v3 19/20] ASoC: tas2770: Support setting the PDM TX slot James Calligeros
2025-02-27 12:07 ` [PATCH v3 20/20] ASoC: tas2770: Set the SDOUT polarity correctly James Calligeros
2025-03-14 15:52 ` (subset) [PATCH v3 00/20] ASoC: tas27{64,70}: improve support for Apple codec variants Mark Brown
2025-04-14 13:56 ` Mark Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250227-apple-codec-changes-v3-18-cbb130030acf@gmail.com \
    --to=jcalligeros99@gmail.com \
    --cc=alyssa@rosenzweig.io \
    --cc=asahi@lists.linux.dev \
    --cc=baojun.xu@ti.com \
    --cc=broonie@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dmurphy@ti.com \
    --cc=jdelvare@suse.com \
    --cc=kevin-lu@ti.com \
    --cc=krzk+dt@kernel.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sound@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=marcan@marcan.st \
    --cc=neal@gompa.dev \
    --cc=perex@perex.cz \
    --cc=povik+lin@cutebit.org \
    --cc=robh@kernel.org \
    --cc=shenghao-ding@ti.com \
    --cc=shifu0704@thundersoft.com \
    --cc=tiwai@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.