Skip to contentSkip to conversation

Patch "ASoC: ssm4567: Reset device before regcache_sync()" has been added to the 4.5-stable tree

PATCH [email protected] 1 participant 1 message May 2, 2016

Subsystems (4)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

ASoC: ssm4567: Reset device before regcache_sync()

to the 4.5-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
asoc-ssm4567-reset-device-before-regcache_sync.patch
and it can be found in the queue-4.5 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From 712a8038cc24dba668afe82f0413714ca87184e0 Mon Sep 17 00:00:00 2001

From: Lars-Peter Clausen <[email protected]>
Date: Wed, 27 Jan 2016 14:26:18 +0100
Subject: ASoC: ssm4567: Reset device before regcache_sync()

From: Lars-Peter Clausen <[email protected]>

commit 712a8038cc24dba668afe82f0413714ca87184e0 upstream.

When the ssm4567 is powered up the driver calles regcache_sync() to restore the register map content. regcache_sync() assumes that the device is in its power-on reset state. Make sure that this is the case by explicitly resetting the ssm4567 register map before calling regcache_sync() otherwise we might end up with a incorrect register map which leads to undefined behaviour.

One such undefined behaviour was observed when returning from system suspend while a playback stream is active, in that case the ssm4567 was kept muted after resume.

Fixes 1ee44ce03011 ("ASoC: ssm4567: Add driver for Analog Devices SSM4567 amplifier")
---
 sound/soc/codecs/ssm4567.c |    5 +++++
 1 file changed, 5 insertions(+)
sound/soc/codecs/ssm4567.c +5 -0
@@ -352,6 +352,11 @@ static int ssm4567_set_power(struct ssm4
 	regcache_cache_only(ssm4567->regmap, !enable);
 
 	if (enable) {
+		ret = regmap_write(ssm4567->regmap, SSM4567_REG_SOFT_RESET,
+			0x00);
+		if (ret)
+			return ret;
+
 		ret = regmap_update_bits(ssm4567->regmap,
 			SSM4567_REG_POWER_CTRL,
 			SSM4567_POWER_SPWDN, 0x00);

Patches currently in stable-queue which might be from [email protected] are

queue-4.5/usb-gadget-f_fs-fix-use-after-free.patch queue-4.5/asoc-ssm4567-reset-device-before-regcache_sync.patch queue-4.5/asoc-dapm-make-sure-we-have-a-card-when-displaying-component-widgets.patch