[PATCH 1/2] ASoC: codecs: tfa989x: Add support for tfa9890
The initialization sequence is taken from the version provided by the supplier [1].
This allows speakers using the TFA9890 amplifier to work, which are used by various mobile phones such as the SHIFT6mq.
[1]: https://source.codeaurora.org/external/mas/tfa98xx/tree/src/tfa_init.c?id=d2...
Signed-off-by: Alexander Martinz amartinz@shiftphones.com --- sound/soc/codecs/tfa989x.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)
diff --git a/sound/soc/codecs/tfa989x.c b/sound/soc/codecs/tfa989x.c index dc86852752c5..8ab2656de750 100644 --- a/sound/soc/codecs/tfa989x.c +++ b/sound/soc/codecs/tfa989x.c @@ -40,12 +40,14 @@ #define TFA989X_I2S_SEL_REG 0x0a #define TFA989X_I2S_SEL_REG_SPKR_MSK GENMASK(10, 9) /* speaker impedance */ #define TFA989X_I2S_SEL_REG_DCFG_MSK GENMASK(14, 11) /* DCDC compensation */ +#define TFA989X_HIDE_UNHIDE_KEY 0x40 #define TFA989X_PWM_CONTROL 0x41 #define TFA989X_CURRENTSENSE1 0x46 #define TFA989X_CURRENTSENSE2 0x47 #define TFA989X_CURRENTSENSE3 0x48 #define TFA989X_CURRENTSENSE4 0x49
+#define TFA9890_REVISION 0x80 #define TFA9895_REVISION 0x12 #define TFA9897_REVISION 0x97
@@ -188,6 +190,33 @@ static struct snd_soc_dai_driver tfa989x_dai = { .ops = &tfa989x_dai_ops, };
+static int tfa9890_init(struct regmap *regmap) +{ + int ret; + + /* unhide keys to allow updating them */ + ret = regmap_write(regmap, TFA989X_HIDE_UNHIDE_KEY, 0x5a6b); + if (ret) + return ret; + + /* update PLL registers */ + ret = regmap_set_bits(regmap, 0x59, 0x3); + if (ret) + return ret; + + /* hide keys again */ + ret = regmap_write(regmap, TFA989X_HIDE_UNHIDE_KEY, 0x0000); + if (ret) + return ret; + + return regmap_write(regmap, TFA989X_CURRENTSENSE2, 0x7BE1); +} + +static const struct tfa989x_rev tfa9890_rev = { + .rev = TFA9890_REVISION, + .init = tfa9890_init, +}; + static const struct reg_sequence tfa9895_reg_init[] = { /* some other registers must be set for optimal amplifier behaviour */ { TFA989X_BAT_PROT, 0x13ab }, @@ -376,6 +405,7 @@ static int tfa989x_i2c_probe(struct i2c_client *i2c) }
static const struct of_device_id tfa989x_of_match[] = { + { .compatible = "nxp,tfa9890", .data = &tfa9890_rev }, { .compatible = "nxp,tfa9895", .data = &tfa9895_rev }, { .compatible = "nxp,tfa9897", .data = &tfa9897_rev }, { }
Document TFA9890 binding for tfa989x.
Signed-off-by: Alexander Martinz amartinz@shiftphones.com --- Documentation/devicetree/bindings/sound/nxp,tfa989x.yaml | 1 + 1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/sound/nxp,tfa989x.yaml b/Documentation/devicetree/bindings/sound/nxp,tfa989x.yaml index b9b1dba40856..7f2e68ff6d34 100644 --- a/Documentation/devicetree/bindings/sound/nxp,tfa989x.yaml +++ b/Documentation/devicetree/bindings/sound/nxp,tfa989x.yaml @@ -15,6 +15,7 @@ allOf: properties: compatible: enum: + - nxp,tfa9890 - nxp,tfa9895 - nxp,tfa9897
On Thu, Jun 02, 2022 at 06:45:04PM +0200, Alexander Martinz wrote:
Document TFA9890 binding for tfa989x.
Signed-off-by: Alexander Martinz amartinz@shiftphones.com
The dt-bindings patch should usually come first in the patch series. Anyway, no need to resend just for that IMO:
Reviewed-by: Stephan Gerhold stephan@gerhold.net
Documentation/devicetree/bindings/sound/nxp,tfa989x.yaml | 1 + 1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/sound/nxp,tfa989x.yaml b/Documentation/devicetree/bindings/sound/nxp,tfa989x.yaml index b9b1dba40856..7f2e68ff6d34 100644 --- a/Documentation/devicetree/bindings/sound/nxp,tfa989x.yaml +++ b/Documentation/devicetree/bindings/sound/nxp,tfa989x.yaml @@ -15,6 +15,7 @@ allOf: properties: compatible: enum:
- nxp,tfa9890 - nxp,tfa9895 - nxp,tfa9897
-- 2.36.1
On Thu, 02 Jun 2022 18:45:04 +0200, Alexander Martinz wrote:
Document TFA9890 binding for tfa989x.
Signed-off-by: Alexander Martinz amartinz@shiftphones.com
Documentation/devicetree/bindings/sound/nxp,tfa989x.yaml | 1 + 1 file changed, 1 insertion(+)
Acked-by: Rob Herring robh@kernel.org
On Thu, Jun 02, 2022 at 06:45:03PM +0200, Alexander Martinz wrote:
The initialization sequence is taken from the version provided by the supplier [1].
This allows speakers using the TFA9890 amplifier to work, which are used by various mobile phones such as the SHIFT6mq.
Signed-off-by: Alexander Martinz amartinz@shiftphones.com
sound/soc/codecs/tfa989x.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)
diff --git a/sound/soc/codecs/tfa989x.c b/sound/soc/codecs/tfa989x.c index dc86852752c5..8ab2656de750 100644 --- a/sound/soc/codecs/tfa989x.c +++ b/sound/soc/codecs/tfa989x.c
...
@@ -188,6 +190,33 @@ static struct snd_soc_dai_driver tfa989x_dai = { .ops = &tfa989x_dai_ops, };
+static int tfa9890_init(struct regmap *regmap) +{
- int ret;
- /* unhide keys to allow updating them */
Nitpick: I think the magic number is the "key" to hide/unhide certain *registers*. This comment implies that you are hiding *keys*.
Maybe just write something like
/* temporarily allow access to hidden registers */ ... /* hide registers again */
With that fixed, feel free to add my
Reviewed-by: Stephan Gerhold stephan@gerhold.net
Thanks! Stephan
- ret = regmap_write(regmap, TFA989X_HIDE_UNHIDE_KEY, 0x5a6b);
- if (ret)
return ret;
- /* update PLL registers */
- ret = regmap_set_bits(regmap, 0x59, 0x3);
- if (ret)
return ret;
- /* hide keys again */
- ret = regmap_write(regmap, TFA989X_HIDE_UNHIDE_KEY, 0x0000);
- if (ret)
return ret;
- return regmap_write(regmap, TFA989X_CURRENTSENSE2, 0x7BE1);
+}
+static const struct tfa989x_rev tfa9890_rev = {
- .rev = TFA9890_REVISION,
- .init = tfa9890_init,
+};
k
On Thu, 2 Jun 2022 18:45:03 +0200, Alexander Martinz wrote:
The initialization sequence is taken from the version provided by the supplier [1].
This allows speakers using the TFA9890 amplifier to work, which are used by various mobile phones such as the SHIFT6mq.
[...]
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
Thanks!
[1/2] ASoC: codecs: tfa989x: Add support for tfa9890 commit: ef6c320942a2f057204702d769d507186fd7f0b7 [2/2] ASoC: dt-bindings: nxp,tfa989x: Add tfa9890 support commit: d0da7c8668dc19df157d927a67721ca00e29ff2b
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks, Mark
participants (4)
-
Alexander Martinz
-
Mark Brown
-
Rob Herring
-
Stephan Gerhold