From patchwork Tue Apr 14 11:27:54 2020
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Philipp Puschmann
X-Patchwork-Id: 193034
Return-Path:
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
aws-us-west-2-korg-lkml-1.web.codeaurora.org
X-Spam-Level:
X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI,
SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED,
USER_AGENT_GIT autolearn=unavailable
autolearn_force=no version=3.4.0
Received: from mail.kernel.org (mail.kernel.org [198.145.29.99])
by smtp.lore.kernel.org (Postfix) with ESMTP id 19CE0C2BA19
for ;
Tue, 14 Apr 2020 12:52:14 +0000 (UTC)
Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256
bits)) (No client certificate requested)
by mail.kernel.org (Postfix) with ESMTPS id 746FF206A2
for ;
Tue, 14 Apr 2020 12:52:13 +0000 (UTC)
Authentication-Results: mail.kernel.org;
dkim=pass (1024-bit key) header.d=alsa-project.org
header.i=@alsa-project.org header.b="tO8Hkhcu"
DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 746FF206A2
Authentication-Results: mail.kernel.org;
dmarc=none (p=none dis=none) header.from=pironex.de
Authentication-Results: mail.kernel.org; spf=pass
smtp.mailfrom=alsa-devel-bounces@alsa-project.org
Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201])
(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
(No client certificate requested)
by alsa0.perex.cz (Postfix) with ESMTPS id CE6C2169C;
Tue, 14 Apr 2020 14:51:21 +0200 (CEST)
DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz CE6C2169C
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org;
s=default; t=1586868731;
bh=rmS6XaLsIkPwJ/gBtSP9OQ6M01Qyp3xbgfqynzkfiDs=;
h=From:To:Subject:Date:Cc:List-Id:List-Unsubscribe:List-Archive:
List-Post:List-Help:List-Subscribe:From;
b=tO8HkhcujiCorWMayenSM99J57z8X0+Zl+31Zc0TFhQEG32Rd2r4brn71zGYAmzTu
muSqUcZ6oAJXK/WmB3VslUd5Nf+Cxi4Oyt1051Whf9kQWZfOd7jlp/QjbsqbD6TjUF
l4yOG/mOjjrLFzYv6pk3T54LtR//EV7OL8Bb9DiA=
Received: from alsa1.perex.cz (localhost.localdomain [127.0.0.1])
by alsa1.perex.cz (Postfix) with ESMTP id 5C674F80115;
Tue, 14 Apr 2020 14:51:21 +0200 (CEST)
Received: by alsa1.perex.cz (Postfix, from userid 50401)
id 2CE97F8013D; Tue, 14 Apr 2020 13:28:05 +0200 (CEST)
Received: from dd10228.kasserver.com (dd10228.kasserver.com [85.13.133.23])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256
bits)) (No client certificate requested)
by alsa1.perex.cz (Postfix) with ESMTPS id 97CB2F800F5
for ;
Tue, 14 Apr 2020 13:27:58 +0200 (CEST)
DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz 97CB2F800F5
Received: from devpool17.fritz.box (ip1f107c11.dynamic.kabel-deutschland.de
[31.16.124.17])
by dd10228.kasserver.com (Postfix) with ESMTPSA id 47E406CC0254;
Tue, 14 Apr 2020 13:27:56 +0200 (CEST)
From: Philipp Puschmann
To: cernekee@chromium.org, lgirdwood@gmail.com, broonie@kernel.org,
tglx@linutronix.de, nhuck@google.com, alsa-devel@alsa-project.org,
linux-kernel@vger.kernel.org
Subject: [PATCH] ASoC: tas571x: disable regulators on failed probe
Date: Tue, 14 Apr 2020 13:27:54 +0200
Message-Id: <20200414112754.3365406-1-p.puschmann@pironex.de>
X-Mailer: git-send-email 2.26.0
MIME-Version: 1.0
X-Mailman-Approved-At: Tue, 14 Apr 2020 14:51:17 +0200
Cc: Philipp Puschmann
X-BeenThere: alsa-devel@alsa-project.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: "Alsa-devel mailing list for ALSA developers -
http://www.alsa-project.org"
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: alsa-devel-bounces@alsa-project.org
Sender: "Alsa-devel"
If probe fails after enabling the regulators regulator_put is called for
each supply without having them disabled before. This produces some
warnings like
WARNING: CPU: 0 PID: 90 at drivers/regulator/core.c:2044 _regulator_put.part.0+0x154/0x15c
[] (unwind_backtrace) from [] (show_stack+0x10/0x14)
[] (show_stack) from [] (__warn+0xd0/0xf4)
[] (__warn) from [] (warn_slowpath_fmt+0x64/0xc4)
[] (warn_slowpath_fmt) from [] (_regulator_put.part.0+0x154/0x15c)
[] (_regulator_put.part.0) from [] (regulator_put+0x28/0x38)
[] (regulator_put) from [] (regulator_bulk_free+0x28/0x38)
[] (regulator_bulk_free) from [] (release_nodes+0x1d0/0x22c)
[] (release_nodes) from [] (really_probe+0x108/0x34c)
[] (really_probe) from [] (driver_probe_device+0xb8/0x16c)
[] (driver_probe_device) from [] (device_driver_attach+0x58/0x60)
[] (device_driver_attach) from [] (__driver_attach+0x58/0xcc)
[] (__driver_attach) from [] (bus_for_each_dev+0x78/0xc0)
[] (bus_for_each_dev) from [] (bus_add_driver+0x188/0x1e0)
[] (bus_add_driver) from [] (driver_register+0x74/0x108)
[] (driver_register) from [] (i2c_register_driver+0x3c/0x88)
[] (i2c_register_driver) from [] (do_one_initcall+0x58/0x250)
[] (do_one_initcall) from [] (do_init_module+0x60/0x244)
[] (do_init_module) from [] (load_module+0x2180/0x2540)
[] (load_module) from [] (sys_finit_module+0xd0/0xe8)
[] (sys_finit_module) from [] (__sys_trace_return+0x0/0x20)
Fixes: 3fd6e7d9a146 (ASoC: tas571x: New driver for TI TAS571x power amplifiers)
Signed-off-by: Philipp Puschmann
---
sound/soc/codecs/tas571x.c | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/sound/soc/codecs/tas571x.c b/sound/soc/codecs/tas571x.c
index 1554631cb397..5b7f9fcf6cbf 100644
--- a/sound/soc/codecs/tas571x.c
+++ b/sound/soc/codecs/tas571x.c
@@ -820,8 +820,10 @@ static int tas571x_i2c_probe(struct i2c_client *client,
priv->regmap = devm_regmap_init(dev, NULL, client,
priv->chip->regmap_config);
- if (IS_ERR(priv->regmap))
- return PTR_ERR(priv->regmap);
+ if (IS_ERR(priv->regmap)) {
+ ret = PTR_ERR(priv->regmap);
+ goto disable_regs;
+ }
priv->pdn_gpio = devm_gpiod_get_optional(dev, "pdn", GPIOD_OUT_LOW);
if (IS_ERR(priv->pdn_gpio)) {
@@ -845,7 +847,7 @@ static int tas571x_i2c_probe(struct i2c_client *client,
ret = regmap_write(priv->regmap, TAS571X_OSC_TRIM_REG, 0);
if (ret)
- return ret;
+ goto disable_regs;
usleep_range(50000, 60000);
@@ -861,12 +863,20 @@ static int tas571x_i2c_probe(struct i2c_client *client,
*/
ret = regmap_update_bits(priv->regmap, TAS571X_MVOL_REG, 1, 0);
if (ret)
- return ret;
+ goto disable_regs;
}
- return devm_snd_soc_register_component(&client->dev,
+ ret = devm_snd_soc_register_component(&client->dev,
&priv->component_driver,
&tas571x_dai, 1);
+ if (ret)
+ goto disable_regs;
+
+ return ret;
+
+disable_regs:
+ regulator_bulk_disable(priv->chip->num_supply_names, priv->supplies);
+ return ret;
}
static int tas571x_i2c_remove(struct i2c_client *client)