linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] ASoC:codec:max98373: Changed amp shutdown register as volatile
@ 2021-03-25  3:35 Ryan Lee
  2021-03-25  3:35 ` [PATCH 2/3] ASoC:codec:max98373: Added 30ms turn on/off time delay Ryan Lee
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Ryan Lee @ 2021-03-25  3:35 UTC (permalink / raw)
  To: lgirdwood, broonie, perex, tiwai, pierre-louis.bossart,
	kai.vehmanen, yung-chuan.liao, rander.wang, ryans.lee,
	guennadi.liakhovetski, vkoul, yong.zhi, judyhsiao, alsa-devel,
	linux-kernel
  Cc: ryan.lee.maxim

0x20FF(amp global enable) register was defined as non-volatile,
but it is not. Overheating, overcurrent can cause amp shutdown
in hardware.
'regmap_write' compare register readback value before writing
to avoid same value writing. 'regmap_read' just read cache
not actual hardware value for the non-volatile register.
When amp is internally shutdown by some reason, next 'AMP ON'
command can be ignored because regmap think amp is already ON.

Signed-off-by: Ryan Lee <ryans.lee@maximintegrated.com>
---
 sound/soc/codecs/max98373-i2c.c | 1 +
 sound/soc/codecs/max98373-sdw.c | 1 +
 2 files changed, 2 insertions(+)

diff --git a/sound/soc/codecs/max98373-i2c.c b/sound/soc/codecs/max98373-i2c.c
index 85f6865019d4..ddb6436835d7 100644
--- a/sound/soc/codecs/max98373-i2c.c
+++ b/sound/soc/codecs/max98373-i2c.c
@@ -446,6 +446,7 @@ static bool max98373_volatile_reg(struct device *dev, unsigned int reg)
 	case MAX98373_R2054_MEAS_ADC_PVDD_CH_READBACK:
 	case MAX98373_R2055_MEAS_ADC_THERM_CH_READBACK:
 	case MAX98373_R20B6_BDE_CUR_STATE_READBACK:
+	case MAX98373_R20FF_GLOBAL_SHDN:
 	case MAX98373_R21FF_REV_ID:
 		return true;
 	default:
diff --git a/sound/soc/codecs/max98373-sdw.c b/sound/soc/codecs/max98373-sdw.c
index d8c47667a9ea..f3a12205cd48 100644
--- a/sound/soc/codecs/max98373-sdw.c
+++ b/sound/soc/codecs/max98373-sdw.c
@@ -220,6 +220,7 @@ static bool max98373_volatile_reg(struct device *dev, unsigned int reg)
 	case MAX98373_R2054_MEAS_ADC_PVDD_CH_READBACK:
 	case MAX98373_R2055_MEAS_ADC_THERM_CH_READBACK:
 	case MAX98373_R20B6_BDE_CUR_STATE_READBACK:
+	case MAX98373_R20FF_GLOBAL_SHDN:
 	case MAX98373_R21FF_REV_ID:
 	/* SoundWire Control Port Registers */
 	case MAX98373_R0040_SCP_INIT_STAT_1 ... MAX98373_R0070_SCP_FRAME_CTLR:
-- 
2.17.1


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

* [PATCH 2/3] ASoC:codec:max98373: Added 30ms turn on/off time delay
  2021-03-25  3:35 [PATCH 1/3] ASoC:codec:max98373: Changed amp shutdown register as volatile Ryan Lee
@ 2021-03-25  3:35 ` Ryan Lee
  2021-03-25  3:35 ` [PATCH 3/3] ASoC:codec:max98373: Added controls for autorestart config Ryan Lee
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Ryan Lee @ 2021-03-25  3:35 UTC (permalink / raw)
  To: lgirdwood, broonie, perex, tiwai, pierre-louis.bossart,
	kai.vehmanen, yung-chuan.liao, rander.wang, ryans.lee,
	guennadi.liakhovetski, vkoul, yong.zhi, judyhsiao, alsa-devel,
	linux-kernel
  Cc: ryan.lee.maxim

Amp requires 10 ~ 30ms for the power ON and OFF.
Added 30ms delay for stability.

Signed-off-by: Ryan Lee <ryans.lee@maximintegrated.com>
---
 sound/soc/codecs/max98373.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sound/soc/codecs/max98373.c b/sound/soc/codecs/max98373.c
index 746c829312b8..1346a98ce8a1 100644
--- a/sound/soc/codecs/max98373.c
+++ b/sound/soc/codecs/max98373.c
@@ -28,11 +28,13 @@ static int max98373_dac_event(struct snd_soc_dapm_widget *w,
 		regmap_update_bits(max98373->regmap,
 			MAX98373_R20FF_GLOBAL_SHDN,
 			MAX98373_GLOBAL_EN_MASK, 1);
+		usleep_range(30000, 31000);
 		break;
 	case SND_SOC_DAPM_POST_PMD:
 		regmap_update_bits(max98373->regmap,
 			MAX98373_R20FF_GLOBAL_SHDN,
 			MAX98373_GLOBAL_EN_MASK, 0);
+		usleep_range(30000, 31000);
 		max98373->tdm_mode = false;
 		break;
 	default:
-- 
2.17.1


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

* [PATCH 3/3] ASoC:codec:max98373: Added controls for autorestart config
  2021-03-25  3:35 [PATCH 1/3] ASoC:codec:max98373: Changed amp shutdown register as volatile Ryan Lee
  2021-03-25  3:35 ` [PATCH 2/3] ASoC:codec:max98373: Added 30ms turn on/off time delay Ryan Lee
@ 2021-03-25  3:35 ` Ryan Lee
  2021-03-25 13:56 ` [PATCH 1/3] ASoC:codec:max98373: Changed amp shutdown register as volatile Mark Brown
  2021-03-25 17:37 ` Mark Brown
  3 siblings, 0 replies; 5+ messages in thread
From: Ryan Lee @ 2021-03-25  3:35 UTC (permalink / raw)
  To: lgirdwood, broonie, perex, tiwai, pierre-louis.bossart,
	kai.vehmanen, yung-chuan.liao, rander.wang, ryans.lee,
	guennadi.liakhovetski, vkoul, yong.zhi, judyhsiao, alsa-devel,
	linux-kernel
  Cc: ryan.lee.maxim

3 new controls are added.
"OVC Autorestart Switch" : controls whether or not the speaker amplifier
automatically re-enables after an overcurrent fault condition.
"THERM Autorestart Switch" : controls whether or not the device
automatically resumes playback when the die temperature recovers from
thermal shutdown.
"CMON Autorestart Switch" : controls whether or not the device
automatically resumes playback when the clock returns after stopping.

Above Auto Restart functions are enabled by default.

Signed-off-by: Ryan Lee <ryans.lee@maximintegrated.com>
---
 sound/soc/codecs/max98373.c | 14 ++++++++++++++
 sound/soc/codecs/max98373.h |  3 +++
 2 files changed, 17 insertions(+)

diff --git a/sound/soc/codecs/max98373.c b/sound/soc/codecs/max98373.c
index 1346a98ce8a1..e14fe98349a5 100644
--- a/sound/soc/codecs/max98373.c
+++ b/sound/soc/codecs/max98373.c
@@ -204,6 +204,15 @@ SOC_SINGLE("Ramp Up Switch", MAX98373_R203F_AMP_DSP_CFG,
 	MAX98373_AMP_DSP_CFG_RMP_UP_SHIFT, 1, 0),
 SOC_SINGLE("Ramp Down Switch", MAX98373_R203F_AMP_DSP_CFG,
 	MAX98373_AMP_DSP_CFG_RMP_DN_SHIFT, 1, 0),
+/* Speaker Amplifier Overcurrent Automatic Restart Enable */
+SOC_SINGLE("OVC Autorestart Switch", MAX98373_R20FE_DEVICE_AUTO_RESTART_CFG,
+	MAX98373_OVC_AUTORESTART_SHIFT, 1, 0),
+/* Thermal Shutdown Automatic Restart Enable */
+SOC_SINGLE("THERM Autorestart Switch", MAX98373_R20FE_DEVICE_AUTO_RESTART_CFG,
+	MAX98373_THERM_AUTORESTART_SHIFT, 1, 0),
+/* Clock Monitor Automatic Restart Enable */
+SOC_SINGLE("CMON Autorestart Switch", MAX98373_R20FE_DEVICE_AUTO_RESTART_CFG,
+	MAX98373_CMON_AUTORESTART_SHIFT, 1, 0),
 SOC_SINGLE("CLK Monitor Switch", MAX98373_R20FE_DEVICE_AUTO_RESTART_CFG,
 	MAX98373_CLOCK_MON_SHIFT, 1, 0),
 SOC_SINGLE("Dither Switch", MAX98373_R203F_AMP_DSP_CFG,
@@ -392,6 +401,11 @@ static int max98373_probe(struct snd_soc_component *component)
 			MAX98373_R2021_PCM_TX_HIZ_EN_2,
 			1 << (max98373->i_slot - 8), 0);
 
+	/* enable auto restart function by default */
+	regmap_write(max98373->regmap,
+		MAX98373_R20FE_DEVICE_AUTO_RESTART_CFG,
+		0xF);
+
 	/* speaker feedback slot configuration */
 	regmap_write(max98373->regmap,
 		MAX98373_R2023_PCM_TX_SRC_2,
diff --git a/sound/soc/codecs/max98373.h b/sound/soc/codecs/max98373.h
index 71f5a5228f34..73a2cf69d84a 100644
--- a/sound/soc/codecs/max98373.h
+++ b/sound/soc/codecs/max98373.h
@@ -195,6 +195,9 @@
 #define MAX98373_LIMITER_EN_SHIFT (0)
 
 /* MAX98373_R20FE_DEVICE_AUTO_RESTART_CFG */
+#define MAX98373_OVC_AUTORESTART_SHIFT (3)
+#define MAX98373_THERM_AUTORESTART_SHIFT (2)
+#define MAX98373_CMON_AUTORESTART_SHIFT (1)
 #define MAX98373_CLOCK_MON_SHIFT (0)
 
 /* MAX98373_R20FF_GLOBAL_SHDN */
-- 
2.17.1


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

* Re: [PATCH 1/3] ASoC:codec:max98373: Changed amp shutdown register as volatile
  2021-03-25  3:35 [PATCH 1/3] ASoC:codec:max98373: Changed amp shutdown register as volatile Ryan Lee
  2021-03-25  3:35 ` [PATCH 2/3] ASoC:codec:max98373: Added 30ms turn on/off time delay Ryan Lee
  2021-03-25  3:35 ` [PATCH 3/3] ASoC:codec:max98373: Added controls for autorestart config Ryan Lee
@ 2021-03-25 13:56 ` Mark Brown
  2021-03-25 17:37 ` Mark Brown
  3 siblings, 0 replies; 5+ messages in thread
From: Mark Brown @ 2021-03-25 13:56 UTC (permalink / raw)
  To: Ryan Lee
  Cc: lgirdwood, perex, tiwai, pierre-louis.bossart, kai.vehmanen,
	yung-chuan.liao, rander.wang, guennadi.liakhovetski, vkoul,
	yong.zhi, judyhsiao, alsa-devel, linux-kernel, ryan.lee.maxim

[-- Attachment #1: Type: text/plain, Size: 535 bytes --]

On Wed, Mar 24, 2021 at 08:35:53PM -0700, Ryan Lee wrote:
> 0x20FF(amp global enable) register was defined as non-volatile,
> but it is not. Overheating, overcurrent can cause amp shutdown
> in hardware.

Please submit patches using subject lines reflecting the style for the
subsystem, this makes it easier for people to identify relevant patches.
Look at what existing commits in the area you're changing are doing and
make sure your subject lines visually resemble what they're doing.
There's no need to resubmit to fix this alone.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH 1/3] ASoC:codec:max98373: Changed amp shutdown register as volatile
  2021-03-25  3:35 [PATCH 1/3] ASoC:codec:max98373: Changed amp shutdown register as volatile Ryan Lee
                   ` (2 preceding siblings ...)
  2021-03-25 13:56 ` [PATCH 1/3] ASoC:codec:max98373: Changed amp shutdown register as volatile Mark Brown
@ 2021-03-25 17:37 ` Mark Brown
  3 siblings, 0 replies; 5+ messages in thread
From: Mark Brown @ 2021-03-25 17:37 UTC (permalink / raw)
  To: guennadi.liakhovetski, tiwai, perex, rander.wang, Ryan Lee,
	pierre-louis.bossart, yong.zhi, yung-chuan.liao, linux-kernel,
	judyhsiao, kai.vehmanen, alsa-devel, lgirdwood, vkoul
  Cc: Mark Brown, ryan.lee.maxim

On Wed, 24 Mar 2021 20:35:53 -0700, Ryan Lee wrote:
> 0x20FF(amp global enable) register was defined as non-volatile,
> but it is not. Overheating, overcurrent can cause amp shutdown
> in hardware.
> 'regmap_write' compare register readback value before writing
> to avoid same value writing. 'regmap_read' just read cache
> not actual hardware value for the non-volatile register.
> When amp is internally shutdown by some reason, next 'AMP ON'
> command can be ignored because regmap think amp is already ON.

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/3] ASoC:codec:max98373: Changed amp shutdown register as volatile
      commit: a23f9099ff1541f15704e96b784d3846d2a4483d
[2/3] ASoC:codec:max98373: Added 30ms turn on/off time delay
      commit: 3a27875e91fb9c29de436199d20b33f9413aea77
[3/3] ASoC:codec:max98373: Added controls for autorestart config
      commit: 7a0d884986f3693aca8a2dc4e1b31d35c508542e

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

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

end of thread, other threads:[~2021-03-25 17:38 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-25  3:35 [PATCH 1/3] ASoC:codec:max98373: Changed amp shutdown register as volatile Ryan Lee
2021-03-25  3:35 ` [PATCH 2/3] ASoC:codec:max98373: Added 30ms turn on/off time delay Ryan Lee
2021-03-25  3:35 ` [PATCH 3/3] ASoC:codec:max98373: Added controls for autorestart config Ryan Lee
2021-03-25 13:56 ` [PATCH 1/3] ASoC:codec:max98373: Changed amp shutdown register as volatile Mark Brown
2021-03-25 17:37 ` Mark Brown

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