From patchwork Mon Jan 29 04:23:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 10189137 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id A51526020C for ; Mon, 29 Jan 2018 04:48:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 919AB1FE82 for ; Mon, 29 Jan 2018 04:48:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 85A7A2876F; Mon, 29 Jan 2018 04:48:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.8 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED, RCVD_IN_DNSWL_NONE, T_DKIM_INVALID autolearn=no version=3.3.1 Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C84421FE82 for ; Mon, 29 Jan 2018 04:48:38 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 24D4826780C; Mon, 29 Jan 2018 05:27:25 +0100 (CET) X-Original-To: alsa-devel@alsa-project.org Delivered-To: alsa-devel@alsa-project.org Received: by alsa0.perex.cz (Postfix, from userid 1000) id 479B6267CCD; Mon, 29 Jan 2018 05:27:22 +0100 (CET) Received: from relmlie2.idc.renesas.com (relmlor3.renesas.com [210.160.252.173]) by alsa0.perex.cz (Postfix) with ESMTP id AB710267358 for ; Mon, 29 Jan 2018 05:23:26 +0100 (CET) Received: from unknown (HELO relmlir2.idc.renesas.com) ([10.200.68.152]) by relmlie2.idc.renesas.com with ESMTP; 29 Jan 2018 13:23:23 +0900 Received: from relmlii1.idc.renesas.com (relmlii1.idc.renesas.com [10.200.68.65]) by relmlir2.idc.renesas.com (Postfix) with ESMTP id B779E516C3; Mon, 29 Jan 2018 13:23:23 +0900 (JST) X-IronPort-AV: E=Sophos;i="5.46,429,1511794800"; d="scan'208";a="269595877" Received: from mail-sg2apc01lp0240.outbound.protection.outlook.com (HELO APC01-SG2-obe.outbound.protection.outlook.com) ([65.55.88.240]) by relmlii1.idc.renesas.com with ESMTP/TLS/AES256-GCM-SHA384; 29 Jan 2018 13:23:22 +0900 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesasgroup.onmicrosoft.com; s=selector1-renesas-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=A9qRvmpOatyJqVoL60J8WsGwhzlE1kOMBTCGXpqRJ5I=; b=YwWiy6hUVmr2i6kz1G6/Rviz2L5/XAUBNOjQ3DGh0mQ8NZXFlw/c2L58Mx60UPrEtRxLaOxfpBq6zJWvjTdZahal5tqA/QmxESBzqXO87QD8KoDE9urswI1Lj20a6pi6YPu5V2czTastQyyrp1+QKoBV2h77UkXOMSULqBwa3jM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=kuninori.morimoto.gx@renesas.com; Received: from morimoto-PC.renesas.com (211.11.155.138) by PS1PR0601MB1884.apcprd06.prod.outlook.com (2603:1096:803:8::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.444.14; Mon, 29 Jan 2018 04:23:20 +0000 Message-ID: <87bmhdxpk0.wl%kuninori.morimoto.gx@renesas.com> From: Kuninori Morimoto User-Agent: Wanderlust/2.15.9 Emacs/24.3 Mule/6.0 To: Mark Brown In-Reply-To: <87inbl5q6q.wl%kuninori.morimoto.gx@renesas.com> References: <87607l8k9i.wl%kuninori.morimoto.gx@renesas.com> <87inbl5q6q.wl%kuninori.morimoto.gx@renesas.com> MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Date: Mon, 29 Jan 2018 04:23:20 +0000 X-Originating-IP: [211.11.155.138] X-ClientProxiedBy: OSBPR01CA0034.jpnprd01.prod.outlook.com (2603:1096:603:1e::22) To PS1PR0601MB1884.apcprd06.prod.outlook.com (2603:1096:803:8::22) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: e49c04ef-d80f-4627-1a27-08d566d00769 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(48565401081)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:PS1PR0601MB1884; X-Microsoft-Exchange-Diagnostics: 1; PS1PR0601MB1884; 3:3lakfd+QlptmuZPWyjhUlbPXD6M70eCGLJuQAiPQeltvgnnzRZdpB5sJD8WIRVLaHG2EyJzJIFPOdHiPmMDoqUhwsw9dypb18vg/1norSxM5IvFXOjhxmGMS7ho64JFZ45AhJ48sYZFZgiLkqdJyhE0sH3XWbAA3f6gED6KNBQ2moyzixvYHdYgS7dS4SpuXx0CviAHvB/d0NlvZdVfNn/BAoRkDW9DHvDwykCG2C4Cdw9yNQehuZa3MBTgE0KH3; 25:+KWKjhpIrSx2EYpMa7vucXqu0dDwmN+8PTa6c4YPN8byiEICYGTFdH0pjMSkkBWHB/aIKyxxZwPFZi47f5Bt1bnPZPQ5j5yDSNL4y0+Le5Elv8YuQ6GltD/EX1n7wC6IfNo1l1ZfithrUCcqDn7xpHQNVjPrFt0auBt+7jBOmJXOzGp35g6WGpy3kxuzMsjtJ+dqsgPqt8y7TLPqr/REFiXQB0UhnVK3xtSUv2XKCtzXiSZI6faeDtMdGzGGaxgCLuz6xATLvLLZaC2MoXcCGgVKOCbwmEvedFy/3vBTl1Uu7P4WV1f2NNpbx1CkGl6B+0Kjsnd53sAzyhcWqsFwMA==; 31:tJwJARmmxzcJTHlcS9WhbxlpgnF+IAwi/SvD9ACCLIRjrtDBQvEf3RDAzes5gIlEUWimOdf2gOsZyvhQEEtZVd+xLu6LGjQ0mbh6fOJXOUtW6MmbDDxNRjGdn1O816eyumZJAJX0ZlDgpGgM4BQ14GR/emBJpd3gIGP+gAPFmoozH3iDJPQq9Jksal6C7k/hFFgq0/9y1Yei2xkDUNYynWkEgNxNWWpOnLl/AQLJgU8= X-MS-TrafficTypeDiagnostic: PS1PR0601MB1884: X-Microsoft-Exchange-Diagnostics: 1; PS1PR0601MB1884; 20:BOjLKEaEuaVgyU3wp4MFLGp5c5/m6fBMxNPrZiGVZnZ7ma28pno2RZF7U1bSx4YewYQs1VY6iOCBnJVjv+TcwqqvhABtWGpvxDm49pE5Rh7XYLa5xtltvjq5GqNl+uAFXQc/DX3H0hB9ThchpEytUTv36cK7EOpSX9bWqf79ug+cvpF3/DrlP8MGNjKFo0JdzGuOJ/+jGYuXY0tSny7UH35HmocWbffzQUkVo2ZNKo531NsU3eLLDVdoBz+S1EkMvt9Qv58pB/P+oENerNvFUz8IYgQpVHSN7sD67kR8boBTYtQDFN15EPe/hoz0GpcS8YDPEWkK+6wM20cNbz491mUt6XsZRrw2zsS9zGId6WItIk9D4/efVJwBsGZLpKLQPbABo6QAu2gXXNjilEIgBMJrsCUuC2kkf+SyymC7+f7m4Xonvo5s2cEliP9YY18qGngriMd6WHrxm0co+hTVIDoD0Nt1tMA/drWHXdGJYNf3mzKUTiSPp5GKAkMTOZNi; 4:YoBD1aLKu4lRwPuWjYEVr7p/UoBJ1T5xHcBsXuO4XwhP+r/e0nDnWLMUM9sA3WpN0+WjPtuHu6AeeSjTbh0IqqDRfdtZ5LXF8WU46RJf00CmcMxjtBkNQwafC3pJP+DqI84Y0RXtwoMMB7c8aOi91O4euHipaZrkSk4PGh7+iPOoaJkdQMq+E/4PDW7w2uxUuAETzNuaNzhb19031SMwj321Wjm1ZbMXIKVeFj2t/LckVPLzSSR6+ml2WGqpr/5fEt1H28rVIXcMdGatBd7TSi+H3vpU0e3HQs3Omww3slu2G+LxxCWmvelSQ4h9LUqH X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3002001)(3231101)(944501161)(6055026)(6041288)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123558120)(20161123564045)(20161123562045)(6072148)(201708071742011); SRVR:PS1PR0601MB1884; BCL:0; PCL:0; RULEID:; SRVR:PS1PR0601MB1884; X-Forefront-PRVS: 0567A15835 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(366004)(376002)(396003)(346002)(39860400002)(39380400002)(189003)(199004)(81166006)(106356001)(59450400001)(50466002)(25786009)(386003)(6916009)(4326008)(47776003)(8676002)(2950100002)(16586007)(58126008)(81156014)(305945005)(478600001)(105586002)(316002)(66066001)(69596002)(23726003)(8936002)(3846002)(83506002)(6116002)(36756003)(53416004)(52116002)(68736007)(7696005)(26005)(53936002)(7736002)(97736004)(86362001)(16526019)(76176011)(2906002)(5660300001)(6486002)(186003)(21314002)(16060500001); DIR:OUT; SFP:1102; SCL:1; SRVR:PS1PR0601MB1884; H:morimoto-PC.renesas.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: renesas.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; PS1PR0601MB1884; 23:GDS7KheOwvtc89PXls6wH/HLRpSpDmZTgL1GdLz?= =?us-ascii?Q?3qfxcbcQRCSZTAKwiA6/0XG6LrdM7mYznhwPUXEgWjFLE9NEdsNTcpcPbtv7?= =?us-ascii?Q?uWddLfqa7tgPYpem0Ini6nZP01aP667m/R80spCdhb9C07kxiRtRHZMn8XAN?= =?us-ascii?Q?fjqHKoRQTEo67pBDDvg4KrcfHlbYH/T8J1cNpOFM8D9hOj3Nc5SpRh8l2w8m?= =?us-ascii?Q?lK5G16konGfH1xwPWDsT4Rbs/4/T5EStS2kKKijJh4z+ts9iRvnq9Kt/2pK9?= =?us-ascii?Q?HtZO3v3TNF5A37l13+VowS8i7zMbuuc9d6L0ydaODH7S2JGTswStgeEoiJMD?= =?us-ascii?Q?xWgKKeCf0k+7jO2FHC+5FxBss5lg4imX02HDxbASVFYLeAd95H5L3zOBCfRV?= =?us-ascii?Q?yqqn8puQjCG+JBHwuuz4xKH+TdhbnwXzwapzYeVaGJh4swbJ/pQ0UF9Bzjas?= =?us-ascii?Q?8mS1gqpUJvcAlvmjmp3MBy7qgnMXOcDnWJlh1A8Aezb7F4vhTSI85VoasC8u?= =?us-ascii?Q?EtVOWIvXHP2Lh8i6xTHI/pGjx7DzblRzSB6qhPDGGi3RoCAVgxDMjyVgv29Y?= =?us-ascii?Q?MpnklTe6j7qsqe3NdYqyl6DcGPc3tc1XQJdlWeAf1B6VSMy1yVpzV4wh3xnm?= =?us-ascii?Q?knyJdAQY8KNCtVm8GzJmdKK62bxvr0cl7WcRxAnSenTxGlg55HHqgmC6NN5t?= =?us-ascii?Q?yLURdVFGEDk9z+O9aX3/W8Ob6HaMFAoeUklz5x2H95cDmnUH7PGEh1jkxE9r?= =?us-ascii?Q?FGzs7jcsrjQTIhQlaTT+GLcs5/CcorQkECRXJh+e8S6VMtmBKCBRETFUJJzY?= =?us-ascii?Q?RtC2z17tKk8r6SVha5GeiWJeiWWmUDwp5O9YkLtgdfaM0H2gq0X8Q0l+hFwf?= =?us-ascii?Q?5MGSrBl1vKqejgVNh/qeD4qDM5DhxuoNbOmr+kpE1ep2Is2STGAXPGCTdQob?= =?us-ascii?Q?dy2l4mDkTcDokuRo1623YWnvYezC0hZRky4z8OJu4Wn/We1KxYGqSS7yCN3f?= =?us-ascii?Q?gir2G67viEQ/C+oRktjUVgujoWHpuqhg8/4ckoqn3wofwF/4o7rUtOo46vUN?= =?us-ascii?Q?7oauSLIPXuePxqyFYrCOVra/O8BbLihBmWty0n25X/+xkoQ0nLiBi738GaLv?= =?us-ascii?Q?66vy+k1N6aaGOCYnbJQg7hnJIIhBdYAfsw/qOHV/d+Zj7n/xw45vQJz8mMmF?= =?us-ascii?Q?mVgJe3f2L1FnF0vI=3D?= X-Microsoft-Exchange-Diagnostics: 1; PS1PR0601MB1884; 6:+oUROaJqgaA6dFV5S3hHTnxfVjilkVMxBrpsIOiLVyNMW7dJbfyKpdNqBD8IG2/wc8JU+LZhFnwS8NCYxjBgJJc1YURgqtn4sFbVXOMM8dU6luV7QdWCfeXUk1K/uUngmFYO7kVEupXZYWpoFC6E/zkOC8CPuSYQb+//zTaCmKKSAJ8UD94FSD0g8nOEM3Syrh9F8pxfqtx+GwJCUZEYDVDGRKv3LbeiF12cArO0Yh5CeIbgjS7gYH3j/LH4z9tdt2fDcX856vMqHqz1g3W/+wiHw0huvfWM+/tGmfYwSJm9oC4FO2c1kg+JNjMRtU80udMs/gE9r/fJG/Y4KpYixdEB12Z/3nUThzwx8yc5kZs=; 5:/Ia9AuCjrVkwofJKqWYwIsRrmQbdrl2B6T+Zi7TpxPTBmNzEqCunz0Q2e4Lq+JATsrrJVdVUyVpvhRPVkV2ibmEK90Rfp1Yg+lFdzXgWdgamwiVqTeUHCx7AtXiolz49i7nfuqWv3mLmUsJ00XAoRN1oNWr+qPmXnYZ5a0OBKQg=; 24:zVWBTmx+OqtUofX5DuuRWNRgyv+pMKc1vuqocPNvipfLisN72+fkiuYT0v6+H+LJoCXQ3rfNscbtciKnZ68KOyS+aC+OD880t6CScC87Kzg=; 7:2XcKwiM5C6ZHXAwIGKnp8/bUNyTeapasCmLXxHh6PwEHXwv/4OWa0EMHO15FWIDQj8sV5E355/wJRlx5faH7o+MoJd/GwfRkAUrPIb70l98ljm1DbUYlZtFulhlDcRMqzAmXQmKTb3Kb4PwR2Q727r8FN3PllR+vTjJzWbOtC9R3wq+IEET031ChXjx8TGNAJhxSvWwv4wYMfdKYvwgVfpRrgxidkY/IRkajolYVMeTjp+tBZ4Kspfih/AcWgUjS SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; PS1PR0601MB1884; 20:oWUMCPj9Pvo+9+eqU6Js3CWQ/QLh0KC4R2ZzMAEkWKrP8LslVEHMWRvFVt+TOFGsJWD8/eArGXKXWAivPE40FKn0Y1Ptqb4efWmBokCTUWAPAjcdAE35rBq2/i63e8xumciXdniXZ+U0MLvkXLboRLd6VvhJk5iZjbaWKb/IJMs= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jan 2018 04:23:20.1196 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e49c04ef-d80f-4627-1a27-08d566d00769 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-Transport-CrossTenantHeadersStamped: PS1PR0601MB1884 Cc: Linux-ALSA Subject: [alsa-devel] [PATCH v2 129/186] ASoC: tas2552: replace codec to component X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP From: Kuninori Morimoto Now we can replace Codec to Component. Let's do it. Note: xxx_codec_xxx() -> xxx_component_xxx() .idle_bias_off = 0 -> .idle_bias_on = 1 .ignore_pmdown_time = 1 -> .use_pmdown_time = 0 - -> .endianness = 1 - -> .non_legacy_dai_naming = 1 Signed-off-by: Kuninori Morimoto --- sound/soc/codecs/tas2552.c | 178 ++++++++++++++++++++++----------------------- 1 file changed, 87 insertions(+), 91 deletions(-) diff --git a/sound/soc/codecs/tas2552.c b/sound/soc/codecs/tas2552.c index 87307dd..355ecaf 100644 --- a/sound/soc/codecs/tas2552.c +++ b/sound/soc/codecs/tas2552.c @@ -70,7 +70,7 @@ }; struct tas2552_data { - struct snd_soc_codec *codec; + struct snd_soc_component *component; struct regmap *regmap; struct i2c_client *tas2552_client; struct regulator_bulk_data supplies[TAS2552_NUM_SUPPLIES]; @@ -88,22 +88,22 @@ struct tas2552_data { static int tas2552_post_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { - struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); + struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); switch (event) { case SND_SOC_DAPM_POST_PMU: - snd_soc_write(codec, TAS2552_RESERVED_0D, 0xc0); - snd_soc_update_bits(codec, TAS2552_LIMIT_RATE_HYS, (1 << 5), + snd_soc_component_write(component, TAS2552_RESERVED_0D, 0xc0); + snd_soc_component_update_bits(component, TAS2552_LIMIT_RATE_HYS, (1 << 5), (1 << 5)); - snd_soc_update_bits(codec, TAS2552_CFG_2, 1, 0); - snd_soc_update_bits(codec, TAS2552_CFG_1, TAS2552_SWS, 0); + snd_soc_component_update_bits(component, TAS2552_CFG_2, 1, 0); + snd_soc_component_update_bits(component, TAS2552_CFG_1, TAS2552_SWS, 0); break; case SND_SOC_DAPM_POST_PMD: - snd_soc_update_bits(codec, TAS2552_CFG_1, TAS2552_SWS, + snd_soc_component_update_bits(component, TAS2552_CFG_1, TAS2552_SWS, TAS2552_SWS); - snd_soc_update_bits(codec, TAS2552_CFG_2, 1, 1); - snd_soc_update_bits(codec, TAS2552_LIMIT_RATE_HYS, (1 << 5), 0); - snd_soc_write(codec, TAS2552_RESERVED_0D, 0xbe); + snd_soc_component_update_bits(component, TAS2552_CFG_2, 1, 1); + snd_soc_component_update_bits(component, TAS2552_LIMIT_RATE_HYS, (1 << 5), 0); + snd_soc_component_write(component, TAS2552_RESERVED_0D, 0xbe); break; } return 0; @@ -149,21 +149,21 @@ static void tas2552_sw_shutdown(struct tas2552_data *tas2552, int sw_shutdown) { u8 cfg1_reg = 0; - if (!tas2552->codec) + if (!tas2552->component) return; if (sw_shutdown) cfg1_reg = TAS2552_SWS; - snd_soc_update_bits(tas2552->codec, TAS2552_CFG_1, TAS2552_SWS, + snd_soc_component_update_bits(tas2552->component, TAS2552_CFG_1, TAS2552_SWS, cfg1_reg); } #endif -static int tas2552_setup_pll(struct snd_soc_codec *codec, +static int tas2552_setup_pll(struct snd_soc_component *component, struct snd_pcm_hw_params *params) { - struct tas2552_data *tas2552 = dev_get_drvdata(codec->dev); + struct tas2552_data *tas2552 = dev_get_drvdata(component->dev); bool bypass_pll = false; unsigned int pll_clk = params_rate(params) * 512; unsigned int pll_clkin = tas2552->pll_clkin; @@ -177,15 +177,15 @@ static int tas2552_setup_pll(struct snd_soc_codec *codec, pll_clkin += tas2552->tdm_delay; } - pll_enable = snd_soc_read(codec, TAS2552_CFG_2) & TAS2552_PLL_ENABLE; - snd_soc_update_bits(codec, TAS2552_CFG_2, TAS2552_PLL_ENABLE, 0); + pll_enable = snd_soc_component_read32(component, TAS2552_CFG_2) & TAS2552_PLL_ENABLE; + snd_soc_component_update_bits(component, TAS2552_CFG_2, TAS2552_PLL_ENABLE, 0); if (pll_clkin == pll_clk) bypass_pll = true; if (bypass_pll) { /* By pass the PLL configuration */ - snd_soc_update_bits(codec, TAS2552_PLL_CTRL_2, + snd_soc_component_update_bits(component, TAS2552_PLL_CTRL_2, TAS2552_PLL_BYPASS, TAS2552_PLL_BYPASS); } else { /* Fill in the PLL control registers for J & D @@ -195,7 +195,7 @@ static int tas2552_setup_pll(struct snd_soc_codec *codec, unsigned int d, q, t; u8 j; u8 pll_sel = (tas2552->pll_clk_id << 3) & TAS2552_PLL_SRC_MASK; - u8 p = snd_soc_read(codec, TAS2552_PLL_CTRL_1); + u8 p = snd_soc_component_read32(component, TAS2552_PLL_CTRL_1); p = (p >> 7); @@ -221,20 +221,20 @@ static int tas2552_setup_pll(struct snd_soc_codec *codec, goto recalc; } - snd_soc_update_bits(codec, TAS2552_CFG_1, TAS2552_PLL_SRC_MASK, + snd_soc_component_update_bits(component, TAS2552_CFG_1, TAS2552_PLL_SRC_MASK, pll_sel); - snd_soc_update_bits(codec, TAS2552_PLL_CTRL_1, + snd_soc_component_update_bits(component, TAS2552_PLL_CTRL_1, TAS2552_PLL_J_MASK, j); /* Will clear the PLL_BYPASS bit */ - snd_soc_write(codec, TAS2552_PLL_CTRL_2, + snd_soc_component_write(component, TAS2552_PLL_CTRL_2, TAS2552_PLL_D_UPPER(d)); - snd_soc_write(codec, TAS2552_PLL_CTRL_3, + snd_soc_component_write(component, TAS2552_PLL_CTRL_3, TAS2552_PLL_D_LOWER(d)); } /* Restore PLL status */ - snd_soc_update_bits(codec, TAS2552_CFG_2, TAS2552_PLL_ENABLE, + snd_soc_component_update_bits(component, TAS2552_CFG_2, TAS2552_PLL_ENABLE, pll_enable); return 0; @@ -244,8 +244,8 @@ static int tas2552_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { - struct snd_soc_codec *codec = dai->codec; - struct tas2552_data *tas2552 = dev_get_drvdata(codec->dev); + struct snd_soc_component *component = dai->component; + struct tas2552_data *tas2552 = dev_get_drvdata(component->dev); int cpf; u8 ser_ctrl1_reg, wclk_rate; @@ -267,7 +267,7 @@ static int tas2552_hw_params(struct snd_pcm_substream *substream, cpf = 64 + tas2552->tdm_delay; break; default: - dev_err(codec->dev, "Not supported sample size: %d\n", + dev_err(component->dev, "Not supported sample size: %d\n", params_width(params)); return -EINVAL; } @@ -281,7 +281,7 @@ static int tas2552_hw_params(struct snd_pcm_substream *substream, else ser_ctrl1_reg |= TAS2552_CLKSPERFRAME_256; - snd_soc_update_bits(codec, TAS2552_SER_CTRL_1, + snd_soc_component_update_bits(component, TAS2552_SER_CTRL_1, TAS2552_WORDLENGTH_MASK | TAS2552_CLKSPERFRAME_MASK, ser_ctrl1_reg); @@ -316,15 +316,15 @@ static int tas2552_hw_params(struct snd_pcm_substream *substream, wclk_rate = TAS2552_WCLK_FREQ_176_192KHZ; break; default: - dev_err(codec->dev, "Not supported sample rate: %d\n", + dev_err(component->dev, "Not supported sample rate: %d\n", params_rate(params)); return -EINVAL; } - snd_soc_update_bits(codec, TAS2552_CFG_3, TAS2552_WCLK_FREQ_MASK, + snd_soc_component_update_bits(component, TAS2552_CFG_3, TAS2552_WCLK_FREQ_MASK, wclk_rate); - return tas2552_setup_pll(codec, params); + return tas2552_setup_pll(component, params); } #define TAS2552_DAI_FMT_MASK (TAS2552_BCLKDIR | \ @@ -333,8 +333,8 @@ static int tas2552_hw_params(struct snd_pcm_substream *substream, static int tas2552_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { - struct snd_soc_codec *codec = dai->codec; - struct tas2552_data *tas2552 = snd_soc_codec_get_drvdata(codec); + struct snd_soc_component *component = dai->component; + struct tas2552_data *tas2552 = snd_soc_component_get_drvdata(component); int delay = 0; /* TDM slot selection only valid in DSP_A/_B mode */ @@ -344,15 +344,15 @@ static int tas2552_prepare(struct snd_pcm_substream *substream, delay += tas2552->tdm_delay; /* Configure data delay */ - snd_soc_write(codec, TAS2552_SER_CTRL_2, delay); + snd_soc_component_write(component, TAS2552_SER_CTRL_2, delay); return 0; } static int tas2552_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt) { - struct snd_soc_codec *codec = dai->codec; - struct tas2552_data *tas2552 = dev_get_drvdata(codec->dev); + struct snd_soc_component *component = dai->component; + struct tas2552_data *tas2552 = dev_get_drvdata(component->dev); u8 serial_format; switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { @@ -369,7 +369,7 @@ static int tas2552_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt) serial_format = (TAS2552_BCLKDIR | TAS2552_WCLKDIR); break; default: - dev_vdbg(codec->dev, "DAI Format master is not found\n"); + dev_vdbg(component->dev, "DAI Format master is not found\n"); return -EINVAL; } @@ -388,12 +388,12 @@ static int tas2552_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt) serial_format |= TAS2552_DATAFORMAT_LEFT_J; break; default: - dev_vdbg(codec->dev, "DAI Format is not found\n"); + dev_vdbg(component->dev, "DAI Format is not found\n"); return -EINVAL; } tas2552->dai_fmt = fmt & SND_SOC_DAIFMT_FORMAT_MASK; - snd_soc_update_bits(codec, TAS2552_SER_CTRL_1, TAS2552_DAI_FMT_MASK, + snd_soc_component_update_bits(component, TAS2552_SER_CTRL_1, TAS2552_DAI_FMT_MASK, serial_format); return 0; } @@ -401,8 +401,8 @@ static int tas2552_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt) static int tas2552_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int freq, int dir) { - struct snd_soc_codec *codec = dai->codec; - struct tas2552_data *tas2552 = dev_get_drvdata(codec->dev); + struct snd_soc_component *component = dai->component; + struct tas2552_data *tas2552 = dev_get_drvdata(component->dev); u8 reg, mask, val; switch (clk_id) { @@ -410,7 +410,7 @@ static int tas2552_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, case TAS2552_PLL_CLKIN_IVCLKIN: if (freq < 512000 || freq > 24576000) { /* out of range PLL_CLKIN, fall back to use BCLK */ - dev_warn(codec->dev, "Out of range PLL_CLKIN: %u\n", + dev_warn(component->dev, "Out of range PLL_CLKIN: %u\n", freq); clk_id = TAS2552_PLL_CLKIN_BCLK; freq = 0; @@ -435,11 +435,11 @@ static int tas2552_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, tas2552->pdm_clk = freq; break; default: - dev_err(codec->dev, "Invalid clk id: %d\n", clk_id); + dev_err(component->dev, "Invalid clk id: %d\n", clk_id); return -EINVAL; } - snd_soc_update_bits(codec, reg, mask, val); + snd_soc_component_update_bits(component, reg, mask, val); return 0; } @@ -448,26 +448,26 @@ static int tas2552_set_dai_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width) { - struct snd_soc_codec *codec = dai->codec; - struct tas2552_data *tas2552 = snd_soc_codec_get_drvdata(codec); + struct snd_soc_component *component = dai->component; + struct tas2552_data *tas2552 = snd_soc_component_get_drvdata(component); unsigned int lsb; if (unlikely(!tx_mask)) { - dev_err(codec->dev, "tx masks need to be non 0\n"); + dev_err(component->dev, "tx masks need to be non 0\n"); return -EINVAL; } /* TDM based on DSP mode requires slots to be adjacent */ lsb = __ffs(tx_mask); if ((lsb + 1) != __fls(tx_mask)) { - dev_err(codec->dev, "Invalid mask, slots must be adjacent\n"); + dev_err(component->dev, "Invalid mask, slots must be adjacent\n"); return -EINVAL; } tas2552->tdm_delay = lsb * slot_width; /* DOUT in high-impedance on inactive bit clocks */ - snd_soc_update_bits(codec, TAS2552_DOUT, + snd_soc_component_update_bits(component, TAS2552_DOUT, TAS2552_SDOUT_TRISTATE, TAS2552_SDOUT_TRISTATE); return 0; @@ -476,12 +476,12 @@ static int tas2552_set_dai_tdm_slot(struct snd_soc_dai *dai, static int tas2552_mute(struct snd_soc_dai *dai, int mute) { u8 cfg1_reg = 0; - struct snd_soc_codec *codec = dai->codec; + struct snd_soc_component *component = dai->component; if (mute) cfg1_reg |= TAS2552_MUTE; - snd_soc_update_bits(codec, TAS2552_CFG_1, TAS2552_MUTE, cfg1_reg); + snd_soc_component_update_bits(component, TAS2552_CFG_1, TAS2552_MUTE, cfg1_reg); return 0; } @@ -570,41 +570,41 @@ static SOC_ENUM_SINGLE_DECL(tas2552_din_source_enum, SOC_ENUM("DIN source", tas2552_din_source_enum), }; -static int tas2552_codec_probe(struct snd_soc_codec *codec) +static int tas2552_component_probe(struct snd_soc_component *component) { - struct tas2552_data *tas2552 = snd_soc_codec_get_drvdata(codec); + struct tas2552_data *tas2552 = snd_soc_component_get_drvdata(component); int ret; - tas2552->codec = codec; + tas2552->component = component; ret = regulator_bulk_enable(ARRAY_SIZE(tas2552->supplies), tas2552->supplies); if (ret != 0) { - dev_err(codec->dev, "Failed to enable supplies: %d\n", + dev_err(component->dev, "Failed to enable supplies: %d\n", ret); return ret; } gpiod_set_value(tas2552->enable_gpio, 1); - ret = pm_runtime_get_sync(codec->dev); + ret = pm_runtime_get_sync(component->dev); if (ret < 0) { - dev_err(codec->dev, "Enabling device failed: %d\n", + dev_err(component->dev, "Enabling device failed: %d\n", ret); goto probe_fail; } - snd_soc_update_bits(codec, TAS2552_CFG_1, TAS2552_MUTE, TAS2552_MUTE); - snd_soc_write(codec, TAS2552_CFG_3, TAS2552_I2S_OUT_SEL | + snd_soc_component_update_bits(component, TAS2552_CFG_1, TAS2552_MUTE, TAS2552_MUTE); + snd_soc_component_write(component, TAS2552_CFG_3, TAS2552_I2S_OUT_SEL | TAS2552_DIN_SRC_SEL_AVG_L_R); - snd_soc_write(codec, TAS2552_OUTPUT_DATA, + snd_soc_component_write(component, TAS2552_OUTPUT_DATA, TAS2552_PDM_DATA_SEL_V_I | TAS2552_R_DATA_OUT(TAS2552_DATA_OUT_V_DATA)); - snd_soc_write(codec, TAS2552_BOOST_APT_CTRL, TAS2552_APT_DELAY_200 | + snd_soc_component_write(component, TAS2552_BOOST_APT_CTRL, TAS2552_APT_DELAY_200 | TAS2552_APT_THRESH_20_17); - snd_soc_write(codec, TAS2552_CFG_2, TAS2552_BOOST_EN | TAS2552_APT_EN | + snd_soc_component_write(component, TAS2552_CFG_2, TAS2552_BOOST_EN | TAS2552_APT_EN | TAS2552_LIM_EN); return 0; @@ -617,42 +617,40 @@ static int tas2552_codec_probe(struct snd_soc_codec *codec) return ret; } -static int tas2552_codec_remove(struct snd_soc_codec *codec) +static void tas2552_component_remove(struct snd_soc_component *component) { - struct tas2552_data *tas2552 = snd_soc_codec_get_drvdata(codec); + struct tas2552_data *tas2552 = snd_soc_component_get_drvdata(component); - pm_runtime_put(codec->dev); + pm_runtime_put(component->dev); gpiod_set_value(tas2552->enable_gpio, 0); - - return 0; }; #ifdef CONFIG_PM -static int tas2552_suspend(struct snd_soc_codec *codec) +static int tas2552_suspend(struct snd_soc_component *component) { - struct tas2552_data *tas2552 = snd_soc_codec_get_drvdata(codec); + struct tas2552_data *tas2552 = snd_soc_component_get_drvdata(component); int ret; ret = regulator_bulk_disable(ARRAY_SIZE(tas2552->supplies), tas2552->supplies); if (ret != 0) - dev_err(codec->dev, "Failed to disable supplies: %d\n", + dev_err(component->dev, "Failed to disable supplies: %d\n", ret); return ret; } -static int tas2552_resume(struct snd_soc_codec *codec) +static int tas2552_resume(struct snd_soc_component *component) { - struct tas2552_data *tas2552 = snd_soc_codec_get_drvdata(codec); + struct tas2552_data *tas2552 = snd_soc_component_get_drvdata(component); int ret; ret = regulator_bulk_enable(ARRAY_SIZE(tas2552->supplies), tas2552->supplies); if (ret != 0) { - dev_err(codec->dev, "Failed to enable supplies: %d\n", + dev_err(component->dev, "Failed to enable supplies: %d\n", ret); } @@ -663,21 +661,20 @@ static int tas2552_resume(struct snd_soc_codec *codec) #define tas2552_resume NULL #endif -static const struct snd_soc_codec_driver soc_codec_dev_tas2552 = { - .probe = tas2552_codec_probe, - .remove = tas2552_codec_remove, - .suspend = tas2552_suspend, - .resume = tas2552_resume, - .ignore_pmdown_time = true, - - .component_driver = { - .controls = tas2552_snd_controls, - .num_controls = ARRAY_SIZE(tas2552_snd_controls), - .dapm_widgets = tas2552_dapm_widgets, - .num_dapm_widgets = ARRAY_SIZE(tas2552_dapm_widgets), - .dapm_routes = tas2552_audio_map, - .num_dapm_routes = ARRAY_SIZE(tas2552_audio_map), - }, +static const struct snd_soc_component_driver soc_component_dev_tas2552 = { + .probe = tas2552_component_probe, + .remove = tas2552_component_remove, + .suspend = tas2552_suspend, + .resume = tas2552_resume, + .controls = tas2552_snd_controls, + .num_controls = ARRAY_SIZE(tas2552_snd_controls), + .dapm_widgets = tas2552_dapm_widgets, + .num_dapm_widgets = ARRAY_SIZE(tas2552_dapm_widgets), + .dapm_routes = tas2552_audio_map, + .num_dapm_routes = ARRAY_SIZE(tas2552_audio_map), + .idle_bias_on = 1, + .endianness = 1, + .non_legacy_dai_naming = 1, }; static const struct regmap_config tas2552_regmap_config = { @@ -736,18 +733,17 @@ static int tas2552_probe(struct i2c_client *client, dev_set_drvdata(&client->dev, data); - ret = snd_soc_register_codec(&client->dev, - &soc_codec_dev_tas2552, + ret = devm_snd_soc_register_component(&client->dev, + &soc_component_dev_tas2552, tas2552_dai, ARRAY_SIZE(tas2552_dai)); if (ret < 0) - dev_err(&client->dev, "Failed to register codec: %d\n", ret); + dev_err(&client->dev, "Failed to register component: %d\n", ret); return ret; } static int tas2552_i2c_remove(struct i2c_client *client) { - snd_soc_unregister_codec(&client->dev); pm_runtime_disable(&client->dev); return 0; }