Devicetree
 help / color / mirror / Atom feed
* [PATCH 0/5] ASoC: pcm179x: Add support for pcm1795 and pcm1796
@ 2026-10-02  9:49 Roman Smrž
  2026-10-02  9:49 ` [PATCH 1/5] ASoC: dt-bindings: Add ti,pcm1795 and ti,pcm1796 Roman Smrž
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Roman Smrž @ 2026-10-02  9:49 UTC (permalink / raw)
  To: Martin Povišer, Lars-Peter Clausen, Nuno Sá,
	Peter Rosin, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Shenghao Ding, Kevin Lu,
	Baojun Xu, Sen Wang, Jaroslav Kysela, Takashi Iwai
  Cc: patches, linux-sound, asahi, devicetree, linux-kernel,
	Roman Smrž, linux-amarula, Michael Trimarchi

This adds support for the PCM1795 and the PCM1796 to the pcm179x driver.

The PCM1795 is register compatible with the PCM1792A, but it encodes two
of the register 18 FMT[2:0] values differently, so the format encoding is
described with a per-codec table instead of the width switches. Only the
PCM1795 has real 32-bit formats; on the PCM1792A and the PCM1796 a 32-bit
container keeps the 24-bit code, as it always has. Left-justified, which
the driver accepted but never programmed, is added on the way.

This series is based on a work done in 2016 by my collegue:
https://lore.kernel.org/all/20160311232856.GC27257@panicking/

Signed-off-by: Roman Smrž <roman@amarulasolutions.com>
---
Michael Trimarchi (2):
      ASoC: dt-bindings: Add ti,pcm1795 and ti,pcm1796
      ASoC: pcm179x: Add support for pcm1975

Roman Smrž (3):
      ASoC: pcm179x: Refactor regmap value lookup
      ASoC: pcm179x: Add left-justified formats for pcm1792a
      ASoC: pcm179x: Add pcm1796 as compatible with pcm1792a

 .../devicetree/bindings/sound/trivial-codec.yaml   |   2 +
 sound/soc/codecs/pcm179x-i2c.c                     |   2 +
 sound/soc/codecs/pcm179x-spi.c                     |   2 +
 sound/soc/codecs/pcm179x.c                         | 116 +++++++++++++++------
 sound/soc/codecs/pcm179x.h                         |  12 ++-
 5 files changed, 101 insertions(+), 33 deletions(-)
---
base-commit: ce1e0223d8ad4211275c82a17ed6d43ab81e13d9
change-id: 20261002-work-705f20b60284

Best regards,
--  
Roman Smrž <roman@amarulasolutions.com>


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/5] ASoC: dt-bindings: Add ti,pcm1795 and ti,pcm1796
  2026-10-02  9:49 [PATCH 0/5] ASoC: pcm179x: Add support for pcm1795 and pcm1796 Roman Smrž
@ 2026-10-02  9:49 ` Roman Smrž
  2026-10-03 14:34   ` Krzysztof Kozlowski
  2026-10-02  9:49 ` [PATCH 2/5] ASoC: pcm179x: Refactor regmap value lookup Roman Smrž
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Roman Smrž @ 2026-10-02  9:49 UTC (permalink / raw)
  To: Martin Povišer, Lars-Peter Clausen, Nuno Sá,
	Peter Rosin, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Shenghao Ding, Kevin Lu,
	Baojun Xu, Sen Wang, Jaroslav Kysela, Takashi Iwai
  Cc: patches, linux-sound, asahi, devicetree, linux-kernel,
	Roman Smrž, linux-amarula, Michael Trimarchi

From: Michael Trimarchi <michael@amarulasolutions.com>

The pcm179x driver gains support for the PCM1795 and the PCM1796. Both
are register compatible with the PCM1792A, so they belong in the trivial
codec schema.

pcm179x.txt no longer exists upstream, it was folded into
trivial-codec.yaml when the trivial codec bindings were consolidated.

Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
Signed-off-by: Roman Smrž <roman@amarulasolutions.com>
---
 Documentation/devicetree/bindings/sound/trivial-codec.yaml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Documentation/devicetree/bindings/sound/trivial-codec.yaml b/Documentation/devicetree/bindings/sound/trivial-codec.yaml
index 9a35dfb17349..a24a21c855e1 100644
--- a/Documentation/devicetree/bindings/sound/trivial-codec.yaml
+++ b/Documentation/devicetree/bindings/sound/trivial-codec.yaml
@@ -36,6 +36,8 @@ properties:
       - sdw3019f836300
       - ti,pcm1789
       - ti,pcm1792a
+      - ti,pcm1795
+      - ti,pcm1796
       - ti,pcm5102a
       - wlf,wm8510
       - wlf,wm8523

-- 
2.55.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/5] ASoC: pcm179x: Refactor regmap value lookup
  2026-10-02  9:49 [PATCH 0/5] ASoC: pcm179x: Add support for pcm1795 and pcm1796 Roman Smrž
  2026-10-02  9:49 ` [PATCH 1/5] ASoC: dt-bindings: Add ti,pcm1795 and ti,pcm1796 Roman Smrž
@ 2026-10-02  9:49 ` Roman Smrž
  2026-10-02  9:49 ` [PATCH 3/5] ASoC: pcm179x: Add left-justified formats for pcm1792a Roman Smrž
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 10+ messages in thread
From: Roman Smrž @ 2026-10-02  9:49 UTC (permalink / raw)
  To: Martin Povišer, Lars-Peter Clausen, Nuno Sá,
	Peter Rosin, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Shenghao Ding, Kevin Lu,
	Baojun Xu, Sen Wang, Jaroslav Kysela, Takashi Iwai
  Cc: patches, linux-sound, asahi, devicetree, linux-kernel,
	Roman Smrž, linux-amarula

Use a table lookup to find values for fmt register instead of switch
statements to prepare for additional codec variants of the same family.

Signed-off-by: Roman Smrž <roman@amarulasolutions.com>
---
 sound/soc/codecs/pcm179x.c | 60 +++++++++++++++++++++++-----------------------
 1 file changed, 30 insertions(+), 30 deletions(-)

diff --git a/sound/soc/codecs/pcm179x.c b/sound/soc/codecs/pcm179x.c
index cb70927872aa..61b87dab3266 100644
--- a/sound/soc/codecs/pcm179x.c
+++ b/sound/soc/codecs/pcm179x.c
@@ -65,6 +65,31 @@ struct pcm179x_private {
 	unsigned int rate;
 };
 
+struct pcm179x_fmt_table {
+	unsigned int fmt;	/* SND_SOC_DAIFMT_* */
+	unsigned int width;	/* sample width in bits */
+	unsigned int value;	/* FMT[2:0] */
+};
+
+static const struct pcm179x_fmt_table pcm1792a_fmt[] = {
+	{ SND_SOC_DAIFMT_RIGHT_J, 16, 0 },
+	{ SND_SOC_DAIFMT_RIGHT_J, 24, 2 },
+	{ SND_SOC_DAIFMT_RIGHT_J, 32, 2 },
+	{ SND_SOC_DAIFMT_I2S,     16, 4 },
+	{ SND_SOC_DAIFMT_I2S,     24, 5 },
+	{ SND_SOC_DAIFMT_I2S,     32, 5 },
+};
+
+static int pcm179x_fmt_value(struct pcm179x_private *priv, unsigned int fmt,
+			     unsigned int width)
+{
+	for (unsigned int i = 0; i < ARRAY_SIZE(pcm1792a_fmt); i++)
+		if (pcm1792a_fmt[i].fmt == fmt && pcm1792a_fmt[i].width == width)
+			return pcm1792a_fmt[i].value;
+
+	return -EINVAL;
+}
+
 static int pcm179x_set_dai_fmt(struct snd_soc_dai *codec_dai,
                              unsigned int format)
 {
@@ -96,40 +121,15 @@ static int pcm179x_hw_params(struct snd_pcm_substream *substream,
 {
 	struct snd_soc_component *component = dai->component;
 	struct pcm179x_private *priv = snd_soc_component_get_drvdata(component);
-	int val = 0, ret;
+	int val, ret;
 
 	priv->rate = params_rate(params);
 
-	switch (priv->format & SND_SOC_DAIFMT_FORMAT_MASK) {
-	case SND_SOC_DAIFMT_RIGHT_J:
-		switch (params_width(params)) {
-		case 24:
-		case 32:
-			val = 2;
-			break;
-		case 16:
-			val = 0;
-			break;
-		default:
-			return -EINVAL;
-		}
-		break;
-	case SND_SOC_DAIFMT_I2S:
-		switch (params_width(params)) {
-		case 24:
-		case 32:
-			val = 5;
-			break;
-		case 16:
-			val = 4;
-			break;
-		default:
-			return -EINVAL;
-		}
-		break;
-	default:
+	val = pcm179x_fmt_value(priv, priv->format & SND_SOC_DAIFMT_FORMAT_MASK,
+				params_width(params));
+	if (val < 0) {
 		dev_err(component->dev, "Invalid DAI format\n");
-		return -EINVAL;
+		return val;
 	}
 
 	val = val << PCM179X_FMT_SHIFT | PCM179X_ATLD_ENABLE;

-- 
2.55.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/5] ASoC: pcm179x: Add left-justified formats for pcm1792a
  2026-10-02  9:49 [PATCH 0/5] ASoC: pcm179x: Add support for pcm1795 and pcm1796 Roman Smrž
  2026-10-02  9:49 ` [PATCH 1/5] ASoC: dt-bindings: Add ti,pcm1795 and ti,pcm1796 Roman Smrž
  2026-10-02  9:49 ` [PATCH 2/5] ASoC: pcm179x: Refactor regmap value lookup Roman Smrž
@ 2026-10-02  9:49 ` Roman Smrž
  2026-10-02  9:57   ` sashiko-bot
  2026-10-02  9:49 ` [PATCH 4/5] ASoC: pcm179x: Add pcm1796 as compatible with pcm1792a Roman Smrž
  2026-10-02  9:49 ` [PATCH 5/5] ASoC: pcm179x: Add support for pcm1975 Roman Smrž
  4 siblings, 1 reply; 10+ messages in thread
From: Roman Smrž @ 2026-10-02  9:49 UTC (permalink / raw)
  To: Martin Povišer, Lars-Peter Clausen, Nuno Sá,
	Peter Rosin, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Shenghao Ding, Kevin Lu,
	Baojun Xu, Sen Wang, Jaroslav Kysela, Takashi Iwai
  Cc: patches, linux-sound, asahi, devicetree, linux-kernel,
	Roman Smrž, linux-amarula

The left-justified format is supported per the datasheet, but was
missing in the table.

Signed-off-by: Roman Smrž <roman@amarulasolutions.com>
---
 sound/soc/codecs/pcm179x.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sound/soc/codecs/pcm179x.c b/sound/soc/codecs/pcm179x.c
index 61b87dab3266..c059e410cbbe 100644
--- a/sound/soc/codecs/pcm179x.c
+++ b/sound/soc/codecs/pcm179x.c
@@ -75,6 +75,8 @@ static const struct pcm179x_fmt_table pcm1792a_fmt[] = {
 	{ SND_SOC_DAIFMT_RIGHT_J, 16, 0 },
 	{ SND_SOC_DAIFMT_RIGHT_J, 24, 2 },
 	{ SND_SOC_DAIFMT_RIGHT_J, 32, 2 },
+	{ SND_SOC_DAIFMT_LEFT_J,  24, 3 },
+	{ SND_SOC_DAIFMT_LEFT_J,  32, 3 },
 	{ SND_SOC_DAIFMT_I2S,     16, 4 },
 	{ SND_SOC_DAIFMT_I2S,     24, 5 },
 	{ SND_SOC_DAIFMT_I2S,     32, 5 },

-- 
2.55.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 4/5] ASoC: pcm179x: Add pcm1796 as compatible with pcm1792a
  2026-10-02  9:49 [PATCH 0/5] ASoC: pcm179x: Add support for pcm1795 and pcm1796 Roman Smrž
                   ` (2 preceding siblings ...)
  2026-10-02  9:49 ` [PATCH 3/5] ASoC: pcm179x: Add left-justified formats for pcm1792a Roman Smrž
@ 2026-10-02  9:49 ` Roman Smrž
  2026-10-02  9:57   ` sashiko-bot
  2026-10-03 14:35   ` Krzysztof Kozlowski
  2026-10-02  9:49 ` [PATCH 5/5] ASoC: pcm179x: Add support for pcm1975 Roman Smrž
  4 siblings, 2 replies; 10+ messages in thread
From: Roman Smrž @ 2026-10-02  9:49 UTC (permalink / raw)
  To: Martin Povišer, Lars-Peter Clausen, Nuno Sá,
	Peter Rosin, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Shenghao Ding, Kevin Lu,
	Baojun Xu, Sen Wang, Jaroslav Kysela, Takashi Iwai
  Cc: patches, linux-sound, asahi, devicetree, linux-kernel,
	Roman Smrž, linux-amarula

The PCM1796 is fully compatible with the PCM1792A.

Signed-off-by: Roman Smrž <roman@amarulasolutions.com>
---
 sound/soc/codecs/pcm179x-i2c.c | 1 +
 sound/soc/codecs/pcm179x-spi.c | 1 +
 2 files changed, 2 insertions(+)

diff --git a/sound/soc/codecs/pcm179x-i2c.c b/sound/soc/codecs/pcm179x-i2c.c
index 5337bcc7c62c..e81e20fadadf 100644
--- a/sound/soc/codecs/pcm179x-i2c.c
+++ b/sound/soc/codecs/pcm179x-i2c.c
@@ -32,6 +32,7 @@ static int pcm179x_i2c_probe(struct i2c_client *client)
 #ifdef CONFIG_OF
 static const struct of_device_id pcm179x_of_match[] = {
 	{ .compatible = "ti,pcm1792a", },
+	{ .compatible = "ti,pcm1796", },
 	{ }
 };
 MODULE_DEVICE_TABLE(of, pcm179x_of_match);
diff --git a/sound/soc/codecs/pcm179x-spi.c b/sound/soc/codecs/pcm179x-spi.c
index 192fee90c971..e5e4b942acfc 100644
--- a/sound/soc/codecs/pcm179x-spi.c
+++ b/sound/soc/codecs/pcm179x-spi.c
@@ -31,6 +31,7 @@ static int pcm179x_spi_probe(struct spi_device *spi)
 
 static const struct of_device_id pcm179x_of_match[] __maybe_unused = {
 	{ .compatible = "ti,pcm1792a", },
+	{ .compatible = "ti,pcm1796" },
 	{ }
 };
 MODULE_DEVICE_TABLE(of, pcm179x_of_match);

-- 
2.55.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5/5] ASoC: pcm179x: Add support for pcm1975
  2026-10-02  9:49 [PATCH 0/5] ASoC: pcm179x: Add support for pcm1795 and pcm1796 Roman Smrž
                   ` (3 preceding siblings ...)
  2026-10-02  9:49 ` [PATCH 4/5] ASoC: pcm179x: Add pcm1796 as compatible with pcm1792a Roman Smrž
@ 2026-10-02  9:49 ` Roman Smrž
  4 siblings, 0 replies; 10+ messages in thread
From: Roman Smrž @ 2026-10-02  9:49 UTC (permalink / raw)
  To: Martin Povišer, Lars-Peter Clausen, Nuno Sá,
	Peter Rosin, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Shenghao Ding, Kevin Lu,
	Baojun Xu, Sen Wang, Jaroslav Kysela, Takashi Iwai
  Cc: patches, linux-sound, asahi, devicetree, linux-kernel,
	Roman Smrž, linux-amarula, Michael Trimarchi

From: Michael Trimarchi <michael@amarulasolutions.com>

The PCM1795 is register compatible with the PCM1792A, but it encodes two
of the register 18 FMT[2:0] values differently: code 001 selects 32-bit
standard data instead of 20-bit, and code 100 selects 32-bit I2S instead
of 16-bit I2S. It has no 20-bit format at all. The PCM1796 shares the
PCM1792A encoding.

The model is read with device_get_match_data(), so each bus driver
carries the model in its own of_device_id table. The tables cannot move
to the common file: MODULE_DEVICE_TABLE() aliases a table that has to be
defined in the same translation unit.

Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
Signed-off-by: Roman Smrž <roman@amarulasolutions.com>
---
 sound/soc/codecs/pcm179x-i2c.c |  3 +-
 sound/soc/codecs/pcm179x-spi.c |  3 +-
 sound/soc/codecs/pcm179x.c     | 62 ++++++++++++++++++++++++++++++++++++++----
 sound/soc/codecs/pcm179x.h     | 12 ++++++--
 4 files changed, 71 insertions(+), 9 deletions(-)

diff --git a/sound/soc/codecs/pcm179x-i2c.c b/sound/soc/codecs/pcm179x-i2c.c
index e81e20fadadf..751f4b74647a 100644
--- a/sound/soc/codecs/pcm179x-i2c.c
+++ b/sound/soc/codecs/pcm179x-i2c.c
@@ -32,7 +32,8 @@ static int pcm179x_i2c_probe(struct i2c_client *client)
 #ifdef CONFIG_OF
 static const struct of_device_id pcm179x_of_match[] = {
 	{ .compatible = "ti,pcm1792a", },
-	{ .compatible = "ti,pcm1796", },
+	{ .compatible = "ti,pcm1795", .data = (void *)PCM1795, },
+	{ .compatible = "ti,pcm1796", .data = (void *)PCM1796, },
 	{ }
 };
 MODULE_DEVICE_TABLE(of, pcm179x_of_match);
diff --git a/sound/soc/codecs/pcm179x-spi.c b/sound/soc/codecs/pcm179x-spi.c
index e5e4b942acfc..2b487a4d7c82 100644
--- a/sound/soc/codecs/pcm179x-spi.c
+++ b/sound/soc/codecs/pcm179x-spi.c
@@ -31,7 +31,8 @@ static int pcm179x_spi_probe(struct spi_device *spi)
 
 static const struct of_device_id pcm179x_of_match[] __maybe_unused = {
 	{ .compatible = "ti,pcm1792a", },
-	{ .compatible = "ti,pcm1796" },
+	{ .compatible = "ti,pcm1795", .data = (void *)PCM1795, },
+	{ .compatible = "ti,pcm1796", .data = (void *)PCM1796, },
 	{ }
 };
 MODULE_DEVICE_TABLE(of, pcm179x_of_match);
diff --git a/sound/soc/codecs/pcm179x.c b/sound/soc/codecs/pcm179x.c
index c059e410cbbe..3ee781ff54f8 100644
--- a/sound/soc/codecs/pcm179x.c
+++ b/sound/soc/codecs/pcm179x.c
@@ -19,6 +19,7 @@
 #include <sound/soc.h>
 #include <sound/tlv.h>
 #include <linux/of.h>
+#include <linux/property.h>
 
 #include "pcm179x.h"
 
@@ -63,6 +64,7 @@ struct pcm179x_private {
 	struct regmap *regmap;
 	unsigned int format;
 	unsigned int rate;
+	enum pcm179x_type codec_model;
 };
 
 struct pcm179x_fmt_table {
@@ -71,7 +73,17 @@ struct pcm179x_fmt_table {
 	unsigned int value;	/* FMT[2:0] */
 };
 
-static const struct pcm179x_fmt_table pcm1792a_fmt[] = {
+/*
+ * Register 18 FMT[2:0] is not encoded the same way by every model: value 001
+ * and value 100 are 20-bit and 16-bit I2S on the PCM1792A/PCM1796 but 32-bit
+ * and 32-bit I2S on the PCM1795, and neither model has a 32-bit
+ * left-justified mode.
+ *
+ * The PCM1792A/PCM1796 have no 32-bit format at all, so a 32-bit container
+ * keeps the 24-bit value and is clocked out as 24-bit data, as this driver has
+ * always done. Only the PCM1795 has real 32-bit formats.
+ */
+static const struct pcm179x_fmt_table pcm179x_fmt[] = {
 	{ SND_SOC_DAIFMT_RIGHT_J, 16, 0 },
 	{ SND_SOC_DAIFMT_RIGHT_J, 24, 2 },
 	{ SND_SOC_DAIFMT_RIGHT_J, 32, 2 },
@@ -82,16 +94,53 @@ static const struct pcm179x_fmt_table pcm1792a_fmt[] = {
 	{ SND_SOC_DAIFMT_I2S,     32, 5 },
 };
 
+static const struct pcm179x_fmt_table pcm1795_fmt[] = {
+	{ SND_SOC_DAIFMT_RIGHT_J, 16, 0 },
+	{ SND_SOC_DAIFMT_RIGHT_J, 24, 2 },
+	{ SND_SOC_DAIFMT_RIGHT_J, 32, 1 },
+	{ SND_SOC_DAIFMT_LEFT_J,  24, 3 },
+	{ SND_SOC_DAIFMT_I2S,     24, 5 },
+	{ SND_SOC_DAIFMT_I2S,     32, 4 },
+};
+
+struct pcm179x_model {
+	u64 formats;
+	const struct pcm179x_fmt_table *fmt;
+	unsigned int num_fmt;
+};
+
+static const struct pcm179x_model pcm179x_models[] = {
+	[PCM1792A] = { PCM179X_FORMATS, pcm179x_fmt, ARRAY_SIZE(pcm179x_fmt) },
+	[PCM1795] = { PCM1795_FORMATS, pcm1795_fmt, ARRAY_SIZE(pcm1795_fmt) },
+	[PCM1796] = { PCM179X_FORMATS, pcm179x_fmt, ARRAY_SIZE(pcm179x_fmt) },
+};
+
 static int pcm179x_fmt_value(struct pcm179x_private *priv, unsigned int fmt,
 			     unsigned int width)
 {
-	for (unsigned int i = 0; i < ARRAY_SIZE(pcm1792a_fmt); i++)
-		if (pcm1792a_fmt[i].fmt == fmt && pcm1792a_fmt[i].width == width)
-			return pcm1792a_fmt[i].value;
+	const struct pcm179x_model *model = &pcm179x_models[priv->codec_model];
+	const struct pcm179x_fmt_table *fmt_tbl = model->fmt;
+
+	for (unsigned int i = 0; i < model->num_fmt; i++)
+		if (fmt_tbl[i].fmt == fmt && fmt_tbl[i].width == width)
+			return fmt_tbl[i].value;
 
 	return -EINVAL;
 }
 
+static int pcm179x_startup(struct snd_pcm_substream *substream,
+			   struct snd_soc_dai *dai)
+{
+	struct snd_soc_component *component = dai->component;
+	struct pcm179x_private *priv = snd_soc_component_get_drvdata(component);
+	u64 formats = pcm179x_models[priv->codec_model].formats;
+
+	snd_pcm_hw_constraint_mask64(substream->runtime,
+				     SNDRV_PCM_HW_PARAM_FORMAT, formats);
+
+	return 0;
+}
+
 static int pcm179x_set_dai_fmt(struct snd_soc_dai *codec_dai,
                              unsigned int format)
 {
@@ -149,6 +198,7 @@ static const u64 pcm179x_selectable_formats =
 	SND_SOC_POSSIBLE_DAIFMT_RIGHT_J;
 
 static const struct snd_soc_dai_ops pcm179x_dai_ops = {
+	.startup	= pcm179x_startup,
 	.set_fmt	= pcm179x_set_dai_fmt,
 	.hw_params	= pcm179x_hw_params,
 	.mute_stream	= pcm179x_mute,
@@ -190,7 +240,7 @@ static struct snd_soc_dai_driver pcm179x_dai = {
 		.rates = SNDRV_PCM_RATE_CONTINUOUS,
 		.rate_min = 10000,
 		.rate_max = 200000,
-		.formats = PCM1792A_FORMATS, },
+		.formats = PCM179X_FORMATS, },
 	.ops = &pcm179x_dai_ops,
 };
 
@@ -226,6 +276,8 @@ int pcm179x_common_init(struct device *dev, struct regmap *regmap)
 	if (!pcm179x)
 		return -ENOMEM;
 
+	pcm179x->codec_model =
+		(enum pcm179x_type)(uintptr_t)device_get_match_data(dev);
 	pcm179x->regmap = regmap;
 	dev_set_drvdata(dev, pcm179x);
 
diff --git a/sound/soc/codecs/pcm179x.h b/sound/soc/codecs/pcm179x.h
index 0039ca8ee742..33971fa93546 100644
--- a/sound/soc/codecs/pcm179x.h
+++ b/sound/soc/codecs/pcm179x.h
@@ -8,8 +8,16 @@
 #ifndef __PCM179X_H__
 #define __PCM179X_H__
 
-#define PCM1792A_FORMATS (SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S24_LE | \
-			  SNDRV_PCM_FMTBIT_S16_LE)
+enum pcm179x_type {
+	PCM1792A,
+	PCM1795,
+	PCM1796,
+};
+
+#define PCM179X_FORMATS (SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S24_LE | \
+			 SNDRV_PCM_FMTBIT_S16_LE)
+
+#define PCM1795_FORMATS (SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S24_LE)
 
 extern const struct regmap_config pcm179x_regmap_config;
 

-- 
2.55.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 4/5] ASoC: pcm179x: Add pcm1796 as compatible with pcm1792a
  2026-10-02  9:49 ` [PATCH 4/5] ASoC: pcm179x: Add pcm1796 as compatible with pcm1792a Roman Smrž
@ 2026-10-02  9:57   ` sashiko-bot
  2026-10-03 14:35   ` Krzysztof Kozlowski
  1 sibling, 0 replies; 10+ messages in thread
From: sashiko-bot @ 2026-10-02  9:57 UTC (permalink / raw)
  To: Roman Smrž; +Cc: robh, conor+dt, devicetree

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] spi: missing pcm1796 spi_device_id breaks module autoloading
--

commit 8959b1de4bb8c22b7a8a0f59806c5a6f767c0c82
Author: Roman Smrž <roman@amarulasolutions.com>

ASoC: pcm179x: Add pcm1796 as compatible with pcm1792a

The PCM1796 is fully compatible with the PCM1792A.

> diff --git a/sound/soc/codecs/pcm179x-spi.c b/sound/soc/codecs/pcm179x-spi.c
> index 192fee90c9714..e5e4b942acfc5 100644
> --- a/sound/soc/codecs/pcm179x-spi.c
> +++ b/sound/soc/codecs/pcm179x-spi.c
> @@ -31,6 +31,7 @@ static int pcm179x_spi_probe(struct spi_device *spi)
>  
>  static const struct of_device_id pcm179x_of_match[] __maybe_unused = {
>  	{ .compatible = "ti,pcm1792a", },
> +	{ .compatible = "ti,pcm1796" },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(of, pcm179x_of_match);

[Severity: High]
Should pcm179x_spi_ids[] also include an entry for "pcm1796"?

Without a "pcm1796" entry in pcm179x_spi_ids[], SPI module autoloading fails
for DT-instantiated devices and legacy board-file matching fails.

The SPI core (__spi_register_driver()) explicitly enforces OF-to-SPI ID
parity and will emit a warning during driver registration.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261002-work-v1-0-f0e53bc7331f@amarulasolutions.com?part=4

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/5] ASoC: pcm179x: Add left-justified formats for pcm1792a
  2026-10-02  9:49 ` [PATCH 3/5] ASoC: pcm179x: Add left-justified formats for pcm1792a Roman Smrž
@ 2026-10-02  9:57   ` sashiko-bot
  0 siblings, 0 replies; 10+ messages in thread
From: sashiko-bot @ 2026-10-02  9:57 UTC (permalink / raw)
  To: Roman Smrž; +Cc: devicetree, robh, conor+dt

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] ASoC: pcm179x: missing LEFT_J in auto_selectable_formats
--

commit f6579131e2b6aaf5049aa6728620f5e3a4687837
Author: Roman Smrž <roman@amarulasolutions.com>

ASoC: pcm179x: Add left-justified formats for pcm1792a

This commit adds left-justified format support for 24 and 32 bits to
the pcm1792a format table to match the datasheet.

> diff --git a/sound/soc/codecs/pcm179x.c b/sound/soc/codecs/pcm179x.c
> index 61b87dab32667..c059e410cbbe4 100644
> --- a/sound/soc/codecs/pcm179x.c
> +++ b/sound/soc/codecs/pcm179x.c
> @@ -75,6 +75,8 @@ static const struct pcm179x_fmt_table pcm1792a_fmt[] = {
>  	{ SND_SOC_DAIFMT_RIGHT_J, 16, 0 },
>  	{ SND_SOC_DAIFMT_RIGHT_J, 24, 2 },
>  	{ SND_SOC_DAIFMT_RIGHT_J, 32, 2 },
> +	{ SND_SOC_DAIFMT_LEFT_J,  24, 3 },
> +	{ SND_SOC_DAIFMT_LEFT_J,  32, 3 },

[Severity: Medium]
Should the new left-justified format also be added to the auto-negotiation
bitmask in this file?

When the ASoC core attempts to find a matching DAI format between the CPU
and codec components, it intersects their supported auto-selectable formats.
Because SND_SOC_POSSIBLE_DAIFMT_LEFT_J is omitted from the bitmask, it
appears this format will be skipped and remain unavailable to generic
machine drivers unless manually configured in the device tree.

For context, the current bitmask only includes I2S and right-justified
formats:

sound/soc/codecs/pcm179x.c:pcm179x_selectable_formats
static const u64 pcm179x_selectable_formats =
	SND_SOC_POSSIBLE_DAIFMT_I2S	|
	SND_SOC_POSSIBLE_DAIFMT_RIGHT_J;

>  	{ SND_SOC_DAIFMT_I2S,     16, 4 },
>  	{ SND_SOC_DAIFMT_I2S,     24, 5 },
>  	{ SND_SOC_DAIFMT_I2S,     32, 5 },
> };

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261002-work-v1-0-f0e53bc7331f@amarulasolutions.com?part=3

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/5] ASoC: dt-bindings: Add ti,pcm1795 and ti,pcm1796
  2026-10-02  9:49 ` [PATCH 1/5] ASoC: dt-bindings: Add ti,pcm1795 and ti,pcm1796 Roman Smrž
@ 2026-10-03 14:34   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 10+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-03 14:34 UTC (permalink / raw)
  To: Roman Smrž
  Cc: Martin Povišer, Lars-Peter Clausen, Nuno Sá,
	Peter Rosin, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Shenghao Ding, Kevin Lu,
	Baojun Xu, Sen Wang, Jaroslav Kysela, Takashi Iwai, patches,
	linux-sound, asahi, devicetree, linux-kernel, linux-amarula,
	Michael Trimarchi

On Fri, Oct 02, 2026 at 11:49:30AM +0200, Roman Smrž wrote:
> From: Michael Trimarchi <michael@amarulasolutions.com>
> 
> The pcm179x driver gains support for the PCM1795 and the PCM1796. Both

Driver does not matter here, it is not a reason to add bindings.

Instead explain the hardware briefly.

> are register compatible with the PCM1792A, so they belong in the trivial
> codec schema.
> 
> pcm179x.txt no longer exists upstream, it was folded into
> trivial-codec.yaml when the trivial codec bindings were consolidated.

That's almost confusing, how does it matter? Drop paragraph.

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 4/5] ASoC: pcm179x: Add pcm1796 as compatible with pcm1792a
  2026-10-02  9:49 ` [PATCH 4/5] ASoC: pcm179x: Add pcm1796 as compatible with pcm1792a Roman Smrž
  2026-10-02  9:57   ` sashiko-bot
@ 2026-10-03 14:35   ` Krzysztof Kozlowski
  1 sibling, 0 replies; 10+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-03 14:35 UTC (permalink / raw)
  To: Roman Smrž
  Cc: Martin Povišer, Lars-Peter Clausen, Nuno Sá,
	Peter Rosin, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Shenghao Ding, Kevin Lu,
	Baojun Xu, Sen Wang, Jaroslav Kysela, Takashi Iwai, patches,
	linux-sound, asahi, devicetree, linux-kernel, linux-amarula

On Fri, Oct 02, 2026 at 11:49:33AM +0200, Roman Smrž wrote:
> The PCM1796 is fully compatible with the PCM1792A.
> 
> Signed-off-by: Roman Smrž <roman@amarulasolutions.com>
> ---
>  sound/soc/codecs/pcm179x-i2c.c | 1 +
>  sound/soc/codecs/pcm179x-spi.c | 1 +
>  2 files changed, 2 insertions(+)
> 
> diff --git a/sound/soc/codecs/pcm179x-i2c.c b/sound/soc/codecs/pcm179x-i2c.c
> index 5337bcc7c62c..e81e20fadadf 100644
> --- a/sound/soc/codecs/pcm179x-i2c.c
> +++ b/sound/soc/codecs/pcm179x-i2c.c
> @@ -32,6 +32,7 @@ static int pcm179x_i2c_probe(struct i2c_client *client)
>  #ifdef CONFIG_OF
>  static const struct of_device_id pcm179x_of_match[] = {
>  	{ .compatible = "ti,pcm1792a", },
> +	{ .compatible = "ti,pcm1796", },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(of, pcm179x_of_match);
> diff --git a/sound/soc/codecs/pcm179x-spi.c b/sound/soc/codecs/pcm179x-spi.c
> index 192fee90c971..e5e4b942acfc 100644
> --- a/sound/soc/codecs/pcm179x-spi.c
> +++ b/sound/soc/codecs/pcm179x-spi.c
> @@ -31,6 +31,7 @@ static int pcm179x_spi_probe(struct spi_device *spi)
>  
>  static const struct of_device_id pcm179x_of_match[] __maybe_unused = {
>  	{ .compatible = "ti,pcm1792a", },
> +	{ .compatible = "ti,pcm1796" },

Why are you updating only one place?

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2026-10-03 14:35 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-02  9:49 [PATCH 0/5] ASoC: pcm179x: Add support for pcm1795 and pcm1796 Roman Smrž
2026-10-02  9:49 ` [PATCH 1/5] ASoC: dt-bindings: Add ti,pcm1795 and ti,pcm1796 Roman Smrž
2026-10-03 14:34   ` Krzysztof Kozlowski
2026-10-02  9:49 ` [PATCH 2/5] ASoC: pcm179x: Refactor regmap value lookup Roman Smrž
2026-10-02  9:49 ` [PATCH 3/5] ASoC: pcm179x: Add left-justified formats for pcm1792a Roman Smrž
2026-10-02  9:57   ` sashiko-bot
2026-10-02  9:49 ` [PATCH 4/5] ASoC: pcm179x: Add pcm1796 as compatible with pcm1792a Roman Smrž
2026-10-02  9:57   ` sashiko-bot
2026-10-03 14:35   ` Krzysztof Kozlowski
2026-10-02  9:49 ` [PATCH 5/5] ASoC: pcm179x: Add support for pcm1975 Roman Smrž

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox