Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3306003pxf; Mon, 5 Apr 2021 08:35:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx0tHYShrh2g5QJPhKk5BVEEDkLBsPuLb2VHN/BoM/5JYcGpfiWAHSuTHDtYHeQNuvipfuf X-Received: by 2002:a05:6402:31b4:: with SMTP id dj20mr396959edb.45.1617636933205; Mon, 05 Apr 2021 08:35:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617636933; cv=none; d=google.com; s=arc-20160816; b=n7s6PWsnfgLh9vvu8EI0cDA4MzP5VRsTGTnLBafmo3u0mvDT90Qubm1vML1sS8KvM0 yZhSF0K+3+u4w+H/UZ7qiocGKgpL74bjEsGlUXsCab6RqxxdAWYiJlQAc//f6Ribho9H R1NOioqmH+GVVojZK88OoBXuOdmMC9EX1jkBaQ75DEvYBglkqVmH7eGaZ451L8EcWufq egxbqd+PrG+ydVdR/DzPo1d29/l8awNJOf3RYfOH3so+jd8rF0thvBvtSMCqMhgyCLvw 8wL8zNqZPO3votqVKy8gr67UrQy2H+1M/mUM5+0ZZDv0dfsuArq4tnWg5DrPqLCGJRND 3ukA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=W48zJevqmhpVdLT3pHl3GkjbLjO0+40XNa0keCI4Zlo=; b=gPGp2RuNMFU/YtrjhVk7G+TaIzjoI2II5w0rA6xgEgs5+WpucZGNjvWd2vZRpSRv0J GQpm7orloFKRvleYLn8fKJmTMO3zKIChIb2DaPmBqKM70Uw2VbGjdnG4ryzclDHDhqTb RYD6QWLvMU5W8EqLtEu5b5KY7dmmTYbfLIQzoNJ6qH9E8Rfb7bhXpzGwy7718lcjHZwb DZgAPClK5ZORLUinLLIOBjyxRilCKLSJsCeMnWEro4ko4xgqk4q8ezO+3iyQ4ba/D/hK DYBLJtvUl6xtkdj3vr1Ey1EhtZ/iPONlz5o6QZqzPb3+yQwlUn9yOcTyhizGyH9uAluu YVWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=sGu6eu3r; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v6si14470545ejk.379.2021.04.05.08.35.08; Mon, 05 Apr 2021 08:35:33 -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=@linuxfoundation.org header.s=korg header.b=sGu6eu3r; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238744AbhDEJGK (ORCPT + 99 others); Mon, 5 Apr 2021 05:06:10 -0400 Received: from mail.kernel.org ([198.145.29.99]:48024 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238204AbhDEJEf (ORCPT ); Mon, 5 Apr 2021 05:04:35 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id D90D161002; Mon, 5 Apr 2021 09:04:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1617613469; bh=8GPadsI2gF/q0uVwc0Vr/B7ZoGZ2U/szHr+2mEiZflE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sGu6eu3rq2L20wAztxQv3PWYdyRqwITimfUFyk97ZhBLo0cHF93W8mMeAA4Uof4wE jXPLw8sx/ur35DQp2DD4osM3VGEKb/X6PdEyg/MLql+WXzwWOLpceoxbNjT1VWmgcU FNeeXHo7rPgByWeUe/r+RrvCc4TCVnPMzC/C1/fI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Benjamin Rood , Fabio Estevam , Mark Brown , Sasha Levin Subject: [PATCH 5.4 13/74] ASoC: sgtl5000: set DAP_AVC_CTRL register to correct default value on probe Date: Mon, 5 Apr 2021 10:53:37 +0200 Message-Id: <20210405085025.157220960@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210405085024.703004126@linuxfoundation.org> References: <20210405085024.703004126@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Benjamin Rood [ Upstream commit f86f58e3594fb0ab1993d833d3b9a2496f3c928c ] According to the SGTL5000 datasheet [1], the DAP_AVC_CTRL register has the following bit field definitions: | BITS | FIELD | RW | RESET | DEFINITION | | 15 | RSVD | RO | 0x0 | Reserved | | 14 | RSVD | RW | 0x1 | Reserved | | 13:12 | MAX_GAIN | RW | 0x1 | Max Gain of AVC in expander mode | | 11:10 | RSVD | RO | 0x0 | Reserved | | 9:8 | LBI_RESP | RW | 0x1 | Integrator Response | | 7:6 | RSVD | RO | 0x0 | Reserved | | 5 | HARD_LMT_EN | RW | 0x0 | Enable hard limiter mode | | 4:1 | RSVD | RO | 0x0 | Reserved | | 0 | EN | RW | 0x0 | Enable/Disable AVC | The original default value written to the DAP_AVC_CTRL register during sgtl5000_i2c_probe() was 0x0510. This would incorrectly write values to bits 4 and 10, which are defined as RESERVED. It would also not set bits 12 and 14 to their correct RESET values of 0x1, and instead set them to 0x0. While the DAP_AVC module is effectively disabled because the EN bit is 0, this default value is still writing invalid values to registers that are marked as read-only and RESERVED as well as not setting bits 12 and 14 to their correct default values as defined by the datasheet. The correct value that should be written to the DAP_AVC_CTRL register is 0x5100, which configures the register bits to the default values defined by the datasheet, and prevents any writes to bits defined as 'read-only'. Generally speaking, it is best practice to NOT attempt to write values to registers/bits defined as RESERVED, as it generally produces unwanted/undefined behavior, or errors. Also, all credit for this patch should go to my colleague Dan MacDonald for finding this error in the first place. [1] https://www.nxp.com/docs/en/data-sheet/SGTL5000.pdf Signed-off-by: Benjamin Rood Reviewed-by: Fabio Estevam Link: https://lore.kernel.org/r/20210219183308.GA2117@ubuntu-dev Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/codecs/sgtl5000.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c index f5b59305c957..8a1e485982d8 100644 --- a/sound/soc/codecs/sgtl5000.c +++ b/sound/soc/codecs/sgtl5000.c @@ -71,7 +71,7 @@ static const struct reg_default sgtl5000_reg_defaults[] = { { SGTL5000_DAP_EQ_BASS_BAND4, 0x002f }, { SGTL5000_DAP_MAIN_CHAN, 0x8000 }, { SGTL5000_DAP_MIX_CHAN, 0x0000 }, - { SGTL5000_DAP_AVC_CTRL, 0x0510 }, + { SGTL5000_DAP_AVC_CTRL, 0x5100 }, { SGTL5000_DAP_AVC_THRESHOLD, 0x1473 }, { SGTL5000_DAP_AVC_ATTACK, 0x0028 }, { SGTL5000_DAP_AVC_DECAY, 0x0050 }, -- 2.30.1