From patchwork Mon Jan 29 04:12:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 10189091 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 B93E360375 for ; Mon, 29 Jan 2018 04:40:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A3967287A7 for ; Mon, 29 Jan 2018 04:40:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A1324287C5; Mon, 29 Jan 2018 04:40:16 +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 EB2E928792 for ; Mon, 29 Jan 2018 04:40:14 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 73684267BC4; Mon, 29 Jan 2018 05:26:22 +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 797A92678B0; Mon, 29 Jan 2018 05:26:21 +0100 (CET) Received: from relmlie1.idc.renesas.com (relmlor2.renesas.com [210.160.252.172]) by alsa0.perex.cz (Postfix) with ESMTP id CA5C82678B3 for ; Mon, 29 Jan 2018 05:12:52 +0100 (CET) Received: from unknown (HELO relmlir2.idc.renesas.com) ([10.200.68.152]) by relmlie1.idc.renesas.com with ESMTP; 29 Jan 2018 13:12:50 +0900 Received: from relmlii2.idc.renesas.com (relmlii2.idc.renesas.com [10.200.68.66]) by relmlir2.idc.renesas.com (Postfix) with ESMTP id E031277EE9; Mon, 29 Jan 2018 13:12:50 +0900 (JST) X-IronPort-AV: E=Sophos;i="5.46,429,1511794800"; d="scan'208";a="270914756" Received: from mail-hk2apc01lp0211.outbound.protection.outlook.com (HELO APC01-HK2-obe.outbound.protection.outlook.com) ([65.55.88.211]) by relmlii2.idc.renesas.com with ESMTP/TLS/AES256-SHA256; 29 Jan 2018 13:12:50 +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=mfw2wvzUERMUxiBm3oMcy/fh22H6ZTj6HO4BBX+PeFs=; b=ecHdh+06QL//5DtT3rcyYEK7ezgcGRLo4PbgAguSSRbL4QpsuAiS6GDZ+M+G8KPJ7W4ce1q005jGV1eyMvHrdVrDqmzAzyGJe9Ws0vGvTmqLtwZemQZn6zwx0y3UaQv3LKNobOmNi5jlokAXZrVopSFuB3zZUWn0Cx1bZ4Uk47I= Received: from morimoto-PC.renesas.com (211.11.155.138) by HK2PR0601MB1873.apcprd06.prod.outlook.com (2603:1096:202:a::17) 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:12:48 +0000 Message-ID: <87607lz4lx.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:12:48 +0000 X-Originating-IP: [211.11.155.138] X-ClientProxiedBy: TY1PR01CA0085.jpnprd01.prod.outlook.com (2603:1096:401:c::45) To HK2PR0601MB1873.apcprd06.prod.outlook.com (2603:1096:202:a::17) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 9877aa04-4a3e-4a55-2b53-08d566ce8eff X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(48565401081)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:HK2PR0601MB1873; X-Microsoft-Exchange-Diagnostics: 1; HK2PR0601MB1873; 3:UFeJVpye6dFyg0WlYNvoeJZx8ZRZVThpBGsU7Lmy0Y3RlHa1PHXTxuG3/mhEFAT35/oLVSyY/4hhfiHvpCDVn4BTDoUc3O1HzOEsS/leeh2OHv6aof1VrpvIi9G75AkjhNDM8TlsBojeqL5Xujv81iiPz/4n8qN+u0VVgmjR3iduIESljPR8OiKI+69apSGppf4V4V5FY67JZiIGv8GM2cpBvviPC4PMXEzdJogdJCoC2xjrH5V2GvGU+F/quRkR; 25:G5zmjo/eBcONSxmn8K00YbmKI/R+tBj4tthMSx5xPU159dD/3rLamsxr/NQWjv3erw/pb7O+WcudqHdlu+aq+ybgO5TdReBtZ12W83sAUF1ij/FSXqW11foWuGCK217GTK2ldao6gq9+icfEKGUf86jdSp2dfyUpVZlasL9qBJcfcwg0KswYwDxIuBpBlxepOH8i536vDWlxYZZ6QtTVcKN9DXHSvDsqjyaO8OsELJEYdADkvEaZAZAdNnM1PCQF05RdkMasGHg/57EA9rbRwPMzR4es6mUkZoMmYbFmD/C5p42h6hTl5JED9VA74AW4PkmfAFBiCiKKjtrxuYxOWA==; 31:vVxHmST5HmAdPu3VjeGp2AzvTdRmrhiQLIzAHd0DTI9LhOuIFMJqdUwzvUFCHqvHUM04FEM4tA3V7KSGhOuH/ze8GQwWx8oJsR7paPXlRB0/CM8AOhsYN6cdUDAbBhv9hRMBNWcHH8jJ2Ybkp+m0AEBq6At5MaiLHKM6ZIpW0lsM0emlwfB2YHheW/e7hLHB3+iQV83Zi8AIK5TBv0AEg0BXz/cJZ8iR2sz1txAH+sQ= X-MS-TrafficTypeDiagnostic: HK2PR0601MB1873: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=kuninori.morimoto.gx@renesas.com; X-Microsoft-Exchange-Diagnostics: 1; HK2PR0601MB1873; 20:1lwCxE+MDlrpclW856aIiAo2bMnGFy9bI5idI0nrcmwRc11LRIDEY1hAIVJCVq4G/UOMdVJEGOAsICWLh6UOimFoJbd9Cse9ENO5lj+FK4vGyb9GqUJb7USnMKrQPHiUplC3ku68vWh4svbOBcFhHqYd3DU5QThgd02YLTkmSUb0SpL04d2+Q0ZlcsifsCUtBpxcY1jMy0MvG/4IMoFviyll6Amm5MlOsNMRLArzbMAS64rkQEOnJRcU0hx9StrWsv0YpCsTiEa53ZR98E+TeRPQ8Ki1PKGzAw79HYy/+/uGM43NxRQUsawd5v7gX9zlszuUt8d7OgSRFETFrE/oYRmnUs3UDnMAlaKyGDpWkn1SvkeGzI9nKF6252q8zM15K6LPbtgCJKzYHBBNNhcHDISsMVzxZQ6G4ao9B24NelTTUKhkQfoegoyhd5zIHdYAWiIN4ihbuRROWST8Hu3wT+etYQDy5IQtF5QvIzUHwjDCUBGbyAX1Ws4lH3SHgDl+; 4:2yQKHmAqaRuR9uUaJUe/krzvMLYqDPtYQY79/9aO90t1k19ptjBBMUBvZND050etLK3SmUGmCr2q5dnECBng05KkWtY/gtwhAW2Rrgoy+boh79yJdNBqIkRE3vl2mRFRECqt/1rBNxR2r6HJVbznejWmA2HLSGzF+p8oq31vcnDYfRCaVegDMbIhMsNs+ztrzFuiB5RpigWVYo14sR68m34oMbxbuH/zaUZkEMS6vc5JqHweJ4iWtz8zeaGKj94tWiu6UdO761fBMvFg6njFpAxUimLMpapXHin9vcz557siYP0klBo0kH5bxu+Yj62P X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(3002001)(10201501046)(3231101)(944501161)(93006095)(93001095)(6055026)(6041288)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123564045)(20161123560045)(20161123562045)(6072148)(201708071742011); SRVR:HK2PR0601MB1873; BCL:0; PCL:0; RULEID:; SRVR:HK2PR0601MB1873; X-Forefront-PRVS: 0567A15835 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(376002)(346002)(396003)(39860400002)(366004)(39380400002)(189003)(199004)(305945005)(2906002)(4326008)(106356001)(6486002)(53936002)(25786009)(6116002)(7736002)(23726003)(3846002)(97736004)(58126008)(16586007)(478600001)(53416004)(316002)(105586002)(47776003)(16526019)(186003)(36756003)(66066001)(83506002)(52116002)(8676002)(69596002)(81166006)(8936002)(81156014)(50466002)(68736007)(76176011)(5660300001)(7696005)(86362001)(575784001)(59450400001)(386003)(26005)(6916009)(2950100002)(21314002)(16060500001); DIR:OUT; SFP:1102; SCL:1; SRVR:HK2PR0601MB1873; 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; HK2PR0601MB1873; 23:8F7ZCeg6y39KOnL3W30PKbrzKgN7oQvsJ154K3q?= =?us-ascii?Q?DgG647eP9QYcKWEv+crKeAiRfPX1X+thuoUgicUQR0fhyra761y4sx3JaPk4?= =?us-ascii?Q?tp0c4lf1BJ4g28f0V8xGTpMzd6+G19S0MOnizL4oeGuHKrcZcHeM1MZq2B5m?= =?us-ascii?Q?qzCGnECbD28FJnVdiKovDCbCIjVV34z04Hje7kOVFu1AqP4GgWyIxo7MR7gd?= =?us-ascii?Q?hPDIMZte4SogTg9Kvr1iDqEiWc27Xa1kp09Z+WG7ZoZVaeHjrNDjfZFg8uE7?= =?us-ascii?Q?cdajVoCM+EJTO0MIBv6DAYMsfAzFOT2Ov2zW30g3a+nB21tfxNwM2JkGYb6D?= =?us-ascii?Q?v7N8PPQF1z89rn3xW71TKFUiWkFtvqsAiVR8GZKV28RRSGgBTSmgL6LqEi4E?= =?us-ascii?Q?v755z7rgtCQrEYsNTGX2f4XoIhaI0axLr/TrENKTvr0sPzsdz6gRMS7Uyig5?= =?us-ascii?Q?ojjiDCDV/Y/Nlo7v9v53Ic07miRz81Aa1z5hmsjR+XpTHonKxmdXvXWyhwgq?= =?us-ascii?Q?1PLGPQZMVXUZjeR3GuAxZT0qPhasRVYDc8jiXBBXDJaM7rIMIao/opSdHYvb?= =?us-ascii?Q?4pO7Udl/xOKXZ1WonHcCiFi2hrV2z5E0S76xqJmSH+06Oa/nLjOxrLZPn6f5?= =?us-ascii?Q?lP0ieOYQPgoM31FfwlMH8Aj6Krm1xAMZdcXHtiTyKQCUq6UyvCc3pgAb7kRk?= =?us-ascii?Q?xBNjfEktkyuTyOhAiqPTeUtEJ0GqyFxd3nc0QkRkJ3nd4fjc5y1S0q7GxzK6?= =?us-ascii?Q?tUg/xdq09JyWuZb8Y4UJzJKQ6hCmQfQN2m2AFE9V2GeUEo3B21Y7rBkz/NUO?= =?us-ascii?Q?LaBsqNrmQKTiL93p5kbl5n+yXg73pdu9nXxTg4LR5Uo9775MPiMjLEXOvua6?= =?us-ascii?Q?Jm+dgzZ5FZafckJDenlDXtPy6vZzWe4t6kL69tAHuQfRS54SiUaDIWzn+dGA?= =?us-ascii?Q?Yi59Ujq3myTU4+PbNrN61zcgFwutTVc2KCF8cHTE7ygy4id6N6ndAAQcpTEw?= =?us-ascii?Q?WCUVuHrhcEv4DIwdP8diUM0N1JfRw/RiDUbPa25+CZXVYI8EgfpUgtOFGB+A?= =?us-ascii?Q?hR88q0FK9A4vub3ZA2cgv6w8s0S0ahC8kQP4PzGYAF1E82xj7xepFOzkrV6g?= =?us-ascii?Q?dlVNL7P/dTDgoSUJZz/kwPhInrGL8GNP+Nkuz0kV40eXvP5PhOCzfGydGV0j?= =?us-ascii?Q?0eN2lLGCDbLyDa6+YiLjdSJ4OUo60o2mj3mtR?= X-Microsoft-Exchange-Diagnostics: 1; HK2PR0601MB1873; 6:A1AxAVCLJFXfltz52jYHFJQxrORO2TF47GgQA71uvhOVxc64Vl8WscNrVawBs6cO6bSkHQXRYBeF+6dYOWKPDIoRcj7kr9gW0sFkOBNG72iSATsGaAw4RLHOvtDf1aBFgQwlK2Js3PC8XdKuAM0B7va3G6s34F5Y6hZNpGWOV9MqgqcfjJrUw/PRscO69/nbd43+wtVhuxYgDyS722ztU105wKyIM/NCkA17qgCN4cIA+DTv/kqP5AgRY9gsCfYwCH/bo02XLBhqtuVsmU1ey55zbbR53Aswt/ldco0g3QM5b0VK8mUx0vSG9lIdu62PnoT30LGfsyQK+qrqcjropHNFad91zNTHLeXJrAuFFjs=; 5:8s61nZ/rt5vjKTLLboOpHqApn/x9T17IUT4HrLICwrGrO16yPAHylnMO3DcGU2bGZeQpP0Ewr5FMqdgNyVp6jluDtOXV38b2OA2PDLOvQmRuWtLQeaP5DRdP7qGYVE0JLZcqx/UwQMjwjj7u5bqU7FUdjqtzmfmPHpOd+csM8mE=; 24:HSmAfmnbqH5gBs/lZcYVk4mEevEn6SvuixdzXEx4+XnRRyIR5zsFT6h2WvfUCivvCQ1yfVToIzsOKVzgu3KE8dCI6Q21bPDVH7fWC848xWQ=; 7:KxrUCrS/FlBCFRMIClPgEaxFxrlLCYa27wDZfByhbeLfqWruerUNo4Diy5sx9zBaZgA5Quv1R65Y+TwHdQdxgRsh+Cme7EcLUjyZtrBbyWClFaNmruKO/Qt/QfosrfoYnjUlbf/kA6KYTmQ1TFUO7y8hNLREvWKzwu3H8GhgFQ8wZdaqQEYYslcaEEJ3cAii6VDCUAxHHF+GJAejhxcIV/DetSpbf/qhhB38tqI5U+Kcxa2s2OnCN57Q3NABobu2 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HK2PR0601MB1873; 20:FJ6Oete0ICtNkElAWGk2QyGp2hGukmCJUofPDfkDIOtJSBo8jPdJTBon3rbgvIi8NDQnpV6cTrTtWhFSdByKG69vMaOBl24bGDZ8U4Br/vwb7QUQidaGsTlvsc/CNidP5mmgteACZrjiiu54OmvZ3+pEGTeDqUuAEN56lnL+utE= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jan 2018 04:12:48.8520 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9877aa04-4a3e-4a55-2b53-08d566ce8eff X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-Transport-CrossTenantHeadersStamped: HK2PR0601MB1873 Cc: Linux-ALSA Subject: [alsa-devel] [PATCH v2 108/186] ASoC: tlv320aic23: 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 = 0 -> .use_pmdown_time = 1 - -> .endianness = 1 - -> .non_legacy_dai_naming = 1 Signed-off-by: Kuninori Morimoto --- sound/soc/codecs/tlv320aic23-i2c.c | 7 --- sound/soc/codecs/tlv320aic23-spi.c | 7 --- sound/soc/codecs/tlv320aic23.c | 120 +++++++++++++++++++------------------ 3 files changed, 61 insertions(+), 73 deletions(-) diff --git a/sound/soc/codecs/tlv320aic23-i2c.c b/sound/soc/codecs/tlv320aic23-i2c.c index 78a94af..1d7c117 100644 --- a/sound/soc/codecs/tlv320aic23-i2c.c +++ b/sound/soc/codecs/tlv320aic23-i2c.c @@ -31,12 +31,6 @@ static int tlv320aic23_i2c_probe(struct i2c_client *i2c, return tlv320aic23_probe(&i2c->dev, regmap); } -static int tlv320aic23_i2c_remove(struct i2c_client *i2c) -{ - snd_soc_unregister_codec(&i2c->dev); - return 0; -} - static const struct i2c_device_id tlv320aic23_id[] = { {"tlv320aic23", 0}, {} @@ -56,7 +50,6 @@ static int tlv320aic23_i2c_remove(struct i2c_client *i2c) .of_match_table = of_match_ptr(tlv320aic23_of_match), }, .probe = tlv320aic23_i2c_probe, - .remove = tlv320aic23_i2c_remove, .id_table = tlv320aic23_id, }; diff --git a/sound/soc/codecs/tlv320aic23-spi.c b/sound/soc/codecs/tlv320aic23-spi.c index f801ae0..d8c9ec1 100644 --- a/sound/soc/codecs/tlv320aic23-spi.c +++ b/sound/soc/codecs/tlv320aic23-spi.c @@ -34,18 +34,11 @@ static int aic23_spi_probe(struct spi_device *spi) return tlv320aic23_probe(&spi->dev, regmap); } -static int aic23_spi_remove(struct spi_device *spi) -{ - snd_soc_unregister_codec(&spi->dev); - return 0; -} - static struct spi_driver aic23_spi = { .driver = { .name = "tlv320aic23", }, .probe = aic23_spi_probe, - .remove = aic23_spi_remove, }; module_spi_driver(aic23_spi); diff --git a/sound/soc/codecs/tlv320aic23.c b/sound/soc/codecs/tlv320aic23.c index 7490921..47480cb 100644 --- a/sound/soc/codecs/tlv320aic23.c +++ b/sound/soc/codecs/tlv320aic23.c @@ -82,7 +82,7 @@ static SOC_ENUM_SINGLE_DECL(tlv320aic23_deemph, static int snd_soc_tlv320aic23_put_volsw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { - struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); + struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); u16 val, reg; val = (ucontrol->value.integer.value[0] & 0x07); @@ -96,8 +96,8 @@ static int snd_soc_tlv320aic23_put_volsw(struct snd_kcontrol *kcontrol, */ val = (val >= 4) ? 4 : (3 - val); - reg = snd_soc_read(codec, TLV320AIC23_ANLG) & (~0x1C0); - snd_soc_write(codec, TLV320AIC23_ANLG, reg | (val << 6)); + reg = snd_soc_component_read32(component, TLV320AIC23_ANLG) & (~0x1C0); + snd_soc_component_write(component, TLV320AIC23_ANLG, reg | (val << 6)); return 0; } @@ -105,10 +105,10 @@ static int snd_soc_tlv320aic23_put_volsw(struct snd_kcontrol *kcontrol, static int snd_soc_tlv320aic23_get_volsw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { - struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); + struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); u16 val; - val = snd_soc_read(codec, TLV320AIC23_ANLG) & (0x1C0); + val = snd_soc_component_read32(component, TLV320AIC23_ANLG) & (0x1C0); val = val >> 6; val = (val >= 4) ? 4 : (3 - val); ucontrol->value.integer.value[0] = val; @@ -296,10 +296,10 @@ static int find_rate(int mclk, u32 need_adc, u32 need_dac) } #ifdef DEBUG -static void get_current_sample_rates(struct snd_soc_codec *codec, int mclk, +static void get_current_sample_rates(struct snd_soc_component *component, int mclk, u32 *sample_rate_adc, u32 *sample_rate_dac) { - int src = snd_soc_read(codec, TLV320AIC23_SRATE); + int src = snd_soc_component_read32(component, TLV320AIC23_SRATE); int sr = (src >> 2) & 0x0f; int val = (mclk / bosr_usb_divisor_table[src & 3]); int adc = (val * sr_adc_mult_table[sr]) / SR_MULT; @@ -313,7 +313,7 @@ static void get_current_sample_rates(struct snd_soc_codec *codec, int mclk, } #endif -static int set_sample_rate_control(struct snd_soc_codec *codec, int mclk, +static int set_sample_rate_control(struct snd_soc_component *component, int mclk, u32 sample_rate_adc, u32 sample_rate_dac) { /* Search for the right sample rate */ @@ -323,11 +323,11 @@ static int set_sample_rate_control(struct snd_soc_codec *codec, int mclk, __func__, sample_rate_adc, sample_rate_dac); return -EINVAL; } - snd_soc_write(codec, TLV320AIC23_SRATE, data); + snd_soc_component_write(component, TLV320AIC23_SRATE, data); #ifdef DEBUG { u32 adc, dac; - get_current_sample_rates(codec, mclk, &adc, &dac); + get_current_sample_rates(component, mclk, &adc, &dac); printk(KERN_DEBUG "actual samplerate = %u,%u reg=%x\n", adc, dac, data); } @@ -339,10 +339,10 @@ static int tlv320aic23_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 snd_soc_component *component = dai->component; u16 iface_reg; int ret; - struct aic23 *aic23 = snd_soc_codec_get_drvdata(codec); + struct aic23 *aic23 = snd_soc_component_get_drvdata(component); u32 sample_rate_adc = aic23->requested_adc; u32 sample_rate_dac = aic23->requested_dac; u32 sample_rate = params_rate(params); @@ -356,12 +356,12 @@ static int tlv320aic23_hw_params(struct snd_pcm_substream *substream, if (!sample_rate_dac) sample_rate_dac = sample_rate; } - ret = set_sample_rate_control(codec, aic23->mclk, sample_rate_adc, + ret = set_sample_rate_control(component, aic23->mclk, sample_rate_adc, sample_rate_dac); if (ret < 0) return ret; - iface_reg = snd_soc_read(codec, TLV320AIC23_DIGT_FMT) & ~(0x03 << 2); + iface_reg = snd_soc_component_read32(component, TLV320AIC23_DIGT_FMT) & ~(0x03 << 2); switch (params_width(params)) { case 16: @@ -376,7 +376,7 @@ static int tlv320aic23_hw_params(struct snd_pcm_substream *substream, iface_reg |= (0x03 << 2); break; } - snd_soc_write(codec, TLV320AIC23_DIGT_FMT, iface_reg); + snd_soc_component_write(component, TLV320AIC23_DIGT_FMT, iface_reg); return 0; } @@ -384,10 +384,10 @@ static int tlv320aic23_hw_params(struct snd_pcm_substream *substream, static int tlv320aic23_pcm_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { - struct snd_soc_codec *codec = dai->codec; + struct snd_soc_component *component = dai->component; /* set active */ - snd_soc_write(codec, TLV320AIC23_ACTIVE, 0x0001); + snd_soc_component_write(component, TLV320AIC23_ACTIVE, 0x0001); return 0; } @@ -395,13 +395,13 @@ static int tlv320aic23_pcm_prepare(struct snd_pcm_substream *substream, static void tlv320aic23_shutdown(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { - struct snd_soc_codec *codec = dai->codec; - struct aic23 *aic23 = snd_soc_codec_get_drvdata(codec); + struct snd_soc_component *component = dai->component; + struct aic23 *aic23 = snd_soc_component_get_drvdata(component); /* deactivate */ - if (!snd_soc_codec_is_active(codec)) { + if (!snd_soc_component_is_active(component)) { udelay(50); - snd_soc_write(codec, TLV320AIC23_ACTIVE, 0x0); + snd_soc_component_write(component, TLV320AIC23_ACTIVE, 0x0); } if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) aic23->requested_dac = 0; @@ -411,17 +411,17 @@ static void tlv320aic23_shutdown(struct snd_pcm_substream *substream, static int tlv320aic23_mute(struct snd_soc_dai *dai, int mute) { - struct snd_soc_codec *codec = dai->codec; + struct snd_soc_component *component = dai->component; u16 reg; - reg = snd_soc_read(codec, TLV320AIC23_DIGT); + reg = snd_soc_component_read32(component, TLV320AIC23_DIGT); if (mute) reg |= TLV320AIC23_DACM_MUTE; else reg &= ~TLV320AIC23_DACM_MUTE; - snd_soc_write(codec, TLV320AIC23_DIGT, reg); + snd_soc_component_write(component, TLV320AIC23_DIGT, reg); return 0; } @@ -429,10 +429,10 @@ static int tlv320aic23_mute(struct snd_soc_dai *dai, int mute) static int tlv320aic23_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) { - struct snd_soc_codec *codec = codec_dai->codec; + struct snd_soc_component *component = codec_dai->component; u16 iface_reg; - iface_reg = snd_soc_read(codec, TLV320AIC23_DIGT_FMT) & (~0x03); + iface_reg = snd_soc_component_read32(component, TLV320AIC23_DIGT_FMT) & (~0x03); /* set master/slave audio interface */ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { @@ -468,7 +468,7 @@ static int tlv320aic23_set_dai_fmt(struct snd_soc_dai *codec_dai, } - snd_soc_write(codec, TLV320AIC23_DIGT_FMT, iface_reg); + snd_soc_component_write(component, TLV320AIC23_DIGT_FMT, iface_reg); return 0; } @@ -481,29 +481,29 @@ static int tlv320aic23_set_dai_sysclk(struct snd_soc_dai *codec_dai, return 0; } -static int tlv320aic23_set_bias_level(struct snd_soc_codec *codec, +static int tlv320aic23_set_bias_level(struct snd_soc_component *component, enum snd_soc_bias_level level) { - u16 reg = snd_soc_read(codec, TLV320AIC23_PWR) & 0x17f; + u16 reg = snd_soc_component_read32(component, TLV320AIC23_PWR) & 0x17f; switch (level) { case SND_SOC_BIAS_ON: /* vref/mid, osc on, dac unmute */ reg &= ~(TLV320AIC23_DEVICE_PWR_OFF | TLV320AIC23_OSC_OFF | \ TLV320AIC23_DAC_OFF); - snd_soc_write(codec, TLV320AIC23_PWR, reg); + snd_soc_component_write(component, TLV320AIC23_PWR, reg); break; case SND_SOC_BIAS_PREPARE: break; case SND_SOC_BIAS_STANDBY: /* everything off except vref/vmid, */ - snd_soc_write(codec, TLV320AIC23_PWR, + snd_soc_component_write(component, TLV320AIC23_PWR, reg | TLV320AIC23_CLK_OFF); break; case SND_SOC_BIAS_OFF: /* everything off, dac mute, inactive */ - snd_soc_write(codec, TLV320AIC23_ACTIVE, 0x0); - snd_soc_write(codec, TLV320AIC23_PWR, 0x1ff); + snd_soc_component_write(component, TLV320AIC23_ACTIVE, 0x0); + snd_soc_component_write(component, TLV320AIC23_PWR, 0x1ff); break; } return 0; @@ -539,58 +539,59 @@ static int tlv320aic23_set_bias_level(struct snd_soc_codec *codec, .ops = &tlv320aic23_dai_ops, }; -static int tlv320aic23_resume(struct snd_soc_codec *codec) +static int tlv320aic23_resume(struct snd_soc_component *component) { - struct aic23 *aic23 = snd_soc_codec_get_drvdata(codec); + struct aic23 *aic23 = snd_soc_component_get_drvdata(component); regcache_mark_dirty(aic23->regmap); regcache_sync(aic23->regmap); return 0; } -static int tlv320aic23_codec_probe(struct snd_soc_codec *codec) +static int tlv320aic23_component_probe(struct snd_soc_component *component) { /* Reset codec */ - snd_soc_write(codec, TLV320AIC23_RESET, 0); + snd_soc_component_write(component, TLV320AIC23_RESET, 0); - snd_soc_write(codec, TLV320AIC23_DIGT, TLV320AIC23_DEEMP_44K); + snd_soc_component_write(component, TLV320AIC23_DIGT, TLV320AIC23_DEEMP_44K); /* Unmute input */ - snd_soc_update_bits(codec, TLV320AIC23_LINVOL, + snd_soc_component_update_bits(component, TLV320AIC23_LINVOL, TLV320AIC23_LIM_MUTED, TLV320AIC23_LRS_ENABLED); - snd_soc_update_bits(codec, TLV320AIC23_RINVOL, + snd_soc_component_update_bits(component, TLV320AIC23_RINVOL, TLV320AIC23_LIM_MUTED, TLV320AIC23_LRS_ENABLED); - snd_soc_update_bits(codec, TLV320AIC23_ANLG, + snd_soc_component_update_bits(component, TLV320AIC23_ANLG, TLV320AIC23_BYPASS_ON | TLV320AIC23_MICM_MUTED, 0); /* Default output volume */ - snd_soc_write(codec, TLV320AIC23_LCHNVOL, + snd_soc_component_write(component, TLV320AIC23_LCHNVOL, TLV320AIC23_DEFAULT_OUT_VOL & TLV320AIC23_OUT_VOL_MASK); - snd_soc_write(codec, TLV320AIC23_RCHNVOL, + snd_soc_component_write(component, TLV320AIC23_RCHNVOL, TLV320AIC23_DEFAULT_OUT_VOL & TLV320AIC23_OUT_VOL_MASK); - snd_soc_write(codec, TLV320AIC23_ACTIVE, 0x1); + snd_soc_component_write(component, TLV320AIC23_ACTIVE, 0x1); return 0; } -static const struct snd_soc_codec_driver soc_codec_dev_tlv320aic23 = { - .probe = tlv320aic23_codec_probe, - .resume = tlv320aic23_resume, - .set_bias_level = tlv320aic23_set_bias_level, - .suspend_bias_off = true, - - .component_driver = { - .controls = tlv320aic23_snd_controls, - .num_controls = ARRAY_SIZE(tlv320aic23_snd_controls), - .dapm_widgets = tlv320aic23_dapm_widgets, - .num_dapm_widgets = ARRAY_SIZE(tlv320aic23_dapm_widgets), - .dapm_routes = tlv320aic23_intercon, - .num_dapm_routes = ARRAY_SIZE(tlv320aic23_intercon), - }, +static const struct snd_soc_component_driver soc_component_dev_tlv320aic23 = { + .probe = tlv320aic23_component_probe, + .resume = tlv320aic23_resume, + .set_bias_level = tlv320aic23_set_bias_level, + .controls = tlv320aic23_snd_controls, + .num_controls = ARRAY_SIZE(tlv320aic23_snd_controls), + .dapm_widgets = tlv320aic23_dapm_widgets, + .num_dapm_widgets = ARRAY_SIZE(tlv320aic23_dapm_widgets), + .dapm_routes = tlv320aic23_intercon, + .num_dapm_routes = ARRAY_SIZE(tlv320aic23_intercon), + .suspend_bias_off = 1, + .idle_bias_on = 1, + .use_pmdown_time = 1, + .endianness = 1, + .non_legacy_dai_naming = 1, }; int tlv320aic23_probe(struct device *dev, struct regmap *regmap) @@ -608,7 +609,8 @@ int tlv320aic23_probe(struct device *dev, struct regmap *regmap) dev_set_drvdata(dev, aic23); - return snd_soc_register_codec(dev, &soc_codec_dev_tlv320aic23, + return devm_snd_soc_register_component(dev, + &soc_component_dev_tlv320aic23, &tlv320aic23_dai, 1); } EXPORT_SYMBOL(tlv320aic23_probe);