diff options
author | Primoz Fiser <primoz.fiser@norik.com> | 2025-09-25 10:59:29 +0200 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2025-09-26 01:34:43 +0100 |
commit | 733a763dd8b3ac2858dd238a91bb3a2fdff4739e (patch) | |
tree | a3b903bb32bc232b99ab3dff19b4b48dbca85cac /fs/ext4/fast_commit.c | |
parent | ba0c67d3c4b0ce5ec5e6de35e6433b22eecb1f6a (diff) |
ASoC: tlv320aic3x: Fix class-D initialization for tlv320aic3007
The problem of having class-D initialization sequence in probe using
regmap_register_patch() is that it will do hardware register writes
immediately after being called as it bypasses regcache. Afterwards, in
aic3x_init() we also perform codec soft reset, rendering class-D init
sequence pointless. This issue is even more apparent when using reset
GPIO line, since in that case class-D amplifier initialization fails
with "Failed to init class D: -5" message as codec is already held in
reset state after requesting the reset GPIO and hence hardware I/O
fails with -EIO errno.
Thus move class-D amplifier initialization sequence from probe function
to aic3x_set_power() just before the usual regcache sync. Use bypassed
regmap_multi_reg_write_bypassed() function to make sure, class-D init
sequence is performed in proper order as described in the datasheet.
Signed-off-by: Primoz Fiser <primoz.fiser@norik.com>
Link: https://patch.msgid.link/20250925085929.2581749-1-primoz.fiser@norik.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'fs/ext4/fast_commit.c')
0 files changed, 0 insertions, 0 deletions