From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8F09CC433EF for ; Fri, 4 Mar 2022 15:07:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240100AbiCDPIp (ORCPT ); Fri, 4 Mar 2022 10:08:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50932 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240066AbiCDPI3 (ORCPT ); Fri, 4 Mar 2022 10:08:29 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3C5C53FDB0; Fri, 4 Mar 2022 07:07:38 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2244w2hF013723; Fri, 4 Mar 2022 09:07:26 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=j+aRd3p3l8MH2yYipEWQW5VKVEv+0k9D+Y84o7OTai0=; b=b56gBAJoMnwaxBybF08I3OvG6i6PFV26Io0zooU7l90DumQtTZHrtebVoondv7Po1e9c 49K36yNoK2n3XA/UTB9BaNS5CvfeWXPJPsNnGCJZen+Gbfr5HpEBXSu+xh6nJTvJd9uA 6rhsuwpJQtqQITmS9bIw+ze8B0us5KsI3Q3N2vQJq42ErxtqynvLHLIJEp0guehaxdDo ZKY76AgEd76UjMGiPFaHAc0DRsx/2Xk8jkdJhBWho7m401T/YurJvwM6mNRuZAP1sH+x EBCr/CjAMbKFCDipRGwDiHjeRtvqtI+o2X99BjZm612SVLM2oWw/wiSrujHw7JJO0Xhn wQ== Received: from ediex02.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h414-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:25 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX02.ad.cirrus.com (198.61.84.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:24 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:24 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id A8C7D7C; Fri, 4 Mar 2022 15:07:23 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , David Rhodes , Charles Keepax Subject: [PATCH v2 01/20] ASoC: cs35l41: Fix GPIO2 configuration Date: Fri, 4 Mar 2022 15:07:02 +0000 Message-ID: <20220304150721.3802-2-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: ABmFhauVmGBe644gF1lDSn0je8X6Zu3Y X-Proofpoint-ORIG-GUID: ABmFhauVmGBe644gF1lDSn0je8X6Zu3Y X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: David Rhodes Fix GPIO2 polarity and direction configuration Fixes: fe1024d50477b ("ASoC: cs35l41: Combine adjacent register writes") Signed-off-by: David Rhodes Acked-by: Charles Keepax --- sound/soc/codecs/cs35l41.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sound/soc/codecs/cs35l41.c b/sound/soc/codecs/cs35l41.c index 77a017694645..90c91b00288b 100644 --- a/sound/soc/codecs/cs35l41.c +++ b/sound/soc/codecs/cs35l41.c @@ -1035,8 +1035,8 @@ static int cs35l41_irq_gpio_config(struct cs35l41_pri= vate *cs35l41) =20 regmap_update_bits(cs35l41->regmap, CS35L41_GPIO2_CTRL1, CS35L41_GPIO_POL_MASK | CS35L41_GPIO_DIR_MASK, - irq_gpio_cfg1->irq_pol_inv << CS35L41_GPIO_POL_SHIFT | - !irq_gpio_cfg1->irq_out_en << CS35L41_GPIO_DIR_SHIFT); + irq_gpio_cfg2->irq_pol_inv << CS35L41_GPIO_POL_SHIFT | + !irq_gpio_cfg2->irq_out_en << CS35L41_GPIO_DIR_SHIFT); =20 regmap_update_bits(cs35l41->regmap, CS35L41_GPIO_PAD_CONTROL, CS35L41_GPIO1_CTRL_MASK | CS35L41_GPIO2_CTRL_MASK, --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D6984C433EF for ; Fri, 4 Mar 2022 15:08:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240198AbiCDPJJ (ORCPT ); Fri, 4 Mar 2022 10:09:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51004 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240078AbiCDPIb (ORCPT ); Fri, 4 Mar 2022 10:08:31 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B98C54839A; Fri, 4 Mar 2022 07:07:42 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2244w2hG013723; Fri, 4 Mar 2022 09:07:27 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=34C6kjTu8fIQ8hyCcYnZI1IqI0VSAE1mssJrdWJKQKE=; b=CVQ0NzWlLdNDXm6eF0nlL497j4SEydnyQS5dt64bA/tOdf5SpcXlq90tk3jAjlA3gnop t3GBv9z/Nnl78cP8xBUvtFrz8emdge/XQAoU2+vnY3zadv09NevNNgvxKa06O3l6J8yt 2PRkh3kipuYO6fLVv3xzQ20uUVM+PfEWtkNxmnGHAv/T0WnUMxYSaCYLdu0Ws3XElHOh k+rOEw5CHmhebjZa615NsLP4rwQseJDHvq9rL23DXRJ+TfEmGxVfI7UxYDPutbWC3oBS D/35Wm8NpazL98i+aF/jqTyrssj7heP3cdE8FG882b0dGRPwdo9FsHsh0glBvZhEqgkK TA== Received: from ediex02.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h414-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:27 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX02.ad.cirrus.com (198.61.84.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:24 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:24 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id 16AA6B1A; Fri, 4 Mar 2022 15:07:24 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure , Charles Keepax Subject: [PATCH v2 02/20] ASoC: cs35l41: Fix max number of TX channels Date: Fri, 4 Mar 2022 15:07:03 +0000 Message-ID: <20220304150721.3802-3-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: ySL-x5sdYQwrF9WiWIv-mbrd7nJGrX1Q X-Proofpoint-ORIG-GUID: ySL-x5sdYQwrF9WiWIv-mbrd7nJGrX1Q X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This device only has 4 TX channels. Fixes: fe1024d50477b ("ASoC: cs35l41: Combine adjacent register writes") Signed-off-by: Lucas Tanure Acked-by: Charles Keepax --- sound/soc/codecs/cs35l41.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sound/soc/codecs/cs35l41.c b/sound/soc/codecs/cs35l41.c index 90c91b00288b..f3787d77f892 100644 --- a/sound/soc/codecs/cs35l41.c +++ b/sound/soc/codecs/cs35l41.c @@ -1091,7 +1091,7 @@ static struct snd_soc_dai_driver cs35l41_dai[] =3D { .capture =3D { .stream_name =3D "AMP Capture", .channels_min =3D 1, - .channels_max =3D 8, + .channels_max =3D 4, .rates =3D SNDRV_PCM_RATE_KNOT, .formats =3D CS35L41_TX_FORMATS, }, --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CA19EC43217 for ; Fri, 4 Mar 2022 15:07:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240087AbiCDPIc (ORCPT ); Fri, 4 Mar 2022 10:08:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50934 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240067AbiCDPI3 (ORCPT ); Fri, 4 Mar 2022 10:08:29 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3D71D40A33; Fri, 4 Mar 2022 07:07:40 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2244w2hH013723; Fri, 4 Mar 2022 09:07:28 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=xtsITB9MtsbQbh9Pg7CKoJN9r/LR7G1l1Q0NK9S3HWk=; b=GXMmKAcEDKZz9m79azSLkQtB74mgqlRr7NZ7HERWK4cmmQXnDmREiJF9P3sbRvIyrPmr lmizC8wgKrgK9SQq9nLHRvyrpuiWS68PjIoM5jPxBSniGR4Hh2bWW+nP77mooB2uhEla 63jRGBMxUt394hMb9tpSJ48oCV6wVZzwLutuC/csflrLX6o2wNez6E0RlSp8Ui2jg0QZ UGZmIa+PvOlGsEbMhHaIfdfOXctDywUUor1Dg45jErHDgH1ZV7BW7/nHOYLVusk7peEy UzbBktdBDaznF/8elbTwim/jN4cXL0JNY5CJCasM7Hd7F32yqd6/BhgTlyokK6wQNfnF oA== Received: from ediex02.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h414-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:28 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX02.ad.cirrus.com (198.61.84.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:24 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:24 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id 7A8727C; Fri, 4 Mar 2022 15:07:24 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure , Charles Keepax Subject: [PATCH v2 03/20] ASoC: cs35l41: Fix DSP mbox start command and global enable order Date: Fri, 4 Mar 2022 15:07:04 +0000 Message-ID: <20220304150721.3802-4-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: v53xgvSt1xnUz19cGb4h6JaH_adorjaA X-Proofpoint-ORIG-GUID: v53xgvSt1xnUz19cGb4h6JaH_adorjaA X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Global enable must happen before CSPL_MBOX_CMD_RESUME command is sent. Move it to PRE_PMU as both events use SND_SOC_DAPM_OUT_DRV_E macro. Signed-off-by: Lucas Tanure Acked-by: Charles Keepax --- sound/soc/codecs/cs35l41.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sound/soc/codecs/cs35l41.c b/sound/soc/codecs/cs35l41.c index f3787d77f892..05de94fd2e55 100644 --- a/sound/soc/codecs/cs35l41.c +++ b/sound/soc/codecs/cs35l41.c @@ -573,7 +573,7 @@ static int cs35l41_main_amp_event(struct snd_soc_dapm_w= idget *w, int ret =3D 0; =20 switch (event) { - case SND_SOC_DAPM_POST_PMU: + case SND_SOC_DAPM_PRE_PMU: regmap_multi_reg_write_bypassed(cs35l41->regmap, cs35l41_pup_patch, ARRAY_SIZE(cs35l41_pup_patch)); @@ -649,7 +649,7 @@ static const struct snd_soc_dapm_widget cs35l41_dapm_wi= dgets[] =3D { =20 SND_SOC_DAPM_OUT_DRV_E("Main AMP", CS35L41_PWR_CTRL2, 0, 0, NULL, 0, cs35l41_main_amp_event, - SND_SOC_DAPM_POST_PMD | SND_SOC_DAPM_POST_PMU), + SND_SOC_DAPM_POST_PMD | SND_SOC_DAPM_PRE_PMU), =20 SND_SOC_DAPM_MUX("ASP TX1 Source", SND_SOC_NOPM, 0, 0, &asp_tx1_mux), SND_SOC_DAPM_MUX("ASP TX2 Source", SND_SOC_NOPM, 0, 0, &asp_tx2_mux), --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 405B0C4332F for ; Fri, 4 Mar 2022 15:08:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240133AbiCDPJ3 (ORCPT ); Fri, 4 Mar 2022 10:09:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53552 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240193AbiCDPJI (ORCPT ); Fri, 4 Mar 2022 10:09:08 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CA40FE0AF0; Fri, 4 Mar 2022 07:08:09 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2248TInC019088; Fri, 4 Mar 2022 09:07:26 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=MvLIFyK+aPdf1q6xBSETIIvvuYavScJ3HoTXvZNE4tQ=; b=e6V4QIBiamBH3bq/Rwq+k67DtHSHxWtslgUgLp5puCVw82UqF5F1NpGgr6tXK/t3H5MN U04tx7SnsJtE3KCmkXRrhOvNu4T3jgkg1c0c9n8aEJ97rxnnogbYmZCzvBmtVm3pQXGT uAW+03ez1vRMsdoOWAJoattn8cjgGEb8Bsi4MKHCdHrP/xa4XRwWYPyRnwDzYhZk0naQ ZIwW501O/DdEYRxJyz9vHfTvjJIeFzVAZHa8AgWH/84C2Fr9IIlBQFSabS8GblUaRfeO v/8dHMUd0fP6qDy75Ch8AQulrhQaVQiQ77vjV1SeVmkuE/Mhg9QU1z9+Rao4hdBPPOj4 hw== Received: from ediex01.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h413-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:26 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:25 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:25 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id DDBC6B06; Fri, 4 Mar 2022 15:07:24 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure , Charles Keepax Subject: [PATCH v2 04/20] ASoC: cs35l41: Remove unnecessary param Date: Fri, 4 Mar 2022 15:07:05 +0000 Message-ID: <20220304150721.3802-5-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: khyzbKfRW4-RRab9-btNdSgE0h_DBZig X-Proofpoint-ORIG-GUID: khyzbKfRW4-RRab9-btNdSgE0h_DBZig X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" cs35l41_private is not used on cs35l41_handle_pdata Signed-off-by: Lucas Tanure Acked-by: Charles Keepax --- sound/soc/codecs/cs35l41.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sound/soc/codecs/cs35l41.c b/sound/soc/codecs/cs35l41.c index 05de94fd2e55..6b784a62df0c 100644 --- a/sound/soc/codecs/cs35l41.c +++ b/sound/soc/codecs/cs35l41.c @@ -1115,9 +1115,7 @@ static const struct snd_soc_component_driver soc_comp= onent_dev_cs35l41 =3D { .set_sysclk =3D cs35l41_component_set_sysclk, }; =20 -static int cs35l41_handle_pdata(struct device *dev, - struct cs35l41_platform_data *pdata, - struct cs35l41_private *cs35l41) +static int cs35l41_handle_pdata(struct device *dev, struct cs35l41_platfor= m_data *pdata) { struct cs35l41_irq_cfg *irq_gpio1_config =3D &pdata->irq_config1; struct cs35l41_irq_cfg *irq_gpio2_config =3D &pdata->irq_config2; @@ -1260,7 +1258,7 @@ int cs35l41_probe(struct cs35l41_private *cs35l41, if (pdata) { cs35l41->pdata =3D *pdata; } else { - ret =3D cs35l41_handle_pdata(cs35l41->dev, &cs35l41->pdata, cs35l41); + ret =3D cs35l41_handle_pdata(cs35l41->dev, &cs35l41->pdata); if (ret !=3D 0) return ret; } --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 897F4C433F5 for ; Fri, 4 Mar 2022 15:08:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240171AbiCDPI7 (ORCPT ); Fri, 4 Mar 2022 10:08:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50968 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240069AbiCDPIb (ORCPT ); Fri, 4 Mar 2022 10:08:31 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 89CF147396; Fri, 4 Mar 2022 07:07:42 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2248TInD019088; Fri, 4 Mar 2022 09:07:28 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=nyG5IqMcOmBrcfhziDarFOmhOAoKHUDje8mQq+pMcg4=; b=B/T7ID7XmlhPlFF4gRXY7NryB3Ms22li9v4c7Wx7nnhg67NEruycCtmMeX93XjARbGMX P2YphStn91Yd6tM5GWwpJeGcmwMmpAK9KJIScZ1KxSOQlTr3J9QY0Z0diFN6QUpaUuK9 //SeayQGX6FqziXAf1AeDDR6Aa83/4X1FtyzTqqMWSSFGIQVV4Hp6EIOp/R8D8jvlD+7 YYuA3DKLkfpRp+M0QINKAlxvci7WY9W/mbfT5INIP+AOt4tqDvSwgLw6G0jsBu4OKn5Z BsjH948HcqY3UgczhEdKZISU3NnqeKVwKFN/jKseGa/RkYhm6ClidmlMzjp027tLsQI3 bg== Received: from ediex01.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h413-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:27 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:25 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:25 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id 504EF7C; Fri, 4 Mar 2022 15:07:25 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure , Charles Keepax Subject: [PATCH v2 05/20] sound: cs35l41: Unify hardware configuration Date: Fri, 4 Mar 2022 15:07:06 +0000 Message-ID: <20220304150721.3802-6-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: CNGgc-zR9XG_O_mYy35kDMNFviZ5y9o3 X-Proofpoint-ORIG-GUID: CNGgc-zR9XG_O_mYy35kDMNFviZ5y9o3 X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Both ASoC and HDA require to configure the GPIOs and Boost, so put that in single shared struct. Signed-off-by: Lucas Tanure Acked-by: Charles Keepax --- include/sound/cs35l41.h | 35 +++++++++---- sound/pci/hda/cs35l41_hda.c | 69 +++++++++++-------------- sound/pci/hda/cs35l41_hda.h | 13 +---- sound/soc/codecs/cs35l41-i2c.c | 4 +- sound/soc/codecs/cs35l41-spi.c | 4 +- sound/soc/codecs/cs35l41.c | 93 +++++++++++++++------------------- sound/soc/codecs/cs35l41.h | 5 +- 7 files changed, 102 insertions(+), 121 deletions(-) diff --git a/include/sound/cs35l41.h b/include/sound/cs35l41.h index bf7f9a9aeba0..262c75109c9e 100644 --- a/include/sound/cs35l41.h +++ b/include/sound/cs35l41.h @@ -701,9 +701,6 @@ #define CS35L41_GPIO1_CTRL_SHIFT 16 #define CS35L41_GPIO2_CTRL_MASK 0x07000000 #define CS35L41_GPIO2_CTRL_SHIFT 24 -#define CS35L41_GPIO_CTRL_OPEN_INT 2 -#define CS35L41_GPIO_CTRL_ACTV_LO 4 -#define CS35L41_GPIO_CTRL_ACTV_HI 5 #define CS35L41_GPIO_POL_MASK 0x1000 #define CS35L41_GPIO_POL_SHIFT 12 =20 @@ -735,19 +732,37 @@ enum cs35l41_clk_ids { CS35L41_CLKID_MCLK =3D 4, }; =20 -struct cs35l41_irq_cfg { - bool irq_pol_inv; - bool irq_out_en; - int irq_src_sel; +enum cs35l41_gpio_func { + CS35L41_HIZ, + CS35L41_GPIO, + CS35L41_INT_OPEN_DRAIN_GPIO2, + CS35L41_MCLK, + CS35L41_INT_PUSH_PULL_LOW_GPIO2, + CS35L41_INT_PUSH_PULL_HIGH_GPIO2, + CS35L41_PDM_CLK_GPIO2, + CS35L41_PDM_DATA_GPIO2, + CS35L41_MDSYNC_GPIO1 =3D 2, + CS35L41_PDM_CLK_GPIO1 =3D 4, + CS35L41_PDM_DATA_GPIO1 =3D 5, }; =20 -struct cs35l41_platform_data { +struct cs35l41_gpio_cfg { + bool pol_inv; + bool out_en; + enum cs35l41_gpio_func func; +}; + +struct cs35l41_hw_cfg { int bst_ind; int bst_ipk; int bst_cap; int dout_hiz; - struct cs35l41_irq_cfg irq_config1; - struct cs35l41_irq_cfg irq_config2; + struct cs35l41_gpio_cfg gpio1; + struct cs35l41_gpio_cfg gpio2; + unsigned int spk_pos; + + /* Don't put the AMP in reset if VSPK can not be turned off */ + bool vspk_always_on; }; =20 struct cs35l41_otp_packed_element_t { diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index 718595380868..b79d6ad4b4f5 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -213,13 +213,13 @@ static const struct component_ops cs35l41_hda_comp_op= s =3D { .unbind =3D cs35l41_hda_unbind, }; =20 -static int cs35l41_hda_apply_properties(struct cs35l41_hda *cs35l41, - const struct cs35l41_hda_hw_config *hw_cfg) +static int cs35l41_hda_apply_properties(struct cs35l41_hda *cs35l41) { + struct cs35l41_hw_cfg *hw_cfg =3D &cs35l41->hw_cfg; bool internal_boost =3D false; int ret; =20 - if (!hw_cfg) { + if (hw_cfg->vspk_always_on) { cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_no_bst; return 0; } @@ -227,7 +227,7 @@ static int cs35l41_hda_apply_properties(struct cs35l41_= hda *cs35l41, if (hw_cfg->bst_ind || hw_cfg->bst_cap || hw_cfg->bst_ipk) internal_boost =3D true; =20 - switch (hw_cfg->gpio1_func) { + switch (hw_cfg->gpio1.func) { case CS35L41_NOT_USED: break; case CS35l41_VSPK_SWITCH: @@ -239,11 +239,11 @@ static int cs35l41_hda_apply_properties(struct cs35l4= 1_hda *cs35l41, CS35L41_GPIO1_CTRL_MASK, 2 << CS35L41_GPIO1_CTRL_SHIFT); break; default: - dev_err(cs35l41->dev, "Invalid function %d for GPIO1\n", hw_cfg->gpio1_f= unc); + dev_err(cs35l41->dev, "Invalid function %d for GPIO1\n", hw_cfg->gpio1.f= unc); return -EINVAL; } =20 - switch (hw_cfg->gpio2_func) { + switch (hw_cfg->gpio2.func) { case CS35L41_NOT_USED: break; case CS35L41_INTERRUPT: @@ -251,7 +251,7 @@ static int cs35l41_hda_apply_properties(struct cs35l41_= hda *cs35l41, CS35L41_GPIO2_CTRL_MASK, 2 << CS35L41_GPIO2_CTRL_SHIFT); break; default: - dev_err(cs35l41->dev, "Invalid function %d for GPIO2\n", hw_cfg->gpio2_f= unc); + dev_err(cs35l41->dev, "Invalid function %d for GPIO2\n", hw_cfg->gpio2.f= unc); return -EINVAL; } =20 @@ -267,13 +267,12 @@ static int cs35l41_hda_apply_properties(struct cs35l4= 1_hda *cs35l41, cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_ext_bst; } =20 - return cs35l41_hda_channel_map(cs35l41->dev, 0, NULL, 1, (unsigned int *)= &hw_cfg->spk_pos); + return cs35l41_hda_channel_map(cs35l41->dev, 0, NULL, 1, &hw_cfg->spk_pos= ); } =20 -static struct cs35l41_hda_hw_config *cs35l41_hda_read_acpi(struct cs35l41_= hda *cs35l41, - const char *hid, int id) +static int cs35l41_hda_read_acpi(struct cs35l41_hda *cs35l41, const char *= hid, int id) { - struct cs35l41_hda_hw_config *hw_cfg; + struct cs35l41_hw_cfg *hw_cfg =3D &cs35l41->hw_cfg; u32 values[HDA_MAX_COMPONENTS]; struct acpi_device *adev; struct device *physdev; @@ -284,7 +283,7 @@ static struct cs35l41_hda_hw_config *cs35l41_hda_read_a= cpi(struct cs35l41_hda *c adev =3D acpi_dev_get_first_match_dev(hid, NULL, -1); if (!adev) { dev_err(cs35l41->dev, "Failed to find an ACPI device for %s\n", hid); - return ERR_PTR(-ENODEV); + return -ENODEV; } =20 physdev =3D get_device(acpi_get_first_physical_node(adev)); @@ -324,29 +323,23 @@ static struct cs35l41_hda_hw_config *cs35l41_hda_read= _acpi(struct cs35l41_hda *c cs35l41->reset_gpio =3D fwnode_gpiod_get_index(&adev->fwnode, "reset", cs= 35l41->index, GPIOD_OUT_LOW, "cs35l41-reset"); =20 - hw_cfg =3D kzalloc(sizeof(*hw_cfg), GFP_KERNEL); - if (!hw_cfg) { - ret =3D -ENOMEM; - goto err; - } - property =3D "cirrus,speaker-position"; ret =3D device_property_read_u32_array(physdev, property, values, nval); if (ret) - goto err_free; + goto err; hw_cfg->spk_pos =3D values[cs35l41->index]; =20 property =3D "cirrus,gpio1-func"; ret =3D device_property_read_u32_array(physdev, property, values, nval); if (ret) - goto err_free; - hw_cfg->gpio1_func =3D values[cs35l41->index]; + goto err; + hw_cfg->gpio1.func =3D values[cs35l41->index]; =20 property =3D "cirrus,gpio2-func"; ret =3D device_property_read_u32_array(physdev, property, values, nval); if (ret) - goto err_free; - hw_cfg->gpio2_func =3D values[cs35l41->index]; + goto err; + hw_cfg->gpio2.func =3D values[cs35l41->index]; =20 property =3D "cirrus,boost-peak-milliamp"; ret =3D device_property_read_u32_array(physdev, property, values, nval); @@ -365,15 +358,13 @@ static struct cs35l41_hda_hw_config *cs35l41_hda_read= _acpi(struct cs35l41_hda *c =20 put_device(physdev); =20 - return hw_cfg; + return 0; =20 -err_free: - kfree(hw_cfg); err: put_device(physdev); dev_err(cs35l41->dev, "Failed property %s: %d\n", property, ret); =20 - return ERR_PTR(ret); + return ret; =20 no_acpi_dsd: /* @@ -384,22 +375,21 @@ static struct cs35l41_hda_hw_config *cs35l41_hda_read= _acpi(struct cs35l41_hda *c * fwnode. */ if (strncmp(hid, "CLSA0100", 8) !=3D 0) - return ERR_PTR(-EINVAL); + return -EINVAL; =20 /* check I2C address to assign the index */ cs35l41->index =3D id =3D=3D 0x40 ? 0 : 1; cs35l41->reset_gpio =3D gpiod_get_index(physdev, NULL, 0, GPIOD_OUT_HIGH); - cs35l41->vspk_always_on =3D true; + cs35l41->hw_cfg.vspk_always_on =3D true; put_device(physdev); =20 - return NULL; + return 0; } =20 int cs35l41_hda_probe(struct device *dev, const char *device_name, int id,= int irq, struct regmap *regmap) { unsigned int int_sts, regid, reg_revid, mtl_revid, chipid, int_status; - struct cs35l41_hda_hw_config *acpi_hw_cfg; struct cs35l41_hda *cs35l41; int ret; =20 @@ -415,9 +405,11 @@ int cs35l41_hda_probe(struct device *dev, const char *= device_name, int id, int i cs35l41->regmap =3D regmap; dev_set_drvdata(dev, cs35l41); =20 - acpi_hw_cfg =3D cs35l41_hda_read_acpi(cs35l41, device_name, id); - if (IS_ERR(acpi_hw_cfg)) - return PTR_ERR(acpi_hw_cfg); + ret =3D cs35l41_hda_read_acpi(cs35l41, device_name, id); + if (ret) { + dev_err_probe(cs35l41->dev, ret, "Platform not supported %d\n", ret); + return ret; + } =20 if (IS_ERR(cs35l41->reset_gpio)) { ret =3D PTR_ERR(cs35l41->reset_gpio); @@ -490,11 +482,9 @@ int cs35l41_hda_probe(struct device *dev, const char *= device_name, int id, int i if (ret) goto err; =20 - ret =3D cs35l41_hda_apply_properties(cs35l41, acpi_hw_cfg); + ret =3D cs35l41_hda_apply_properties(cs35l41); if (ret) goto err; - kfree(acpi_hw_cfg); - acpi_hw_cfg =3D NULL; =20 if (cs35l41->reg_seq->probe) { ret =3D regmap_multi_reg_write(cs35l41->regmap, cs35l41->reg_seq->probe, @@ -516,8 +506,7 @@ int cs35l41_hda_probe(struct device *dev, const char *d= evice_name, int id, int i return 0; =20 err: - kfree(acpi_hw_cfg); - if (!cs35l41->vspk_always_on) + if (!cs35l41->hw_cfg.vspk_always_on) gpiod_set_value_cansleep(cs35l41->reset_gpio, 0); gpiod_put(cs35l41->reset_gpio); =20 @@ -531,7 +520,7 @@ void cs35l41_hda_remove(struct device *dev) =20 component_del(cs35l41->dev, &cs35l41_hda_comp_ops); =20 - if (!cs35l41->vspk_always_on) + if (!cs35l41->hw_cfg.vspk_always_on) gpiod_set_value_cansleep(cs35l41->reset_gpio, 0); gpiod_put(cs35l41->reset_gpio); } diff --git a/sound/pci/hda/cs35l41_hda.h b/sound/pci/hda/cs35l41_hda.h index 74951001501c..17f10764f174 100644 --- a/sound/pci/hda/cs35l41_hda.h +++ b/sound/pci/hda/cs35l41_hda.h @@ -40,26 +40,15 @@ struct cs35l41_hda_reg_sequence { unsigned int num_close; }; =20 -struct cs35l41_hda_hw_config { - unsigned int spk_pos; - unsigned int gpio1_func; - unsigned int gpio2_func; - int bst_ind; - int bst_ipk; - int bst_cap; -}; - struct cs35l41_hda { struct device *dev; struct regmap *regmap; struct gpio_desc *reset_gpio; const struct cs35l41_hda_reg_sequence *reg_seq; + struct cs35l41_hw_cfg hw_cfg; =20 int irq; int index; - - /* Don't put the AMP in reset of VSPK can not be turned off */ - bool vspk_always_on; }; =20 int cs35l41_hda_probe(struct device *dev, const char *device_name, int id,= int irq, diff --git a/sound/soc/codecs/cs35l41-i2c.c b/sound/soc/codecs/cs35l41-i2c.c index faad5c638cb8..5ff0f00a2de4 100644 --- a/sound/soc/codecs/cs35l41-i2c.c +++ b/sound/soc/codecs/cs35l41-i2c.c @@ -34,7 +34,7 @@ static int cs35l41_i2c_probe(struct i2c_client *client, { struct cs35l41_private *cs35l41; struct device *dev =3D &client->dev; - struct cs35l41_platform_data *pdata =3D dev_get_platdata(dev); + struct cs35l41_hw_cfg *hw_cfg =3D dev_get_platdata(dev); const struct regmap_config *regmap_config =3D &cs35l41_regmap_i2c; int ret; =20 @@ -54,7 +54,7 @@ static int cs35l41_i2c_probe(struct i2c_client *client, return ret; } =20 - return cs35l41_probe(cs35l41, pdata); + return cs35l41_probe(cs35l41, hw_cfg); } =20 static int cs35l41_i2c_remove(struct i2c_client *client) diff --git a/sound/soc/codecs/cs35l41-spi.c b/sound/soc/codecs/cs35l41-spi.c index 169221a5b09f..9e19c946a66b 100644 --- a/sound/soc/codecs/cs35l41-spi.c +++ b/sound/soc/codecs/cs35l41-spi.c @@ -30,7 +30,7 @@ MODULE_DEVICE_TABLE(spi, cs35l41_id_spi); static int cs35l41_spi_probe(struct spi_device *spi) { const struct regmap_config *regmap_config =3D &cs35l41_regmap_spi; - struct cs35l41_platform_data *pdata =3D dev_get_platdata(&spi->dev); + struct cs35l41_hw_cfg *hw_cfg =3D dev_get_platdata(&spi->dev); struct cs35l41_private *cs35l41; int ret; =20 @@ -52,7 +52,7 @@ static int cs35l41_spi_probe(struct spi_device *spi) cs35l41->dev =3D &spi->dev; cs35l41->irq =3D spi->irq; =20 - return cs35l41_probe(cs35l41, pdata); + return cs35l41_probe(cs35l41, hw_cfg); } =20 static void cs35l41_spi_remove(struct spi_device *spi) diff --git a/sound/soc/codecs/cs35l41.c b/sound/soc/codecs/cs35l41.c index 6b784a62df0c..67b33c5c3d44 100644 --- a/sound/soc/codecs/cs35l41.c +++ b/sound/soc/codecs/cs35l41.c @@ -999,10 +999,10 @@ static int cs35l41_set_pdata(struct cs35l41_private *= cs35l41) =20 /* Set Platform Data */ /* Required */ - if (cs35l41->pdata.bst_ipk && - cs35l41->pdata.bst_ind && cs35l41->pdata.bst_cap) { - ret =3D cs35l41_boost_config(cs35l41->dev, cs35l41->regmap, cs35l41->pda= ta.bst_ind, - cs35l41->pdata.bst_cap, cs35l41->pdata.bst_ipk); + if (cs35l41->hw_cfg.bst_ipk && + cs35l41->hw_cfg.bst_ind && cs35l41->hw_cfg.bst_cap) { + ret =3D cs35l41_boost_config(cs35l41->dev, cs35l41->regmap, cs35l41->hw_= cfg.bst_ind, + cs35l41->hw_cfg.bst_cap, cs35l41->hw_cfg.bst_ipk); if (ret) { dev_err(cs35l41->dev, "Error in Boost DT config: %d\n", ret); return ret; @@ -1013,43 +1013,39 @@ static int cs35l41_set_pdata(struct cs35l41_private= *cs35l41) } =20 /* Optional */ - if (cs35l41->pdata.dout_hiz <=3D CS35L41_ASP_DOUT_HIZ_MASK && - cs35l41->pdata.dout_hiz >=3D 0) - regmap_update_bits(cs35l41->regmap, CS35L41_SP_HIZ_CTRL, - CS35L41_ASP_DOUT_HIZ_MASK, - cs35l41->pdata.dout_hiz); + if (cs35l41->hw_cfg.dout_hiz <=3D CS35L41_ASP_DOUT_HIZ_MASK && + cs35l41->hw_cfg.dout_hiz >=3D 0) + regmap_update_bits(cs35l41->regmap, CS35L41_SP_HIZ_CTRL, CS35L41_ASP_DOU= T_HIZ_MASK, + cs35l41->hw_cfg.dout_hiz); =20 return 0; } =20 -static int cs35l41_irq_gpio_config(struct cs35l41_private *cs35l41) +static int cs35l41_gpio_config(struct cs35l41_private *cs35l41) { - struct cs35l41_irq_cfg *irq_gpio_cfg1 =3D &cs35l41->pdata.irq_config1; - struct cs35l41_irq_cfg *irq_gpio_cfg2 =3D &cs35l41->pdata.irq_config2; + struct cs35l41_gpio_cfg *gpio1 =3D &cs35l41->hw_cfg.gpio1; + struct cs35l41_gpio_cfg *gpio2 =3D &cs35l41->hw_cfg.gpio2; int irq_pol =3D IRQF_TRIGGER_NONE; =20 regmap_update_bits(cs35l41->regmap, CS35L41_GPIO1_CTRL1, CS35L41_GPIO_POL_MASK | CS35L41_GPIO_DIR_MASK, - irq_gpio_cfg1->irq_pol_inv << CS35L41_GPIO_POL_SHIFT | - !irq_gpio_cfg1->irq_out_en << CS35L41_GPIO_DIR_SHIFT); + gpio1->pol_inv << CS35L41_GPIO_POL_SHIFT | + !gpio1->out_en << CS35L41_GPIO_DIR_SHIFT); =20 regmap_update_bits(cs35l41->regmap, CS35L41_GPIO2_CTRL1, CS35L41_GPIO_POL_MASK | CS35L41_GPIO_DIR_MASK, - irq_gpio_cfg2->irq_pol_inv << CS35L41_GPIO_POL_SHIFT | - !irq_gpio_cfg2->irq_out_en << CS35L41_GPIO_DIR_SHIFT); + gpio2->pol_inv << CS35L41_GPIO_POL_SHIFT | + !gpio2->out_en << CS35L41_GPIO_DIR_SHIFT); =20 regmap_update_bits(cs35l41->regmap, CS35L41_GPIO_PAD_CONTROL, CS35L41_GPIO1_CTRL_MASK | CS35L41_GPIO2_CTRL_MASK, - irq_gpio_cfg1->irq_src_sel << CS35L41_GPIO1_CTRL_SHIFT | - irq_gpio_cfg2->irq_src_sel << CS35L41_GPIO2_CTRL_SHIFT); + gpio1->func << CS35L41_GPIO1_CTRL_SHIFT | + gpio2->func << CS35L41_GPIO2_CTRL_SHIFT); =20 - if ((irq_gpio_cfg2->irq_src_sel =3D=3D - (CS35L41_GPIO_CTRL_ACTV_LO | CS35L41_VALID_PDATA)) || - (irq_gpio_cfg2->irq_src_sel =3D=3D - (CS35L41_GPIO_CTRL_OPEN_INT | CS35L41_VALID_PDATA))) + if ((gpio2->func =3D=3D (CS35L41_INT_PUSH_PULL_LOW_GPIO2 | CS35L41_VALID_= PDATA)) || + (gpio2->func =3D=3D (CS35L41_INT_OPEN_DRAIN_GPIO2 | CS35L41_VALID_PDATA)= )) irq_pol =3D IRQF_TRIGGER_LOW; - else if (irq_gpio_cfg2->irq_src_sel =3D=3D - (CS35L41_GPIO_CTRL_ACTV_HI | CS35L41_VALID_PDATA)) + else if (gpio2->func =3D=3D (CS35L41_INT_PUSH_PULL_HIGH_GPIO2 | CS35L41_V= ALID_PDATA)) irq_pol =3D IRQF_TRIGGER_HIGH; =20 return irq_pol; @@ -1115,50 +1111,44 @@ static const struct snd_soc_component_driver soc_co= mponent_dev_cs35l41 =3D { .set_sysclk =3D cs35l41_component_set_sysclk, }; =20 -static int cs35l41_handle_pdata(struct device *dev, struct cs35l41_platfor= m_data *pdata) +static int cs35l41_handle_pdata(struct device *dev, struct cs35l41_hw_cfg = *hw_cfg) { - struct cs35l41_irq_cfg *irq_gpio1_config =3D &pdata->irq_config1; - struct cs35l41_irq_cfg *irq_gpio2_config =3D &pdata->irq_config2; + struct cs35l41_gpio_cfg *gpio1 =3D &hw_cfg->gpio1; + struct cs35l41_gpio_cfg *gpio2 =3D &hw_cfg->gpio2; unsigned int val; int ret; =20 ret =3D device_property_read_u32(dev, "cirrus,boost-peak-milliamp", &val); if (ret >=3D 0) - pdata->bst_ipk =3D val; + hw_cfg->bst_ipk =3D val; =20 ret =3D device_property_read_u32(dev, "cirrus,boost-ind-nanohenry", &val); if (ret >=3D 0) - pdata->bst_ind =3D val; + hw_cfg->bst_ind =3D val; =20 ret =3D device_property_read_u32(dev, "cirrus,boost-cap-microfarad", &val= ); if (ret >=3D 0) - pdata->bst_cap =3D val; + hw_cfg->bst_cap =3D val; =20 ret =3D device_property_read_u32(dev, "cirrus,asp-sdout-hiz", &val); if (ret >=3D 0) - pdata->dout_hiz =3D val; + hw_cfg->dout_hiz =3D val; else - pdata->dout_hiz =3D -1; + hw_cfg->dout_hiz =3D -1; =20 /* GPIO1 Pin Config */ - irq_gpio1_config->irq_pol_inv =3D device_property_read_bool(dev, - "cirrus,gpio1-polarity-invert"); - irq_gpio1_config->irq_out_en =3D device_property_read_bool(dev, - "cirrus,gpio1-output-enable"); - ret =3D device_property_read_u32(dev, "cirrus,gpio1-src-select", - &val); + gpio1->pol_inv =3D device_property_read_bool(dev, "cirrus,gpio1-polarity-= invert"); + gpio1->out_en =3D device_property_read_bool(dev, "cirrus,gpio1-output-ena= ble"); + ret =3D device_property_read_u32(dev, "cirrus,gpio1-src-select", &val); if (ret >=3D 0) - irq_gpio1_config->irq_src_sel =3D val | CS35L41_VALID_PDATA; + gpio1->func =3D val | CS35L41_VALID_PDATA; =20 /* GPIO2 Pin Config */ - irq_gpio2_config->irq_pol_inv =3D device_property_read_bool(dev, - "cirrus,gpio2-polarity-invert"); - irq_gpio2_config->irq_out_en =3D device_property_read_bool(dev, - "cirrus,gpio2-output-enable"); - ret =3D device_property_read_u32(dev, "cirrus,gpio2-src-select", - &val); + gpio2->pol_inv =3D device_property_read_bool(dev, "cirrus,gpio2-polarity-= invert"); + gpio2->out_en =3D device_property_read_bool(dev, "cirrus,gpio2-output-ena= ble"); + ret =3D device_property_read_u32(dev, "cirrus,gpio2-src-select", &val); if (ret >=3D 0) - irq_gpio2_config->irq_src_sel =3D val | CS35L41_VALID_PDATA; + gpio2->func =3D val | CS35L41_VALID_PDATA; =20 return 0; } @@ -1248,17 +1238,16 @@ static int cs35l41_dsp_init(struct cs35l41_private = *cs35l41) return ret; } =20 -int cs35l41_probe(struct cs35l41_private *cs35l41, - struct cs35l41_platform_data *pdata) +int cs35l41_probe(struct cs35l41_private *cs35l41, const struct cs35l41_hw= _cfg *hw_cfg) { u32 regid, reg_revid, i, mtl_revid, int_status, chipid_match; int irq_pol =3D 0; int ret; =20 - if (pdata) { - cs35l41->pdata =3D *pdata; + if (hw_cfg) { + cs35l41->hw_cfg =3D *hw_cfg; } else { - ret =3D cs35l41_handle_pdata(cs35l41->dev, &cs35l41->pdata); + ret =3D cs35l41_handle_pdata(cs35l41->dev, &cs35l41->hw_cfg); if (ret !=3D 0) return ret; } @@ -1357,7 +1346,7 @@ int cs35l41_probe(struct cs35l41_private *cs35l41, =20 cs35l41_test_key_lock(cs35l41->dev, cs35l41->regmap); =20 - irq_pol =3D cs35l41_irq_gpio_config(cs35l41); + irq_pol =3D cs35l41_gpio_config(cs35l41); =20 /* Set interrupt masks for critical errors */ regmap_write(cs35l41->regmap, CS35L41_IRQ1_MASK1, diff --git a/sound/soc/codecs/cs35l41.h b/sound/soc/codecs/cs35l41.h index 88a3d6e3434f..e3369e0aa89f 100644 --- a/sound/soc/codecs/cs35l41.h +++ b/sound/soc/codecs/cs35l41.h @@ -44,7 +44,7 @@ enum cs35l41_cspl_mbox_cmd { struct cs35l41_private { struct wm_adsp dsp; /* needs to be first member */ struct snd_soc_codec *codec; - struct cs35l41_platform_data pdata; + struct cs35l41_hw_cfg hw_cfg; struct device *dev; struct regmap *regmap; struct regulator_bulk_data supplies[CS35L41_NUM_SUPPLIES]; @@ -53,8 +53,7 @@ struct cs35l41_private { struct gpio_desc *reset_gpio; }; =20 -int cs35l41_probe(struct cs35l41_private *cs35l41, - struct cs35l41_platform_data *pdata); +int cs35l41_probe(struct cs35l41_private *cs35l41, const struct cs35l41_hw= _cfg *hw_cfg); void cs35l41_remove(struct cs35l41_private *cs35l41); =20 #endif /*__CS35L41_H__*/ --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1DDA9C433EF for ; Fri, 4 Mar 2022 15:08:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240184AbiCDPJH (ORCPT ); Fri, 4 Mar 2022 10:09:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50974 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240075AbiCDPIa (ORCPT ); Fri, 4 Mar 2022 10:08:30 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 417A045AE1; Fri, 4 Mar 2022 07:07:42 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2248TInE019088; Fri, 4 Mar 2022 09:07:29 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=rQPymLIF2H3uKxckE27P9HNIG8udLBdn0YbM8b2tm0Q=; b=TaIR9IF3eag4VrUdUseytp+T7udCsxLX4vLsUI8qAQcB3WccMDBFvb5W3JQPC0b1OuMK woaUPQs5C9as+yNBMocsHHvjxAsDJ4xnoFvLAPtxsFTKmQmUTgQIrTp+P5O3bMiaNImy 6j5U1oJZFNPgeO1NhQSj9HwDScUruT98eZ8zR+lPxLVtjhoCVbDC3okuWMgpyOCr056u uDe31qKYQCkyPPMixo4vSeJz9Op806UVvI3Buwm4RlP/dM+2DsHsalHkv7UprUbgCCx2 9gKc72n74mvWZh8FCQX4wzEiCohsEqr0uU7L2wFTRACRDtgP18KtxBmzQiJgkeUYZx6j fA== Received: from ediex01.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h413-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:28 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:26 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:26 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id ACBF9B1A; Fri, 4 Mar 2022 15:07:25 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure , Charles Keepax Subject: [PATCH v2 06/20] sound: cs35l41: Check hw_config before using it Date: Fri, 4 Mar 2022 15:07:07 +0000 Message-ID: <20220304150721.3802-7-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: npyqeI6sPyARwL7DuKg0JOGya6LBl4Ve X-Proofpoint-ORIG-GUID: npyqeI6sPyARwL7DuKg0JOGya6LBl4Ve X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The driver can receive an empty hw_config, so mark as valid if successfully read from device tree or ACPI. Platforms not marked with a valid hw config will not be supported. Signed-off-by: Lucas Tanure Acked-by: Charles Keepax --- include/sound/cs35l41.h | 3 +- sound/pci/hda/cs35l41_hda.c | 70 +++++++++++++++++++------------ sound/soc/codecs/cs35l41-lib.c | 16 ++++--- sound/soc/codecs/cs35l41.c | 77 +++++++++++++++++++++------------- 4 files changed, 105 insertions(+), 61 deletions(-) diff --git a/include/sound/cs35l41.h b/include/sound/cs35l41.h index 262c75109c9e..57c47636c223 100644 --- a/include/sound/cs35l41.h +++ b/include/sound/cs35l41.h @@ -538,7 +538,6 @@ #define CS35L41_OTP_SIZE_WORDS 32 #define CS35L41_NUM_OTP_ELEM 100 =20 -#define CS35L41_VALID_PDATA 0x80000000 #define CS35L41_NUM_SUPPLIES 2 =20 #define CS35L41_SCLK_MSTR_MASK 0x10 @@ -747,12 +746,14 @@ enum cs35l41_gpio_func { }; =20 struct cs35l41_gpio_cfg { + bool valid; bool pol_inv; bool out_en; enum cs35l41_gpio_func func; }; =20 struct cs35l41_hw_cfg { + bool valid; int bst_ind; int bst_ipk; int bst_cap; diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index b79d6ad4b4f5..a14ad3b0d516 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -219,46 +219,52 @@ static int cs35l41_hda_apply_properties(struct cs35l4= 1_hda *cs35l41) bool internal_boost =3D false; int ret; =20 + if (!cs35l41->hw_cfg.valid) + return -EINVAL; + if (hw_cfg->vspk_always_on) { cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_no_bst; return 0; } =20 - if (hw_cfg->bst_ind || hw_cfg->bst_cap || hw_cfg->bst_ipk) + if (hw_cfg->bst_ind > 0 || hw_cfg->bst_cap > 0 || hw_cfg->bst_ipk > 0) internal_boost =3D true; =20 - switch (hw_cfg->gpio1.func) { - case CS35L41_NOT_USED: - break; - case CS35l41_VSPK_SWITCH: - regmap_update_bits(cs35l41->regmap, CS35L41_GPIO_PAD_CONTROL, - CS35L41_GPIO1_CTRL_MASK, 1 << CS35L41_GPIO1_CTRL_SHIFT); - break; - case CS35l41_SYNC: - regmap_update_bits(cs35l41->regmap, CS35L41_GPIO_PAD_CONTROL, - CS35L41_GPIO1_CTRL_MASK, 2 << CS35L41_GPIO1_CTRL_SHIFT); - break; - default: - dev_err(cs35l41->dev, "Invalid function %d for GPIO1\n", hw_cfg->gpio1.f= unc); - return -EINVAL; + if (hw_cfg->gpio1.valid) { + switch (hw_cfg->gpio1.func) { + case CS35L41_NOT_USED: + break; + case CS35l41_VSPK_SWITCH: + regmap_update_bits(cs35l41->regmap, CS35L41_GPIO_PAD_CONTROL, + CS35L41_GPIO1_CTRL_MASK, 1 << CS35L41_GPIO1_CTRL_SHIFT); + break; + case CS35l41_SYNC: + regmap_update_bits(cs35l41->regmap, CS35L41_GPIO_PAD_CONTROL, + CS35L41_GPIO1_CTRL_MASK, 2 << CS35L41_GPIO1_CTRL_SHIFT); + break; + default: + dev_err(cs35l41->dev, "Invalid function %d for GPIO1\n", + hw_cfg->gpio1.func); + return -EINVAL; + } } =20 - switch (hw_cfg->gpio2.func) { - case CS35L41_NOT_USED: - break; - case CS35L41_INTERRUPT: - regmap_update_bits(cs35l41->regmap, CS35L41_GPIO_PAD_CONTROL, - CS35L41_GPIO2_CTRL_MASK, 2 << CS35L41_GPIO2_CTRL_SHIFT); - break; - default: - dev_err(cs35l41->dev, "Invalid function %d for GPIO2\n", hw_cfg->gpio2.f= unc); - return -EINVAL; + if (hw_cfg->gpio2.valid) { + switch (hw_cfg->gpio2.func) { + case CS35L41_NOT_USED: + break; + case CS35L41_INTERRUPT: + regmap_update_bits(cs35l41->regmap, CS35L41_GPIO_PAD_CONTROL, + CS35L41_GPIO2_CTRL_MASK, 2 << CS35L41_GPIO2_CTRL_SHIFT); + break; + default: + dev_err(cs35l41->dev, "Invalid GPIO2 function %d\n", hw_cfg->gpio2.func= ); + return -EINVAL; + } } =20 if (internal_boost) { cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_int_bst; - if (!(hw_cfg->bst_ind && hw_cfg->bst_cap && hw_cfg->bst_ipk)) - return -EINVAL; ret =3D cs35l41_boost_config(cs35l41->dev, cs35l41->regmap, hw_cfg->bst_ind, hw_cfg->bst_cap, hw_cfg->bst_ipk); if (ret) @@ -334,28 +340,37 @@ static int cs35l41_hda_read_acpi(struct cs35l41_hda *= cs35l41, const char *hid, i if (ret) goto err; hw_cfg->gpio1.func =3D values[cs35l41->index]; + hw_cfg->gpio1.valid =3D true; =20 property =3D "cirrus,gpio2-func"; ret =3D device_property_read_u32_array(physdev, property, values, nval); if (ret) goto err; hw_cfg->gpio2.func =3D values[cs35l41->index]; + hw_cfg->gpio2.valid =3D true; =20 property =3D "cirrus,boost-peak-milliamp"; ret =3D device_property_read_u32_array(physdev, property, values, nval); if (ret =3D=3D 0) hw_cfg->bst_ipk =3D values[cs35l41->index]; + else + hw_cfg->bst_ipk =3D -1; =20 property =3D "cirrus,boost-ind-nanohenry"; ret =3D device_property_read_u32_array(physdev, property, values, nval); if (ret =3D=3D 0) hw_cfg->bst_ind =3D values[cs35l41->index]; + else + hw_cfg->bst_ind =3D -1; =20 property =3D "cirrus,boost-cap-microfarad"; ret =3D device_property_read_u32_array(physdev, property, values, nval); if (ret =3D=3D 0) hw_cfg->bst_cap =3D values[cs35l41->index]; + else + hw_cfg->bst_cap =3D -1; =20 + hw_cfg->valid =3D true; put_device(physdev); =20 return 0; @@ -381,6 +396,7 @@ static int cs35l41_hda_read_acpi(struct cs35l41_hda *cs= 35l41, const char *hid, i cs35l41->index =3D id =3D=3D 0x40 ? 0 : 1; cs35l41->reset_gpio =3D gpiod_get_index(physdev, NULL, 0, GPIOD_OUT_HIGH); cs35l41->hw_cfg.vspk_always_on =3D true; + cs35l41->hw_cfg.valid =3D true; put_device(physdev); =20 return 0; diff --git a/sound/soc/codecs/cs35l41-lib.c b/sound/soc/codecs/cs35l41-lib.c index e5a56bcbb223..905c648a8f49 100644 --- a/sound/soc/codecs/cs35l41-lib.c +++ b/sound/soc/codecs/cs35l41-lib.c @@ -992,10 +992,20 @@ int cs35l41_boost_config(struct device *dev, struct r= egmap *regmap, int boost_in case 101 ... 200: bst_cbst_range =3D 3; break; - default: /* 201 uF and greater */ + default: + if (boost_cap < 0) { + dev_err(dev, "Invalid boost capacitor value: %d nH\n", boost_cap); + return -EINVAL; + } + /* 201 uF and greater */ bst_cbst_range =3D 4; } =20 + if (boost_ipk < 1600 || boost_ipk > 4500) { + dev_err(dev, "Invalid boost inductor peak current: %d mA\n", boost_ipk); + return -EINVAL; + } + ret =3D regmap_update_bits(regmap, CS35L41_BSTCVRT_COEFF, CS35L41_BST_K1_MASK | CS35L41_BST_K2_MASK, cs35l41_bst_k1_table[bst_lbst_val][bst_cbst_range] @@ -1017,10 +1027,6 @@ int cs35l41_boost_config(struct device *dev, struct = regmap *regmap, int boost_in return ret; } =20 - if (boost_ipk < 1600 || boost_ipk > 4500) { - dev_err(dev, "Invalid boost inductor peak current: %d mA\n", boost_ipk); - return -EINVAL; - } bst_ipk_scaled =3D ((boost_ipk - 1600) / 50) + 0x10; =20 ret =3D regmap_update_bits(regmap, CS35L41_BSTCVRT_PEAK_CUR, CS35L41_BST_= IPK_MASK, diff --git a/sound/soc/codecs/cs35l41.c b/sound/soc/codecs/cs35l41.c index 67b33c5c3d44..5dbc2147209a 100644 --- a/sound/soc/codecs/cs35l41.c +++ b/sound/soc/codecs/cs35l41.c @@ -995,28 +995,24 @@ static int cs35l41_dai_set_sysclk(struct snd_soc_dai = *dai, =20 static int cs35l41_set_pdata(struct cs35l41_private *cs35l41) { + struct cs35l41_hw_cfg *hw_cfg =3D &cs35l41->hw_cfg; int ret; =20 - /* Set Platform Data */ - /* Required */ - if (cs35l41->hw_cfg.bst_ipk && - cs35l41->hw_cfg.bst_ind && cs35l41->hw_cfg.bst_cap) { - ret =3D cs35l41_boost_config(cs35l41->dev, cs35l41->regmap, cs35l41->hw_= cfg.bst_ind, - cs35l41->hw_cfg.bst_cap, cs35l41->hw_cfg.bst_ipk); - if (ret) { - dev_err(cs35l41->dev, "Error in Boost DT config: %d\n", ret); - return ret; - } - } else { - dev_err(cs35l41->dev, "Incomplete Boost component DT config\n"); + if (!hw_cfg->valid) return -EINVAL; + + /* Required */ + ret =3D cs35l41_boost_config(cs35l41->dev, cs35l41->regmap, + hw_cfg->bst_ind, hw_cfg->bst_cap, hw_cfg->bst_ipk); + if (ret) { + dev_err(cs35l41->dev, "Error in Boost DT config: %d\n", ret); + return ret; } =20 /* Optional */ - if (cs35l41->hw_cfg.dout_hiz <=3D CS35L41_ASP_DOUT_HIZ_MASK && - cs35l41->hw_cfg.dout_hiz >=3D 0) + if (hw_cfg->dout_hiz <=3D CS35L41_ASP_DOUT_HIZ_MASK && hw_cfg->dout_hiz >= =3D 0) regmap_update_bits(cs35l41->regmap, CS35L41_SP_HIZ_CTRL, CS35L41_ASP_DOU= T_HIZ_MASK, - cs35l41->hw_cfg.dout_hiz); + hw_cfg->dout_hiz); =20 return 0; } @@ -1037,16 +1033,29 @@ static int cs35l41_gpio_config(struct cs35l41_priva= te *cs35l41) gpio2->pol_inv << CS35L41_GPIO_POL_SHIFT | !gpio2->out_en << CS35L41_GPIO_DIR_SHIFT); =20 - regmap_update_bits(cs35l41->regmap, CS35L41_GPIO_PAD_CONTROL, - CS35L41_GPIO1_CTRL_MASK | CS35L41_GPIO2_CTRL_MASK, - gpio1->func << CS35L41_GPIO1_CTRL_SHIFT | - gpio2->func << CS35L41_GPIO2_CTRL_SHIFT); =20 - if ((gpio2->func =3D=3D (CS35L41_INT_PUSH_PULL_LOW_GPIO2 | CS35L41_VALID_= PDATA)) || - (gpio2->func =3D=3D (CS35L41_INT_OPEN_DRAIN_GPIO2 | CS35L41_VALID_PDATA)= )) - irq_pol =3D IRQF_TRIGGER_LOW; - else if (gpio2->func =3D=3D (CS35L41_INT_PUSH_PULL_HIGH_GPIO2 | CS35L41_V= ALID_PDATA)) - irq_pol =3D IRQF_TRIGGER_HIGH; + if (gpio1->valid) + regmap_update_bits(cs35l41->regmap, CS35L41_GPIO_PAD_CONTROL, + CS35L41_GPIO1_CTRL_MASK, + gpio1->func << CS35L41_GPIO1_CTRL_SHIFT); + + if (gpio2->valid) { + regmap_update_bits(cs35l41->regmap, CS35L41_GPIO_PAD_CONTROL, + CS35L41_GPIO2_CTRL_MASK, + gpio2->func << CS35L41_GPIO2_CTRL_SHIFT); + + switch (gpio2->func) { + case CS35L41_INT_PUSH_PULL_LOW_GPIO2: + case CS35L41_INT_OPEN_DRAIN_GPIO2: + irq_pol =3D IRQF_TRIGGER_LOW; + break; + case CS35L41_INT_PUSH_PULL_HIGH_GPIO2: + irq_pol =3D IRQF_TRIGGER_HIGH; + break; + default: + break; + } + } =20 return irq_pol; } @@ -1121,14 +1130,20 @@ static int cs35l41_handle_pdata(struct device *dev,= struct cs35l41_hw_cfg *hw_cf ret =3D device_property_read_u32(dev, "cirrus,boost-peak-milliamp", &val); if (ret >=3D 0) hw_cfg->bst_ipk =3D val; + else + hw_cfg->bst_ipk =3D -1; =20 ret =3D device_property_read_u32(dev, "cirrus,boost-ind-nanohenry", &val); if (ret >=3D 0) hw_cfg->bst_ind =3D val; + else + hw_cfg->bst_ind =3D -1; =20 ret =3D device_property_read_u32(dev, "cirrus,boost-cap-microfarad", &val= ); if (ret >=3D 0) hw_cfg->bst_cap =3D val; + else + hw_cfg->bst_cap =3D -1; =20 ret =3D device_property_read_u32(dev, "cirrus,asp-sdout-hiz", &val); if (ret >=3D 0) @@ -1140,15 +1155,21 @@ static int cs35l41_handle_pdata(struct device *dev,= struct cs35l41_hw_cfg *hw_cf gpio1->pol_inv =3D device_property_read_bool(dev, "cirrus,gpio1-polarity-= invert"); gpio1->out_en =3D device_property_read_bool(dev, "cirrus,gpio1-output-ena= ble"); ret =3D device_property_read_u32(dev, "cirrus,gpio1-src-select", &val); - if (ret >=3D 0) - gpio1->func =3D val | CS35L41_VALID_PDATA; + if (ret >=3D 0) { + gpio1->func =3D val; + gpio1->valid =3D true; + } =20 /* GPIO2 Pin Config */ gpio2->pol_inv =3D device_property_read_bool(dev, "cirrus,gpio2-polarity-= invert"); gpio2->out_en =3D device_property_read_bool(dev, "cirrus,gpio2-output-ena= ble"); ret =3D device_property_read_u32(dev, "cirrus,gpio2-src-select", &val); - if (ret >=3D 0) - gpio2->func =3D val | CS35L41_VALID_PDATA; + if (ret >=3D 0) { + gpio2->func =3D val; + gpio2->valid =3D true; + } + + hw_cfg->valid =3D true; =20 return 0; } --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2B758C433F5 for ; Fri, 4 Mar 2022 15:07:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240096AbiCDPIf (ORCPT ); Fri, 4 Mar 2022 10:08:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50940 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240060AbiCDPI3 (ORCPT ); Fri, 4 Mar 2022 10:08:29 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3DF1441607; Fri, 4 Mar 2022 07:07:40 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2248TInF019088; Fri, 4 Mar 2022 09:07:30 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=gAGfrjem3F6pjZ3sk5srLEmPtYW39NYZnNe6CxNxdu4=; b=lrl1pQCjgMQ4zMMeGYHOvK/fDyuo20YxWjf3AfmlpZUBuhdBtcP+oN8A4PlEiprWnLBX QlM1MosonVN5U/mxdMUBxCzHxWVc5bPYfxGAlIOz0xnuwZEOFjQ5bRsah3w6tcLP69D5 kfbCDHdOjA6+CZAWXdR1TpfDQRXHfyv6XxDibWi/HoOdzslK5XKepjrpN5QOR+8jxVg4 heA2lJLDOg/QV2T4zAAwBc1MKdbs2SnYMHNqXkxjQkTHCbwZDHhRePyYs6AE44gtTqjs 27D9U9h0WFAmah+9w0UsjE1CGy7sv8TZbsb+RdJGRWY2zZCuHLhQBbuJxxTNKRKL2Zz2 Bw== Received: from ediex01.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h413-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:30 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:26 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:26 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id 1430F7C; Fri, 4 Mar 2022 15:07:26 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure , Charles Keepax Subject: [PATCH v2 07/20] sound: cs35l41: Move cs35l41_gpio_config to shared lib Date: Fri, 4 Mar 2022 15:07:08 +0000 Message-ID: <20220304150721.3802-8-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 6qW4E7fx8HZAbMhM_yuLBXC9w8mE371Q X-Proofpoint-ORIG-GUID: 6qW4E7fx8HZAbMhM_yuLBXC9w8mE371Q X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" ASoC and HDA can use a single function to configure gpios Signed-off-by: Lucas Tanure Acked-by: Charles Keepax --- include/sound/cs35l41.h | 1 + sound/pci/hda/cs35l41_hda.c | 11 ++++----- sound/soc/codecs/cs35l41-lib.c | 41 +++++++++++++++++++++++++++++++ sound/soc/codecs/cs35l41.c | 45 +--------------------------------- 4 files changed, 48 insertions(+), 50 deletions(-) diff --git a/include/sound/cs35l41.h b/include/sound/cs35l41.h index 57c47636c223..e3ec0f422fff 100644 --- a/include/sound/cs35l41.h +++ b/include/sound/cs35l41.h @@ -792,5 +792,6 @@ int cs35l41_set_channels(struct device *dev, struct reg= map *reg, unsigned int rx_num, unsigned int *rx_slot); int cs35l41_boost_config(struct device *dev, struct regmap *regmap, int bo= ost_ind, int boost_cap, int boost_ipk); +int cs35l41_gpio_config(struct regmap *regmap, struct cs35l41_hw_cfg *hw_c= fg); =20 #endif /* __CS35L41_H */ diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index a14ad3b0d516..81cdbd84cf7d 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -235,12 +235,11 @@ static int cs35l41_hda_apply_properties(struct cs35l4= 1_hda *cs35l41) case CS35L41_NOT_USED: break; case CS35l41_VSPK_SWITCH: - regmap_update_bits(cs35l41->regmap, CS35L41_GPIO_PAD_CONTROL, - CS35L41_GPIO1_CTRL_MASK, 1 << CS35L41_GPIO1_CTRL_SHIFT); + hw_cfg->gpio1.func =3D CS35L41_GPIO; + hw_cfg->gpio1.out_en =3D true; break; case CS35l41_SYNC: - regmap_update_bits(cs35l41->regmap, CS35L41_GPIO_PAD_CONTROL, - CS35L41_GPIO1_CTRL_MASK, 2 << CS35L41_GPIO1_CTRL_SHIFT); + hw_cfg->gpio1.func =3D CS35L41_MDSYNC_GPIO1; break; default: dev_err(cs35l41->dev, "Invalid function %d for GPIO1\n", @@ -254,8 +253,6 @@ static int cs35l41_hda_apply_properties(struct cs35l41_= hda *cs35l41) case CS35L41_NOT_USED: break; case CS35L41_INTERRUPT: - regmap_update_bits(cs35l41->regmap, CS35L41_GPIO_PAD_CONTROL, - CS35L41_GPIO2_CTRL_MASK, 2 << CS35L41_GPIO2_CTRL_SHIFT); break; default: dev_err(cs35l41->dev, "Invalid GPIO2 function %d\n", hw_cfg->gpio2.func= ); @@ -263,6 +260,8 @@ static int cs35l41_hda_apply_properties(struct cs35l41_= hda *cs35l41) } } =20 + cs35l41_gpio_config(cs35l41->regmap, hw_cfg); + if (internal_boost) { cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_int_bst; ret =3D cs35l41_boost_config(cs35l41->dev, cs35l41->regmap, diff --git a/sound/soc/codecs/cs35l41-lib.c b/sound/soc/codecs/cs35l41-lib.c index 905c648a8f49..3fae34a232cd 100644 --- a/sound/soc/codecs/cs35l41-lib.c +++ b/sound/soc/codecs/cs35l41-lib.c @@ -1040,6 +1040,47 @@ int cs35l41_boost_config(struct device *dev, struct = regmap *regmap, int boost_in } EXPORT_SYMBOL_GPL(cs35l41_boost_config); =20 +int cs35l41_gpio_config(struct regmap *regmap, struct cs35l41_hw_cfg *hw_c= fg) +{ + struct cs35l41_gpio_cfg *gpio1 =3D &hw_cfg->gpio1; + struct cs35l41_gpio_cfg *gpio2 =3D &hw_cfg->gpio2; + int irq_pol =3D IRQF_TRIGGER_NONE; + + regmap_update_bits(regmap, CS35L41_GPIO1_CTRL1, + CS35L41_GPIO_POL_MASK | CS35L41_GPIO_DIR_MASK, + gpio1->pol_inv << CS35L41_GPIO_POL_SHIFT | + !gpio1->out_en << CS35L41_GPIO_DIR_SHIFT); + + regmap_update_bits(regmap, CS35L41_GPIO2_CTRL1, + CS35L41_GPIO_POL_MASK | CS35L41_GPIO_DIR_MASK, + gpio2->pol_inv << CS35L41_GPIO_POL_SHIFT | + !gpio2->out_en << CS35L41_GPIO_DIR_SHIFT); + + if (gpio1->valid) + regmap_update_bits(regmap, CS35L41_GPIO_PAD_CONTROL, CS35L41_GPIO1_CTRL_= MASK, + gpio1->func << CS35L41_GPIO1_CTRL_SHIFT); + + if (gpio2->valid) { + regmap_update_bits(regmap, CS35L41_GPIO_PAD_CONTROL, CS35L41_GPIO2_CTRL_= MASK, + gpio2->func << CS35L41_GPIO2_CTRL_SHIFT); + + switch (gpio2->func) { + case CS35L41_INT_PUSH_PULL_LOW_GPIO2: + case CS35L41_INT_OPEN_DRAIN_GPIO2: + irq_pol =3D IRQF_TRIGGER_LOW; + break; + case CS35L41_INT_PUSH_PULL_HIGH_GPIO2: + irq_pol =3D IRQF_TRIGGER_HIGH; + break; + default: + break; + } + } + + return irq_pol; +} +EXPORT_SYMBOL_GPL(cs35l41_gpio_config); + MODULE_DESCRIPTION("CS35L41 library"); MODULE_AUTHOR("David Rhodes, Cirrus Logic Inc, "); MODULE_AUTHOR("Lucas Tanure, Cirrus Logic Inc, "); diff --git a/sound/soc/codecs/cs35l41.c b/sound/soc/codecs/cs35l41.c index 5dbc2147209a..d25689fe0c60 100644 --- a/sound/soc/codecs/cs35l41.c +++ b/sound/soc/codecs/cs35l41.c @@ -1017,49 +1017,6 @@ static int cs35l41_set_pdata(struct cs35l41_private = *cs35l41) return 0; } =20 -static int cs35l41_gpio_config(struct cs35l41_private *cs35l41) -{ - struct cs35l41_gpio_cfg *gpio1 =3D &cs35l41->hw_cfg.gpio1; - struct cs35l41_gpio_cfg *gpio2 =3D &cs35l41->hw_cfg.gpio2; - int irq_pol =3D IRQF_TRIGGER_NONE; - - regmap_update_bits(cs35l41->regmap, CS35L41_GPIO1_CTRL1, - CS35L41_GPIO_POL_MASK | CS35L41_GPIO_DIR_MASK, - gpio1->pol_inv << CS35L41_GPIO_POL_SHIFT | - !gpio1->out_en << CS35L41_GPIO_DIR_SHIFT); - - regmap_update_bits(cs35l41->regmap, CS35L41_GPIO2_CTRL1, - CS35L41_GPIO_POL_MASK | CS35L41_GPIO_DIR_MASK, - gpio2->pol_inv << CS35L41_GPIO_POL_SHIFT | - !gpio2->out_en << CS35L41_GPIO_DIR_SHIFT); - - - if (gpio1->valid) - regmap_update_bits(cs35l41->regmap, CS35L41_GPIO_PAD_CONTROL, - CS35L41_GPIO1_CTRL_MASK, - gpio1->func << CS35L41_GPIO1_CTRL_SHIFT); - - if (gpio2->valid) { - regmap_update_bits(cs35l41->regmap, CS35L41_GPIO_PAD_CONTROL, - CS35L41_GPIO2_CTRL_MASK, - gpio2->func << CS35L41_GPIO2_CTRL_SHIFT); - - switch (gpio2->func) { - case CS35L41_INT_PUSH_PULL_LOW_GPIO2: - case CS35L41_INT_OPEN_DRAIN_GPIO2: - irq_pol =3D IRQF_TRIGGER_LOW; - break; - case CS35L41_INT_PUSH_PULL_HIGH_GPIO2: - irq_pol =3D IRQF_TRIGGER_HIGH; - break; - default: - break; - } - } - - return irq_pol; -} - static int cs35l41_component_probe(struct snd_soc_component *component) { struct cs35l41_private *cs35l41 =3D snd_soc_component_get_drvdata(compone= nt); @@ -1367,7 +1324,7 @@ int cs35l41_probe(struct cs35l41_private *cs35l41, co= nst struct cs35l41_hw_cfg * =20 cs35l41_test_key_lock(cs35l41->dev, cs35l41->regmap); =20 - irq_pol =3D cs35l41_gpio_config(cs35l41); + irq_pol =3D cs35l41_gpio_config(cs35l41->regmap, &cs35l41->hw_cfg); =20 /* Set interrupt masks for critical errors */ regmap_write(cs35l41->regmap, CS35L41_IRQ1_MASK1, --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 91989C433EF for ; Fri, 4 Mar 2022 15:08:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240153AbiCDPI4 (ORCPT ); Fri, 4 Mar 2022 10:08:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51006 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240076AbiCDPIb (ORCPT ); Fri, 4 Mar 2022 10:08:31 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C6A6C49902; Fri, 4 Mar 2022 07:07:42 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2248TInG019088; Fri, 4 Mar 2022 09:07:31 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=BSRIu4u7LP/BX+4EuzrjD7JUJiD1RuxHbQLO9l1wmac=; b=i9YFzX8RGJ4kTnXqRou/y/cmc4GGzeG2azMBLdR2bJlki298UO/sm+THRqg/c2HgUO3d 2jvwLtaJkTofrgAH/DWc8K2kNXj7kGKygtKIZ+05zokKOp5zLZXZBW1aa9Dp4Mc1NRpE KzQTb62J8HenhSi6viEcg2r2pAz/uI9TQKGczsRdc+hgKt1V2kH945oQLEfcYKr88hSt fPCdoqcWQUXqZHtTfGf13YdXciXZx1gKEKZ9SZxoTpCLeLWnVL2vOFLMafmCwX4smMM/ 6FMOHr8Z/yWNcGziDlyBmgT9DRt3AGVPI/Ycm2M8vQJOvJczVPM7UpuxTniJRkG1+Ehl ug== Received: from ediex01.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h413-6 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:31 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:26 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:26 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id 6C9B1B06; Fri, 4 Mar 2022 15:07:26 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure Subject: [PATCH v2 08/20] hda: cs35l41: Fix I2S params comments Date: Fri, 4 Mar 2022 15:07:09 +0000 Message-ID: <20220304150721.3802-9-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: qW6odbWBP1rVUrqSs5m2Le3Ly0QmtBER X-Proofpoint-ORIG-GUID: qW6odbWBP1rVUrqSs5m2Le3Ly0QmtBER X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Fix clock and slot size comments Signed-off-by: Lucas Tanure --- sound/pci/hda/cs35l41_hda.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index 81cdbd84cf7d..fe6f6a208d29 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -17,11 +17,11 @@ #include "cs35l41_hda.h" =20 static const struct reg_sequence cs35l41_hda_config[] =3D { - { CS35L41_PLL_CLK_CTRL, 0x00000430 }, // 3200000Hz, BCLK Input, PLL_REFC= LK_EN =3D 1 + { CS35L41_PLL_CLK_CTRL, 0x00000430 }, // 3072000Hz, BCLK Input, PLL_REFC= LK_EN =3D 1 { CS35L41_GLOBAL_CLK_CTRL, 0x00000003 }, // GLOBAL_FS =3D 48 kHz { CS35L41_SP_ENABLES, 0x00010000 }, // ASP_RX1_EN =3D 1 { CS35L41_SP_RATE_CTRL, 0x00000021 }, // ASP_BCLK_FREQ =3D 3.072 MHz - { CS35L41_SP_FORMAT, 0x20200200 }, // 24 bits, I2S, BCLK Slave, FSYNC Sl= ave + { CS35L41_SP_FORMAT, 0x20200200 }, // 32 bits RX/TX slots, I2S, clk cons= umer { CS35L41_DAC_PCM1_SRC, 0x00000008 }, // DACPCM1_SRC =3D ASPRX1 { CS35L41_AMP_DIG_VOL_CTRL, 0x00000000 }, // AMP_VOL_PCM 0.0 dB { CS35L41_AMP_GAIN_CTRL, 0x00000084 }, // AMP_GAIN_PCM 4.5 dB --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6080AC433F5 for ; Fri, 4 Mar 2022 15:08:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240177AbiCDPJD (ORCPT ); Fri, 4 Mar 2022 10:09:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51008 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240077AbiCDPIb (ORCPT ); Fri, 4 Mar 2022 10:08:31 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D8C6349FB6; Fri, 4 Mar 2022 07:07:42 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2244w2hI013723; Fri, 4 Mar 2022 09:07:29 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=KzILZ0DlQ3n1e7FkjfZR9BxxG7sCrZbKRkYcy7tdB58=; b=VI3MopPA7nmem+jieDrRYtkrc+aijaXRlLoLBipSg262UPdmzH0Y+XKfk7V9ZQ5AQvoI IwHLOF0Qvr1CRIf3oZE99vQ5uvPHM17epS1JlS7BIMFwjougYitpRcp0k2Axnc4621q4 kW+Jby/pZYGNbnY6RB1vaRur2S5BtcMaRoIq/uncemu0POQ4T7mLx7TrP3TC49cOLiCv 0/vRm0U+R6xBDb9R/GKhwPcYxpa75u+Lh5djyS61VlkSSAL1cLHtQcGOSnk6m0bFTuBA GcOxo7PrcRRN9Uu9m5zVDyQjFxSrRkvKSAnl1w/do6zHoy8vbl56tY/CEwWoWzlzX8Q8 tQ== Received: from ediex02.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h414-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:29 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX02.ad.cirrus.com (198.61.84.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:27 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:27 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id C94807C; Fri, 4 Mar 2022 15:07:26 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure Subject: [PATCH v2 09/20] hda: cs35l41: Always configure the DAI Date: Fri, 4 Mar 2022 15:07:10 +0000 Message-ID: <20220304150721.3802-10-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: pGQHpro56Or773HWynigvmuppCGB081s X-Proofpoint-ORIG-GUID: pGQHpro56Or773HWynigvmuppCGB081s X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The Dai configuration is always the same and should always configured during open. Signed-off-by: Lucas Tanure --- sound/pci/hda/cs35l41_hda.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index fe6f6a208d29..4c99dcac2dd7 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -111,8 +111,6 @@ static const struct reg_sequence cs35l41_reset_to_safe[= ] =3D { static const struct cs35l41_hda_reg_sequence cs35l41_hda_reg_seq_no_bst = =3D { .probe =3D cs35l41_reset_to_safe, .num_probe =3D ARRAY_SIZE(cs35l41_reset_to_safe), - .open =3D cs35l41_hda_config, - .num_open =3D ARRAY_SIZE(cs35l41_hda_config), .prepare =3D cs35l41_safe_to_active, .num_prepare =3D ARRAY_SIZE(cs35l41_safe_to_active), .cleanup =3D cs35l41_active_to_safe, @@ -120,8 +118,6 @@ static const struct cs35l41_hda_reg_sequence cs35l41_hd= a_reg_seq_no_bst =3D { }; =20 static const struct cs35l41_hda_reg_sequence cs35l41_hda_reg_seq_ext_bst = =3D { - .open =3D cs35l41_hda_config, - .num_open =3D ARRAY_SIZE(cs35l41_hda_config), .prepare =3D cs35l41_start_ext_vspk, .num_prepare =3D ARRAY_SIZE(cs35l41_start_ext_vspk), .cleanup =3D cs35l41_stop_ext_vspk, @@ -129,8 +125,6 @@ static const struct cs35l41_hda_reg_sequence cs35l41_hd= a_reg_seq_ext_bst =3D { }; =20 static const struct cs35l41_hda_reg_sequence cs35l41_hda_reg_seq_int_bst = =3D { - .open =3D cs35l41_hda_config, - .num_open =3D ARRAY_SIZE(cs35l41_hda_config), .prepare =3D cs35l41_hda_start_bst, .num_prepare =3D ARRAY_SIZE(cs35l41_hda_start_bst), .cleanup =3D cs35l41_hda_stop_bst, @@ -146,8 +140,8 @@ static void cs35l41_hda_playback_hook(struct device *de= v, int action) =20 switch (action) { case HDA_GEN_PCM_ACT_OPEN: - if (reg_seq->open) - ret =3D regmap_multi_reg_write(reg, reg_seq->open, reg_seq->num_open); + ret =3D regmap_multi_reg_write(reg, cs35l41_hda_config, + ARRAY_SIZE(cs35l41_hda_config)); break; case HDA_GEN_PCM_ACT_PREPARE: if (reg_seq->prepare) --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 82FD8C433F5 for ; Fri, 4 Mar 2022 15:08:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240099AbiCDPJg (ORCPT ); Fri, 4 Mar 2022 10:09:36 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52844 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240233AbiCDPJR (ORCPT ); Fri, 4 Mar 2022 10:09:17 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5734312151C; Fri, 4 Mar 2022 07:08:13 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2248TInH019088; Fri, 4 Mar 2022 09:07:33 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=zfAoBRkKmA8AwkVXlxCziCwi6FLsYI3rQaXQqQydseY=; b=Y6r/IuctkVH8ZNBHHV73ID/whiLHCnmbQVRfvexOwvSooKz1sifEIS1M9OWm+hOcdVb+ f0vCN2K/4KsnhYazN/v92Z9MC3DtWlHk4QSj32FHy6zU2hh8tuT4DxFDFPcwam4bUp7C ZIMYECeWAKhcPPSsyzxjxT8SKCPfOrrT9qDX7eXS1mo2Uzczb73wt+2JDPIf8ro0SDUx F/i06ogGyp9nDLaFr+rTxEe0lE0kz6x676hCP8KkYg+Z9h4z7jbxb+4qaKfWmiT2QwVv TRkJzTxQ1t6t1s2syBZPN3jQ+FGBuvwyyziq3Pu67UaeDJcFVd2CWqMqAKtYWpGt6dJS dA== Received: from ediex01.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h413-7 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:32 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:27 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:27 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id 254F5B1A; Fri, 4 Mar 2022 15:07:27 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure Subject: [PATCH v2 10/20] hda: cs35l41: Add Boost type flag Date: Fri, 4 Mar 2022 15:07:11 +0000 Message-ID: <20220304150721.3802-11-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: LIrgWdrUs7ZQc4kjkFaN27HpfJwq8Vs4 X-Proofpoint-ORIG-GUID: LIrgWdrUs7ZQc4kjkFaN27HpfJwq8Vs4 X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Replace vspk_always_on by a enum that better characterizes the system, as there is 3 types of boost hardware. Signed-off-by: Lucas Tanure --- include/sound/cs35l41.h | 9 ++++++-- sound/pci/hda/cs35l41_hda.c | 43 +++++++++++++++++++++---------------- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/include/sound/cs35l41.h b/include/sound/cs35l41.h index e3ec0f422fff..fbf38f32e36d 100644 --- a/include/sound/cs35l41.h +++ b/include/sound/cs35l41.h @@ -725,6 +725,12 @@ #define CS35L41_SPI_MAX_FREQ 4000000 #define CS35L41_REGSTRIDE 4 =20 +enum cs35l41_boost_type { + CS35L41_INT_BOOST, + CS35L41_EXT_BOOST, + CS35L41_EXT_BOOST_NO_VSPK_SWITCH, +}; + enum cs35l41_clk_ids { CS35L41_CLKID_SCLK =3D 0, CS35L41_CLKID_LRCLK =3D 1, @@ -762,8 +768,7 @@ struct cs35l41_hw_cfg { struct cs35l41_gpio_cfg gpio2; unsigned int spk_pos; =20 - /* Don't put the AMP in reset if VSPK can not be turned off */ - bool vspk_always_on; + enum cs35l41_boost_type bst_type; }; =20 struct cs35l41_otp_packed_element_t { diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index 4c99dcac2dd7..17660ce71f93 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -210,20 +210,30 @@ static const struct component_ops cs35l41_hda_comp_op= s =3D { static int cs35l41_hda_apply_properties(struct cs35l41_hda *cs35l41) { struct cs35l41_hw_cfg *hw_cfg =3D &cs35l41->hw_cfg; - bool internal_boost =3D false; int ret; =20 if (!cs35l41->hw_cfg.valid) return -EINVAL; =20 - if (hw_cfg->vspk_always_on) { + switch (hw_cfg->bst_type) { + case CS35L41_INT_BOOST: + cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_int_bst; + ret =3D cs35l41_boost_config(cs35l41->dev, cs35l41->regmap, + hw_cfg->bst_ind, hw_cfg->bst_cap, hw_cfg->bst_ipk); + if (ret) + return ret; + break; + case CS35L41_EXT_BOOST: + cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_ext_bst; + break; + case CS35L41_EXT_BOOST_NO_VSPK_SWITCH: cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_no_bst; - return 0; + break; + default: + dev_err(cs35l41->dev, "Boost type %d not supported\n", hw_cfg->bst_type); + return -EINVAL; } =20 - if (hw_cfg->bst_ind > 0 || hw_cfg->bst_cap > 0 || hw_cfg->bst_ipk > 0) - internal_boost =3D true; - if (hw_cfg->gpio1.valid) { switch (hw_cfg->gpio1.func) { case CS35L41_NOT_USED: @@ -256,16 +266,6 @@ static int cs35l41_hda_apply_properties(struct cs35l41= _hda *cs35l41) =20 cs35l41_gpio_config(cs35l41->regmap, hw_cfg); =20 - if (internal_boost) { - cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_int_bst; - ret =3D cs35l41_boost_config(cs35l41->dev, cs35l41->regmap, - hw_cfg->bst_ind, hw_cfg->bst_cap, hw_cfg->bst_ipk); - if (ret) - return ret; - } else { - cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_ext_bst; - } - return cs35l41_hda_channel_map(cs35l41->dev, 0, NULL, 1, &hw_cfg->spk_pos= ); } =20 @@ -363,6 +363,11 @@ static int cs35l41_hda_read_acpi(struct cs35l41_hda *c= s35l41, const char *hid, i else hw_cfg->bst_cap =3D -1; =20 + if (hw_cfg->bst_ind > 0 || hw_cfg->bst_cap > 0 || hw_cfg->bst_ipk > 0) + hw_cfg->bst_type =3D CS35L41_INT_BOOST; + else + hw_cfg->bst_type =3D CS35L41_EXT_BOOST; + hw_cfg->valid =3D true; put_device(physdev); =20 @@ -388,7 +393,7 @@ static int cs35l41_hda_read_acpi(struct cs35l41_hda *cs= 35l41, const char *hid, i /* check I2C address to assign the index */ cs35l41->index =3D id =3D=3D 0x40 ? 0 : 1; cs35l41->reset_gpio =3D gpiod_get_index(physdev, NULL, 0, GPIOD_OUT_HIGH); - cs35l41->hw_cfg.vspk_always_on =3D true; + cs35l41->hw_cfg.bst_type =3D CS35L41_EXT_BOOST_NO_VSPK_SWITCH; cs35l41->hw_cfg.valid =3D true; put_device(physdev); =20 @@ -515,7 +520,7 @@ int cs35l41_hda_probe(struct device *dev, const char *d= evice_name, int id, int i return 0; =20 err: - if (!cs35l41->hw_cfg.vspk_always_on) + if (cs35l41->hw_cfg.bst_type !=3D CS35L41_EXT_BOOST_NO_VSPK_SWITCH) gpiod_set_value_cansleep(cs35l41->reset_gpio, 0); gpiod_put(cs35l41->reset_gpio); =20 @@ -529,7 +534,7 @@ void cs35l41_hda_remove(struct device *dev) =20 component_del(cs35l41->dev, &cs35l41_hda_comp_ops); =20 - if (!cs35l41->hw_cfg.vspk_always_on) + if (cs35l41->hw_cfg.bst_type !=3D CS35L41_EXT_BOOST_NO_VSPK_SWITCH) gpiod_set_value_cansleep(cs35l41->reset_gpio, 0); gpiod_put(cs35l41->reset_gpio); } --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DC492C433EF for ; Fri, 4 Mar 2022 15:08:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240137AbiCDPIt (ORCPT ); Fri, 4 Mar 2022 10:08:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50968 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240068AbiCDPIa (ORCPT ); Fri, 4 Mar 2022 10:08:30 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 472D041635; Fri, 4 Mar 2022 07:07:41 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2244w2hJ013723; Fri, 4 Mar 2022 09:07:30 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=jPt/cfXYkcSIdY91R4XLOOF/Ab/YvNIlCw06bl45M0w=; b=S54ucqtkvSio2PNR/zfTL0kI9hMtK/XRJHdFEGfG2jnZTO18CCToOE+aqHfeXV0KtCiZ 1T4udIZorNqV1Y7ZrHTUFzj3aOsjGsavOTdSc6LNTnVVABzM5yxWDLp0VmqvVzJX076Z Dst+Pzc6e/NaMrYZdVYtynz/sbo+zM5q5UMFkWaX3mADqHZ+aGvk9A3RycysY7kBlOBG Sp8FHkQxoWt4DykVM+U1Lz/UXtHlgLOyZIncF9G3rk4DhUp+iySvVnTaNAM9tUhBDXpM vnps+R4Ap0FEibj+ADOgbZldot2EHg5cWAAiPqsse6+PWx9uYD7mcr1IYwMbE03RSOnp cQ== Received: from ediex02.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h414-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:30 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX02.ad.cirrus.com (198.61.84.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:27 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:27 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id 79C6A11D1; Fri, 4 Mar 2022 15:07:27 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure Subject: [PATCH v2 11/20] hda: cs35l41: Put the device into safe mode for external boost Date: Fri, 4 Mar 2022 15:07:12 +0000 Message-ID: <20220304150721.3802-12-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: z4yCgEpUNYltcpj7-f0JCEPAVdJh3LFw X-Proofpoint-ORIG-GUID: z4yCgEpUNYltcpj7-f0JCEPAVdJh3LFw X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" All external boost setups should be put into safe mode. Signed-off-by: Lucas Tanure --- sound/pci/hda/cs35l41_hda.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index 17660ce71f93..3b9515ed871d 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -109,8 +109,6 @@ static const struct reg_sequence cs35l41_reset_to_safe[= ] =3D { }; =20 static const struct cs35l41_hda_reg_sequence cs35l41_hda_reg_seq_no_bst = =3D { - .probe =3D cs35l41_reset_to_safe, - .num_probe =3D ARRAY_SIZE(cs35l41_reset_to_safe), .prepare =3D cs35l41_safe_to_active, .num_prepare =3D ARRAY_SIZE(cs35l41_safe_to_active), .cleanup =3D cs35l41_active_to_safe, @@ -224,10 +222,15 @@ static int cs35l41_hda_apply_properties(struct cs35l4= 1_hda *cs35l41) return ret; break; case CS35L41_EXT_BOOST: - cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_ext_bst; - break; case CS35L41_EXT_BOOST_NO_VSPK_SWITCH: - cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_no_bst; + if (hw_cfg->bst_type =3D=3D CS35L41_EXT_BOOST) + cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_ext_bst; + else + cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_no_bst; + ret =3D regmap_multi_reg_write(cs35l41->regmap, cs35l41_reset_to_safe, + ARRAY_SIZE(cs35l41_reset_to_safe)); + if (ret) + return ret; break; default: dev_err(cs35l41->dev, "Boost type %d not supported\n", hw_cfg->bst_type); --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DAB58C433F5 for ; Fri, 4 Mar 2022 15:09:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240258AbiCDPJw (ORCPT ); Fri, 4 Mar 2022 10:09:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52096 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240116AbiCDPJR (ORCPT ); Fri, 4 Mar 2022 10:09:17 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 10AA413EFA2; Fri, 4 Mar 2022 07:08:16 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2248TInI019088; Fri, 4 Mar 2022 09:07:35 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=e7i489nr81BI4mQu8M9ZM3Ijji8GspPHt3h35GW5GP0=; b=BYXBTw4Ta8eFFe2vCcYe7eWg5k+z4Rd8BQ/5jxfBa1rhQDvaDMqcE6SsnSPIqHzmthEh G8CGgUymedCR8He8BBuka6aYRQ8b6ENJc2+hO1JR03wmULXW/qjIYTwHFUwn0ezgK9sV plmezhlECnqRpTh+KRRIj/Qj7v69phQkBFC3mMWMxTEvmjWgoaWi9CieColROxQt5+40 S87XtnzSAh6rLfb8pQpCr8ZkDhKGVqxqPmyBAr1839BV5iXux3gSPdj2WQqyulsHW7U4 qpWI7eD2hKfNKbew2Tuebw7YjSWxNpT1fTOeXd8Jt9qn5EXaTvjMjO5Q3KmF4fmpnEZh lA== Received: from ediex01.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h413-8 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:34 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:28 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:28 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id CC6D9B06; Fri, 4 Mar 2022 15:07:27 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure Subject: [PATCH v2 12/20] hda: cs35l41: Mute the device before shutdown Date: Fri, 4 Mar 2022 15:07:13 +0000 Message-ID: <20220304150721.3802-13-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: rhDTyV6xmcKslO4IJL9fQWLBxNaeKios X-Proofpoint-ORIG-GUID: rhDTyV6xmcKslO4IJL9fQWLBxNaeKios X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Mute the device before shutdown to avoid pops and clicks all types of boost. Signed-off-by: Lucas Tanure --- sound/pci/hda/cs35l41_hda.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index 3b9515ed871d..b3cc7db3fc42 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -28,6 +28,11 @@ static const struct reg_sequence cs35l41_hda_config[] = =3D { { CS35L41_PWR_CTRL2, 0x00000001 }, // AMP_EN =3D 1 }; =20 +static const struct reg_sequence cs35l41_hda_mute[] =3D { + { CS35L41_AMP_GAIN_CTRL, 0x00000000 }, // AMP_GAIN_PCM 0.5 dB + { CS35L41_AMP_DIG_VOL_CTRL, 0x0000A678 }, // AMP_VOL_PCM Mute +}; + static const struct reg_sequence cs35l41_hda_start_bst[] =3D { { CS35L41_PWR_CTRL2, 0x00000021 }, // BST_EN =3D 10, AMP_EN =3D 1 { CS35L41_PWR_CTRL1, 0x00000001, 3000}, // set GLOBAL_EN =3D 1 @@ -89,7 +94,6 @@ static const struct reg_sequence cs35l41_active_to_safe[]= =3D { { 0x00000040, 0x00000055 }, { 0x00000040, 0x000000AA }, { 0x00007438, 0x00585941 }, - { CS35L41_AMP_DIG_VOL_CTRL, 0x0000A678 }, // AMP_VOL_PCM Mute { CS35L41_PWR_CTRL2, 0x00000000 }, // AMP_EN =3D 0 { CS35L41_PWR_CTRL1, 0x00000000 }, { 0x0000742C, 0x00000009, 2000 }, @@ -146,6 +150,7 @@ static void cs35l41_hda_playback_hook(struct device *de= v, int action) ret =3D regmap_multi_reg_write(reg, reg_seq->prepare, reg_seq->num_prep= are); break; case HDA_GEN_PCM_ACT_CLEANUP: + regmap_multi_reg_write(reg, cs35l41_hda_mute, ARRAY_SIZE(cs35l41_hda_mut= e)); if (reg_seq->cleanup) ret =3D regmap_multi_reg_write(reg, reg_seq->cleanup, reg_seq->num_clea= nup); break; --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5F99DC433F5 for ; Fri, 4 Mar 2022 15:08:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240183AbiCDPJn (ORCPT ); Fri, 4 Mar 2022 10:09:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53452 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240167AbiCDPJT (ORCPT ); Fri, 4 Mar 2022 10:09:19 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7E19714076A; Fri, 4 Mar 2022 07:08:17 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2248TInJ019088; Fri, 4 Mar 2022 09:07:37 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=cnANgRnNMxthB+Az/dRLrs4+S0q0VAMFd2idCCcyUx8=; b=CtkGtS1EYjug6luEtqqzds+hY+1x9G6ewt3kLaEzBFFpulGixXjJCjEc3E4wfUnZ/Yir GogwYFuTnbc3ShpZkoVXbhPMDDyZk7tQ3YfdH1bdN6EE9pmb+xqUBGhYo2EYeFhcKcd0 TUgO5kvg4kWNuGV+yj1nzckdElibV0otbz31cq6hQAQAfDC+l7YewU4QvBo26WjoH+89 FJC/p30qV/BdHEqhz2TJed2v31Efh73l9RiUV6cFQmuLY2Qa3DZ8yrbwhG36jscOS1wD Gz5h9/9ZlXcUV/Z4AXutWoRExIoWJcyWdUZVV7dcWkPKkfTe7k8E1XaT4EQ4ZYaxOzBo 2A== Received: from ediex01.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h413-9 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:36 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:28 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:28 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id 2CB64B1A; Fri, 4 Mar 2022 15:07:28 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure Subject: [PATCH v2 13/20] sound: cs35l41: Enable Internal Boost in shared lib Date: Fri, 4 Mar 2022 15:07:14 +0000 Message-ID: <20220304150721.3802-14-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 16JV_AZfPC2lQoQTxWCR-O8v89lM1aAd X-Proofpoint-ORIG-GUID: 16JV_AZfPC2lQoQTxWCR-O8v89lM1aAd X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Boost enable is the default option from reset, but with external boost support, internal boost must be disabled. Add the enable of boost in cs35l41_boost_config to centralize the internal boost configuration. Signed-off-by: Lucas Tanure --- sound/soc/codecs/cs35l41-lib.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sound/soc/codecs/cs35l41-lib.c b/sound/soc/codecs/cs35l41-lib.c index 3fae34a232cd..34ba163874a6 100644 --- a/sound/soc/codecs/cs35l41-lib.c +++ b/sound/soc/codecs/cs35l41-lib.c @@ -1036,6 +1036,9 @@ int cs35l41_boost_config(struct device *dev, struct r= egmap *regmap, int boost_in return ret; } =20 + regmap_update_bits(regmap, CS35L41_PWR_CTRL2, CS35L41_BST_EN_MASK, + CS35L41_BST_EN_DEFAULT << CS35L41_BST_EN_SHIFT); + return 0; } EXPORT_SYMBOL_GPL(cs35l41_boost_config); --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 79281C433F5 for ; Fri, 4 Mar 2022 15:08:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240125AbiCDPIw (ORCPT ); Fri, 4 Mar 2022 10:08:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50974 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240071AbiCDPIa (ORCPT ); Fri, 4 Mar 2022 10:08:30 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 348F045505; Fri, 4 Mar 2022 07:07:42 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2244w2hK013723; Fri, 4 Mar 2022 09:07:31 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=tTcpa7MzPHuc33bDZI9ZPTQ5F6Crr6js1OyCSzBY2bo=; b=Qlm6aRYec7UH8f5SY58AXm3ET/xiR7iqgpJoHUOh+1KGhIr4/OWc0pGARkLqdg4L674L kxDOhmwD5ueactTueA+KOKO9/TxMvajTKrB+WA81beOz4yL0oO2riKGgic68cCHKDM/i yy4gJYpxyixGmuCtBox/AAWUMd35k6GB6BHv4bL6DSVk6KvwVENzhQh5shAsawRys6dn DaSYhTxeIm89wNFBWsceYCzZvksuvo0AdLj7gHlOTpM2kDz+SNt85oqYxVKj7z/bToc0 1vhwo9RK2c4I+ZtODqiciiliFTnQ6HS56njlHtZWtmGv8UVIB5dBDgvxjIlU/+OX8Q3X 9g== Received: from ediex02.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h414-6 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:30 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX02.ad.cirrus.com (198.61.84.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:28 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:28 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id 86A99B06; Fri, 4 Mar 2022 15:07:28 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure Subject: [PATCH v2 14/20] hda: cs35l41: Move boost config to initialization code Date: Fri, 4 Mar 2022 15:07:15 +0000 Message-ID: <20220304150721.3802-15-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: kiYO3Hl6L6eTRRBsQqvG0-6RetYV7RAj X-Proofpoint-ORIG-GUID: kiYO3Hl6L6eTRRBsQqvG0-6RetYV7RAj X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Boost configuration doesn't need to be written for every new stream, so move it to the initialization code. Signed-off-by: Lucas Tanure --- include/sound/cs35l41.h | 1 + sound/pci/hda/cs35l41_hda.c | 13 ++++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/include/sound/cs35l41.h b/include/sound/cs35l41.h index fbf38f32e36d..a8537bccedcf 100644 --- a/include/sound/cs35l41.h +++ b/include/sound/cs35l41.h @@ -661,6 +661,7 @@ #define CS35L41_GLOBAL_EN_SHIFT 0 #define CS35L41_BST_EN_MASK 0x0030 #define CS35L41_BST_EN_SHIFT 4 +#define CS35L41_BST_DIS_FET_OFF 0x00 #define CS35L41_BST_EN_DEFAULT 0x2 #define CS35L41_AMP_EN_SHIFT 0 #define CS35L41_AMP_EN_MASK 1 diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index b3cc7db3fc42..3b8167d1ccc1 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -25,7 +25,6 @@ static const struct reg_sequence cs35l41_hda_config[] =3D= { { CS35L41_DAC_PCM1_SRC, 0x00000008 }, // DACPCM1_SRC =3D ASPRX1 { CS35L41_AMP_DIG_VOL_CTRL, 0x00000000 }, // AMP_VOL_PCM 0.0 dB { CS35L41_AMP_GAIN_CTRL, 0x00000084 }, // AMP_GAIN_PCM 4.5 dB - { CS35L41_PWR_CTRL2, 0x00000001 }, // AMP_EN =3D 1 }; =20 static const struct reg_sequence cs35l41_hda_mute[] =3D { @@ -34,7 +33,6 @@ static const struct reg_sequence cs35l41_hda_mute[] =3D { }; =20 static const struct reg_sequence cs35l41_hda_start_bst[] =3D { - { CS35L41_PWR_CTRL2, 0x00000021 }, // BST_EN =3D 10, AMP_EN =3D 1 { CS35L41_PWR_CTRL1, 0x00000001, 3000}, // set GLOBAL_EN =3D 1 }; =20 @@ -94,7 +92,6 @@ static const struct reg_sequence cs35l41_active_to_safe[]= =3D { { 0x00000040, 0x00000055 }, { 0x00000040, 0x000000AA }, { 0x00007438, 0x00585941 }, - { CS35L41_PWR_CTRL2, 0x00000000 }, // AMP_EN =3D 0 { CS35L41_PWR_CTRL1, 0x00000000 }, { 0x0000742C, 0x00000009, 2000 }, { 0x00007438, 0x00580941 }, @@ -144,6 +141,8 @@ static void cs35l41_hda_playback_hook(struct device *de= v, int action) case HDA_GEN_PCM_ACT_OPEN: ret =3D regmap_multi_reg_write(reg, cs35l41_hda_config, ARRAY_SIZE(cs35l41_hda_config)); + regmap_update_bits(reg, CS35L41_PWR_CTRL2, + CS35L41_AMP_EN_MASK, 1 << CS35L41_AMP_EN_SHIFT); break; case HDA_GEN_PCM_ACT_PREPARE: if (reg_seq->prepare) @@ -155,6 +154,8 @@ static void cs35l41_hda_playback_hook(struct device *de= v, int action) ret =3D regmap_multi_reg_write(reg, reg_seq->cleanup, reg_seq->num_clea= nup); break; case HDA_GEN_PCM_ACT_CLOSE: + regmap_update_bits(reg, CS35L41_PWR_CTRL2, + CS35L41_AMP_EN_MASK, 0 << CS35L41_AMP_EN_SHIFT); if (reg_seq->close) ret =3D regmap_multi_reg_write(reg, reg_seq->close, reg_seq->num_close); break; @@ -232,8 +233,10 @@ static int cs35l41_hda_apply_properties(struct cs35l41= _hda *cs35l41) cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_ext_bst; else cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_no_bst; - ret =3D regmap_multi_reg_write(cs35l41->regmap, cs35l41_reset_to_safe, - ARRAY_SIZE(cs35l41_reset_to_safe)); + regmap_multi_reg_write(cs35l41->regmap, cs35l41_reset_to_safe, + ARRAY_SIZE(cs35l41_reset_to_safe)); + ret =3D regmap_update_bits(cs35l41->regmap, CS35L41_PWR_CTRL2, CS35L41_B= ST_EN_MASK, + CS35L41_BST_DIS_FET_OFF << CS35L41_BST_EN_SHIFT); if (ret) return ret; break; --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A3DD3C433EF for ; Fri, 4 Mar 2022 15:09:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240078AbiCDPJ4 (ORCPT ); Fri, 4 Mar 2022 10:09:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52832 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240223AbiCDPJ1 (ORCPT ); Fri, 4 Mar 2022 10:09:27 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6906FDD97F; Fri, 4 Mar 2022 07:08:22 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2248TInK019088; Fri, 4 Mar 2022 09:07:40 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=Rvo5yHMSCi0x2+AM6M5dPvHuBWenQ9n+wl+KyzL+1yI=; b=HB1qTiVEdZNklCRqoXWCmxX0gU93UrncbOTcQ8rdk5YK4+U5rQZMV184btMU4AdwZUVp j4Qsvrzo+J2CQ7XNp5v4hpdUBTvX7f6miOu3tuxPv6/rJ0VNz7PWdBxoqE3u/xpSQAeu f09OE8dP2l11Nvj4k5BN2rxzEyZRrKFkt6AS6UnF03bcDYWEfuiT8hT27AqJomsM83Bz AG3rAa0VSjSQVt+HHnvpBQp8DSrJMDZUQu4bUPwAi9wdBy9yYYPfh1A6GK+IgeT+edAW 1eUbOK2kilLHtfbpy4SmeZtaZG3sLRL7Ua1KTY1tKc3keretLT93DAtEiIlzq5aHS/7/ FQ== Received: from ediex01.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h413-10 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:39 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:29 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:29 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id D81FDB1A; Fri, 4 Mar 2022 15:07:28 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure Subject: [PATCH v2 15/20] hda: cs35l41: Remove cs35l41_hda_reg_sequence struct Date: Fri, 4 Mar 2022 15:07:16 +0000 Message-ID: <20220304150721.3802-16-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: dgN1U6E_nSHlwsUtNNZIEo9h38k26KU2 X-Proofpoint-ORIG-GUID: dgN1U6E_nSHlwsUtNNZIEo9h38k26KU2 X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Remove cs35l41_hd_reg_sequence as it adds a layer of flexibility not needed. Signed-off-by: Lucas Tanure --- sound/pci/hda/cs35l41_hda.c | 79 ++++++++++++++++--------------------- sound/pci/hda/cs35l41_hda.h | 14 ------- 2 files changed, 33 insertions(+), 60 deletions(-) diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index 3b8167d1ccc1..08ce9b8005ec 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -32,14 +32,6 @@ static const struct reg_sequence cs35l41_hda_mute[] =3D { { CS35L41_AMP_DIG_VOL_CTRL, 0x0000A678 }, // AMP_VOL_PCM Mute }; =20 -static const struct reg_sequence cs35l41_hda_start_bst[] =3D { - { CS35L41_PWR_CTRL1, 0x00000001, 3000}, // set GLOBAL_EN =3D 1 -}; - -static const struct reg_sequence cs35l41_hda_stop_bst[] =3D { - { CS35L41_PWR_CTRL1, 0x00000000, 3000}, // set GLOBAL_EN =3D 0 -}; - // only on amps where GPIO1 is used to control ext. VSPK switch static const struct reg_sequence cs35l41_start_ext_vspk[] =3D { { 0x00000040, 0x00000055 }, @@ -109,31 +101,44 @@ static const struct reg_sequence cs35l41_reset_to_saf= e[] =3D { { 0x00000040, 0x00000033 }, }; =20 -static const struct cs35l41_hda_reg_sequence cs35l41_hda_reg_seq_no_bst = =3D { - .prepare =3D cs35l41_safe_to_active, - .num_prepare =3D ARRAY_SIZE(cs35l41_safe_to_active), - .cleanup =3D cs35l41_active_to_safe, - .num_cleanup =3D ARRAY_SIZE(cs35l41_active_to_safe), -}; +static int cs35l41_hda_global_enable(struct cs35l41_hda *cs35l41, int enab= le) +{ + int ret; =20 -static const struct cs35l41_hda_reg_sequence cs35l41_hda_reg_seq_ext_bst = =3D { - .prepare =3D cs35l41_start_ext_vspk, - .num_prepare =3D ARRAY_SIZE(cs35l41_start_ext_vspk), - .cleanup =3D cs35l41_stop_ext_vspk, - .num_cleanup =3D ARRAY_SIZE(cs35l41_stop_ext_vspk), -}; + switch (cs35l41->hw_cfg.bst_type) { + case CS35L41_INT_BOOST: + ret =3D regmap_update_bits(cs35l41->regmap, CS35L41_PWR_CTRL1, + CS35L41_GLOBAL_EN_MASK, + enable << CS35L41_GLOBAL_EN_SHIFT); + usleep_range(3000, 3100); + break; + case CS35L41_EXT_BOOST: + if (enable) + ret =3D regmap_multi_reg_write(cs35l41->regmap, cs35l41_start_ext_vspk, + ARRAY_SIZE(cs35l41_start_ext_vspk)); + else + ret =3D regmap_multi_reg_write(cs35l41->regmap, cs35l41_stop_ext_vspk, + ARRAY_SIZE(cs35l41_stop_ext_vspk)); + break; + case CS35L41_EXT_BOOST_NO_VSPK_SWITCH: + if (enable) + ret =3D regmap_multi_reg_write(cs35l41->regmap, cs35l41_safe_to_active, + ARRAY_SIZE(cs35l41_safe_to_active)); + else + ret =3D regmap_multi_reg_write(cs35l41->regmap, cs35l41_active_to_safe, + ARRAY_SIZE(cs35l41_active_to_safe)); + break; + default: + ret =3D -EINVAL; + break; + } =20 -static const struct cs35l41_hda_reg_sequence cs35l41_hda_reg_seq_int_bst = =3D { - .prepare =3D cs35l41_hda_start_bst, - .num_prepare =3D ARRAY_SIZE(cs35l41_hda_start_bst), - .cleanup =3D cs35l41_hda_stop_bst, - .num_cleanup =3D ARRAY_SIZE(cs35l41_hda_stop_bst), + return ret; }; =20 static void cs35l41_hda_playback_hook(struct device *dev, int action) { struct cs35l41_hda *cs35l41 =3D dev_get_drvdata(dev); - const struct cs35l41_hda_reg_sequence *reg_seq =3D cs35l41->reg_seq; struct regmap *reg =3D cs35l41->regmap; int ret =3D 0; =20 @@ -145,19 +150,15 @@ static void cs35l41_hda_playback_hook(struct device *= dev, int action) CS35L41_AMP_EN_MASK, 1 << CS35L41_AMP_EN_SHIFT); break; case HDA_GEN_PCM_ACT_PREPARE: - if (reg_seq->prepare) - ret =3D regmap_multi_reg_write(reg, reg_seq->prepare, reg_seq->num_prep= are); + ret =3D cs35l41_hda_global_enable(cs35l41, 1); break; case HDA_GEN_PCM_ACT_CLEANUP: regmap_multi_reg_write(reg, cs35l41_hda_mute, ARRAY_SIZE(cs35l41_hda_mut= e)); - if (reg_seq->cleanup) - ret =3D regmap_multi_reg_write(reg, reg_seq->cleanup, reg_seq->num_clea= nup); + ret =3D cs35l41_hda_global_enable(cs35l41, 0); break; case HDA_GEN_PCM_ACT_CLOSE: regmap_update_bits(reg, CS35L41_PWR_CTRL2, CS35L41_AMP_EN_MASK, 0 << CS35L41_AMP_EN_SHIFT); - if (reg_seq->close) - ret =3D regmap_multi_reg_write(reg, reg_seq->close, reg_seq->num_close); break; default: ret =3D -EINVAL; @@ -221,7 +222,6 @@ static int cs35l41_hda_apply_properties(struct cs35l41_= hda *cs35l41) =20 switch (hw_cfg->bst_type) { case CS35L41_INT_BOOST: - cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_int_bst; ret =3D cs35l41_boost_config(cs35l41->dev, cs35l41->regmap, hw_cfg->bst_ind, hw_cfg->bst_cap, hw_cfg->bst_ipk); if (ret) @@ -229,10 +229,6 @@ static int cs35l41_hda_apply_properties(struct cs35l41= _hda *cs35l41) break; case CS35L41_EXT_BOOST: case CS35L41_EXT_BOOST_NO_VSPK_SWITCH: - if (hw_cfg->bst_type =3D=3D CS35L41_EXT_BOOST) - cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_ext_bst; - else - cs35l41->reg_seq =3D &cs35l41_hda_reg_seq_no_bst; regmap_multi_reg_write(cs35l41->regmap, cs35l41_reset_to_safe, ARRAY_SIZE(cs35l41_reset_to_safe)); ret =3D regmap_update_bits(cs35l41->regmap, CS35L41_PWR_CTRL2, CS35L41_B= ST_EN_MASK, @@ -511,15 +507,6 @@ int cs35l41_hda_probe(struct device *dev, const char *= device_name, int id, int i if (ret) goto err; =20 - if (cs35l41->reg_seq->probe) { - ret =3D regmap_multi_reg_write(cs35l41->regmap, cs35l41->reg_seq->probe, - cs35l41->reg_seq->num_probe); - if (ret) { - dev_err(cs35l41->dev, "Fail to apply probe reg patch: %d\n", ret); - goto err; - } - } - ret =3D component_add(cs35l41->dev, &cs35l41_hda_comp_ops); if (ret) { dev_err(cs35l41->dev, "Register component failed: %d\n", ret); diff --git a/sound/pci/hda/cs35l41_hda.h b/sound/pci/hda/cs35l41_hda.h index 17f10764f174..44d9204ffdf1 100644 --- a/sound/pci/hda/cs35l41_hda.h +++ b/sound/pci/hda/cs35l41_hda.h @@ -27,24 +27,10 @@ enum cs35l41_hda_gpio_function { CS35l41_SYNC, }; =20 -struct cs35l41_hda_reg_sequence { - const struct reg_sequence *probe; - unsigned int num_probe; - const struct reg_sequence *open; - unsigned int num_open; - const struct reg_sequence *prepare; - unsigned int num_prepare; - const struct reg_sequence *cleanup; - unsigned int num_cleanup; - const struct reg_sequence *close; - unsigned int num_close; -}; - struct cs35l41_hda { struct device *dev; struct regmap *regmap; struct gpio_desc *reset_gpio; - const struct cs35l41_hda_reg_sequence *reg_seq; struct cs35l41_hw_cfg hw_cfg; =20 int irq; --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A2C90C433F5 for ; Fri, 4 Mar 2022 15:09:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240207AbiCDPJ7 (ORCPT ); Fri, 4 Mar 2022 10:09:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52394 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240235AbiCDPJb (ORCPT ); Fri, 4 Mar 2022 10:09:31 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A80CD148900; Fri, 4 Mar 2022 07:08:23 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2248TInL019088; Fri, 4 Mar 2022 09:07:43 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=QodoB5nWD3LF9aj69ESslxB6QbpX+2m0y7Bji4mb9EI=; b=Zoo5qo/cVIybk4yFi9t/yyHmJBdyLwJWoQ+J2x1RRU7MCjBKm3bR//8wMfIQvbX6t6ll ZLrodQUoWHNAMVu6unaeS74Kp4RWyqrrrd9sIEvpbBEg5xlt06FfM2LHPwfoOqWZ9lT3 /xmwNIA9EqlWZzmMS3DLNyFss9ykI0duHflbQn1lT2rdmCS1A655hJCYiLWrr6ohvufU 4n2JrjCznCQDdreajCQYo8hv2cLbV77UGbS85UjWYCpCOUwtr/i9lzrYoJvT8ArRuelw yMtO+XpkJqPlq12+2wxlYj/SQK71F3Wyc4a7+czsBR87ZIrjAKFFjznxXv22QNK9s8Ja jw== Received: from ediex01.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h413-11 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:41 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:29 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:29 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id 382EE11D1; Fri, 4 Mar 2022 15:07:29 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure Subject: [PATCH v2 16/20] hda: cs35l41: Reorganize log for playback actions Date: Fri, 4 Mar 2022 15:07:17 +0000 Message-ID: <20220304150721.3802-17-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: qrKINcH41ooLGaFnFrlDj6_MwdudvkLx X-Proofpoint-ORIG-GUID: qrKINcH41ooLGaFnFrlDj6_MwdudvkLx X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" For each case, only log the last regmap access so it doesn't get overwritten, and all regmap access should show the same issues. Change to dev_err to log this error. Also, differentiate between a regmap access failure and invalid playback action. Signed-off-by: Lucas Tanure --- sound/pci/hda/cs35l41_hda.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index 08ce9b8005ec..fda4af323c32 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -144,10 +144,9 @@ static void cs35l41_hda_playback_hook(struct device *d= ev, int action) =20 switch (action) { case HDA_GEN_PCM_ACT_OPEN: - ret =3D regmap_multi_reg_write(reg, cs35l41_hda_config, - ARRAY_SIZE(cs35l41_hda_config)); - regmap_update_bits(reg, CS35L41_PWR_CTRL2, - CS35L41_AMP_EN_MASK, 1 << CS35L41_AMP_EN_SHIFT); + regmap_multi_reg_write(reg, cs35l41_hda_config, ARRAY_SIZE(cs35l41_hda_c= onfig)); + ret =3D regmap_update_bits(reg, CS35L41_PWR_CTRL2, + CS35L41_AMP_EN_MASK, 1 << CS35L41_AMP_EN_SHIFT); break; case HDA_GEN_PCM_ACT_PREPARE: ret =3D cs35l41_hda_global_enable(cs35l41, 1); @@ -157,16 +156,16 @@ static void cs35l41_hda_playback_hook(struct device *= dev, int action) ret =3D cs35l41_hda_global_enable(cs35l41, 0); break; case HDA_GEN_PCM_ACT_CLOSE: - regmap_update_bits(reg, CS35L41_PWR_CTRL2, - CS35L41_AMP_EN_MASK, 0 << CS35L41_AMP_EN_SHIFT); + ret =3D regmap_update_bits(reg, CS35L41_PWR_CTRL2, + CS35L41_AMP_EN_MASK, 0 << CS35L41_AMP_EN_SHIFT); break; default: - ret =3D -EINVAL; + dev_warn(cs35l41->dev, "Playback action not supported: %d\n", action); break; } =20 if (ret) - dev_warn(cs35l41->dev, "Failed to apply multi reg write: %d\n", ret); + dev_err(cs35l41->dev, "Regmap access fail: %d\n", ret); } =20 static int cs35l41_hda_channel_map(struct device *dev, unsigned int tx_num= , unsigned int *tx_slot, --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7FED9C433F5 for ; Fri, 4 Mar 2022 15:07:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239090AbiCDPIl (ORCPT ); Fri, 4 Mar 2022 10:08:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50936 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240065AbiCDPI3 (ORCPT ); Fri, 4 Mar 2022 10:08:29 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3DC034130A; Fri, 4 Mar 2022 07:07:40 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2244w2hL013723; Fri, 4 Mar 2022 09:07:32 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=SA54CestV+B2axeUF3WpS+vNg701eKMw6uCmJ0KDghs=; b=EQjA9ZMZABV4/B8YNTaSy8AvJlcN89pJe8FTCsc+dFaWMU84Nj3Hvss4e50xqNRiPlSl IvEkDV0AaIA8ufIHpZ+dH3zCm4FXtRdLr2poJ81pGRJoA2Gjrjd6a9gdtMnR0ExQdwyR dqzv8aBYUEkdXyS/IjA2mc2g7FZx83SqA+Hcqkz3vVxLXLKYNYpX6Ahkz9TDl4prxeW+ lIBcxrXK1nO208J7SCwXOL2CUCXza/l6CXOYXT3G2GJ1aUjCoBYgb3Z9zl68to80mZxM xbNddjiALfYKxcN4bZm/qIx3adwUNWSKu2/kR0VExmuQvVeM/9mVo2cyyAmQg+a2mMzn YA== Received: from ediex02.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h414-7 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:31 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX02.ad.cirrus.com (198.61.84.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:29 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:29 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id 983EBB1A; Fri, 4 Mar 2022 15:07:29 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure Subject: [PATCH v2 17/20] hda: cs35l41: Handle all external boost setups the same way Date: Fri, 4 Mar 2022 15:07:18 +0000 Message-ID: <20220304150721.3802-18-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: -Vd74xk0GmCAmtLat1GJMuCW-qJll8PP X-Proofpoint-ORIG-GUID: -Vd74xk0GmCAmtLat1GJMuCW-qJll8PP X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Regmap sequences for external boost with or without the GPIO1 as VSPK switch are almost the same. Unify them and use the GPIO1 VSPK switch to handle the difference. Signed-off-by: Lucas Tanure --- sound/pci/hda/cs35l41_hda.c | 60 +++++++++++++++---------------------- 1 file changed, 24 insertions(+), 36 deletions(-) diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index fda4af323c32..2ae074c8613e 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -32,33 +32,9 @@ static const struct reg_sequence cs35l41_hda_mute[] =3D { { CS35L41_AMP_DIG_VOL_CTRL, 0x0000A678 }, // AMP_VOL_PCM Mute }; =20 -// only on amps where GPIO1 is used to control ext. VSPK switch -static const struct reg_sequence cs35l41_start_ext_vspk[] =3D { +static const struct reg_sequence cs35l41_safe_to_reset[] =3D { { 0x00000040, 0x00000055 }, { 0x00000040, 0x000000AA }, - { 0x00007438, 0x00585941 }, - { 0x00007414, 0x08C82222 }, - { 0x0000742C, 0x00000009 }, - { 0x00011008, 0x00008001 }, - { 0x0000742C, 0x0000000F }, - { 0x0000742C, 0x00000079 }, - { 0x00007438, 0x00585941 }, - { CS35L41_PWR_CTRL1, 0x00000001, 3000}, // set GLOBAL_EN =3D 1 - { 0x0000742C, 0x000000F9 }, - { 0x00007438, 0x00580941 }, - { 0x00000040, 0x000000CC }, - { 0x00000040, 0x00000033 }, -}; - -//only on amps where GPIO1 is used to control ext. VSPK switch -static const struct reg_sequence cs35l41_stop_ext_vspk[] =3D { - { 0x00000040, 0x00000055 }, - { 0x00000040, 0x000000AA }, - { 0x00007438, 0x00585941 }, - { 0x00002014, 0x00000000, 3000}, // set GLOBAL_EN =3D 0 - { 0x0000742C, 0x00000009 }, - { 0x00007438, 0x00580941 }, - { 0x00011008, 0x00000001 }, { 0x0000393C, 0x000000C0, 6000}, { 0x0000393C, 0x00000000 }, { 0x00007414, 0x00C82222 }, @@ -73,7 +49,7 @@ static const struct reg_sequence cs35l41_safe_to_active[]= =3D { { 0x0000742C, 0x0000000F }, { 0x0000742C, 0x00000079 }, { 0x00007438, 0x00585941 }, - { CS35L41_PWR_CTRL1, 0x00000001, 2000 }, // GLOBAL_EN =3D 1 + { CS35L41_PWR_CTRL1, 0x00000001, 3000 }, // GLOBAL_EN =3D 1 { 0x0000742C, 0x000000F9 }, { 0x00007438, 0x00580941 }, { 0x00000040, 0x000000CC }, @@ -85,7 +61,7 @@ static const struct reg_sequence cs35l41_active_to_safe[]= =3D { { 0x00000040, 0x000000AA }, { 0x00007438, 0x00585941 }, { CS35L41_PWR_CTRL1, 0x00000000 }, - { 0x0000742C, 0x00000009, 2000 }, + { 0x0000742C, 0x00000009, 3000 }, { 0x00007438, 0x00580941 }, { 0x00000040, 0x000000CC }, { 0x00000040, 0x00000033 }, @@ -101,6 +77,21 @@ static const struct reg_sequence cs35l41_reset_to_safe[= ] =3D { { 0x00000040, 0x00000033 }, }; =20 +static bool cs35l41_hda_safe_reset(struct cs35l41_hda *cs35l41) +{ + switch (cs35l41->hw_cfg.bst_type) { + case CS35L41_EXT_BOOST: + regmap_write(cs35l41->regmap, CS35L41_GPIO1_CTRL1, 0x00000001); + regmap_multi_reg_write(cs35l41->regmap, cs35l41_safe_to_reset, + ARRAY_SIZE(cs35l41_safe_to_reset)); + return true; + case CS35L41_EXT_BOOST_NO_VSPK_SWITCH: + return false; + default: + return true; + } +}; + static int cs35l41_hda_global_enable(struct cs35l41_hda *cs35l41, int enab= le) { int ret; @@ -113,13 +104,6 @@ static int cs35l41_hda_global_enable(struct cs35l41_hd= a *cs35l41, int enable) usleep_range(3000, 3100); break; case CS35L41_EXT_BOOST: - if (enable) - ret =3D regmap_multi_reg_write(cs35l41->regmap, cs35l41_start_ext_vspk, - ARRAY_SIZE(cs35l41_start_ext_vspk)); - else - ret =3D regmap_multi_reg_write(cs35l41->regmap, cs35l41_stop_ext_vspk, - ARRAY_SIZE(cs35l41_stop_ext_vspk)); - break; case CS35L41_EXT_BOOST_NO_VSPK_SWITCH: if (enable) ret =3D regmap_multi_reg_write(cs35l41->regmap, cs35l41_safe_to_active, @@ -147,6 +131,8 @@ static void cs35l41_hda_playback_hook(struct device *de= v, int action) regmap_multi_reg_write(reg, cs35l41_hda_config, ARRAY_SIZE(cs35l41_hda_c= onfig)); ret =3D regmap_update_bits(reg, CS35L41_PWR_CTRL2, CS35L41_AMP_EN_MASK, 1 << CS35L41_AMP_EN_SHIFT); + if (cs35l41->hw_cfg.bst_type =3D=3D CS35L41_EXT_BOOST) + regmap_write(reg, CS35L41_GPIO1_CTRL1, 0x00008001); break; case HDA_GEN_PCM_ACT_PREPARE: ret =3D cs35l41_hda_global_enable(cs35l41, 1); @@ -158,6 +144,8 @@ static void cs35l41_hda_playback_hook(struct device *de= v, int action) case HDA_GEN_PCM_ACT_CLOSE: ret =3D regmap_update_bits(reg, CS35L41_PWR_CTRL2, CS35L41_AMP_EN_MASK, 0 << CS35L41_AMP_EN_SHIFT); + if (cs35l41->hw_cfg.bst_type =3D=3D CS35L41_EXT_BOOST) + regmap_write(reg, CS35L41_GPIO1_CTRL1, 0x00000001); break; default: dev_warn(cs35l41->dev, "Playback action not supported: %d\n", action); @@ -517,7 +505,7 @@ int cs35l41_hda_probe(struct device *dev, const char *d= evice_name, int id, int i return 0; =20 err: - if (cs35l41->hw_cfg.bst_type !=3D CS35L41_EXT_BOOST_NO_VSPK_SWITCH) + if (cs35l41_hda_safe_reset(cs35l41)) gpiod_set_value_cansleep(cs35l41->reset_gpio, 0); gpiod_put(cs35l41->reset_gpio); =20 @@ -531,7 +519,7 @@ void cs35l41_hda_remove(struct device *dev) =20 component_del(cs35l41->dev, &cs35l41_hda_comp_ops); =20 - if (cs35l41->hw_cfg.bst_type !=3D CS35L41_EXT_BOOST_NO_VSPK_SWITCH) + if (cs35l41_hda_safe_reset(cs35l41)) gpiod_set_value_cansleep(cs35l41->reset_gpio, 0); gpiod_put(cs35l41->reset_gpio); } --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 64955C433F5 for ; Fri, 4 Mar 2022 15:09:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240289AbiCDPKC (ORCPT ); Fri, 4 Mar 2022 10:10:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55780 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240213AbiCDPJj (ORCPT ); Fri, 4 Mar 2022 10:09:39 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DB8A7A41B7; Fri, 4 Mar 2022 07:08:29 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2248TInM019088; Fri, 4 Mar 2022 09:07:47 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=DvLujPcBLTJP8Oe9RdSiwgbwwIJ5bMu683tSdsdfNww=; b=bhGxlMQOzvD9uYe+US57OLNCdz1nyTeukydVrxQ0MarOLqss7kISreGhJdJ6jFd9XpsX lWTYCDT/8LiU/BCLtCh7YlZz2uHLCC74ML5UdhtYx8noTk+izxp3tXCY6QvKUHvkum7N Pb9T4IKT8I4M8K/ZAp/FlDCaNpWCwxswNCFDKXGrQqlmzSsRJvg8a3vcBbgRU9FNY4Tb cpoOsp8cEYyRjfgBnJIXEP0DoPgOcYLjLaUXPjYVIxybhkrOEmSxD6qqjKPGIsCzaGho Kx1RuYTDUHyy/lGVcy4Gx3xnNYuiXgmFz96PrkIGE8D3hl1CjnrgAAuXFmxT427e1Fye zA== Received: from ediex01.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h413-12 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:44 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:30 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:30 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id ED64DB06; Fri, 4 Mar 2022 15:07:29 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure Subject: [PATCH v2 18/20] hda: cs35l41: Move external boost handling to lib for ASoC use Date: Fri, 4 Mar 2022 15:07:19 +0000 Message-ID: <20220304150721.3802-19-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: ADJnuMWnYmLkw1cAwtGLb4dgsmZQiyKQ X-Proofpoint-ORIG-GUID: ADJnuMWnYmLkw1cAwtGLb4dgsmZQiyKQ X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" To add support for external boost for ASoC move the HDA external boost implementation to the shared lib. Signed-off-by: Lucas Tanure --- include/sound/cs35l41.h | 4 + sound/pci/hda/cs35l41_hda.c | 119 ++---------------------------- sound/soc/codecs/cs35l41-lib.c | 129 ++++++++++++++++++++++++++++++++- 3 files changed, 137 insertions(+), 115 deletions(-) diff --git a/include/sound/cs35l41.h b/include/sound/cs35l41.h index a8537bccedcf..2b2d1d17e552 100644 --- a/include/sound/cs35l41.h +++ b/include/sound/cs35l41.h @@ -799,5 +799,9 @@ int cs35l41_set_channels(struct device *dev, struct reg= map *reg, int cs35l41_boost_config(struct device *dev, struct regmap *regmap, int bo= ost_ind, int boost_cap, int boost_ipk); int cs35l41_gpio_config(struct regmap *regmap, struct cs35l41_hw_cfg *hw_c= fg); +int cs35l41_init_boost(struct device *dev, struct regmap *regmap, + struct cs35l41_hw_cfg *hw_cfg); +bool cs35l41_safe_reset(struct regmap *regmap, enum cs35l41_boost_type b_t= ype); +int cs35l41_global_enable(struct regmap *regmap, enum cs35l41_boost_type b= _type, int enable); =20 #endif /* __CS35L41_H */ diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index 2ae074c8613e..190002cdd429 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -32,94 +32,6 @@ static const struct reg_sequence cs35l41_hda_mute[] =3D { { CS35L41_AMP_DIG_VOL_CTRL, 0x0000A678 }, // AMP_VOL_PCM Mute }; =20 -static const struct reg_sequence cs35l41_safe_to_reset[] =3D { - { 0x00000040, 0x00000055 }, - { 0x00000040, 0x000000AA }, - { 0x0000393C, 0x000000C0, 6000}, - { 0x0000393C, 0x00000000 }, - { 0x00007414, 0x00C82222 }, - { 0x0000742C, 0x00000000 }, - { 0x00000040, 0x000000CC }, - { 0x00000040, 0x00000033 }, -}; - -static const struct reg_sequence cs35l41_safe_to_active[] =3D { - { 0x00000040, 0x00000055 }, - { 0x00000040, 0x000000AA }, - { 0x0000742C, 0x0000000F }, - { 0x0000742C, 0x00000079 }, - { 0x00007438, 0x00585941 }, - { CS35L41_PWR_CTRL1, 0x00000001, 3000 }, // GLOBAL_EN =3D 1 - { 0x0000742C, 0x000000F9 }, - { 0x00007438, 0x00580941 }, - { 0x00000040, 0x000000CC }, - { 0x00000040, 0x00000033 }, -}; - -static const struct reg_sequence cs35l41_active_to_safe[] =3D { - { 0x00000040, 0x00000055 }, - { 0x00000040, 0x000000AA }, - { 0x00007438, 0x00585941 }, - { CS35L41_PWR_CTRL1, 0x00000000 }, - { 0x0000742C, 0x00000009, 3000 }, - { 0x00007438, 0x00580941 }, - { 0x00000040, 0x000000CC }, - { 0x00000040, 0x00000033 }, -}; - -static const struct reg_sequence cs35l41_reset_to_safe[] =3D { - { 0x00000040, 0x00000055 }, - { 0x00000040, 0x000000AA }, - { 0x00007438, 0x00585941 }, - { 0x00007414, 0x08C82222 }, - { 0x0000742C, 0x00000009 }, - { 0x00000040, 0x000000CC }, - { 0x00000040, 0x00000033 }, -}; - -static bool cs35l41_hda_safe_reset(struct cs35l41_hda *cs35l41) -{ - switch (cs35l41->hw_cfg.bst_type) { - case CS35L41_EXT_BOOST: - regmap_write(cs35l41->regmap, CS35L41_GPIO1_CTRL1, 0x00000001); - regmap_multi_reg_write(cs35l41->regmap, cs35l41_safe_to_reset, - ARRAY_SIZE(cs35l41_safe_to_reset)); - return true; - case CS35L41_EXT_BOOST_NO_VSPK_SWITCH: - return false; - default: - return true; - } -}; - -static int cs35l41_hda_global_enable(struct cs35l41_hda *cs35l41, int enab= le) -{ - int ret; - - switch (cs35l41->hw_cfg.bst_type) { - case CS35L41_INT_BOOST: - ret =3D regmap_update_bits(cs35l41->regmap, CS35L41_PWR_CTRL1, - CS35L41_GLOBAL_EN_MASK, - enable << CS35L41_GLOBAL_EN_SHIFT); - usleep_range(3000, 3100); - break; - case CS35L41_EXT_BOOST: - case CS35L41_EXT_BOOST_NO_VSPK_SWITCH: - if (enable) - ret =3D regmap_multi_reg_write(cs35l41->regmap, cs35l41_safe_to_active, - ARRAY_SIZE(cs35l41_safe_to_active)); - else - ret =3D regmap_multi_reg_write(cs35l41->regmap, cs35l41_active_to_safe, - ARRAY_SIZE(cs35l41_active_to_safe)); - break; - default: - ret =3D -EINVAL; - break; - } - - return ret; -}; - static void cs35l41_hda_playback_hook(struct device *dev, int action) { struct cs35l41_hda *cs35l41 =3D dev_get_drvdata(dev); @@ -135,11 +47,11 @@ static void cs35l41_hda_playback_hook(struct device *d= ev, int action) regmap_write(reg, CS35L41_GPIO1_CTRL1, 0x00008001); break; case HDA_GEN_PCM_ACT_PREPARE: - ret =3D cs35l41_hda_global_enable(cs35l41, 1); + ret =3D cs35l41_global_enable(reg, cs35l41->hw_cfg.bst_type, 1); break; case HDA_GEN_PCM_ACT_CLEANUP: regmap_multi_reg_write(reg, cs35l41_hda_mute, ARRAY_SIZE(cs35l41_hda_mut= e)); - ret =3D cs35l41_hda_global_enable(cs35l41, 0); + ret =3D cs35l41_global_enable(reg, cs35l41->hw_cfg.bst_type, 0); break; case HDA_GEN_PCM_ACT_CLOSE: ret =3D regmap_update_bits(reg, CS35L41_PWR_CTRL2, @@ -207,26 +119,9 @@ static int cs35l41_hda_apply_properties(struct cs35l41= _hda *cs35l41) if (!cs35l41->hw_cfg.valid) return -EINVAL; =20 - switch (hw_cfg->bst_type) { - case CS35L41_INT_BOOST: - ret =3D cs35l41_boost_config(cs35l41->dev, cs35l41->regmap, - hw_cfg->bst_ind, hw_cfg->bst_cap, hw_cfg->bst_ipk); - if (ret) - return ret; - break; - case CS35L41_EXT_BOOST: - case CS35L41_EXT_BOOST_NO_VSPK_SWITCH: - regmap_multi_reg_write(cs35l41->regmap, cs35l41_reset_to_safe, - ARRAY_SIZE(cs35l41_reset_to_safe)); - ret =3D regmap_update_bits(cs35l41->regmap, CS35L41_PWR_CTRL2, CS35L41_B= ST_EN_MASK, - CS35L41_BST_DIS_FET_OFF << CS35L41_BST_EN_SHIFT); - if (ret) - return ret; - break; - default: - dev_err(cs35l41->dev, "Boost type %d not supported\n", hw_cfg->bst_type); - return -EINVAL; - } + ret =3D cs35l41_init_boost(cs35l41->dev, cs35l41->regmap, hw_cfg); + if (ret) + return ret; =20 if (hw_cfg->gpio1.valid) { switch (hw_cfg->gpio1.func) { @@ -505,7 +400,7 @@ int cs35l41_hda_probe(struct device *dev, const char *d= evice_name, int id, int i return 0; =20 err: - if (cs35l41_hda_safe_reset(cs35l41)) + if (cs35l41_safe_reset(cs35l41->regmap, cs35l41->hw_cfg.bst_type)) gpiod_set_value_cansleep(cs35l41->reset_gpio, 0); gpiod_put(cs35l41->reset_gpio); =20 @@ -519,7 +414,7 @@ void cs35l41_hda_remove(struct device *dev) =20 component_del(cs35l41->dev, &cs35l41_hda_comp_ops); =20 - if (cs35l41_hda_safe_reset(cs35l41)) + if (cs35l41_safe_reset(cs35l41->regmap, cs35l41->hw_cfg.bst_type)) gpiod_set_value_cansleep(cs35l41->reset_gpio, 0); gpiod_put(cs35l41->reset_gpio); } diff --git a/sound/soc/codecs/cs35l41-lib.c b/sound/soc/codecs/cs35l41-lib.c index 34ba163874a6..91270047bf35 100644 --- a/sound/soc/codecs/cs35l41-lib.c +++ b/sound/soc/codecs/cs35l41-lib.c @@ -954,9 +954,8 @@ static const unsigned char cs35l41_bst_slope_table[4] = =3D { 0x75, 0x6B, 0x3B, 0x28 }; =20 - -int cs35l41_boost_config(struct device *dev, struct regmap *regmap, int bo= ost_ind, int boost_cap, - int boost_ipk) +int cs35l41_boost_config(struct device *dev, struct regmap *regmap, int bo= ost_ind, + int boost_cap, int boost_ipk) { unsigned char bst_lbst_val, bst_cbst_range, bst_ipk_scaled; int ret; @@ -1043,6 +1042,130 @@ int cs35l41_boost_config(struct device *dev, struct= regmap *regmap, int boost_in } EXPORT_SYMBOL_GPL(cs35l41_boost_config); =20 +static const struct reg_sequence cs35l41_safe_to_reset[] =3D { + { 0x00000040, 0x00000055 }, + { 0x00000040, 0x000000AA }, + { 0x0000393C, 0x000000C0, 6000}, + { 0x0000393C, 0x00000000 }, + { 0x00007414, 0x00C82222 }, + { 0x0000742C, 0x00000000 }, + { 0x00000040, 0x000000CC }, + { 0x00000040, 0x00000033 }, +}; + +static const struct reg_sequence cs35l41_active_to_safe[] =3D { + { 0x00000040, 0x00000055 }, + { 0x00000040, 0x000000AA }, + { 0x00007438, 0x00585941 }, + { CS35L41_PWR_CTRL1, 0x00000000 }, + { 0x0000742C, 0x00000009, 3000 }, + { 0x00007438, 0x00580941 }, + { 0x00000040, 0x000000CC }, + { 0x00000040, 0x00000033 }, +}; + +static const struct reg_sequence cs35l41_safe_to_active[] =3D { + { 0x00000040, 0x00000055 }, + { 0x00000040, 0x000000AA }, + { 0x0000742C, 0x0000000F }, + { 0x0000742C, 0x00000079 }, + { 0x00007438, 0x00585941 }, + { CS35L41_PWR_CTRL1, 0x00000001, 3000 }, // GLOBAL_EN =3D 1 + { 0x0000742C, 0x000000F9 }, + { 0x00007438, 0x00580941 }, + { 0x00000040, 0x000000CC }, + { 0x00000040, 0x00000033 }, +}; + +static const struct reg_sequence cs35l41_reset_to_safe[] =3D { + { 0x00000040, 0x00000055 }, + { 0x00000040, 0x000000AA }, + { 0x00007438, 0x00585941 }, + { 0x00007414, 0x08C82222 }, + { 0x0000742C, 0x00000009 }, + { 0x00000040, 0x000000CC }, + { 0x00000040, 0x00000033 }, +}; + +int cs35l41_init_boost(struct device *dev, struct regmap *regmap, + struct cs35l41_hw_cfg *hw_cfg) +{ + int ret; + + switch (hw_cfg->bst_type) { + case CS35L41_INT_BOOST: + ret =3D cs35l41_boost_config(dev, regmap, hw_cfg->bst_ind, + hw_cfg->bst_cap, hw_cfg->bst_ipk); + if (ret) + dev_err(dev, "Error in Boost DT config: %d\n", ret); + break; + case CS35L41_EXT_BOOST: + case CS35L41_EXT_BOOST_NO_VSPK_SWITCH: + /* Only CLSA0100 doesn't use GPIO as VSPK switch, but even on that lapto= p we can + * toggle GPIO1 as is not connected to anything. + * There will be no other device without VSPK switch. + */ + regmap_write(regmap, CS35L41_GPIO1_CTRL1, 0x00000001); + regmap_multi_reg_write(regmap, cs35l41_reset_to_safe, + ARRAY_SIZE(cs35l41_reset_to_safe)); + ret =3D regmap_update_bits(regmap, CS35L41_PWR_CTRL2, CS35L41_BST_EN_MAS= K, + CS35L41_BST_DIS_FET_OFF << CS35L41_BST_EN_SHIFT); + break; + default: + dev_err(dev, "Boost type %d not supported\n", hw_cfg->bst_type); + ret =3D -EINVAL; + break; + } + + return ret; +} +EXPORT_SYMBOL_GPL(cs35l41_init_boost); + +bool cs35l41_safe_reset(struct regmap *regmap, enum cs35l41_boost_type b_t= ype) +{ + switch (b_type) { + /* There is only one laptop that doesn't have VSPK switch. */ + case CS35L41_EXT_BOOST_NO_VSPK_SWITCH: + return false; + case CS35L41_EXT_BOOST: + regmap_write(regmap, CS35L41_GPIO1_CTRL1, 0x00000001); + regmap_multi_reg_write(regmap, cs35l41_safe_to_reset, + ARRAY_SIZE(cs35l41_safe_to_reset)); + return true; + default: + return true; + } +} +EXPORT_SYMBOL_GPL(cs35l41_safe_reset); + +int cs35l41_global_enable(struct regmap *regmap, enum cs35l41_boost_type b= _type, int enable) +{ + int ret; + + switch (b_type) { + case CS35L41_INT_BOOST: + ret =3D regmap_update_bits(regmap, CS35L41_PWR_CTRL1, CS35L41_GLOBAL_EN_= MASK, + enable << CS35L41_GLOBAL_EN_SHIFT); + usleep_range(3000, 3100); + break; + case CS35L41_EXT_BOOST: + case CS35L41_EXT_BOOST_NO_VSPK_SWITCH: + if (enable) + ret =3D regmap_multi_reg_write(regmap, cs35l41_safe_to_active, + ARRAY_SIZE(cs35l41_safe_to_active)); + else + ret =3D regmap_multi_reg_write(regmap, cs35l41_active_to_safe, + ARRAY_SIZE(cs35l41_active_to_safe)); + break; + default: + ret =3D -EINVAL; + break; + } + + return ret; +} +EXPORT_SYMBOL_GPL(cs35l41_global_enable); + int cs35l41_gpio_config(struct regmap *regmap, struct cs35l41_hw_cfg *hw_c= fg) { struct cs35l41_gpio_cfg *gpio1 =3D &hw_cfg->gpio1; --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 02171C433EF for ; Fri, 4 Mar 2022 15:08:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240140AbiCDPJd (ORCPT ); Fri, 4 Mar 2022 10:09:33 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52846 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240232AbiCDPJR (ORCPT ); Fri, 4 Mar 2022 10:09:17 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 57BBC13D920; Fri, 4 Mar 2022 07:08:16 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2244w2hM013723; Fri, 4 Mar 2022 09:07:34 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=E6zE4kJJ6mmhLvb/1c8MY9p34vno5gUVar36QNCV3K0=; b=pOqhD1kvACw2kp1J3Od4m1qDghpcpxqd3rejrSIYwvK/8Yy0XErTUg2ir1qhP6hXP2ni p3UuqKjKpk/xzFTyFIg4hvZ/6chl4LvleKS9YZFClDTZaYmsa70J7TDoOT79vMGdeCUW ppe2+uBUFFKUr/gcy8xtiilUc01obong9v3UsZryFrQ64iguFRetdIfdya0tz25AKcHQ jssxknohv4xQ/4kWoF1+ogxeESM0ZHs0AkYEg3OpPhpCL1JvuSoaSf1QF9I6muihrqnM hLbsEq6inqwgTI5AqPBJI+zuiHr5Xg/EKHXR/43/LHT9iYYxZ58rcsFMIqFgbXAzXsZe cQ== Received: from ediex02.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h414-8 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:32 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX02.ad.cirrus.com (198.61.84.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:30 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:30 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id 4B850B1A; Fri, 4 Mar 2022 15:07:30 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , Lucas Tanure Subject: [PATCH v2 19/20] ASoC: cs35l41: Support external boost Date: Fri, 4 Mar 2022 15:07:20 +0000 Message-ID: <20220304150721.3802-20-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: hoZk7hD7eayUCL_HIhXNznfaW-k8TKG5 X-Proofpoint-ORIG-GUID: hoZk7hD7eayUCL_HIhXNznfaW-k8TKG5 X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add support for external boost voltage, where GPIO1 must control a switch to isolate CS35L41 from the external Boost Voltage Signed-off-by: Lucas Tanure --- include/sound/cs35l41.h | 4 +-- sound/soc/codecs/cs35l41-lib.c | 5 ++-- sound/soc/codecs/cs35l41.c | 49 +++++++++++++++++++++++++--------- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/include/sound/cs35l41.h b/include/sound/cs35l41.h index 2b2d1d17e552..dad05d57cd74 100644 --- a/include/sound/cs35l41.h +++ b/include/sound/cs35l41.h @@ -701,6 +701,8 @@ #define CS35L41_GPIO1_CTRL_SHIFT 16 #define CS35L41_GPIO2_CTRL_MASK 0x07000000 #define CS35L41_GPIO2_CTRL_SHIFT 24 +#define CS35L41_GPIO_LVL_SHIFT 15 +#define CS35L41_GPIO_LVL_MASK BIT(CS35L41_GPIO_LVL_SHIFT) #define CS35L41_GPIO_POL_MASK 0x1000 #define CS35L41_GPIO_POL_SHIFT 12 =20 @@ -796,8 +798,6 @@ int cs35l41_register_errata_patch(struct device *dev, s= truct regmap *reg, unsign int cs35l41_set_channels(struct device *dev, struct regmap *reg, unsigned int tx_num, unsigned int *tx_slot, unsigned int rx_num, unsigned int *rx_slot); -int cs35l41_boost_config(struct device *dev, struct regmap *regmap, int bo= ost_ind, int boost_cap, - int boost_ipk); int cs35l41_gpio_config(struct regmap *regmap, struct cs35l41_hw_cfg *hw_c= fg); int cs35l41_init_boost(struct device *dev, struct regmap *regmap, struct cs35l41_hw_cfg *hw_cfg); diff --git a/sound/soc/codecs/cs35l41-lib.c b/sound/soc/codecs/cs35l41-lib.c index 91270047bf35..e206970876fe 100644 --- a/sound/soc/codecs/cs35l41-lib.c +++ b/sound/soc/codecs/cs35l41-lib.c @@ -954,8 +954,8 @@ static const unsigned char cs35l41_bst_slope_table[4] = =3D { 0x75, 0x6B, 0x3B, 0x28 }; =20 -int cs35l41_boost_config(struct device *dev, struct regmap *regmap, int bo= ost_ind, - int boost_cap, int boost_ipk) +static int cs35l41_boost_config(struct device *dev, struct regmap *regmap,= int boost_ind, + int boost_cap, int boost_ipk) { unsigned char bst_lbst_val, bst_cbst_range, bst_ipk_scaled; int ret; @@ -1040,7 +1040,6 @@ int cs35l41_boost_config(struct device *dev, struct r= egmap *regmap, int boost_in =20 return 0; } -EXPORT_SYMBOL_GPL(cs35l41_boost_config); =20 static const struct reg_sequence cs35l41_safe_to_reset[] =3D { { 0x00000040, 0x00000055 }, diff --git a/sound/soc/codecs/cs35l41.c b/sound/soc/codecs/cs35l41.c index d25689fe0c60..912196f45648 100644 --- a/sound/soc/codecs/cs35l41.c +++ b/sound/soc/codecs/cs35l41.c @@ -578,15 +578,10 @@ static int cs35l41_main_amp_event(struct snd_soc_dapm= _widget *w, cs35l41_pup_patch, ARRAY_SIZE(cs35l41_pup_patch)); =20 - regmap_update_bits(cs35l41->regmap, CS35L41_PWR_CTRL1, - CS35L41_GLOBAL_EN_MASK, - 1 << CS35L41_GLOBAL_EN_SHIFT); - - usleep_range(1000, 1100); + cs35l41_global_enable(cs35l41->regmap, cs35l41->hw_cfg.bst_type, 1); break; case SND_SOC_DAPM_POST_PMD: - regmap_update_bits(cs35l41->regmap, CS35L41_PWR_CTRL1, - CS35L41_GLOBAL_EN_MASK, 0); + cs35l41_global_enable(cs35l41->regmap, cs35l41->hw_cfg.bst_type, 0); =20 ret =3D regmap_read_poll_timeout(cs35l41->regmap, CS35L41_IRQ1_STATUS1, val, val & CS35L41_PDN_DONE_MASK, @@ -1001,13 +996,13 @@ static int cs35l41_set_pdata(struct cs35l41_private = *cs35l41) if (!hw_cfg->valid) return -EINVAL; =20 + if (hw_cfg->bst_type =3D=3D CS35L41_EXT_BOOST_NO_VSPK_SWITCH) + return -EINVAL; + /* Required */ - ret =3D cs35l41_boost_config(cs35l41->dev, cs35l41->regmap, - hw_cfg->bst_ind, hw_cfg->bst_cap, hw_cfg->bst_ipk); - if (ret) { - dev_err(cs35l41->dev, "Error in Boost DT config: %d\n", ret); + ret =3D cs35l41_init_boost(cs35l41->dev, cs35l41->regmap, hw_cfg); + if (ret) return ret; - } =20 /* Optional */ if (hw_cfg->dout_hiz <=3D CS35L41_ASP_DOUT_HIZ_MASK && hw_cfg->dout_hiz >= =3D 0) @@ -1017,9 +1012,31 @@ static int cs35l41_set_pdata(struct cs35l41_private = *cs35l41) return 0; } =20 +static const struct snd_soc_dapm_route cs35l41_ext_bst_routes[] =3D { + {"Main AMP", NULL, "VSPK"}, +}; + +static const struct snd_soc_dapm_widget cs35l41_ext_bst_widget[] =3D { + SND_SOC_DAPM_SUPPLY("VSPK", CS35L41_GPIO1_CTRL1, CS35L41_GPIO_LVL_SHIFT, = 0, NULL, 0), +}; + static int cs35l41_component_probe(struct snd_soc_component *component) { struct cs35l41_private *cs35l41 =3D snd_soc_component_get_drvdata(compone= nt); + struct snd_soc_dapm_context *dapm =3D snd_soc_component_get_dapm(componen= t); + int ret; + + if (cs35l41->hw_cfg.bst_type =3D=3D CS35L41_EXT_BOOST) { + ret =3D snd_soc_dapm_new_controls(dapm, cs35l41_ext_bst_widget, + ARRAY_SIZE(cs35l41_ext_bst_widget)); + if (ret) + return ret; + + ret =3D snd_soc_dapm_add_routes(dapm, cs35l41_ext_bst_routes, + ARRAY_SIZE(cs35l41_ext_bst_routes)); + if (ret) + return ret; + } =20 return wm_adsp2_component_probe(&cs35l41->dsp, component); } @@ -1084,6 +1101,10 @@ static int cs35l41_handle_pdata(struct device *dev, = struct cs35l41_hw_cfg *hw_cf unsigned int val; int ret; =20 + ret =3D device_property_read_u32(dev, "cirrus,boost-type", &val); + if (ret >=3D 0) + hw_cfg->bst_type =3D val; + ret =3D device_property_read_u32(dev, "cirrus,boost-peak-milliamp", &val); if (ret >=3D 0) hw_cfg->bst_ipk =3D val; @@ -1376,6 +1397,7 @@ int cs35l41_probe(struct cs35l41_private *cs35l41, co= nst struct cs35l41_hw_cfg * =20 wm_adsp2_remove(&cs35l41->dsp); err: + cs35l41_safe_reset(cs35l41->regmap, cs35l41->hw_cfg.bst_type); regulator_bulk_disable(CS35L41_NUM_SUPPLIES, cs35l41->supplies); gpiod_set_value_cansleep(cs35l41->reset_gpio, 0); =20 @@ -1390,6 +1412,7 @@ void cs35l41_remove(struct cs35l41_private *cs35l41) =20 regmap_write(cs35l41->regmap, CS35L41_IRQ1_MASK1, 0xFFFFFFFF); wm_adsp2_remove(&cs35l41->dsp); + cs35l41_safe_reset(cs35l41->regmap, cs35l41->hw_cfg.bst_type); =20 pm_runtime_put_noidle(cs35l41->dev); =20 @@ -1409,6 +1432,7 @@ static int __maybe_unused cs35l41_runtime_suspend(str= uct device *dev) =20 dev_dbg(cs35l41->dev, "Enter hibernate\n"); =20 + cs35l41_safe_reset(cs35l41->regmap, cs35l41->hw_cfg.bst_type); regmap_write(cs35l41->regmap, CS35L41_WAKESRC_CTL, 0x0088); regmap_write(cs35l41->regmap, CS35L41_WAKESRC_CTL, 0x0188); =20 @@ -1505,6 +1529,7 @@ static int __maybe_unused cs35l41_runtime_resume(stru= ct device *dev) dev_err(cs35l41->dev, "Failed to restore register cache: %d\n", ret); return ret; } + cs35l41_init_boost(cs35l41->dev, cs35l41->regmap, &cs35l41->hw_cfg); =20 return 0; } --=20 2.35.1 From nobody Tue Jun 23 13:03:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 235AEC433EF for ; Fri, 4 Mar 2022 15:08:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240232AbiCDPJl (ORCPT ); Fri, 4 Mar 2022 10:09:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52368 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240107AbiCDPJS (ORCPT ); Fri, 4 Mar 2022 10:09:18 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9ACBF13EFAA; Fri, 4 Mar 2022 07:08:17 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 2244w2hN013723; Fri, 4 Mar 2022 09:07:37 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=GEv9qT1f52mVGZUhddgvUUHJMJPW1Ae8wHQRQufXyns=; b=QG1PrPybqd2HLHukhtNuQxQQ4gELVs/29DrwyxaSGeANw2uasdyvW345dMCHp9HASpS6 4erMNh79lXsoJ7qOryhoxXbOEK9dWykgsSLlSW90zqSMMmjw9VenkesOGHn5q5/CV27o 37BX8fMGuhOehby8d3YeIsP5yd6L9R0KKQYqm+xLWcrd6iTvy4UsBZM4lJiAcIaWYj4Y WJjJ12WTdFG39QzDKvLMMlxlIgdWS5W6VDGTwIlU19/Z2gYltQtYXsKT3lA4Pkjai0c2 tSK29Ur1YfXXjebxtjq0UyMEawt/km7D5zknSdJmQIuVjxmpK43eYDbfqyAfN7ai63o+ Ew== Received: from ediex02.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3ek4j3h414-9 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Fri, 04 Mar 2022 09:07:35 -0600 Received: from EDIEX01.ad.cirrus.com (198.61.84.80) by EDIEX02.ad.cirrus.com (198.61.84.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Fri, 4 Mar 2022 15:07:30 +0000 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by EDIEX01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.1.2375.18 via Frontend Transport; Fri, 4 Mar 2022 15:07:30 +0000 Received: from aryzen.ad.cirrus.com (unknown [198.61.65.198]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id A41517C; Fri, 4 Mar 2022 15:07:30 +0000 (UTC) From: Lucas Tanure To: Liam Girdwood , Mark Brown , Rob Herring , Jaroslav Kysela , Takashi Iwai CC: , , , , David Rhodes Subject: [PATCH v2 20/20] ASoC: cs35l41: Document CS35l41 External Boost Date: Fri, 4 Mar 2022 15:07:21 +0000 Message-ID: <20220304150721.3802-21-tanureal@opensource.cirrus.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220304150721.3802-1-tanureal@opensource.cirrus.com> References: <20220304150721.3802-1-tanureal@opensource.cirrus.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: o8ixPIuU6yT6JzdEqSm8p5Nrifm-qFt3 X-Proofpoint-ORIG-GUID: o8ixPIuU6yT6JzdEqSm8p5Nrifm-qFt3 X-Proofpoint-Spam-Reason: safe Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: David Rhodes Document external boost feature on CS35L41 Signed-off-by: David Rhodes --- .../bindings/sound/cirrus,cs35l41.yaml | 44 +++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/sound/cirrus,cs35l41.yaml b/= Documentation/devicetree/bindings/sound/cirrus,cs35l41.yaml index 3235702ce402..2f60776b3e9b 100644 --- a/Documentation/devicetree/bindings/sound/cirrus,cs35l41.yaml +++ b/Documentation/devicetree/bindings/sound/cirrus,cs35l41.yaml @@ -75,6 +75,19 @@ properties: maximum: 3 default: 2 =20 + cirrus,boost-type: + description: + Configures the type of Boost being used. + Internal boost requires boost-peak-milliamp, boost-ind-nanohenry and + boost-cap-microfarad. + External Boost must have GPIO1 as GPIO output. GPIO1 will be set hig= h to + enable boost voltage. + 0 =3D Internal Boost + 1 =3D External Boost + $ref: "/schemas/types.yaml#/definitions/uint32" + minimum: 0 + maximum: 1 + cirrus,gpio1-polarity-invert: description: Boolean which specifies whether the GPIO1 @@ -131,9 +144,32 @@ required: - compatible - reg - "#sound-dai-cells" - - cirrus,boost-peak-milliamp - - cirrus,boost-ind-nanohenry - - cirrus,boost-cap-microfarad + +allOf: + - if: + properties: + cirrus,boost-type: + contains: + const: 0 + + then: + required: + - cirrus,boost-peak-milliamp + - cirrus,boost-ind-nanohenry + - cirrus,boost-cap-microfarad + + - if: + properties: + cirrus,boost-type: + contains: + const: 1 + + then: + required: + - cirrus,gpio1-output-enable + properties: + cirrus,gpio1-src-select: + const: 1 =20 additionalProperties: false =20 @@ -150,6 +186,8 @@ examples: VA-supply =3D <&dummy_vreg>; VP-supply =3D <&dummy_vreg>; reset-gpios =3D <&gpio 110 0>; + + cirrus,boost-type =3D <0>; cirrus,boost-peak-milliamp =3D <4500>; cirrus,boost-ind-nanohenry =3D <1000>; cirrus,boost-cap-microfarad =3D <15>; --=20 2.35.1