Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp680486ybz; Fri, 1 May 2020 06:42:37 -0700 (PDT) X-Google-Smtp-Source: APiQypIEMIjYgPYn6BxNtA15O6Y7PPgXv7W2Su3/q7ieM/bTGuZ/MxDO7YnjagSvBBo8xuTJP8Hd X-Received: by 2002:a17:906:af59:: with SMTP id ly25mr3299386ejb.65.1588340557311; Fri, 01 May 2020 06:42:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588340557; cv=none; d=google.com; s=arc-20160816; b=fsGrfVB1Ucv6MF0xs0XvCglRx8nEvXzNNX4/6eZOCKflfNf4AFXcfBl8jI2maHnF4e 9zFeBRr3Ga1uB0TI6Ot7P+twmlHx0yC7lhq+BaeFd3dW2l7lDvY7tOVlh/KBGXyEDNyL gVwsaq4M8MUVSbkKcnBLvVJy7nVexE7Gpy6X4vAcGRVzOLqaAFk4fAUo6JHYfnjxhLZx 89yYBGacRnAks0vjrYsUwjWwGVh2OhEdCK0vQDhKr7uUx+WVW5KjB6LHQsZKIPt9CCWs mOFUfdAIFm+A9Ba4EslTJPzNniDwIDfmQFh4aImQWB4yrNXn88lw88Xe3EZUzQH/bm+g Axkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=bEK4vzKcvBw7cop6uaOVS+9c+EcFDb0r8PozpuWWSnE=; b=Sj6OGSK1V1rQvI75WC0rMSe3rrHlhKivLvjyhnrqAIPvZpkshCTrGsUhEtqsYmJSjr 9L5wVsnwh3sXekUIaswyjcbu3L6n55kHFcvr7/xL0USskK03jEzS/u0+rii8uppLnkmh cHsoRID3Sb8Qm77cLxS4RWiPCY/JSHJ8Rwe32nDW+WRmNZHfMgOimJmoGGzpBxF9bvJL GV3Yn9QuEAzEy2zyym67HsBW/d/ucUUGlVllZwtDzIcfoaXFwv7g4qEn+YEDF+2tSxRR kb2b6RcjBJ9MqMJUs403Fzr4MTtPTFsmJhqnstz2wsI3Ctqr5CpaA143CqjudghYHKZV PLpg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=WPaYkgKj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e1si1847383ejl.173.2020.05.01.06.42.14; Fri, 01 May 2020 06:42:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=WPaYkgKj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731078AbgEANij (ORCPT + 99 others); Fri, 1 May 2020 09:38:39 -0400 Received: from mail.kernel.org ([198.145.29.99]:38140 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731074AbgEANih (ORCPT ); Fri, 1 May 2020 09:38:37 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A9F4520757; Fri, 1 May 2020 13:38:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588340317; bh=9NNJsc9JOP3hU8LNhjS2NaJS8yNIq1mysN+ebg5cZJU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WPaYkgKj/3tijjVv5y4YT3Hw+obl90JOKSnEoS7XyFSbXre3hUpIDyGxFSD1UOqDP v6Ekew1kp8IfiguVQYWLDrm7Hxe0x6Wr/KHpxgzCXQN7Xa1/J7fV2s74juYg6QLNWU QzYLmqLdHS30wEENR+/xNSGe8BlDVE9JfHmUlhe0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Philipp Puschmann , Mark Brown Subject: [PATCH 5.4 16/83] ASoC: tas571x: disable regulators on failed probe Date: Fri, 1 May 2020 15:22:55 +0200 Message-Id: <20200501131528.083966311@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200501131524.004332640@linuxfoundation.org> References: <20200501131524.004332640@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Philipp Puschmann commit 9df8ba7c63073508e5aa677dade48fcab6a6773e upstream. 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 Link: https://lore.kernel.org/r/20200414112754.3365406-1-p.puschmann@pironex.de Signed-off-by: Mark Brown Signed-off-by: Greg Kroah-Hartman --- sound/soc/codecs/tas571x.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) --- a/sound/soc/codecs/tas571x.c +++ b/sound/soc/codecs/tas571x.c @@ -820,8 +820,10 @@ static int tas571x_i2c_probe(struct i2c_ 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_ 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_ */ 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)