From patchwork Tue Jan 30 09:47:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Vasiliy Kovalev X-Patchwork-Id: 193926 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2087:b0:106:209c:c626 with SMTP id gs7csp1105663dyb; Tue, 30 Jan 2024 01:49:27 -0800 (PST) X-Google-Smtp-Source: AGHT+IHHE2YcU/PFu3ebuu+ntYGWZq5zgNoSuz6ooIhXNpotmen7QkjqoFUTo9lEuybdx1Ljrwk4 X-Received: by 2002:a05:6214:d02:b0:686:9658:996e with SMTP id 2-20020a0562140d0200b006869658996emr9263439qvh.4.1706608166995; Tue, 30 Jan 2024 01:49:26 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706608166; cv=pass; d=google.com; s=arc-20160816; b=Lefi4+FxYaf5t7q5pf7m85QevoZgkbf/cXqSRdpp5/yX+WG5VAmghi5cNPnYoFSkV4 cAcApao9pR0ctsbxQjrQsF/rdJ7CiV7CbrnFibOjmiiMzyQ0qE7QdccGNRJaG+AxDDFH KWfV1b7yiXb2tsP/nJv7CL6HGIigZqbmQWprlGbwGUje4F+5ZrZGQxm051cSWDq/43Zk EVy+0cLlKBhy9dXV36HuhQUBGfciO1av56sBmW2GoCIa9mB5hlltvw+CVJR5nX0EPE2F nOFLX9+/KJ4XQpx3GGy8ASU6jXtROKzY6qDwYucF7SDrJzwUz2JHFz0XYqzlSWFhXyk0 ffOw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=wEREC3Zg2vTF/YIMn5kleJ92dxceUIdOBvuukkzTgX4=; fh=2IEPXKfVhtoEq98sN8HxvD68vbFBiQMtPfzbhuI145g=; b=x44g4nbJl0Pdf23hVE8XdX/h9inwXgodYOX0yd7dd1wP8vP+04y+36mkmvG3AP9Rs0 EVMDbai2wQieyjA+UEjRZrLZIgXZHtLQ6eaaMT+99JnA0oeKVh4NNGCYJeVFrVFVztOA oLYDg8SIvnLpf4Z/EM5esh161el+5il7dL4/tOONUAQ3kCh0g+UKnfw9KcGPQfbXWLzZ zLsv1jx5MO6XiJIipQUv543K1Dl8ws2XEJPzCl5jPt3Z4LAaX6TMoagzAfSqq/FRcAJe ZJub6jhF0L1siJvcmzAkxU2AgCCB4q7HJakfSDlN1YK4Kg/zh4QJ8nZzNEIaVIszi7lj D/IQ== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=altlinux.org); spf=pass (google.com: domain of linux-kernel+bounces-44295-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-44295-ouuuleilei=gmail.com@vger.kernel.org" Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id g9-20020a05620a218900b00783ff7daffcsi3808722qka.439.2024.01.30.01.49.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jan 2024 01:49:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-44295-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=altlinux.org); spf=pass (google.com: domain of linux-kernel+bounces-44295-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-44295-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id C65521C25381 for ; Tue, 30 Jan 2024 09:49:26 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B1AF76773A; Tue, 30 Jan 2024 09:47:31 +0000 (UTC) Received: from air.basealt.ru (air.basealt.ru [194.107.17.39]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 957C0657BC; Tue, 30 Jan 2024 09:47:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=194.107.17.39 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706608050; cv=none; b=BVL+tmHAq9V1C8EJ4cAetuaJzIpy/3BTzXxtsw38xHux4XY7f8ZfthTuwpNZ8Pe4WseLJwye2M81X9L6+ZEoLyNo3bbJycZ4SGG/GCdQPQur0vhazjGhl787se2OmSlY4zzBMuHz5L+5MEZfHQwMUs3KjU2/55d5HEF+//IFp10= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706608050; c=relaxed/simple; bh=76vNyh8F4XZ0a480DjHSCr5Iu/Fp4x+9DNu9tsjd75E=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=Iu8bOWLqWL1OUJ4k8NmH+toBvgPU8qeDhynM0Yln3bmas7NsbMxC4um0kmskmq/LLvint3ljCfnTtN8zUE/wUsb40HDM63CDd+jFansFG3W+hmuRyv7+Vhfi9tuDwd9akPrbZytMuUQH7ZqN77DSZVtObqx6TNOj2uVPVlzUk9g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=altlinux.org; spf=pass smtp.mailfrom=altlinux.org; arc=none smtp.client-ip=194.107.17.39 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=altlinux.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=altlinux.org Received: by air.basealt.ru (Postfix, from userid 490) id 889142F2024C; Tue, 30 Jan 2024 09:47:21 +0000 (UTC) X-Spam-Level: Received: from altlinux.malta.altlinux.ru (obninsk.basealt.ru [217.15.195.17]) by air.basealt.ru (Postfix) with ESMTPSA id BF8882F20242; Tue, 30 Jan 2024 09:47:14 +0000 (UTC) From: kovalev@altlinux.org To: stable@vger.kernel.org Cc: linux-kernel@vger.kernel.org, alsa-devel@alsa-project.org, u.kleine-koenig@pengutronix.de, a.firago@yadro.com, sashal@kernel.org, zhuning0077@gmail.com, tiwai@suse.com, perex@perex.cz, broonie@kernel.org, lgirdwood@gmail.com, kovalev@altlinux.org Subject: [PATCH 6.1.y 1/7] ASoC: codecs: es8326: Convert to i2c's .probe_new() Date: Tue, 30 Jan 2024 12:47:02 +0300 Message-Id: <20240130094708.290485-2-kovalev@altlinux.org> X-Mailer: git-send-email 2.33.8 In-Reply-To: <20240130094708.290485-1-kovalev@altlinux.org> References: <20240130094708.290485-1-kovalev@altlinux.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789508365619565502 X-GMAIL-MSGID: 1789508365619565502 From: Uwe Kleine-König Commit 784252bac835c831e10c48be633cd1ff0d697326 upstream. The probe function doesn't make use of the i2c_device_id * parameter so it can be trivially converted. Signed-off-by: Uwe Kleine-König Link: https://lore.kernel.org/r/20221118224540.619276-602-uwe@kleine-koenig.org Signed-off-by: Mark Brown Signed-off-by: Vasiliy Kovalev --- sound/soc/codecs/es8326.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sound/soc/codecs/es8326.c b/sound/soc/codecs/es8326.c index 555125efd9ad3f..28a0565c2a955b 100644 --- a/sound/soc/codecs/es8326.c +++ b/sound/soc/codecs/es8326.c @@ -816,8 +816,7 @@ static const struct snd_soc_component_driver soc_component_dev_es8326 = { .endianness = 1, }; -static int es8326_i2c_probe(struct i2c_client *i2c, - const struct i2c_device_id *id) +static int es8326_i2c_probe(struct i2c_client *i2c) { struct es8326_priv *es8326; int ret; @@ -897,7 +896,7 @@ static struct i2c_driver es8326_i2c_driver = { .acpi_match_table = ACPI_PTR(es8326_acpi_match), .of_match_table = of_match_ptr(es8326_of_match), }, - .probe = es8326_i2c_probe, + .probe_new = es8326_i2c_probe, .id_table = es8326_i2c_id, }; module_i2c_driver(es8326_i2c_driver); From patchwork Tue Jan 30 09:47:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasiliy Kovalev X-Patchwork-Id: 193958 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2087:b0:106:209c:c626 with SMTP id gs7csp1115806dyb; Tue, 30 Jan 2024 02:14:44 -0800 (PST) X-Google-Smtp-Source: AGHT+IFItAkXdbxUoB/JIi/vWgfW1t2T30XMv8HINlCK834iNd2MY8FJahoo4O75aO5F8VVf19Ei X-Received: by 2002:a05:6a20:d046:b0:19c:a996:da24 with SMTP id hv6-20020a056a20d04600b0019ca996da24mr5294373pzb.1.1706609684735; Tue, 30 Jan 2024 02:14:44 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706609684; cv=pass; d=google.com; s=arc-20160816; b=bq4JMLCtw1G86pI7pav8vgg6UETJzDH5N1e3ziwQXP+BVembojPq0ooOR9J3AuzZ7y af7LTlc2GoXloq+65WDnS4zbU7ZcVGqlWGPZ0E5SjPc2IwhApRYcWRTEmK5aqsBEbCgC xr038ExkwneZIKG/Wq7gkE54kHIvve07ufzwXEXjNvHnyor1hSFijM6fK2IVC1O0Q9vZ dx0KN86oA3XVsnG0Ord+6iICnk6KqxE6Jy76SbHRa301w8XjuqBdaHB/IoPIf3QqpR3a ca5OmXARUsRFcGmAU5Eu5UGwnEfLzSLgk5FzlwzY11k61nhtB2SnYOTnt1xMbZKq1v4H PuZA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=p7/bmtTFvQ8peZZE+NqqxcWmZzWygPivJaEa+yck3g8=; fh=2IEPXKfVhtoEq98sN8HxvD68vbFBiQMtPfzbhuI145g=; b=UKHb3o3aLbs/Wfzd404XNMCkjIC7DbxRy/UA/doaAuLhzSXcAhhhpMj1v4p93t2LX7 bcl0LY+8gOuF2ByMu9lnqJa8egprN/n0HJMwFOlNytdaPGa7sACcRlOik7IFIh1NROzW Xa7/YKUPBxy6Spc0isPG9trhFsynIi3jPnzvmdnGpOcbOhrqMswRVcwFQWxRxhfctvNW qRYM5IoXL9Iho4lD4JtgKgMsTKplc+1tPYSWtUCzIXqA/p0rjCaoj1VJnsKsKx8c1iMr i0aLWhSaB90wGAqe0QonSCaQQh5Wlxp0BwO00YQKIdkCWRMF2U4MGm4DZKaofqx+YEzc gKxA== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=altlinux.org); spf=pass (google.com: domain of linux-kernel+bounces-44297-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-44297-ouuuleilei=gmail.com@vger.kernel.org" Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id n20-20020a170902d0d400b001d42ccfc41asi3965277pln.647.2024.01.30.02.14.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jan 2024 02:14:44 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-44297-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=altlinux.org); spf=pass (google.com: domain of linux-kernel+bounces-44297-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-44297-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 12AE1B2D371 for ; Tue, 30 Jan 2024 09:49:49 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B252E679EC; Tue, 30 Jan 2024 09:47:32 +0000 (UTC) Received: from air.basealt.ru (air.basealt.ru [194.107.17.39]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9578464CE9; Tue, 30 Jan 2024 09:47:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=194.107.17.39 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706608050; cv=none; b=tN+V1xt0VX4zpCjcTLVhBjEYGlDdhReySHBmCCG+hGqEv5dAF5WEh12QISoCCOQz+TzZv527rp97NvRxsxM84mooxa55QgAHGQX2d466CWOZ574HV77mqIRIBKBxrfbaXtyR6iSHfzWGeJO6jekEozGmW5rYc6dUF20AAwVzB/A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706608050; c=relaxed/simple; bh=oS3AHplQmCRdXXSejB5i1KR+12GyFSBJYf63Yd7y340=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=V5QUmb+M+NbeGG43Be3DJt/9ifoTWw59T2/gakT6r5MX1Xa3lSgikq/aDk3cCkzrLFGicIS0vTHtGf3SkrIgWMHFXuJUANrBDm40lN7ODvah8jYpzMJ/BZDFGllO5XRq3Zw5rEzjnU940PMBkp0orDFI8ECZkDCMLQ5ebsMtp50= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=altlinux.org; spf=pass smtp.mailfrom=altlinux.org; arc=none smtp.client-ip=194.107.17.39 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=altlinux.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=altlinux.org Received: by air.basealt.ru (Postfix, from userid 490) id 4E4D42F2022A; Tue, 30 Jan 2024 09:47:24 +0000 (UTC) X-Spam-Level: Received: from altlinux.malta.altlinux.ru (obninsk.basealt.ru [217.15.195.17]) by air.basealt.ru (Postfix) with ESMTPSA id D77732F20245; Tue, 30 Jan 2024 09:47:14 +0000 (UTC) From: kovalev@altlinux.org To: stable@vger.kernel.org Cc: linux-kernel@vger.kernel.org, alsa-devel@alsa-project.org, u.kleine-koenig@pengutronix.de, a.firago@yadro.com, sashal@kernel.org, zhuning0077@gmail.com, tiwai@suse.com, perex@perex.cz, broonie@kernel.org, lgirdwood@gmail.com, kovalev@altlinux.org Subject: [PATCH 6.1.y 2/7] ASoC: codecs: ES8326: Add es8326_mute function Date: Tue, 30 Jan 2024 12:47:03 +0300 Message-Id: <20240130094708.290485-3-kovalev@altlinux.org> X-Mailer: git-send-email 2.33.8 In-Reply-To: <20240130094708.290485-1-kovalev@altlinux.org> References: <20240130094708.290485-1-kovalev@altlinux.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789509956950688988 X-GMAIL-MSGID: 1789509956950688988 From: Zhu Ning Commit 083912c240de0c5f797da0443f5a99e87b75fcb3 upstream. The internal analog power and hp Vref of es8326 should always be on to reduce pop noise. The HP_VOL and HP_CAL are moved to es8326_mute function so they are turned on at last and turned off at first. Also, the calibration should be done manually once during start-up to reduce DC offset on headphone. Signed-off-by: Zhu Ning Link: https://lore.kernel.org/r/20230714032453.3334-1-zhuning0077@gmail.com Signed-off-by: Mark Brown Signed-off-by: Vasiliy Kovalev --- sound/soc/codecs/es8326.c | 75 ++++++++++++++++----------------------- sound/soc/codecs/es8326.h | 8 +++-- 2 files changed, 36 insertions(+), 47 deletions(-) diff --git a/sound/soc/codecs/es8326.c b/sound/soc/codecs/es8326.c index 28a0565c2a955b..4399ba36aee25d 100644 --- a/sound/soc/codecs/es8326.c +++ b/sound/soc/codecs/es8326.c @@ -38,6 +38,9 @@ struct es8326_priv { u8 interrupt_clk; bool jd_inverted; unsigned int sysclk; + + bool calibrated; + int version; }; static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(dac_vol_tlv, -9550, 50, 0); @@ -121,33 +124,12 @@ static const struct snd_soc_dapm_widget es8326_dapm_widgets[] = { /* Analog Power Supply*/ SND_SOC_DAPM_DAC("Right DAC", NULL, ES8326_ANA_PDN, 0, 1), SND_SOC_DAPM_DAC("Left DAC", NULL, ES8326_ANA_PDN, 1, 1), - SND_SOC_DAPM_SUPPLY("Analog Power", ES8326_ANA_PDN, 7, 1, NULL, 0), - SND_SOC_DAPM_SUPPLY("IBias Power", ES8326_ANA_PDN, 6, 1, NULL, 0), - SND_SOC_DAPM_SUPPLY("ADC Vref", ES8326_ANA_PDN, 5, 1, NULL, 0), - SND_SOC_DAPM_SUPPLY("DAC Vref", ES8326_ANA_PDN, 4, 1, NULL, 0), - SND_SOC_DAPM_SUPPLY("Vref Power", ES8326_ANA_PDN, 3, 1, NULL, 0), SND_SOC_DAPM_SUPPLY("MICBIAS1", ES8326_ANA_MICBIAS, 2, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("MICBIAS2", ES8326_ANA_MICBIAS, 3, 0, NULL, 0), SND_SOC_DAPM_PGA("LHPMIX", ES8326_DAC2HPMIX, 7, 0, NULL, 0), SND_SOC_DAPM_PGA("RHPMIX", ES8326_DAC2HPMIX, 3, 0, NULL, 0), - /* Headphone Charge Pump and Output */ - SND_SOC_DAPM_SUPPLY("HPOR Cal", ES8326_HP_CAL, 7, 1, NULL, 0), - SND_SOC_DAPM_SUPPLY("HPOL Cal", ES8326_HP_CAL, 3, 1, NULL, 0), - SND_SOC_DAPM_SUPPLY("Headphone Charge Pump", ES8326_HP_DRIVER, - 3, 1, NULL, 0), - SND_SOC_DAPM_SUPPLY("Headphone Driver Bias", ES8326_HP_DRIVER, - 2, 1, NULL, 0), - SND_SOC_DAPM_SUPPLY("Headphone LDO", ES8326_HP_DRIVER, - 1, 1, NULL, 0), - SND_SOC_DAPM_SUPPLY("Headphone Reference", ES8326_HP_DRIVER, - 0, 1, NULL, 0), - SND_SOC_DAPM_REG(snd_soc_dapm_supply, "HPOR Supply", ES8326_HP_CAL, - ES8326_HPOR_SHIFT, 7, 7, 0), - SND_SOC_DAPM_REG(snd_soc_dapm_supply, "HPOL Supply", ES8326_HP_CAL, - 0, 7, 7, 0), - SND_SOC_DAPM_OUTPUT("HPOL"), SND_SOC_DAPM_OUTPUT("HPOR"), }; @@ -166,34 +148,12 @@ static const struct snd_soc_dapm_route es8326_dapm_routes[] = { {"I2S OUT", NULL, "ADC L"}, {"I2S OUT", NULL, "ADC R"}, - {"I2S OUT", NULL, "Analog Power"}, - {"I2S OUT", NULL, "ADC Vref"}, - {"I2S OUT", NULL, "Vref Power"}, - {"I2S OUT", NULL, "IBias Power"}, - {"I2S IN", NULL, "Analog Power"}, - {"I2S IN", NULL, "DAC Vref"}, - {"I2S IN", NULL, "Vref Power"}, - {"I2S IN", NULL, "IBias Power"}, - {"Right DAC", NULL, "I2S IN"}, {"Left DAC", NULL, "I2S IN"}, {"LHPMIX", NULL, "Left DAC"}, {"RHPMIX", NULL, "Right DAC"}, - {"HPOR", NULL, "HPOR Cal"}, - {"HPOL", NULL, "HPOL Cal"}, - {"HPOR", NULL, "HPOR Supply"}, - {"HPOL", NULL, "HPOL Supply"}, - {"HPOL", NULL, "Headphone Charge Pump"}, - {"HPOR", NULL, "Headphone Charge Pump"}, - {"HPOL", NULL, "Headphone Driver Bias"}, - {"HPOR", NULL, "Headphone Driver Bias"}, - {"HPOL", NULL, "Headphone LDO"}, - {"HPOR", NULL, "Headphone LDO"}, - {"HPOL", NULL, "Headphone Reference"}, - {"HPOR", NULL, "Headphone Reference"}, - {"HPOL", NULL, "LHPMIX"}, {"HPOR", NULL, "RHPMIX"}, }; @@ -419,6 +379,31 @@ static int es8326_pcm_hw_params(struct snd_pcm_substream *substream, return 0; } +static int es8326_mute(struct snd_soc_dai *dai, int mute, int direction) +{ + struct snd_soc_component *component = dai->component; + struct es8326_priv *es8326 = snd_soc_component_get_drvdata(component); + + if (mute) { + regmap_write(es8326->regmap, ES8326_HP_CAL, ES8326_HP_OFF); + regmap_update_bits(es8326->regmap, ES8326_DAC_MUTE, + ES8326_MUTE_MASK, ES8326_MUTE); + regmap_write(es8326->regmap, ES8326_HP_DRIVER, 0xf0); + } else { + if (!es8326->calibrated) { + regmap_write(es8326->regmap, ES8326_HP_CAL, ES8326_HP_FORCE_CAL); + msleep(30); + es8326->calibrated = true; + } + regmap_write(es8326->regmap, ES8326_HP_DRIVER, 0xa0); + regmap_write(es8326->regmap, ES8326_HP_VOL, 0x00); + regmap_write(es8326->regmap, ES8326_HP_CAL, ES8326_HP_ON); + regmap_update_bits(es8326->regmap, ES8326_DAC_MUTE, + ES8326_MUTE_MASK, ~(ES8326_MUTE)); + } + return 0; +} + static int es8326_set_bias_level(struct snd_soc_component *codec, enum snd_soc_bias_level level) { @@ -469,6 +454,8 @@ static const struct snd_soc_dai_ops es8326_ops = { .hw_params = es8326_pcm_hw_params, .set_fmt = es8326_set_dai_fmt, .set_sysclk = es8326_set_dai_sysclk, + .mute_stream = es8326_mute, + .no_capture_mute = 1, }; static struct snd_soc_dai_driver es8326_dai = { @@ -691,7 +678,7 @@ static int es8326_suspend(struct snd_soc_component *component) cancel_delayed_work_sync(&es8326->jack_detect_work); es8326_disable_micbias(component); - + es8326->calibrated = false; regmap_write(es8326->regmap, ES8326_CLK_CTL, ES8326_CLK_OFF); regcache_cache_only(es8326->regmap, true); regcache_mark_dirty(es8326->regmap); diff --git a/sound/soc/codecs/es8326.h b/sound/soc/codecs/es8326.h index 8e5ffe5ee10da3..65ed4d1dc7da09 100644 --- a/sound/soc/codecs/es8326.h +++ b/sound/soc/codecs/es8326.h @@ -9,8 +9,6 @@ #ifndef _ES8326_H #define _ES8326_H -#define CONFIG_HHTECH_MINIPMP 1 - /* ES8326 register space */ #define ES8326_RESET 0x00 #define ES8326_CLK_CTL 0x01 @@ -94,6 +92,8 @@ #define ES8326_PWRUP_SEQ_EN (1 << 5) #define ES8326_CODEC_RESET (0x0f << 0) #define ES8326_CSM_OFF (0 << 7) +#define ES8326_MUTE_MASK (3 << 0) +#define ES8326_MUTE (3 << 0) /* ES8326_CLK_CTL */ #define ES8326_CLK_ON (0x7f << 0) @@ -122,7 +122,9 @@ #define ES8326_MIC2_SEL (1 << 5) /* ES8326_HP_CAL */ -#define ES8326_HPOR_SHIFT 4 +#define ES8326_HP_OFF 0 +#define ES8326_HP_FORCE_CAL ((1 << 7) | (1 << 3)) +#define ES8326_HP_ON ((7 << 4) | (7 << 0)) /* ES8326_ADC1_SRC */ #define ES8326_ADC1_SHIFT 0 From patchwork Tue Jan 30 09:47:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasiliy Kovalev X-Patchwork-Id: 193927 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2087:b0:106:209c:c626 with SMTP id gs7csp1105714dyb; Tue, 30 Jan 2024 01:49:37 -0800 (PST) X-Google-Smtp-Source: AGHT+IGOkRAGanK6Q/z7HzBJmwDtZrTYuQWiwD0qvjlgLYUhNaAQShynZ1Vq84nPls2K29Ze0cPK X-Received: by 2002:a17:907:9850:b0:a35:c518:8808 with SMTP id jj16-20020a170907985000b00a35c5188808mr3145010ejc.30.1706608177270; Tue, 30 Jan 2024 01:49:37 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706608177; cv=pass; d=google.com; s=arc-20160816; b=uhrlWHKDS/UIMQlfR/YG8KLKkHLGdOKAuQos+qSV7TnPsKR9NjieQ+tNK8SnetfJAi fZLslLHZxP+E/850PLzrNJ5RwKWBpsk4XKOD3C9av8JeN7nCq+TIuUM1oJk4DyZfXUPp jXgOoltHOF/2KwQ4blj5ymBae9gPThMs/WDFICfZ0n8BhItg+SGW7nBUcGXrOwikOisX m7qXXVw3aq5TvNnWEBT5eBtJi8JmJFQu9HGCQM5FYt2QzbmVPQPo4eHs+3np0EAT1Jb1 lLEdH0AkOMOWBcKUWN5gcIJTedB4wZCwbXxnOuwJ6EwWmv2olOgvTeIwI7AzK4oUA/QG VKQQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=+uAvQpNEnwwPgGsT3n1N+IWU/sMa0yvWeEiugPyDrPo=; fh=2IEPXKfVhtoEq98sN8HxvD68vbFBiQMtPfzbhuI145g=; b=nQ03qvX2RcN+IZ2uAUxuXkhes3LUP8oUJ87Xg2hROwZLtNIYIsq37mz3ESBwn/FZR9 PS45PZqO1/9LXeGtZKjSo7cmi2vIGXXnFj1Psftz3c2pVfpKUNaIqLbMtnprYmUT03Jc RB/wwl/+ncw77F4aQO9M8ZYvsDMtfvCWASHwQbHBmb2ewinKIHMgwc97x9z50oO/GrUy rcGGdTpGBXfXmvz8IfbxwJ4ZgYBvBqZhfbUSJq6Hffh6aCeb/B19vdXTtUbLtn5oXdN9 ft5PXycRfFNr0DZPIWGa1GIxUQKC4JBPY9jNp3yy0kYIwY6V5IbUDgsRoPUcWcvP9GyH yIqw== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=altlinux.org); spf=pass (google.com: domain of linux-kernel+bounces-44296-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-44296-ouuuleilei=gmail.com@vger.kernel.org" Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id ks19-20020a170906f85300b00a33b00b4a95si4521859ejb.218.2024.01.30.01.49.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jan 2024 01:49:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-44296-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=altlinux.org); spf=pass (google.com: domain of linux-kernel+bounces-44296-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-44296-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id DC3101F26B69 for ; Tue, 30 Jan 2024 09:49:36 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 0780D6774B; Tue, 30 Jan 2024 09:47:32 +0000 (UTC) Received: from air.basealt.ru (air.basealt.ru [194.107.17.39]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 835A460EE3; Tue, 30 Jan 2024 09:47:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=194.107.17.39 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706608050; cv=none; b=t0Td1CgBwkNWSEivbfR4OtEvfvwsySPnQWJNIOsTmrnRmPohHcGVGCMjrUlq3l400iyDLaFfNkOwx6u32933JOyNYwAm69cBQgc8g020KFWLC/56ZASw4LvIzS58WYORDA2oARXDF5CsmTlzBoaJ/OFIXrrKZSe7lzYD3Hpo2fQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706608050; c=relaxed/simple; bh=Vfso/C8CN8vhPgHwFVBu3LMdly1p1IeCNCLYdujPsJk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=MrKsmAazTRXMtQYJGCaGuuGS19uiE6isHT+ciWLrkuVXUULJ6JOWnGdv+ONTsZzoUaQEYha1kJVy76xnGgkpzX+IPbsxbTVoQi68ICKQdMLZYxpfLpajazkqqxVl2wBjzYE0WzrACRWsmTuBWrRNNs8aj23OMapet2TFEQo1qu4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=altlinux.org; spf=pass smtp.mailfrom=altlinux.org; arc=none smtp.client-ip=194.107.17.39 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=altlinux.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=altlinux.org Received: by air.basealt.ru (Postfix, from userid 490) id D4B7B2F20243; Tue, 30 Jan 2024 09:47:26 +0000 (UTC) X-Spam-Level: Received: from altlinux.malta.altlinux.ru (obninsk.basealt.ru [217.15.195.17]) by air.basealt.ru (Postfix) with ESMTPSA id F27152F20246; Tue, 30 Jan 2024 09:47:14 +0000 (UTC) From: kovalev@altlinux.org To: stable@vger.kernel.org Cc: linux-kernel@vger.kernel.org, alsa-devel@alsa-project.org, u.kleine-koenig@pengutronix.de, a.firago@yadro.com, sashal@kernel.org, zhuning0077@gmail.com, tiwai@suse.com, perex@perex.cz, broonie@kernel.org, lgirdwood@gmail.com, kovalev@altlinux.org Subject: [PATCH 6.1.y 3/7] ASoC: codecs: ES8326: Change Hp_detect register names Date: Tue, 30 Jan 2024 12:47:04 +0300 Message-Id: <20240130094708.290485-4-kovalev@altlinux.org> X-Mailer: git-send-email 2.33.8 In-Reply-To: <20240130094708.290485-1-kovalev@altlinux.org> References: <20240130094708.290485-1-kovalev@altlinux.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789508376168279993 X-GMAIL-MSGID: 1789508376168279993 From: Zhu Ning Commit 4ddad00c609bdcd6635537d3acb9bd57a5fc79e6 upstream. The old register naming method is confusing. The reg 0x57 decides the default headset hardware connection type, and the reg 0xfb is the headset detection status register, which changes during headset insertion. Change the name to ES8326_HPDET_TYPE and ES8326_HPDET_STA. Signed-off-by: Zhu Ning Link: https://lore.kernel.org/r/20230717033223.42506-1-zhuning0077@gmail.com Signed-off-by: Mark Brown Signed-off-by: Vasiliy Kovalev --- sound/soc/codecs/es8326.c | 10 +++++----- sound/soc/codecs/es8326.h | 12 ++++++++---- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/sound/soc/codecs/es8326.c b/sound/soc/codecs/es8326.c index 4399ba36aee25d..e953c0157ba03f 100644 --- a/sound/soc/codecs/es8326.c +++ b/sound/soc/codecs/es8326.c @@ -159,7 +159,7 @@ static const struct snd_soc_dapm_route es8326_dapm_routes[] = { }; static const struct regmap_range es8326_volatile_ranges[] = { - regmap_reg_range(ES8326_HP_DETECT, ES8326_HP_DETECT), + regmap_reg_range(ES8326_HPDET_STA, ES8326_HPDET_STA), }; static const struct regmap_access_table es8326_volatile_table = { @@ -519,7 +519,7 @@ static void es8326_jack_button_handler(struct work_struct *work) return; mutex_lock(&es8326->lock); - iface = snd_soc_component_read(comp, ES8326_HP_DETECT); + iface = snd_soc_component_read(comp, ES8326_HPDET_STA); switch (iface) { case 0x93: /* pause button detected */ @@ -578,7 +578,7 @@ static void es8326_jack_detect_handler(struct work_struct *work) unsigned int iface; mutex_lock(&es8326->lock); - iface = snd_soc_component_read(comp, ES8326_HP_DETECT); + iface = snd_soc_component_read(comp, ES8326_HPDET_STA); dev_dbg(comp->dev, "gpio flag %#04x", iface); if ((iface & ES8326_HPINSERT_FLAG) == 0) { /* Jack unplugged or spurious IRQ */ @@ -651,7 +651,7 @@ static int es8326_resume(struct snd_soc_component *component) regmap_write(es8326->regmap, ES8326_ADC1_SRC, es8326->mic1_src); regmap_write(es8326->regmap, ES8326_ADC2_SRC, es8326->mic2_src); regmap_write(es8326->regmap, ES8326_HPJACK_TIMER, 0x88); - regmap_write(es8326->regmap, ES8326_HP_DET, + regmap_write(es8326->regmap, ES8326_HPDET_TYPE, ES8326_HP_DET_SRC_PIN9 | es8326->jack_pol); regmap_write(es8326->regmap, ES8326_INT_SOURCE, es8326->interrupt_src); regmap_write(es8326->regmap, ES8326_INTOUT_IO, es8326->interrupt_clk); @@ -743,7 +743,7 @@ static void es8326_enable_jack_detect(struct snd_soc_component *component, mutex_lock(&es8326->lock); if (es8326->jd_inverted) - snd_soc_component_update_bits(component, ES8326_HP_DET, + snd_soc_component_update_bits(component, ES8326_HPDET_TYPE, ES8326_HP_DET_JACK_POL, ~es8326->jack_pol); es8326->jack = jack; diff --git a/sound/soc/codecs/es8326.h b/sound/soc/codecs/es8326.h index 65ed4d1dc7da09..cd04d11a88d96a 100644 --- a/sound/soc/codecs/es8326.h +++ b/sound/soc/codecs/es8326.h @@ -73,15 +73,19 @@ #define ES8326_DRC_RECOVERY 0x53 #define ES8326_DRC_WINSIZE 0x54 #define ES8326_HPJACK_TIMER 0x56 -#define ES8326_HP_DET 0x57 +#define ES8326_HPDET_TYPE 0x57 #define ES8326_INT_SOURCE 0x58 #define ES8326_INTOUT_IO 0x59 #define ES8326_SDINOUT1_IO 0x5A #define ES8326_SDINOUT23_IO 0x5B #define ES8326_JACK_PULSE 0x5C +#define ES8326_HP_MISC 0xF7 +#define ES8326_CTIA_OMTP_STA 0xF8 #define ES8326_PULLUP_CTL 0xF9 -#define ES8326_HP_DETECT 0xFB +#define ES8326_CSM_I2C_STA 0xFA +#define ES8326_HPDET_STA 0xFB +#define ES8326_CSM_MUTE_STA 0xFC #define ES8326_CHIP_ID1 0xFD #define ES8326_CHIP_ID2 0xFE #define ES8326_CHIP_VERSION 0xFF @@ -146,7 +150,7 @@ #define ES8326_ADC3_SHIFT 0 #define ES8326_ADC4_SHIFT 3 -/* ES8326_HP_DET */ +/* ES8326_HPDET_TYPE */ #define ES8326_HP_DET_SRC_PIN27 (1 << 5) #define ES8326_HP_DET_SRC_PIN9 (1 << 4) #define ES8326_HP_DET_JACK_POL (1 << 3) @@ -174,7 +178,7 @@ #define ES8326_SDINOUT2_SHIFT 4 #define ES8326_SDINOUT3_SHIFT 0 -/* ES8326_HP_DETECT */ +/* ES8326_HPDET_STA */ #define ES8326_HPINSERT_FLAG (1 << 1) #define ES8326_HPBUTTON_FLAG (1 << 0) From patchwork Tue Jan 30 09:47:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasiliy Kovalev X-Patchwork-Id: 193955 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2087:b0:106:209c:c626 with SMTP id gs7csp1114934dyb; Tue, 30 Jan 2024 02:12:16 -0800 (PST) X-Google-Smtp-Source: AGHT+IHtUONnCQ/TcDXfnCTqNXxLoxYfX+tbRWNhMSQXaQgFyxVlqGJCFeJO4do/lBQvs0iA3AVA X-Received: by 2002:a05:6358:2783:b0:178:7820:88fa with SMTP id l3-20020a056358278300b00178782088famr2638169rwb.36.1706609536723; Tue, 30 Jan 2024 02:12:16 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706609536; cv=pass; d=google.com; s=arc-20160816; b=AKmKsD18dSr36ce3ZkAgbppP8w2rKgnBwhw7iorb8UWqMSP5dwL507W+KnMBMivzBT t+PHEzsNYQimz9mPd6mB2Tr/FtTTOoyLzKrHm7LVAmrJLq3BIW4jVGN6L5mdzGdUzNT/ KrB1iZr6B7tt1VfyCFiUiKDyIKGiyFZmZgWi2qYvcelANLM+Vv8p87xVt+a60OnSQuHw ruHxUiF0HOAjin3w0qEE18V5FQfPXSr4dmgb1Yyz2VWVf131E+AcWJSvXIJ4T1REj8oK wrtfzEqSrCFRJFhtKjX0koSt878s0ff7ZDf42DrnPhvWCsIB+tSW/LMFlRvpM7Egb8Gm uUGg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=5g5TWNRBFDfVCV8mhZW0j/S3HkCXMZqyh6MkqNv1owc=; fh=2IEPXKfVhtoEq98sN8HxvD68vbFBiQMtPfzbhuI145g=; b=Pg0fhQbg0edTKX0CGvULgCkxTj7wVkrHHs4BfNgqFdHQNdncjDBbhZNF83M5TKZsfj R8nsaEpfBraFs64ls0F8G+QkpQFn6HjjkG2sbTx7EMYZ3DjQwhoB/UZyLaih9jRS6/6/ MbOX+CAbZurEhzHxY07yzUistAB8qMRdZjF2l/Hdy+VceMVHRwLY3rIhZ5aVlRiPek/+ WglH7EpooOhtkLXZEB+xp3HYliNj6VZLjvXwK0PYzIctx6Hazj/JqTkCb0S+W32GZ1Ph D41PiN4u0lYobIxCpgVAPTuLemcchlOcNLOxqBMoqPlhEXnDTuupu+cDRg7qicKIx0yv rHuQ== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=altlinux.org); spf=pass (google.com: domain of linux-kernel+bounces-44292-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-44292-ouuuleilei=gmail.com@vger.kernel.org" Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id z6-20020a633306000000b005d687538882si4492427pgz.351.2024.01.30.02.12.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jan 2024 02:12:16 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-44292-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=altlinux.org); spf=pass (google.com: domain of linux-kernel+bounces-44292-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-44292-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 97530B2843D for ; Tue, 30 Jan 2024 09:48:04 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 54E5160ED1; Tue, 30 Jan 2024 09:47:28 +0000 (UTC) Received: from air.basealt.ru (air.basealt.ru [194.107.17.39]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A8E6F605B4; Tue, 30 Jan 2024 09:47:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=194.107.17.39 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706608046; cv=none; b=heEHMNZc1ryKXrLcCYJLrrQfzXsqqxEg6QI5b6Ay6X5XLVTuKEND5tOGEKqPP31VrlfA36ZJ+OsLUJateBZOHe5DGL/po+0On4VxDcN7x6l/x0ZpprvCKDuFlRFceU34UG0mILMeiVT9geOD7WByGPI4WWLPgm+wKqQ1ysafY0k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706608046; c=relaxed/simple; bh=vklX8QdJvVdaDTo9uEek4zgLDUE4n5/BjuBqUcTksoc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=LsAYlu/am6mC3nXK/t5J0H5Yx+1dOavs2DMygy40fCo/d2ldbPTyjBMme6hf8uKc4reFCZF9+ucakaB+VDYIXm/0FPxdIYMlW4hqotD4kv3JRGIW4bEYxCTo/mVnzTrH/aOexqIcqp61HOOvSw7iU3ITgH9fIW+JxbYUA2hHxFA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=altlinux.org; spf=pass smtp.mailfrom=altlinux.org; arc=none smtp.client-ip=194.107.17.39 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=altlinux.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=altlinux.org Received: by air.basealt.ru (Postfix, from userid 490) id C2EA52F2023D; Tue, 30 Jan 2024 09:47:22 +0000 (UTC) X-Spam-Level: Received: from altlinux.malta.altlinux.ru (obninsk.basealt.ru [217.15.195.17]) by air.basealt.ru (Postfix) with ESMTPSA id 158A22F20248; Tue, 30 Jan 2024 09:47:15 +0000 (UTC) From: kovalev@altlinux.org To: stable@vger.kernel.org Cc: linux-kernel@vger.kernel.org, alsa-devel@alsa-project.org, u.kleine-koenig@pengutronix.de, a.firago@yadro.com, sashal@kernel.org, zhuning0077@gmail.com, tiwai@suse.com, perex@perex.cz, broonie@kernel.org, lgirdwood@gmail.com, kovalev@altlinux.org Subject: [PATCH 6.1.y 4/7] ASoC: codecs: ES8326: Change Volatile Reg function Date: Tue, 30 Jan 2024 12:47:05 +0300 Message-Id: <20240130094708.290485-5-kovalev@altlinux.org> X-Mailer: git-send-email 2.33.8 In-Reply-To: <20240130094708.290485-1-kovalev@altlinux.org> References: <20240130094708.290485-1-kovalev@altlinux.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789509801735776068 X-GMAIL-MSGID: 1789509801735776068 From: Zhu Ning Commit f1230a27c14b4d05e1d6af02be55c617b53728a4 upstream. The new calibration and headphone detection function require reading new volatile registers. Add them in the volatile register function. Signed-off-by: Zhu Ning Link: https://lore.kernel.org/r/20230717033223.42506-2-zhuning0077@gmail.com Signed-off-by: Mark Brown Signed-off-by: Vasiliy Kovalev --- sound/soc/codecs/es8326.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/sound/soc/codecs/es8326.c b/sound/soc/codecs/es8326.c index e953c0157ba03f..7cfe535e0b6da4 100644 --- a/sound/soc/codecs/es8326.c +++ b/sound/soc/codecs/es8326.c @@ -158,20 +158,25 @@ static const struct snd_soc_dapm_route es8326_dapm_routes[] = { {"HPOR", NULL, "RHPMIX"}, }; -static const struct regmap_range es8326_volatile_ranges[] = { - regmap_reg_range(ES8326_HPDET_STA, ES8326_HPDET_STA), -}; - -static const struct regmap_access_table es8326_volatile_table = { - .yes_ranges = es8326_volatile_ranges, - .n_yes_ranges = ARRAY_SIZE(es8326_volatile_ranges), -}; +static bool es8326_volatile_register(struct device *dev, unsigned int reg) +{ + switch (reg) { + case ES8326_HPL_OFFSET_INI: + case ES8326_HPR_OFFSET_INI: + case ES8326_HPDET_STA: + case ES8326_CTIA_OMTP_STA: + case ES8326_CSM_MUTE_STA: + return true; + default: + return false; + } +} static const struct regmap_config es8326_regmap_config = { .reg_bits = 8, .val_bits = 8, .max_register = 0xff, - .volatile_table = &es8326_volatile_table, + .volatile_reg = es8326_volatile_register, .cache_type = REGCACHE_RBTREE, }; From patchwork Tue Jan 30 09:47:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasiliy Kovalev X-Patchwork-Id: 193925 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2087:b0:106:209c:c626 with SMTP id gs7csp1105332dyb; Tue, 30 Jan 2024 01:48:32 -0800 (PST) X-Google-Smtp-Source: AGHT+IHql0PKWYNOLtSnUEXcjpAzORpSKHYp/PVIu0lUm0gA8ogk47IPywatOJZ8NhASPu+P2hBc X-Received: by 2002:a17:906:dfe3:b0:a29:7ddf:40eb with SMTP id lc3-20020a170906dfe300b00a297ddf40ebmr5918646ejc.15.1706608112409; Tue, 30 Jan 2024 01:48:32 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706608112; cv=pass; d=google.com; s=arc-20160816; b=pjpcOHE76oF8l78EygrnVSg/705oLf8pxuXvU+kffP4tDP8RgboPbg3kwWpeWYiLwr vevTw4PDhR8seKjHi7AnvDoChJ5Dxds4PfPyxlrwq2TWNxYz5tflEn1kVNrmslW4tvNx eYZLJkEefVbaPX4LGg4e3yXAJYD/cHXYvnrxzbh1m49xjtffzECcF6eBiocm/lkkRuh/ eMU2vUMR0NGpXeKQEZMyZsSDlcbcel4aXLhLWcraCF6KR88j/7c2PXANgsFxos4Zmxb2 QxfNEBgAcv3NiM+jVFwg+I/Bz6xh34V30Thk8eeFRjbQpWJNgcxKccWPOYZrEZGIDV1L QCMg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=gYy3pcWmOLbdYOae2ou6W+6mIHmmdYW9cutrA+v8mMg=; fh=2IEPXKfVhtoEq98sN8HxvD68vbFBiQMtPfzbhuI145g=; b=NiV1tCFnegfKZXtH+q7745CUrw+dBFJn5wDVxgu8OHnKEMCbb+tcN/mN1XntqZe2DA 6Pm3zc1HzPgeZWBrAmr9jEfpnR39+bDLAr97gNgWRDZSW284CjU1EF2GlOCwq8dN1o+A 5qsSNeExKLBXuEhJw2NN7Pu/862rflNxliQFQIxLa62GxeEogbbLpBE4lGEMUDiaCIiR +1Cn1Nd1m07Mo0oui8ngH7DNjUIh+mFyrEyJrCHM0qP+KS4KhQ6C70BVmIiNKbMNn6sX g3RLGmhl8KQHvJMu7EIHX6nkZD7ACV7JEzyUALrfmXOSwBRl8X39iCwg+if3wxbV1xah 7ZeQ== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=altlinux.org); spf=pass (google.com: domain of linux-kernel+bounces-44293-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-44293-ouuuleilei=gmail.com@vger.kernel.org" Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id w13-20020a17090652cd00b00a352247f15esi3669701ejn.317.2024.01.30.01.48.32 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jan 2024 01:48:32 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-44293-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=altlinux.org); spf=pass (google.com: domain of linux-kernel+bounces-44293-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-44293-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id D8F861F26456 for ; Tue, 30 Jan 2024 09:48:31 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 0A6F4664A2; Tue, 30 Jan 2024 09:47:30 +0000 (UTC) Received: from air.basealt.ru (air.basealt.ru [194.107.17.39]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 80AF2605B7; Tue, 30 Jan 2024 09:47:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=194.107.17.39 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706608047; cv=none; b=SrcmUpODQeQy2ROoCZqwUTR0DtJeiBocFiZOp3eJBIU/hJJWcetCBJRuIlbqFb/NAtXJaXMFCGD7oCirQzPHmgYVytDBtqIf43wTF/pTzSMxS96Ea3KCc2hbSkO5h1zRVToGphJdJU8vRQupnEKkmCW1Y/7R9VnEB4hWD0kZqEM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706608047; c=relaxed/simple; bh=d58+YjxAi04mpwiggYeDzz/w2OBikaq/JODLbdc/FF8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Xq+DZLdHCB4fJvHAlBErQDq8PO3VgkGuqfnPyGD6s2EucHqVS3CZnTRGznmDznMqFmx0vGIVx7RzO5W/LwiwMd960AAIy1S3WMZdAZqGRto6DIXlNXV8rmQipnyF0a3DLO8iVe7r2qgqELd3i+wkFqsjNv1m9j+OVmFKWoZmnoA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=altlinux.org; spf=pass smtp.mailfrom=altlinux.org; arc=none smtp.client-ip=194.107.17.39 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=altlinux.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=altlinux.org Received: by air.basealt.ru (Postfix, from userid 490) id 35A7B2F20241; Tue, 30 Jan 2024 09:47:18 +0000 (UTC) X-Spam-Level: Received: from altlinux.malta.altlinux.ru (obninsk.basealt.ru [217.15.195.17]) by air.basealt.ru (Postfix) with ESMTPSA id 320B62F20247; Tue, 30 Jan 2024 09:47:15 +0000 (UTC) From: kovalev@altlinux.org To: stable@vger.kernel.org Cc: linux-kernel@vger.kernel.org, alsa-devel@alsa-project.org, u.kleine-koenig@pengutronix.de, a.firago@yadro.com, sashal@kernel.org, zhuning0077@gmail.com, tiwai@suse.com, perex@perex.cz, broonie@kernel.org, lgirdwood@gmail.com, kovalev@altlinux.org Subject: [PATCH 6.1.y 5/7] ASoC: codecs: ES8326: Fix power-up sequence Date: Tue, 30 Jan 2024 12:47:06 +0300 Message-Id: <20240130094708.290485-6-kovalev@altlinux.org> X-Mailer: git-send-email 2.33.8 In-Reply-To: <20240130094708.290485-1-kovalev@altlinux.org> References: <20240130094708.290485-1-kovalev@altlinux.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789508308191447441 X-GMAIL-MSGID: 1789508308191447441 From: Zhu Ning Commit ac20a73d765c0374f5e7b5d0f2f43c4598d69c66 upstream. Old power-up sequence causes large pop noise during start-up. Using a new sequence instead. Also, the registers are now reset to default value in suspend function. Signed-off-by: Zhu Ning Link: https://lore.kernel.org/r/20230717033223.42506-3-zhuning0077@gmail.com Signed-off-by: Mark Brown Signed-off-by: Vasiliy Kovalev --- sound/soc/codecs/es8326.c | 95 ++++++++++++++++++++++++++++----------- sound/soc/codecs/es8326.h | 10 ++++- 2 files changed, 77 insertions(+), 28 deletions(-) diff --git a/sound/soc/codecs/es8326.c b/sound/soc/codecs/es8326.c index 7cfe535e0b6da4..1525fac1f9b8b1 100644 --- a/sound/soc/codecs/es8326.c +++ b/sound/soc/codecs/es8326.c @@ -638,40 +638,77 @@ static irqreturn_t es8326_irq(int irq, void *dev_id) static int es8326_resume(struct snd_soc_component *component) { struct es8326_priv *es8326 = snd_soc_component_get_drvdata(component); - unsigned int reg; regcache_cache_only(es8326->regmap, false); regcache_sync(es8326->regmap); + /* reset internal clock state */ + regmap_write(es8326->regmap, ES8326_RESET, 0x1f); + regmap_write(es8326->regmap, ES8326_VMIDSEL, 0x0E); + usleep_range(10000, 15000); + regmap_write(es8326->regmap, ES8326_HPJACK_TIMER, 0x88); + /* set headphone default type and detect pin */ + regmap_write(es8326->regmap, ES8326_HPDET_TYPE, 0x81); + regmap_write(es8326->regmap, ES8326_CLK_RESAMPLE, 0x05); + + /* set internal oscillator as clock source of headpone cp */ + regmap_write(es8326->regmap, ES8326_CLK_DIV_CPC, 0x84); regmap_write(es8326->regmap, ES8326_CLK_CTL, ES8326_CLK_ON); - /* Two channel ADC */ - regmap_write(es8326->regmap, ES8326_PULLUP_CTL, 0x02); + /* clock manager reset release */ + regmap_write(es8326->regmap, ES8326_RESET, 0x17); + /* set headphone detection as half scan mode */ + regmap_write(es8326->regmap, ES8326_HP_MISC, 0x08); + regmap_write(es8326->regmap, ES8326_PULLUP_CTL, 0x00); + + /* enable headphone driver */ + regmap_write(es8326->regmap, ES8326_HP_DRIVER, 0xa7); + usleep_range(2000, 5000); + regmap_write(es8326->regmap, ES8326_HP_DRIVER_REF, 0xab); + usleep_range(2000, 5000); + regmap_write(es8326->regmap, ES8326_HP_DRIVER_REF, 0xbb); + usleep_range(2000, 5000); + regmap_write(es8326->regmap, ES8326_HP_DRIVER, 0xa1); + regmap_write(es8326->regmap, ES8326_CLK_INV, 0x00); - regmap_write(es8326->regmap, ES8326_CLK_DIV_CPC, 0x1F); - regmap_write(es8326->regmap, ES8326_CLK_VMIDS1, 0xC8); - regmap_write(es8326->regmap, ES8326_CLK_VMIDS2, 0x88); - regmap_write(es8326->regmap, ES8326_CLK_CAL_TIME, 0x20); + regmap_write(es8326->regmap, ES8326_CLK_VMIDS1, 0xc4); + regmap_write(es8326->regmap, ES8326_CLK_VMIDS2, 0x81); + regmap_write(es8326->regmap, ES8326_CLK_CAL_TIME, 0x00); + + /* turn off headphone out */ + regmap_write(es8326->regmap, ES8326_HP_CAL, 0x00); + /* set ADC and DAC in low power mode */ + regmap_write(es8326->regmap, ES8326_ANA_LP, 0xf0); + + /* force micbias on */ + regmap_write(es8326->regmap, ES8326_ANA_MICBIAS, 0x4f); regmap_write(es8326->regmap, ES8326_SYS_BIAS, 0x08); - regmap_write(es8326->regmap, ES8326_DAC2HPMIX, 0x22); - regmap_write(es8326->regmap, ES8326_ADC1_SRC, es8326->mic1_src); - regmap_write(es8326->regmap, ES8326_ADC2_SRC, es8326->mic2_src); - regmap_write(es8326->regmap, ES8326_HPJACK_TIMER, 0x88); - regmap_write(es8326->regmap, ES8326_HPDET_TYPE, - ES8326_HP_DET_SRC_PIN9 | es8326->jack_pol); - regmap_write(es8326->regmap, ES8326_INT_SOURCE, es8326->interrupt_src); - regmap_write(es8326->regmap, ES8326_INTOUT_IO, es8326->interrupt_clk); + regmap_write(es8326->regmap, ES8326_ANA_VSEL, 0x7F); + /* select vdda as micbias source */ + regmap_write(es8326->regmap, ES8326_VMIDLOW, 0x23); + /* set dac dsmclip = 1 */ + regmap_write(es8326->regmap, ES8326_DAC_DSM, 0x08); + regmap_write(es8326->regmap, ES8326_DAC_VPPSCALE, 0x15); + + regmap_write(es8326->regmap, ES8326_INT_SOURCE, + (ES8326_INT_SRC_PIN9 | ES8326_INT_SRC_BUTTON)); + regmap_write(es8326->regmap, ES8326_INTOUT_IO, + es8326->interrupt_clk); + regmap_write(es8326->regmap, ES8326_SDINOUT1_IO, + (ES8326_IO_DMIC_CLK << ES8326_SDINOUT1_SHIFT)); + regmap_write(es8326->regmap, ES8326_SDINOUT23_IO, ES8326_IO_INPUT); + + regmap_write(es8326->regmap, ES8326_ANA_PDN, 0x3b); regmap_write(es8326->regmap, ES8326_RESET, ES8326_CSM_ON); - snd_soc_component_update_bits(component, ES8326_PGAGAIN, - ES8326_MIC_SEL_MASK, ES8326_MIC1_SEL); - - regmap_read(es8326->regmap, ES8326_CHIP_VERSION, ®); - if ((reg & ES8326_VERSION_B) == 1) { - regmap_write(es8326->regmap, ES8326_ANA_MICBIAS, 0xDD); - regmap_write(es8326->regmap, ES8326_ANA_VSEL, 0x7F); - regmap_write(es8326->regmap, ES8326_VMIDLOW, 0x0F); - /* enable button detect */ - regmap_write(es8326->regmap, ES8326_HP_DRIVER, 0xA0); - } + regmap_update_bits(es8326->regmap, ES8326_PGAGAIN, ES8326_MIC_SEL_MASK, + ES8326_MIC1_SEL); + + regmap_update_bits(es8326->regmap, ES8326_DAC_MUTE, ES8326_MUTE_MASK, + ES8326_MUTE); + + regmap_write(es8326->regmap, ES8326_HPDET_TYPE, 0x80 | + ((es8326->version == ES8326_VERSION_B) ? + (ES8326_HP_DET_SRC_PIN9 | es8326->jack_pol) : + (ES8326_HP_DET_SRC_PIN9 | es8326->jack_pol | 0x04))); es8326_irq(es8326->irq, es8326); return 0; @@ -688,6 +725,10 @@ static int es8326_suspend(struct snd_soc_component *component) regcache_cache_only(es8326->regmap, true); regcache_mark_dirty(es8326->regmap); + /* reset register value to default */ + regmap_write(es8326->regmap, ES8326_CSM_I2C_STA, 0x01); + usleep_range(1000, 3000); + regmap_write(es8326->regmap, ES8326_CSM_I2C_STA, 0x00); return 0; } @@ -717,7 +758,7 @@ static int es8326_probe(struct snd_soc_component *component) ret = device_property_read_u8(component->dev, "everest,jack-pol", &es8326->jack_pol); if (ret != 0) { dev_dbg(component->dev, "jack-pol return %d", ret); - es8326->jack_pol = ES8326_HP_DET_BUTTON_POL | ES8326_HP_TYPE_OMTP; + es8326->jack_pol = ES8326_HP_TYPE_AUTO; } dev_dbg(component->dev, "jack-pol %x", es8326->jack_pol); diff --git a/sound/soc/codecs/es8326.h b/sound/soc/codecs/es8326.h index cd04d11a88d96a..90a08351d6acd0 100644 --- a/sound/soc/codecs/es8326.h +++ b/sound/soc/codecs/es8326.h @@ -160,6 +160,13 @@ #define ES8326_HP_TYPE_AUTO (1 << 0) #define ES8326_HP_TYPE_AUTO_INV (0 << 0) +/* ES8326_INT_SOURCE */ +#define ES8326_INT_SRC_DAC_MOZ (1 << 0) +#define ES8326_INT_SRC_ADC_MOZ (1 << 1) +#define ES8326_INT_SRC_BUTTON (1 << 2) +#define ES8326_INT_SRC_PIN9 (1 << 3) +#define ES8326_INT_SRC_PIN27 (1 << 4) + /* ES8326_SDINOUT1_IO */ #define ES8326_IO_INPUT (0 << 0) #define ES8326_IO_SDIN_SLOT0 (1 << 0) @@ -183,6 +190,7 @@ #define ES8326_HPBUTTON_FLAG (1 << 0) /* ES8326_CHIP_VERSION 0xFF */ -#define ES8326_VERSION_B (1 << 0) +#define ES8326_VERSION (1 << 0) +#define ES8326_VERSION_B (3 << 0) #endif From patchwork Tue Jan 30 09:47:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasiliy Kovalev X-Patchwork-Id: 193928 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2087:b0:106:209c:c626 with SMTP id gs7csp1105788dyb; Tue, 30 Jan 2024 01:49:50 -0800 (PST) X-Google-Smtp-Source: AGHT+IGact7Z1RcEBHb+BTaMJqEvbIz/T/26ASLRQZ4vDmqp4N1e8+B0Qu3P5sO8p6+/S/tfmd40 X-Received: by 2002:a05:622a:1884:b0:429:f6bf:3b70 with SMTP id v4-20020a05622a188400b00429f6bf3b70mr1025622qtc.55.1706608190134; Tue, 30 Jan 2024 01:49:50 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706608190; cv=pass; d=google.com; s=arc-20160816; b=0kgNlonks6KsHNWjmdGv5BURPMjTcn4636riz2WDoG8rEoppvDTZ5KogVX4Z3mVP8o rA4rcPbeFRBhQuHVhSXmb2cO/0TuQhgHK6bfw9njSrR8VHSGBWwIUK67hnHhpKlMazDO tYRPyb6uzBuh8U86A0SMvBCqO3dv2xg2sfUsz2NhmknTIH/+jrDQfjme/RqakeYZYs6G bCDhjbwNotEHeEILrXTSXvPNmXPQ+Fx1sZG7qyimhJv051hrc/OEg5/UW6Hi1dNrhXzC X1LfdMb00fX/SINqM0uSThWBves4T2fJvUUKOCOZFcBvNrQ2+kG9wNmFJevgi30fidiu FCxw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=YJkknMuUZM+iB7t//OwLSFfuMsEFiIhYj2An3v+S0Mo=; fh=2IEPXKfVhtoEq98sN8HxvD68vbFBiQMtPfzbhuI145g=; b=bFrLWnUNfHl8KDBc/AI8y52SSFuhPLBhnwXXfcALeEa3ycjdZH4IEwdqyxK17/Iv4C HIBTLuHLoD9tM8X0dbTtZk9qYjAhvqHirjLx6p7ZwczgDdI27tfhH8Ebbbm2e0juCD4f 56qr/akoeuQaWWoAejFrfpqUYFAMlj/3x+AetPMIe6pHV1iQ3gjt5aLhr63a3LRPA/sX P8DNzNaLvAwhWHca2XI9Nc1Qwx/Iw9/ZFO2EpzbzjfSbLWpjfI2ZRetXnsdJfZK/pPua by6zpkDIZyp3a+xE5zNOi+EYRpJ1To5QIYr4AaXzJsyUyQ92oizbXhUfv+re/laJs93I BlpQ== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=altlinux.org); spf=pass (google.com: domain of linux-kernel+bounces-44298-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-44298-ouuuleilei=gmail.com@vger.kernel.org" Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id n12-20020ac85a0c000000b0042bd2a270cdsi242586qta.307.2024.01.30.01.49.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jan 2024 01:49:50 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-44298-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=altlinux.org); spf=pass (google.com: domain of linux-kernel+bounces-44298-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-44298-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id D9D051C2529F for ; Tue, 30 Jan 2024 09:49:49 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D461A679EF; Tue, 30 Jan 2024 09:47:32 +0000 (UTC) Received: from air.basealt.ru (air.basealt.ru [194.107.17.39]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 95753629EF; Tue, 30 Jan 2024 09:47:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=194.107.17.39 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706608050; cv=none; b=YzAZnfwt4TQti+pyl5PNwUeiBEyMzzeCFXPHuaqZNnLy2siuSypP3Bud/HlVIV90W1+XdpQz1uboZf5Zo9zfV11SsjArOXRnoWSFYnggVT9p+UbG3hRBruNGqXinTEaOp8v2F0Yy35Rm1jY6NQR3KKGtJo7W8oZfT944PT2aRCk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706608050; c=relaxed/simple; bh=3j7qNw//RbI0sRRiGsyMLOaSNqnyk1fLqWXikzWa7e0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Y+B0uBqaqsaAY8eGnD+t9iNs3x+XQe48tENsQwFUOtRQb/NIwipH6Bl3NhClOK4j6TngJYtKdykptOfD0LL2r8pV1Q27kciIBkRrRZfsCxnQNpLa4/NE9cbw4HHvC7oKmjj963ksDf2d8GJBA8iOVwgHLVXHV151mf+1HIX8wBE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=altlinux.org; spf=pass smtp.mailfrom=altlinux.org; arc=none smtp.client-ip=194.107.17.39 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=altlinux.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=altlinux.org Received: by air.basealt.ru (Postfix, from userid 490) id 5052C2F20248; Tue, 30 Jan 2024 09:47:25 +0000 (UTC) X-Spam-Level: Received: from altlinux.malta.altlinux.ru (obninsk.basealt.ru [217.15.195.17]) by air.basealt.ru (Postfix) with ESMTPSA id 4F4882F20249; Tue, 30 Jan 2024 09:47:15 +0000 (UTC) From: kovalev@altlinux.org To: stable@vger.kernel.org Cc: linux-kernel@vger.kernel.org, alsa-devel@alsa-project.org, u.kleine-koenig@pengutronix.de, a.firago@yadro.com, sashal@kernel.org, zhuning0077@gmail.com, tiwai@suse.com, perex@perex.cz, broonie@kernel.org, lgirdwood@gmail.com, kovalev@altlinux.org Subject: [PATCH 6.1.y 6/7] ASOC: codecs: ES8326: Add calibration support for version_b Date: Tue, 30 Jan 2024 12:47:07 +0300 Message-Id: <20240130094708.290485-7-kovalev@altlinux.org> X-Mailer: git-send-email 2.33.8 In-Reply-To: <20240130094708.290485-1-kovalev@altlinux.org> References: <20240130094708.290485-1-kovalev@altlinux.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789508389848411800 X-GMAIL-MSGID: 1789508389848411800 From: Zhu Ning Commit 0663286e58e6f611f3578b5e63e1faa576d139fd upstream. Version_b requires a new way of calibrating headset offset. A new calibration function is added. Signed-off-by: Zhu Ning Link: https://lore.kernel.org/r/20230717033223.42506-4-zhuning0077@gmail.com Signed-off-by: Mark Brown Signed-off-by: Vasiliy Kovalev --- sound/soc/codecs/es8326.c | 83 ++++++++++++++++++++++++++++++++------- 1 file changed, 68 insertions(+), 15 deletions(-) diff --git a/sound/soc/codecs/es8326.c b/sound/soc/codecs/es8326.c index 1525fac1f9b8b1..50b13296e246e1 100644 --- a/sound/soc/codecs/es8326.c +++ b/sound/soc/codecs/es8326.c @@ -388,6 +388,7 @@ static int es8326_mute(struct snd_soc_dai *dai, int mute, int direction) { struct snd_soc_component *component = dai->component; struct es8326_priv *es8326 = snd_soc_component_get_drvdata(component); + unsigned int offset_l, offset_r; if (mute) { regmap_write(es8326->regmap, ES8326_HP_CAL, ES8326_HP_OFF); @@ -398,10 +399,16 @@ static int es8326_mute(struct snd_soc_dai *dai, int mute, int direction) if (!es8326->calibrated) { regmap_write(es8326->regmap, ES8326_HP_CAL, ES8326_HP_FORCE_CAL); msleep(30); + regmap_write(es8326->regmap, ES8326_HP_CAL, ES8326_HP_OFF); + regmap_read(es8326->regmap, ES8326_HPL_OFFSET_INI, &offset_l); + regmap_read(es8326->regmap, ES8326_HPR_OFFSET_INI, &offset_r); + regmap_write(es8326->regmap, ES8326_HP_OFFSET_CAL, 0x8c); + regmap_write(es8326->regmap, ES8326_HPL_OFFSET_INI, offset_l); + regmap_write(es8326->regmap, ES8326_HPR_OFFSET_INI, offset_r); es8326->calibrated = true; } regmap_write(es8326->regmap, ES8326_HP_DRIVER, 0xa0); - regmap_write(es8326->regmap, ES8326_HP_VOL, 0x00); + regmap_write(es8326->regmap, ES8326_HP_VOL, 0x80); regmap_write(es8326->regmap, ES8326_HP_CAL, ES8326_HP_ON); regmap_update_bits(es8326->regmap, ES8326_DAC_MUTE, ES8326_MUTE_MASK, ~(ES8326_MUTE)); @@ -420,15 +427,17 @@ static int es8326_set_bias_level(struct snd_soc_component *codec, ret = clk_prepare_enable(es8326->mclk); if (ret) return ret; - regmap_write(es8326->regmap, ES8326_RESET, ES8326_PWRUP_SEQ_EN); - regmap_write(es8326->regmap, ES8326_INTOUT_IO, 0x45); + + regmap_write(es8326->regmap, ES8326_RESET, 0x9f); + msleep(20); + regmap_update_bits(es8326->regmap, ES8326_DAC_DSM, 0x01, 0x00); + regmap_write(es8326->regmap, ES8326_INTOUT_IO, es8326->interrupt_clk); regmap_write(es8326->regmap, ES8326_SDINOUT1_IO, (ES8326_IO_DMIC_CLK << ES8326_SDINOUT1_SHIFT)); - regmap_write(es8326->regmap, ES8326_SDINOUT23_IO, ES8326_IO_INPUT); - regmap_write(es8326->regmap, ES8326_CLK_RESAMPLE, 0x05); - regmap_write(es8326->regmap, ES8326_VMIDSEL, 0x02); + regmap_write(es8326->regmap, ES8326_VMIDSEL, 0x0E); regmap_write(es8326->regmap, ES8326_PGA_PDN, 0x40); - regmap_write(es8326->regmap, ES8326_DAC2HPMIX, 0xAA); + regmap_write(es8326->regmap, ES8326_ANA_PDN, 0x00); + regmap_update_bits(es8326->regmap, ES8326_CLK_CTL, 0x20, 0x20); regmap_write(es8326->regmap, ES8326_RESET, ES8326_CSM_ON); break; case SND_SOC_BIAS_PREPARE: @@ -437,15 +446,10 @@ static int es8326_set_bias_level(struct snd_soc_component *codec, break; case SND_SOC_BIAS_OFF: clk_disable_unprepare(es8326->mclk); - regmap_write(es8326->regmap, ES8326_DAC2HPMIX, 0x11); - regmap_write(es8326->regmap, ES8326_RESET, ES8326_CSM_OFF); - regmap_write(es8326->regmap, ES8326_PGA_PDN, 0xF8); + regmap_write(es8326->regmap, ES8326_ANA_PDN, 0x3b); regmap_write(es8326->regmap, ES8326_VMIDSEL, 0x00); - regmap_write(es8326->regmap, ES8326_INT_SOURCE, 0x08); + regmap_update_bits(es8326->regmap, ES8326_CLK_CTL, 0x20, 0x00); regmap_write(es8326->regmap, ES8326_SDINOUT1_IO, ES8326_IO_INPUT); - regmap_write(es8326->regmap, ES8326_SDINOUT23_IO, ES8326_IO_INPUT); - regmap_write(es8326->regmap, ES8326_RESET, - ES8326_CODEC_RESET | ES8326_PWRUP_SEQ_EN); break; } @@ -635,6 +639,54 @@ static irqreturn_t es8326_irq(int irq, void *dev_id) return IRQ_HANDLED; } +static int es8326_calibrate(struct snd_soc_component *component) +{ + struct es8326_priv *es8326 = snd_soc_component_get_drvdata(component); + unsigned int reg; + unsigned int offset_l, offset_r; + + regmap_read(es8326->regmap, ES8326_CHIP_VERSION, ®); + es8326->version = reg; + + if ((es8326->version == ES8326_VERSION_B) && (es8326->calibrated == false)) { + dev_dbg(component->dev, "ES8326_VERSION_B, calibrating\n"); + regmap_write(es8326->regmap, ES8326_CLK_INV, 0xc0); + regmap_write(es8326->regmap, ES8326_CLK_DIV1, 0x01); + regmap_write(es8326->regmap, ES8326_CLK_DLL, 0x30); + regmap_write(es8326->regmap, ES8326_CLK_MUX, 0xed); + regmap_write(es8326->regmap, ES8326_CLK_TRI, 0xc1); + regmap_write(es8326->regmap, ES8326_DAC_MUTE, 0x03); + regmap_write(es8326->regmap, ES8326_ANA_VSEL, 0x7f); + regmap_write(es8326->regmap, ES8326_VMIDLOW, 0x33); + regmap_write(es8326->regmap, ES8326_DAC2HPMIX, 0x88); + regmap_write(es8326->regmap, ES8326_HP_VOL, 0x80); + regmap_write(es8326->regmap, ES8326_HP_OFFSET_CAL, 0x8c); + regmap_write(es8326->regmap, ES8326_RESET, 0xc0); + usleep_range(15000, 20000); + + regmap_write(es8326->regmap, ES8326_HP_OFFSET_CAL, ES8326_HP_OFF); + regmap_read(es8326->regmap, ES8326_CSM_MUTE_STA, ®); + if ((reg & 0xf0) != 0x40) + msleep(50); + + regmap_write(es8326->regmap, ES8326_HP_CAL, 0xd4); + msleep(200); + regmap_write(es8326->regmap, ES8326_HP_CAL, 0x4d); + msleep(200); + regmap_write(es8326->regmap, ES8326_HP_CAL, ES8326_HP_OFF); + regmap_read(es8326->regmap, ES8326_HPL_OFFSET_INI, &offset_l); + regmap_read(es8326->regmap, ES8326_HPR_OFFSET_INI, &offset_r); + regmap_write(es8326->regmap, ES8326_HP_OFFSET_CAL, 0x8c); + regmap_write(es8326->regmap, ES8326_HPL_OFFSET_INI, offset_l); + regmap_write(es8326->regmap, ES8326_HPR_OFFSET_INI, offset_r); + regmap_write(es8326->regmap, ES8326_CLK_INV, 0x00); + + es8326->calibrated = true; + } + + return 0; +} + static int es8326_resume(struct snd_soc_component *component) { struct es8326_priv *es8326 = snd_soc_component_get_drvdata(component); @@ -673,7 +725,8 @@ static int es8326_resume(struct snd_soc_component *component) regmap_write(es8326->regmap, ES8326_CLK_VMIDS1, 0xc4); regmap_write(es8326->regmap, ES8326_CLK_VMIDS2, 0x81); regmap_write(es8326->regmap, ES8326_CLK_CAL_TIME, 0x00); - + /* calibrate for B version */ + es8326_calibrate(component); /* turn off headphone out */ regmap_write(es8326->regmap, ES8326_HP_CAL, 0x00); /* set ADC and DAC in low power mode */ From patchwork Tue Jan 30 09:47:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasiliy Kovalev X-Patchwork-Id: 193957 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2087:b0:106:209c:c626 with SMTP id gs7csp1115687dyb; Tue, 30 Jan 2024 02:14:22 -0800 (PST) X-Google-Smtp-Source: AGHT+IF/sgIK/rsjGc7QezKDWhkX+rwHJOcIXDkPCFic5iOeKBY0XiB5gTEfI93yGI45LNDSfOme X-Received: by 2002:a17:903:11d0:b0:1d5:36e8:9ac0 with SMTP id q16-20020a17090311d000b001d536e89ac0mr8639903plh.50.1706609662575; Tue, 30 Jan 2024 02:14:22 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706609662; cv=pass; d=google.com; s=arc-20160816; b=vX4hYqNdUfv4gSqTJu2sONA2FKcwjqr9pDx5rp2d8N2L+CC01GGF4yXqpDoNQXbZRI 9ILlLAHtZR/Rv2aEZGKV36x+i7T1uz4UC9P8rSBwWnrbYsRpdLnQ95Kj6BjW8oPzFTpw tRa2Iua66E0FBrrOruCi+BsWNrq/QJ24xBUmD+ad0LIb69NSVRhyAv6BsamZhGst1jLL AQN8uD1SzPOEFDWXNh/WFf4Ve51QlTXU3Kq1yCV3zNxrSSCE6J2hjenfAwNeq9MjoZFo L2po9I0F8vYZT6MhXqjtnBqZ8jBoFijw+XXdI1O01U4s0aVTymgdHqN4WuAJ+f9fYypD iIgQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=UC5GsAEcB9ImqorMp+3VDxDlSi0M32iji0RaZUX1tQQ=; fh=2IEPXKfVhtoEq98sN8HxvD68vbFBiQMtPfzbhuI145g=; b=fVm48hPYySkURrkzI1WVb9MF9LummlEYRwqsPggsHfOMGdKlSGKArJfg/2k2l4Oc07 yYNCOH9vZJfZJ5+2m8dc2dKG+JQzxZRNfGe9AImeAj0JzZkmPCbzPM8L6Yxz9BvEbx74 wsrPL3mOxelX/XveZOwJ8P9eoLil1YzWXQDpfDMx1Pmvy1Ke1J6HampTRoBtdy4y39O3 83IDWOcicINVGcMCAdxMFpbXkA/U+elbmT/kPKf+lYMZ/TkkLrHvV/oGpw3ktOJ3u9Q7 7BnwJd8eOBMjAY6qJtiBMXTszGHr4wGYEisfORab72MSSFHGtH9FwYrXyf9pgJtBQ272 SRTg== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=altlinux.org); spf=pass (google.com: domain of linux-kernel+bounces-44294-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-44294-ouuuleilei=gmail.com@vger.kernel.org" Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id j7-20020a17090276c700b001d91b62d9d4si22228plt.582.2024.01.30.02.14.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jan 2024 02:14:22 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-44294-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=altlinux.org); spf=pass (google.com: domain of linux-kernel+bounces-44294-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-44294-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 82F89B2DA9C for ; Tue, 30 Jan 2024 09:49:03 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E30B066B35; Tue, 30 Jan 2024 09:47:30 +0000 (UTC) Received: from air.basealt.ru (air.basealt.ru [194.107.17.39]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5F47A605BE; Tue, 30 Jan 2024 09:47:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=194.107.17.39 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706608048; cv=none; b=K0deZ8W9cJaT6qWXS6BGwYLwNwX85OlPfjPWZilnT8B2CqUVOx02xWgaWZAIXQr5QRFQaSk1Eho0oh7wb2fKyUdoWpl+9N9ELqn8kqC/0/55BzGM7S6sQm/Taa0BfVEDsQVVjmGxFIqYL0q3pNNT9vVuuRRwjIhFS3bf5lPegAk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706608048; c=relaxed/simple; bh=YRuXpTlWCvDvTGIvkGPSYfFYrkfWJfwNqa9QpXr7Ef8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=bhXwoNv+QG1ezaVJkbtnePDgyxlPUp4Jy7YxdLEcZ3D15fum2JnBky6nVxAce3yJCe1fFikoYYv+ftns2YyO5CV4ftrUOpq8dccDfGSNH9YaI/uiiyxQh/kWKKUGRiytPllDBN+lPAwKESwQSColmiqFrY9FpUmNYKMKGU9TfEE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=altlinux.org; spf=pass smtp.mailfrom=altlinux.org; arc=none smtp.client-ip=194.107.17.39 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=altlinux.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=altlinux.org Received: by air.basealt.ru (Postfix, from userid 490) id 59C362F2024B; Tue, 30 Jan 2024 09:47:19 +0000 (UTC) X-Spam-Level: Received: from altlinux.malta.altlinux.ru (obninsk.basealt.ru [217.15.195.17]) by air.basealt.ru (Postfix) with ESMTPSA id 7B81C2F2022A; Tue, 30 Jan 2024 09:47:15 +0000 (UTC) From: kovalev@altlinux.org To: stable@vger.kernel.org Cc: linux-kernel@vger.kernel.org, alsa-devel@alsa-project.org, u.kleine-koenig@pengutronix.de, a.firago@yadro.com, sashal@kernel.org, zhuning0077@gmail.com, tiwai@suse.com, perex@perex.cz, broonie@kernel.org, lgirdwood@gmail.com, kovalev@altlinux.org Subject: [PATCH 6.1.y 7/7] ASoC: codecs: ES8326: Update jact detection function Date: Tue, 30 Jan 2024 12:47:08 +0300 Message-Id: <20240130094708.290485-8-kovalev@altlinux.org> X-Mailer: git-send-email 2.33.8 In-Reply-To: <20240130094708.290485-1-kovalev@altlinux.org> References: <20240130094708.290485-1-kovalev@altlinux.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789509933657474925 X-GMAIL-MSGID: 1789509933657474925 From: Zhu Ning Commit 04f96c9340463aae20d2511a3d6cb0b005b07d24 upstream. The old jack detection function only supports fixed OMTP/CTIA hardware connection. The new one supports auto OMTP/CTIA headset detection Signed-off-by: Zhu Ning Link: https://lore.kernel.org/r/20230717033223.42506-5-zhuning0077@gmail.com Signed-off-by: Mark Brown Signed-off-by: Vasiliy Kovalev --- sound/soc/codecs/es8326.c | 109 +++++++++++++++++++++++++++++++------- 1 file changed, 89 insertions(+), 20 deletions(-) diff --git a/sound/soc/codecs/es8326.c b/sound/soc/codecs/es8326.c index 50b13296e246e1..74c03d151005d3 100644 --- a/sound/soc/codecs/es8326.c +++ b/sound/soc/codecs/es8326.c @@ -41,6 +41,8 @@ struct es8326_priv { bool calibrated; int version; + int hp; + int jack_remove_retry; }; static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(dac_vol_tlv, -9550, 50, 0); @@ -535,6 +537,7 @@ static void es8326_jack_button_handler(struct work_struct *work) cur_button = SND_JACK_BTN_0; break; case 0x6f: + case 0x4b: /* button volume up */ cur_button = SND_JACK_BTN_1; break; @@ -543,6 +546,7 @@ static void es8326_jack_button_handler(struct work_struct *work) cur_button = SND_JACK_BTN_2; break; case 0x1e: + case 0xe2: /* button released or not pressed */ cur_button = 0; break; @@ -552,20 +556,20 @@ static void es8326_jack_button_handler(struct work_struct *work) if ((prev_button == cur_button) && (cur_button != 0)) { press_count++; - if (press_count > 10) { - /* report a press every 500ms */ + if (press_count > 3) { + /* report a press every 120ms */ snd_soc_jack_report(es8326->jack, cur_button, SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_BTN_2); press_count = 0; } button_to_report = cur_button; queue_delayed_work(system_wq, &es8326->button_press_work, - msecs_to_jiffies(50)); + msecs_to_jiffies(35)); } else if (prev_button != cur_button) { /* mismatch, detect again */ prev_button = cur_button; queue_delayed_work(system_wq, &es8326->button_press_work, - msecs_to_jiffies(50)); + msecs_to_jiffies(35)); } else { /* released or no pressed */ if (button_to_report != 0) { @@ -589,32 +593,96 @@ static void es8326_jack_detect_handler(struct work_struct *work) mutex_lock(&es8326->lock); iface = snd_soc_component_read(comp, ES8326_HPDET_STA); dev_dbg(comp->dev, "gpio flag %#04x", iface); + + if (es8326->jack_remove_retry == 1) { + if (iface & ES8326_HPINSERT_FLAG) + es8326->jack_remove_retry = 2; + else + es8326->jack_remove_retry = 0; + + dev_dbg(comp->dev, "remove event check, set HPJACK_POL normal, cnt = %d\n", + es8326->jack_remove_retry); + /* + * Inverted HPJACK_POL bit to trigger one IRQ to double check HP Removal event + */ + regmap_update_bits(es8326->regmap, ES8326_HPDET_TYPE, + ES8326_HP_DET_JACK_POL, (es8326->jd_inverted ? + ~es8326->jack_pol : es8326->jack_pol)); + goto exit; + } + if ((iface & ES8326_HPINSERT_FLAG) == 0) { /* Jack unplugged or spurious IRQ */ - dev_dbg(comp->dev, "No headset detected"); + dev_dbg(comp->dev, "No headset detected\n"); + es8326_disable_micbias(es8326->component); if (es8326->jack->status & SND_JACK_HEADPHONE) { + dev_dbg(comp->dev, "Report hp remove event\n"); snd_soc_jack_report(es8326->jack, 0, SND_JACK_HEADSET); - snd_soc_component_write(comp, ES8326_ADC1_SRC, es8326->mic2_src); - es8326_disable_micbias(comp); + /* mute adc when mic path switch */ + regmap_write(es8326->regmap, ES8326_ADC_SCALE, 0x33); + regmap_write(es8326->regmap, ES8326_ADC1_SRC, 0x44); + regmap_write(es8326->regmap, ES8326_ADC2_SRC, 0x66); + es8326->hp = 0; + } + regmap_update_bits(es8326->regmap, ES8326_HPDET_TYPE, 0x03, 0x01); + /* + * Inverted HPJACK_POL bit to trigger one IRQ to double check HP Removal event + */ + if (es8326->jack_remove_retry == 0) { + es8326->jack_remove_retry = 1; + dev_dbg(comp->dev, "remove event check, invert HPJACK_POL, cnt = %d\n", + es8326->jack_remove_retry); + regmap_update_bits(es8326->regmap, ES8326_HPDET_TYPE, + ES8326_HP_DET_JACK_POL, (es8326->jd_inverted ? + es8326->jack_pol : ~es8326->jack_pol)); + + } else { + es8326->jack_remove_retry = 0; } } else if ((iface & ES8326_HPINSERT_FLAG) == ES8326_HPINSERT_FLAG) { + es8326->jack_remove_retry = 0; + if (es8326->hp == 0) { + dev_dbg(comp->dev, "First insert, start OMTP/CTIA type check\n"); + /* + * set auto-check mode, then restart jack_detect_work after 100ms. + * Don't report jack status. + */ + regmap_update_bits(es8326->regmap, ES8326_HPDET_TYPE, 0x03, 0x01); + usleep_range(50000, 70000); + regmap_update_bits(es8326->regmap, ES8326_HPDET_TYPE, 0x03, 0x00); + queue_delayed_work(system_wq, &es8326->jack_detect_work, + msecs_to_jiffies(100)); + es8326->hp = 1; + goto exit; + } if (es8326->jack->status & SND_JACK_HEADSET) { /* detect button */ + dev_dbg(comp->dev, "button pressed\n"); queue_delayed_work(system_wq, &es8326->button_press_work, 10); + goto exit; + } + if ((iface & ES8326_HPBUTTON_FLAG) == 0x01) { + dev_dbg(comp->dev, "Headphone detected\n"); + snd_soc_jack_report(es8326->jack, + SND_JACK_HEADPHONE, SND_JACK_HEADSET); } else { - if ((iface & ES8326_HPBUTTON_FLAG) == 0x00) { - dev_dbg(comp->dev, "Headset detected"); - snd_soc_jack_report(es8326->jack, - SND_JACK_HEADSET, SND_JACK_HEADSET); - snd_soc_component_write(comp, - ES8326_ADC1_SRC, es8326->mic1_src); - } else { - dev_dbg(comp->dev, "Headphone detected"); - snd_soc_jack_report(es8326->jack, - SND_JACK_HEADPHONE, SND_JACK_HEADSET); - } + dev_dbg(comp->dev, "Headset detected\n"); + snd_soc_jack_report(es8326->jack, + SND_JACK_HEADSET, SND_JACK_HEADSET); + + regmap_write(es8326->regmap, ES8326_ADC_SCALE, 0x33); + regmap_update_bits(es8326->regmap, ES8326_PGA_PDN, + 0x08, 0x08); + regmap_update_bits(es8326->regmap, ES8326_PGAGAIN, + 0x80, 0x80); + regmap_write(es8326->regmap, ES8326_ADC1_SRC, 0x00); + regmap_write(es8326->regmap, ES8326_ADC2_SRC, 0x00); + regmap_update_bits(es8326->regmap, ES8326_PGA_PDN, + 0x08, 0x00); + usleep_range(10000, 15000); } } +exit: mutex_unlock(&es8326->lock); } @@ -633,7 +701,7 @@ static irqreturn_t es8326_irq(int irq, void *dev_id) msecs_to_jiffies(10)); else queue_delayed_work(system_wq, &es8326->jack_detect_work, - msecs_to_jiffies(300)); + msecs_to_jiffies(600)); out: return IRQ_HANDLED; @@ -763,7 +831,8 @@ static int es8326_resume(struct snd_soc_component *component) (ES8326_HP_DET_SRC_PIN9 | es8326->jack_pol) : (ES8326_HP_DET_SRC_PIN9 | es8326->jack_pol | 0x04))); - es8326_irq(es8326->irq, es8326); + es8326->jack_remove_retry = 0; + es8326->hp = 0; return 0; }