Received: by 2002:a25:23cc:0:0:0:0:0 with SMTP id j195csp29751ybj; Fri, 8 May 2020 05:54:40 -0700 (PDT) X-Google-Smtp-Source: APiQypJ7LOYjSTIkW4NWqo/N1Sis1QOZQDZzGiAU7qObAtZRxuCdpfr65Iic3jpYfaljoWWb+pq7 X-Received: by 2002:aa7:dc48:: with SMTP id g8mr2028319edu.33.1588942480455; Fri, 08 May 2020 05:54:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588942480; cv=none; d=google.com; s=arc-20160816; b=ivT2b0mBAwGabsjT/gQTE8orY0hmFxfp34PuxFFewX9mGrHmgr3d9MQDqW6Gc6FCdl sHgQzhlOnMostI2QQVCwteNKQYstwM5iL1s++7SqHbSvCh+aBYMTIOEIg6cTdLRPWHos BD9iGlG723OF6qfh/AVfjxFVf3AEf3VjbXMNYGqFuJX55VKi+J+ngfyH99s+Pudc6cwD GgZ3uZS40iO9MBZ5Ivw5TIIWh3YUU4lTnjbm9MDwFvhHZGc1kyzxX13WT0eNWBWrA/rG R72yGPH5VVUIxxaGCpPYDwVKQR/GOMeTzlgs+nP+H1yM6hyg5dp4KvNJwt5DboXnpjLZ bFLQ== 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=P47PF1waVWcKorWdpO90fcFefaHgZ89Mmh3CiWHkv2E=; b=Py6iF9ROPd5+EFPcJe0iROujiCZx9bSfF/trHMYBVy8l2Nz5fJ/KTreq08dqP2HSnb mzPVk80lQu4CIXr0xogYEfyN4lCkNz5lLyezRli7/u1b6BuZpaZYS6N02hu2NomD3sF9 uZ+3m0ASdRZH3nadl069VMckIJ2BVcFkySVnOKaI5bqMjDJjIRpxt14r8c1vuOgLDYL7 W7BTNxxBX1n4rFNAQqRNcnYCIKh0O9Pnrhe1L7tQWcHppIMTyDglmdp2+TekmLfTzfN4 v/NFmIgFOs3lwsdoFpBGUNjtCpL6lZZatcx12MwsN0KIcO9oPJPlvUjVhbJonZ7N/F8m VUAg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="doNqz/Tp"; 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 p11si866038edm.108.2020.05.08.05.54.16; Fri, 08 May 2020 05:54:40 -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="doNqz/Tp"; 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 S1729492AbgEHMux (ORCPT + 99 others); Fri, 8 May 2020 08:50:53 -0400 Received: from mail.kernel.org ([198.145.29.99]:59172 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729336AbgEHMup (ORCPT ); Fri, 8 May 2020 08:50:45 -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 C4A5C24954; Fri, 8 May 2020 12:50:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588942245; bh=3/POyiqtelTVhdORwpZ36G6ZaXCF8YcncynUzPf+djo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=doNqz/TpjdigqDNwMYlua2Jl6HGa9AK+qexOgSrUvnlhbYwDRWg+9D82Fd4D0nIU4 xz27G7UU1RGN5n+rjWDjXPAqBWFRlcGGIKYncrKZgxg4DPn6O9rgkRRBcsROz+UbNH N3CBQ0+L1o9ikjVRAgMljtfInNmVbOZOKUiq8a3M= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sebastian Reichel , Fabio Estevam , Mark Brown , Sasha Levin Subject: [PATCH 4.14 05/22] ASoC: sgtl5000: Fix VAG power-on handling Date: Fri, 8 May 2020 14:35:17 +0200 Message-Id: <20200508123034.580292270@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200508123033.915895060@linuxfoundation.org> References: <20200508123033.915895060@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: Sebastian Reichel [ Upstream commit aa7812737f2877e192d57626cbe8825cc7cf6de9 ] As mentioned slightly out of patch context in the code, there is no reset routine for the chip. On boards where the chip is supplied by a fixed regulator, it might not even be resetted during (e.g. watchdog) reboot and can be in any state. If the device is probed with VAG enabled, the driver's probe routine will generate a loud pop sound when ANA_POWER is being programmed. Avoid this by properly disabling just the VAG bit and waiting the required power down time. Signed-off-by: Sebastian Reichel Reviewed-by: Fabio Estevam Link: https://lore.kernel.org/r/20200414181140.145825-1-sebastian.reichel@collabora.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/codecs/sgtl5000.c | 34 ++++++++++++++++++++++++++++++++++ sound/soc/codecs/sgtl5000.h | 1 + 2 files changed, 35 insertions(+) diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c index ca8a70ab22a82..d64cb28e8dc5c 100644 --- a/sound/soc/codecs/sgtl5000.c +++ b/sound/soc/codecs/sgtl5000.c @@ -1563,6 +1563,40 @@ static int sgtl5000_i2c_probe(struct i2c_client *client, dev_err(&client->dev, "Error %d initializing CHIP_CLK_CTRL\n", ret); + /* Mute everything to avoid pop from the following power-up */ + ret = regmap_write(sgtl5000->regmap, SGTL5000_CHIP_ANA_CTRL, + SGTL5000_CHIP_ANA_CTRL_DEFAULT); + if (ret) { + dev_err(&client->dev, + "Error %d muting outputs via CHIP_ANA_CTRL\n", ret); + goto disable_clk; + } + + /* + * If VAG is powered-on (e.g. from previous boot), it would be disabled + * by the write to ANA_POWER in later steps of the probe code. This + * may create a loud pop even with all outputs muted. The proper way + * to circumvent this is disabling the bit first and waiting the proper + * cool-down time. + */ + ret = regmap_read(sgtl5000->regmap, SGTL5000_CHIP_ANA_POWER, &value); + if (ret) { + dev_err(&client->dev, "Failed to read ANA_POWER: %d\n", ret); + goto disable_clk; + } + if (value & SGTL5000_VAG_POWERUP) { + ret = regmap_update_bits(sgtl5000->regmap, + SGTL5000_CHIP_ANA_POWER, + SGTL5000_VAG_POWERUP, + 0); + if (ret) { + dev_err(&client->dev, "Error %d disabling VAG\n", ret); + goto disable_clk; + } + + msleep(SGTL5000_VAG_POWERDOWN_DELAY); + } + /* Follow section 2.2.1.1 of AN3663 */ ana_pwr = SGTL5000_ANA_POWER_DEFAULT; if (sgtl5000->num_supplies <= VDDD) { diff --git a/sound/soc/codecs/sgtl5000.h b/sound/soc/codecs/sgtl5000.h index 22f3442af9826..9ea41749d0375 100644 --- a/sound/soc/codecs/sgtl5000.h +++ b/sound/soc/codecs/sgtl5000.h @@ -236,6 +236,7 @@ /* * SGTL5000_CHIP_ANA_CTRL */ +#define SGTL5000_CHIP_ANA_CTRL_DEFAULT 0x0133 #define SGTL5000_LINE_OUT_MUTE 0x0100 #define SGTL5000_HP_SEL_MASK 0x0040 #define SGTL5000_HP_SEL_SHIFT 6 -- 2.20.1