linux-kernel.vger.kernel.org archive mirror
 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 03/20] ASoC: tas2764: Extend driver to SN012776
Date: Thu, 27 Feb 2025 22:07:30 +1000	[thread overview]
Message-ID: <20250227-apple-codec-changes-v3-3-cbb130030acf@gmail.com> (raw)
In-Reply-To: <20250227-apple-codec-changes-v3-0-cbb130030acf@gmail.com>

From: Martin Povišer <povik+lin@cutebit.org>

SN012776 is a speaker amp chip found in Apple's 2021 laptops. It appears
similar and more-or-less compatible to TAS2764. Extend the TAS2764
driver with some SN012776 specifics and configure the chip assuming
it's in one of the Apple machines.

Reviewed-by: Neal Gompa <neal@gompa.dev>
Signed-off-by: Martin Povišer <povik+lin@cutebit.org>
Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
---
 sound/soc/codecs/tas2764.c | 43 +++++++++++++++++++++++--
 sound/soc/codecs/tas2764.h |  3 ++
 2 files changed, 43 insertions(+), 3 deletions(-)

diff --git a/sound/soc/codecs/tas2764.c b/sound/soc/codecs/tas2764.c
index c0a1d0c2a93890105a169717a7fb75ec05f93146..d9b4f898789fa9b59c94c97e3b130950b88c3a76 100644
--- a/sound/soc/codecs/tas2764.c
+++ b/sound/soc/codecs/tas2764.c
@@ -14,6 +14,7 @@
 #include <linux/regulator/consumer.h>
 #include <linux/regmap.h>
 #include <linux/of.h>
+#include <linux/of_device.h>
 #include <linux/slab.h>
 #include <sound/soc.h>
 #include <sound/pcm.h>
@@ -23,6 +24,11 @@
 
 #include "tas2764.h"
 
+enum tas2764_devid {
+	DEVID_TAS2764  = 0,
+	DEVID_SN012776 = 1
+};
+
 struct tas2764_priv {
 	struct snd_soc_component *component;
 	struct gpio_desc *reset_gpio;
@@ -30,7 +36,8 @@ struct tas2764_priv {
 	struct regmap *regmap;
 	struct device *dev;
 	int irq;
-	
+	enum tas2764_devid devid;
+
 	int v_sense_slot;
 	int i_sense_slot;
 
@@ -533,10 +540,16 @@ static struct snd_soc_dai_driver tas2764_dai_driver[] = {
 	},
 };
 
+static uint8_t sn012776_bop_presets[] = {
+	0x01, 0x32, 0x02, 0x22, 0x83, 0x2d, 0x80, 0x02, 0x06,
+	0x32, 0x46, 0x30, 0x02, 0x06, 0x38, 0x40, 0x30, 0x02,
+	0x06, 0x3e, 0x37, 0x30, 0xff, 0xe6
+};
+
 static int tas2764_codec_probe(struct snd_soc_component *component)
 {
 	struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component);
-	int ret;
+	int ret, i;
 
 	tas2764->component = component;
 
@@ -585,6 +598,27 @@ static int tas2764_codec_probe(struct snd_soc_component *component)
 	if (ret < 0)
 		return ret;
 
+	switch (tas2764->devid) {
+	case DEVID_SN012776:
+		ret = snd_soc_component_update_bits(component, TAS2764_PWR_CTRL,
+					TAS2764_PWR_CTRL_BOP_SRC,
+					TAS2764_PWR_CTRL_BOP_SRC);
+		if (ret < 0)
+			return ret;
+
+		for (i = 0; i < ARRAY_SIZE(sn012776_bop_presets); i++) {
+			ret = snd_soc_component_write(component,
+						TAS2764_BOP_CFG0 + i,
+						sn012776_bop_presets[i]);
+
+			if (ret < 0)
+				return ret;
+		}
+		break;
+	default:
+		break;
+	}
+
 	return 0;
 }
 
@@ -716,6 +750,8 @@ static int tas2764_i2c_probe(struct i2c_client *client)
 	if (!tas2764)
 		return -ENOMEM;
 
+	tas2764->devid = (enum tas2764_devid)of_device_get_match_data(&client->dev);
+
 	tas2764->dev = &client->dev;
 	tas2764->irq = client->irq;
 	i2c_set_clientdata(client, tas2764);
@@ -752,7 +788,8 @@ MODULE_DEVICE_TABLE(i2c, tas2764_i2c_id);
 
 #if defined(CONFIG_OF)
 static const struct of_device_id tas2764_of_match[] = {
-	{ .compatible = "ti,tas2764" },
+	{ .compatible = "ti,tas2764",  .data = (void *)DEVID_TAS2764 },
+	{ .compatible = "ti,sn012776", .data = (void *)DEVID_SN012776 },
 	{},
 };
 MODULE_DEVICE_TABLE(of, tas2764_of_match);
diff --git a/sound/soc/codecs/tas2764.h b/sound/soc/codecs/tas2764.h
index 9490f2686e38919a726e649884d9b6ad761493a2..69c0f91cb423986f7f0ded0b2160927f024d957d 100644
--- a/sound/soc/codecs/tas2764.h
+++ b/sound/soc/codecs/tas2764.h
@@ -29,6 +29,7 @@
 #define TAS2764_PWR_CTRL_ACTIVE		0x0
 #define TAS2764_PWR_CTRL_MUTE		BIT(0)
 #define TAS2764_PWR_CTRL_SHUTDOWN	BIT(1)
+#define TAS2764_PWR_CTRL_BOP_SRC	BIT(7)
 
 #define TAS2764_VSENSE_POWER_EN		3
 #define TAS2764_ISENSE_POWER_EN		4
@@ -116,4 +117,6 @@
 #define TAS2764_INT_CLK_CFG             TAS2764_REG(0x0, 0x5c)
 #define TAS2764_INT_CLK_CFG_IRQZ_CLR    BIT(2)
 
+#define TAS2764_BOP_CFG0                TAS2764_REG(0X0, 0x1d)
+
 #endif /* __TAS2764__ */

-- 
2.48.1


  parent reply	other threads:[~2025-02-27 12:09 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 ` James Calligeros [this message]
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 ` [PATCH v3 18/20] ASoC: tas2770: Add zero-fill and pull-down controls James Calligeros
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-3-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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).