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
next prev 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).