From patchwork Fri Jan 12 01:10:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 10159131 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 52307601A1 for ; Fri, 12 Jan 2018 01:11:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2C8B328979 for ; Fri, 12 Jan 2018 01:11:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2AB3328998; Fri, 12 Jan 2018 01:11:59 +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 38173289AF for ; Fri, 12 Jan 2018 01:11:29 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id D3C99267A50; Fri, 12 Jan 2018 02:11: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 C409E267A50; Fri, 12 Jan 2018 02:11:24 +0100 (CET) Received: from relmlie3.idc.renesas.com (relmlor4.renesas.com [210.160.252.174]) by alsa0.perex.cz (Postfix) with ESMTP id D0909267A87 for ; Fri, 12 Jan 2018 02:10:17 +0100 (CET) Received: from unknown (HELO relmlir1.idc.renesas.com) ([10.200.68.151]) by relmlie3.idc.renesas.com with ESMTP; 12 Jan 2018 10:10:16 +0900 Received: from relmlii1.idc.renesas.com (relmlii1.idc.renesas.com [10.200.68.65]) by relmlir1.idc.renesas.com (Postfix) with ESMTP id 0B41A6C072; Fri, 12 Jan 2018 10:10:16 +0900 (JST) X-IronPort-AV: E=Sophos;i="5.46,346,1511794800"; d="scan'208";a="268005892" Received: from mail-hk2apc01lp0208.outbound.protection.outlook.com (HELO APC01-HK2-obe.outbound.protection.outlook.com) ([65.55.88.208]) by relmlii1.idc.renesas.com with ESMTP/TLS/AES256-SHA256; 12 Jan 2018 10:10:14 +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=hFeHjL8bgwecSW+4VuLG87uFAt2UDvwa5Y6lwWkBr+U=; b=POaZXK9/b4oSS9QnNoDXLF9XMNEDzMs7GNNxGW8ovEgzFz62fK76JtKCQ8YHiHDiVve3QFtqy43iadP8vLHzEk33TlXF1zirkC4ZYQAhzTAluos63o6uvE70pMViz9utYeqJXUmEHBCKkm9Mm2oCixPMZoCIMh7vnqJUajT44xk= 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 SG2PR0601MB1887.apcprd06.prod.outlook.com (2603:1096:3:9::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Fri, 12 Jan 2018 01:10:10 +0000 Message-ID: <87y3l3dgsx.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: <87bmhzevk9.wl%kuninori.morimoto.gx@renesas.com> References: <87bmhzevk9.wl%kuninori.morimoto.gx@renesas.com> MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Date: Fri, 12 Jan 2018 01:10:10 +0000 X-Originating-IP: [211.11.155.138] X-ClientProxiedBy: OS2PR01CA0117.jpnprd01.prod.outlook.com (2603:1096:602::11) To SG2PR0601MB1887.apcprd06.prod.outlook.com (2603:1096:3:9::20) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: fd73b95f-107e-4a05-c56e-08d559593add X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020074)(4652020)(5600026)(4604075)(48565401081)(2017052603307)(7153060)(7193020); SRVR:SG2PR0601MB1887; X-Microsoft-Exchange-Diagnostics: 1; SG2PR0601MB1887; 3://sf4GVlU2k0N855Us2nRWC3WfwCAYeJbD6L8l7gpewUVFRHcyjP+RBCWkb/4lybcOPRWjFWRHcJ9rz3nrpnovKgeetZPqC973Dm53h2R7rwN2efrH7RCI4dTHfUvuZojAdl6g04NPtF+0LGss+q7gwAMJgq/PaDzKtk6JvaWiz4iBGjzFwANX/gIT4K9jEPldtaZWvJ2OmG1d3G/K/6QyQDdtP+YoCNpxv/1IvBgoLnHdXASvv8Mj1s2ongFcHt; 25:1CHJxCc76U+zcsQdku3vD5tfyHusN/yWGwkPPstFJj6gsB1QgX/c7z9DyyrcmGDuhNPj5S5ioJTkUBWyonubEM+iKX84i93jRwX2vt6JMizrX74ouIVIb90CF19PaLaNbslABscn/B+nUJCJSiKbnL726hWzHoT+ugIW+UAeYIdltww+Hl1+AfECYU11NQGFvwa9o9irXvNMDjJ/9aMOpc+KuawRaVMZv8nN79ItxWsCrYd5eao6/4mj8mGij9TFCkmfr5cWee8sybUKuwFM6RvgWlQsuY7ES5l9WioM3pGk8A2PgFOrfxmu5JaE1ZWIGjzgLdd7HYeKLS2KWU2/2A==; 31:v8CZMdhqNuMA6hMU008iV7yegwTrPNJoKkZZjoh3c95dsZHMHnyOoa2kAwKn/ssKo5B97jy6/YF940vcIcySYlc0mKCy1SGQ6MyLhV6Edwq3TYaWmScj5zQc5mM9pkAmOCGvFpd/TJNsGmxuFi+8IUqKu/9jmgudcE4TtjAUwkGl/DVjCaTMZitakG25+SVD+1IEFPjr5iSDcooOZHE2K4LcwcC9LzqxUvKyqX9UrGI= X-MS-TrafficTypeDiagnostic: SG2PR0601MB1887: X-Microsoft-Exchange-Diagnostics: 1; SG2PR0601MB1887; 20:90Zo8HxVf7qbTtBLBWLo2ub5U4p3ndry6kqz+joStpgXBXWDywRtYkllHTBPKuzVh79wbv+lichdnjZPNpooXy15AvAxnhA7KEjrNx/KZrJ0+5dB3NV/eM4UhEpVTcXHfqKa/xUkZM6l5PBpnCzbTY2Gc6n+TMooxEaPZ7rTev7sVUX9iKiZaUINNCmIjGZlOEvV4j5D/CDY1xluwGQAxj5XOwZdRTI2iR61L/tjz1Dre84HUanfAbGCH7lrInxRX3WH+ys+aO5GdmNU8oUMHDQH6yNgULpCgdtcI6W1TLNP7A9ai+ULnZe+pl3z+8PdvLJJ9IRhx4hgRD48Fk0GK7e6qnUO1Kpl7oxfVDZZSbZviq1d5+IjX9iq8v7aErOWYnblbT6hegrlh/3nETQqSV/0iYYOQC7wg6/BUaFRASkQmudVTxcIdMV8aCv0Y7xj+VTO3YrfNxMxmgnRZiN+0sauQXUByb3HmASZK8SadbQCUj7wbdiRJN7hm3kOZcrE; 4:eQfQu8V2qwW8741JiwLi9DROeFlEOWeee54ii2dFRJoE91ljj33cLt406yS98MMXy3PyZHPKsJL73XPlq1icS9LseVg0aKCjiKwBLd22162P0ljbfymdfZBEEvQe4eafvEjBBYOz1c3tqthW4bFShIkXcq8ig/UiQN6CQ1zwTcPZSRjcjCMY//WtLlgxblTNIoPWRTppBE6giP8w5BnPcpEFvAqLq6S8typyUSWnAj+CNh5/ZGeHLp54LmJuRBsv06pUykpdjS6KG8kZFPgQZwIvHNm4JiDpwLsBhSMJ9003Ty6u0gbaZXqyz2jfcN3B X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(5005006)(8121501046)(3002001)(3231023)(944501137)(93006095)(93001095)(10201501046)(6055026)(6041268)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123558120)(6072148)(201708071742011); SRVR:SG2PR0601MB1887; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:SG2PR0601MB1887; X-Forefront-PRVS: 0550778858 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(376002)(366004)(346002)(39380400002)(39860400002)(396003)(199004)(189003)(305945005)(5660300001)(68736007)(47776003)(8676002)(16526018)(69596002)(83506002)(16586007)(6116002)(81166006)(25786009)(2950100002)(59450400001)(478600001)(53936002)(58126008)(97736004)(81156014)(54906003)(386003)(86362001)(3846002)(316002)(6486002)(66066001)(50466002)(53416004)(52116002)(6916009)(8936002)(36756003)(2906002)(106356001)(23726003)(76176011)(7736002)(4326008)(7696005)(105586002)(21314002)(16060500001); DIR:OUT; SFP:1102; SCL:1; SRVR:SG2PR0601MB1887; H:morimoto-PC.renesas.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX: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; SG2PR0601MB1887; 23:1fGm10xrJ7jS+BMXyT2aA2aDoSTjQmqThyl6kSp?= =?us-ascii?Q?ky5Q+LydclQONO8jVkW6GLW0xSAZfBVMZEpB31StP7iaDLAO62TMlpDj4xCt?= =?us-ascii?Q?nTE9NbQAmkOEkvmGTADqBfKPQDT30r6K4dkX1hBRgucTIoIkIdld82XJh9k/?= =?us-ascii?Q?cjtCGoLD+72VutPY+NBuPx6/aEdGr8c8xd9flJvVT7gi385GxYAgbkScvaEB?= =?us-ascii?Q?UK6RSX8DGsTlXzPp7LCuJmF4aNXERxSxmuk/olpZPQn8tH8YzlMWlEbxb3Te?= =?us-ascii?Q?j0/XLP+oKAAWBUzT/Eh3usMPS5mRWsFiqYQ0/IaLCMKTEP9Bztsmtv4W2X5z?= =?us-ascii?Q?VUtbyt7PI1V0V2Tt7m5PidNZGuxk4orfyC5kPhJ/opaWCQ4ONWqfN3+86ooz?= =?us-ascii?Q?aPbGTq7hWop1gZzs/47QYXm/V7RBpiwMimSkDoI5HQOiA9ZOvxG+IujMK5BO?= =?us-ascii?Q?/ZYs/XrM01ZL3/cbNTpaQA4CKQSB9oTrB/WK3Tc2NC6hb95MAYIPTjkPW34f?= =?us-ascii?Q?mnJ6m9gJojIc4STnHonejNyH+qKhG8qPe8PBouDbx4LV/g9Z5nWNlTQWoRc9?= =?us-ascii?Q?FfneqaSIOCZRZSDj1SavUgpVu9kCoRl8dnM0R0PrxqPBXvwTIzgnz4rWTbjJ?= =?us-ascii?Q?Qo19HByINYRVTn/JpIT7mOBIvcUA9WCNip2+mYm4Na0tishHY6Bhx9TCF7sZ?= =?us-ascii?Q?iijNlx75DYciK4dnhPYmuV6XPO4Pv7ThJ7EVcz72o/40YoYn/TVWH7TDAoVV?= =?us-ascii?Q?r/sPh57HCWqTYVGZ9IMELruXuuQhM++YkEhDIqEQ8kWKMdFCiA05YjdLtpvR?= =?us-ascii?Q?qLxeR1O+eez0fACO/TIf7DMpgEdxLTnefX6pWo4RBkTdlzaoGsBe9XBhxhlQ?= =?us-ascii?Q?8kLYLbU9ZKIRWT8Ye+MAe67d681ztKDwuCoQnJW1LSLZXrwVy5rwzpAHuYfJ?= =?us-ascii?Q?hU0t+gLY18vO+BPsnL/SaYD5PD3tvm7KaxgZbcqmzNgTnjeVwtVvYEVOmUU7?= =?us-ascii?Q?lKttRzaq0qSsibNIGCLZuHuh7QKur/EzM5DRbXu/6sbxZ+eAC6kn7pocJnXM?= =?us-ascii?Q?wUN3bC/UOt2i5GTgdq/4XZ7eRBK14JYRB2+h5yfKpF8BcgHzm5XxJgPpQsA0?= =?us-ascii?Q?ro59W0EkWHp5Y86I02R+MubmjMyGw5qXnuOPG7/sLcRPcB70RfvAULw=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; SG2PR0601MB1887; 6:R8kIkVCcKsR98X/xtKsQayFHPiqrmT31EAaatSE9FIPFAHSfIbEsvD/2R1kKUzgo3odSGyFJ6MjKqpep5jlIXJeIgT86XCmGMYguihN6LVVGxWIFCUeRkaEoyiY7Nm1uSguEolXuAi9j8ndYre95Lj14YexFx29tOcYGVTszpNxt6OD2BkltD6DcGanJ5PHkgfzFNbfiYJ2WcXLc9EVGL+nDHCArjGhl+gq4Zid/u4x2GT2rVYFF6Uj91yWsim9WajsVmfpubVKgj0U/Ls8nJkzcCjqVp4MidGyUH85QupbOt6AplWH+Iv0DbswcWktTjcAkHgqYmOmNIeQ+FsJly/3KvA9YF5AybXEDXEAF5pU=; 5:Ocm8Sks/INTbtr6Up5ev+LzmY92c+7yc9/qn3bokciuZOZsBVCKjnr6x8rlkl5+hfIQwSatZyqfPKnMYVpQEJTIAjj8Hkj5Ms+dK99IekGyvlyToXymfmk+xvZaBrfmKwgj+rgJxmYZLIHrke+EHp0hibSPkJo6DWVoI/ukzCXA=; 24:dOpYbr5Q3Qduc0+gXLeQPWbJYJ9TQW4aWPxnozQLSrrshayc8uBYLfMR41KHjYITvGHJJrjGIb6EukkDzpOg3gKZPdpW4z3qaiAa42UcxvA=; 7:mGEtpiNttYaAR9EqhptCUPHooFQ2D/qwwMZtDm1y0g+sdbCIa81T3G6Tik4jvv1P8D7g1Z0P9NvLuEA9ru7/sBBnrK3WSdWv3OZpo2fKSld9UjU+1d8D8leMY1hp/5ciW1tEgNWxoc0EHBEaFmVM9CKOuHz3uQyk3ala8zL+r1P6nrhrE2j0w9F0e51T3vcXA4VnKgO3Ctp4Ep4KSjAdJGu434q1tIqTIoG71XSdKXBviY5k0/5GHS1rG/3zbg4n SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SG2PR0601MB1887; 20:dYFaYzJQUKhmaVv8nMYfcWTNTm8DBz4vydFVBU7dsnSPhTldZHBNqvf2EzyhlBdzs2nxm/HfA1347B3zmie+rI/ZXhubbXbkhr580ROw+neuA2HBfr1Qld2fQ//9m/1xDK1naYgxcbiD3Et6OUJ2Qk/CVMpcR0eOj8893doZl+c= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jan 2018 01:10:10.9710 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fd73b95f-107e-4a05-c56e-08d559593add X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-Transport-CrossTenantHeadersStamped: SG2PR0601MB1887 Cc: Linux-ALSA , Simon Subject: [alsa-devel] [PATCH 009/187] ASoC: wm8580: 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 -> .pmdown_time = 1 - -> .endianness = 1 - -> .non_legacy_dai_naming = 1 Signed-off-by: Kuninori Morimoto --- sound/soc/codecs/wm8580.c | 150 ++++++++++++++++++++++------------------------ 1 file changed, 71 insertions(+), 79 deletions(-) diff --git a/sound/soc/codecs/wm8580.c b/sound/soc/codecs/wm8580.c index 910801d..37b141e 100644 --- a/sound/soc/codecs/wm8580.c +++ b/sound/soc/codecs/wm8580.c @@ -262,8 +262,8 @@ static int wm8580_out_vu(struct snd_kcontrol *kcontrol, { struct soc_mixer_control *mc = (struct soc_mixer_control *)kcontrol->private_value; - struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); - struct wm8580_priv *wm8580 = snd_soc_codec_get_drvdata(codec); + struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); + struct wm8580_priv *wm8580 = snd_soc_component_get_drvdata(component); unsigned int reg = mc->reg; unsigned int reg2 = mc->rreg; int ret; @@ -279,8 +279,8 @@ static int wm8580_out_vu(struct snd_kcontrol *kcontrol, return ret; /* Now write again with the volume update bit set */ - snd_soc_update_bits(codec, reg, 0x100, 0x100); - snd_soc_update_bits(codec, reg2, 0x100, 0x100); + snd_soc_component_update_bits(component, reg, 0x100, 0x100); + snd_soc_component_update_bits(component, reg2, 0x100, 0x100); return 0; } @@ -465,8 +465,8 @@ static int wm8580_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id, int source, unsigned int freq_in, unsigned int freq_out) { int offset; - struct snd_soc_codec *codec = codec_dai->codec; - struct wm8580_priv *wm8580 = snd_soc_codec_get_drvdata(codec); + struct snd_soc_component *component = codec_dai->component; + struct wm8580_priv *wm8580 = snd_soc_component_get_drvdata(component); struct pll_state *state; struct _pll_div pll_div; unsigned int reg; @@ -505,25 +505,25 @@ static int wm8580_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id, /* Always disable the PLL - it is not safe to leave it running * while reprogramming it. */ - snd_soc_update_bits(codec, WM8580_PWRDN2, pwr_mask, pwr_mask); + snd_soc_component_update_bits(component, WM8580_PWRDN2, pwr_mask, pwr_mask); if (!freq_in || !freq_out) return 0; - snd_soc_write(codec, WM8580_PLLA1 + offset, pll_div.k & 0x1ff); - snd_soc_write(codec, WM8580_PLLA2 + offset, (pll_div.k >> 9) & 0x1ff); - snd_soc_write(codec, WM8580_PLLA3 + offset, + snd_soc_component_write(component, WM8580_PLLA1 + offset, pll_div.k & 0x1ff); + snd_soc_component_write(component, WM8580_PLLA2 + offset, (pll_div.k >> 9) & 0x1ff); + snd_soc_component_write(component, WM8580_PLLA3 + offset, (pll_div.k >> 18 & 0xf) | (pll_div.n << 4)); - reg = snd_soc_read(codec, WM8580_PLLA4 + offset); + reg = snd_soc_component_read32(component, WM8580_PLLA4 + offset); reg &= ~0x1b; reg |= pll_div.prescale | pll_div.postscale << 1 | pll_div.freqmode << 3; - snd_soc_write(codec, WM8580_PLLA4 + offset, reg); + snd_soc_component_write(component, WM8580_PLLA4 + offset, reg); /* All done, turn it on */ - snd_soc_update_bits(codec, WM8580_PWRDN2, pwr_mask, 0); + snd_soc_component_update_bits(component, WM8580_PWRDN2, pwr_mask, 0); return 0; } @@ -539,8 +539,8 @@ static int wm8580_paif_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 wm8580_priv *wm8580 = snd_soc_codec_get_drvdata(codec); + struct snd_soc_component *component = dai->component; + struct wm8580_priv *wm8580 = snd_soc_component_get_drvdata(component); u16 paifa = 0; u16 paifb = 0; int i, ratio, osr; @@ -572,12 +572,12 @@ static int wm8580_paif_hw_params(struct snd_pcm_substream *substream, if (ratio == wm8580_sysclk_ratios[i]) break; if (i == ARRAY_SIZE(wm8580_sysclk_ratios)) { - dev_err(codec->dev, "Invalid clock ratio %d/%d\n", + dev_err(component->dev, "Invalid clock ratio %d/%d\n", wm8580->sysclk[dai->driver->id], params_rate(params)); return -EINVAL; } paifa |= i; - dev_dbg(codec->dev, "Running at %dfs with %dHz clock\n", + dev_dbg(component->dev, "Running at %dfs with %dHz clock\n", wm8580_sysclk_ratios[i], wm8580->sysclk[dai->driver->id]); if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { @@ -585,21 +585,21 @@ static int wm8580_paif_hw_params(struct snd_pcm_substream *substream, case 128: case 192: osr = WM8580_DACOSR; - dev_dbg(codec->dev, "Selecting 64x OSR\n"); + dev_dbg(component->dev, "Selecting 64x OSR\n"); break; default: osr = 0; - dev_dbg(codec->dev, "Selecting 128x OSR\n"); + dev_dbg(component->dev, "Selecting 128x OSR\n"); break; } - snd_soc_update_bits(codec, WM8580_PAIF3, WM8580_DACOSR, osr); + snd_soc_component_update_bits(component, WM8580_PAIF3, WM8580_DACOSR, osr); } - snd_soc_update_bits(codec, WM8580_PAIF1 + dai->driver->id, + snd_soc_component_update_bits(component, WM8580_PAIF1 + dai->driver->id, WM8580_AIF_RATE_MASK | WM8580_AIF_BCLKSEL_MASK, paifa); - snd_soc_update_bits(codec, WM8580_PAIF3 + dai->driver->id, + snd_soc_component_update_bits(component, WM8580_PAIF3 + dai->driver->id, WM8580_AIF_LENGTH_MASK, paifb); return 0; } @@ -607,13 +607,13 @@ static int wm8580_paif_hw_params(struct snd_pcm_substream *substream, static int wm8580_set_paif_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; unsigned int aifa; unsigned int aifb; int can_invert_lrclk; - aifa = snd_soc_read(codec, WM8580_PAIF1 + codec_dai->driver->id); - aifb = snd_soc_read(codec, WM8580_PAIF3 + codec_dai->driver->id); + aifa = snd_soc_component_read32(component, WM8580_PAIF1 + codec_dai->driver->id); + aifb = snd_soc_component_read32(component, WM8580_PAIF3 + codec_dai->driver->id); aifb &= ~(WM8580_AIF_FMT_MASK | WM8580_AIF_LRP | WM8580_AIF_BCP); @@ -679,8 +679,8 @@ static int wm8580_set_paif_dai_fmt(struct snd_soc_dai *codec_dai, return -EINVAL; } - snd_soc_write(codec, WM8580_PAIF1 + codec_dai->driver->id, aifa); - snd_soc_write(codec, WM8580_PAIF3 + codec_dai->driver->id, aifb); + snd_soc_component_write(component, WM8580_PAIF1 + codec_dai->driver->id, aifa); + snd_soc_component_write(component, WM8580_PAIF3 + codec_dai->driver->id, aifb); return 0; } @@ -688,12 +688,12 @@ static int wm8580_set_paif_dai_fmt(struct snd_soc_dai *codec_dai, static int wm8580_set_dai_clkdiv(struct snd_soc_dai *codec_dai, int div_id, int div) { - struct snd_soc_codec *codec = codec_dai->codec; + struct snd_soc_component *component = codec_dai->component; unsigned int reg; switch (div_id) { case WM8580_MCLK: - reg = snd_soc_read(codec, WM8580_PLLB4); + reg = snd_soc_component_read32(component, WM8580_PLLB4); reg &= ~WM8580_PLLB4_MCLKOUTSRC_MASK; switch (div) { @@ -715,11 +715,11 @@ static int wm8580_set_dai_clkdiv(struct snd_soc_dai *codec_dai, default: return -EINVAL; } - snd_soc_write(codec, WM8580_PLLB4, reg); + snd_soc_component_write(component, WM8580_PLLB4, reg); break; case WM8580_CLKOUTSRC: - reg = snd_soc_read(codec, WM8580_PLLB4); + reg = snd_soc_component_read32(component, WM8580_PLLB4); reg &= ~WM8580_PLLB4_CLKOUTSRC_MASK; switch (div) { @@ -741,7 +741,7 @@ static int wm8580_set_dai_clkdiv(struct snd_soc_dai *codec_dai, default: return -EINVAL; } - snd_soc_write(codec, WM8580_PLLB4, reg); + snd_soc_component_write(component, WM8580_PLLB4, reg); break; default: @@ -754,8 +754,8 @@ static int wm8580_set_dai_clkdiv(struct snd_soc_dai *codec_dai, static int wm8580_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int freq, int dir) { - struct snd_soc_codec *codec = dai->codec; - struct wm8580_priv *wm8580 = snd_soc_codec_get_drvdata(codec); + struct snd_soc_component *component = dai->component; + struct wm8580_priv *wm8580 = snd_soc_component_get_drvdata(component); int ret, sel, sel_mask, sel_shift; switch (dai->driver->id) { @@ -790,14 +790,14 @@ static int wm8580_set_sysclk(struct snd_soc_dai *dai, int clk_id, sel = 3 << sel_shift; break; default: - dev_err(codec->dev, "Unknown clock %d\n", clk_id); + dev_err(component->dev, "Unknown clock %d\n", clk_id); return -EINVAL; } /* We really should validate PLL settings but not yet */ wm8580->sysclk[dai->driver->id] = freq; - ret = snd_soc_update_bits(codec, WM8580_CLKSEL, sel_mask, sel); + ret = snd_soc_component_update_bits(component, WM8580_CLKSEL, sel_mask, sel); if (ret < 0) return ret; @@ -806,22 +806,22 @@ static int wm8580_set_sysclk(struct snd_soc_dai *dai, int clk_id, static int wm8580_digital_mute(struct snd_soc_dai *codec_dai, int mute) { - struct snd_soc_codec *codec = codec_dai->codec; + struct snd_soc_component *component = codec_dai->component; unsigned int reg; - reg = snd_soc_read(codec, WM8580_DAC_CONTROL5); + reg = snd_soc_component_read32(component, WM8580_DAC_CONTROL5); if (mute) reg |= WM8580_DAC_CONTROL5_MUTEALL; else reg &= ~WM8580_DAC_CONTROL5_MUTEALL; - snd_soc_write(codec, WM8580_DAC_CONTROL5, reg); + snd_soc_component_write(component, WM8580_DAC_CONTROL5, reg); return 0; } -static int wm8580_set_bias_level(struct snd_soc_codec *codec, +static int wm8580_set_bias_level(struct snd_soc_component *component, enum snd_soc_bias_level level) { switch (level) { @@ -830,20 +830,20 @@ static int wm8580_set_bias_level(struct snd_soc_codec *codec, break; case SND_SOC_BIAS_STANDBY: - if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_OFF) { + if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF) { /* Power up and get individual control of the DACs */ - snd_soc_update_bits(codec, WM8580_PWRDN1, + snd_soc_component_update_bits(component, WM8580_PWRDN1, WM8580_PWRDN1_PWDN | WM8580_PWRDN1_ALLDACPD, 0); /* Make VMID high impedance */ - snd_soc_update_bits(codec, WM8580_ADC_CONTROL1, + snd_soc_component_update_bits(component, WM8580_ADC_CONTROL1, 0x100, 0); } break; case SND_SOC_BIAS_OFF: - snd_soc_update_bits(codec, WM8580_PWRDN1, + snd_soc_component_update_bits(component, WM8580_PWRDN1, WM8580_PWRDN1_PWDN, WM8580_PWRDN1_PWDN); break; } @@ -853,8 +853,8 @@ static int wm8580_set_bias_level(struct snd_soc_codec *codec, static int wm8580_playback_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { - struct snd_soc_codec *codec = dai->codec; - struct wm8580_priv *wm8580 = snd_soc_codec_get_drvdata(codec); + struct snd_soc_component *component = dai->component; + struct wm8580_priv *wm8580 = snd_soc_component_get_drvdata(component); return snd_pcm_hw_constraint_minmax(substream->runtime, SNDRV_PCM_HW_PARAM_CHANNELS, 1, wm8580->drvdata->num_dacs * 2); @@ -907,15 +907,15 @@ static int wm8580_playback_startup(struct snd_pcm_substream *substream, }, }; -static int wm8580_probe(struct snd_soc_codec *codec) +static int wm8580_probe(struct snd_soc_component *component) { - struct wm8580_priv *wm8580 = snd_soc_codec_get_drvdata(codec); - struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec); + struct wm8580_priv *wm8580 = snd_soc_component_get_drvdata(component); + struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component); int ret = 0; switch (wm8580->drvdata->num_dacs) { case 4: - snd_soc_add_codec_controls(codec, wm8581_snd_controls, + snd_soc_add_component_controls(component, wm8581_snd_controls, ARRAY_SIZE(wm8581_snd_controls)); snd_soc_dapm_new_controls(dapm, wm8581_dapm_widgets, ARRAY_SIZE(wm8581_dapm_widgets)); @@ -929,14 +929,14 @@ static int wm8580_probe(struct snd_soc_codec *codec) ret = regulator_bulk_enable(ARRAY_SIZE(wm8580->supplies), wm8580->supplies); if (ret != 0) { - dev_err(codec->dev, "Failed to enable supplies: %d\n", ret); + dev_err(component->dev, "Failed to enable supplies: %d\n", ret); goto err_regulator_get; } /* Get the codec into a known state */ - ret = snd_soc_write(codec, WM8580_RESET, 0); + ret = snd_soc_component_write(component, WM8580_RESET, 0); if (ret != 0) { - dev_err(codec->dev, "Failed to reset codec: %d\n", ret); + dev_err(component->dev, "Failed to reset component: %d\n", ret); goto err_regulator_enable; } @@ -949,28 +949,27 @@ static int wm8580_probe(struct snd_soc_codec *codec) } /* power down chip */ -static int wm8580_remove(struct snd_soc_codec *codec) +static void wm8580_remove(struct snd_soc_component *component) { - struct wm8580_priv *wm8580 = snd_soc_codec_get_drvdata(codec); + struct wm8580_priv *wm8580 = snd_soc_component_get_drvdata(component); regulator_bulk_disable(ARRAY_SIZE(wm8580->supplies), wm8580->supplies); - - return 0; } -static const struct snd_soc_codec_driver soc_codec_dev_wm8580 = { - .probe = wm8580_probe, - .remove = wm8580_remove, - .set_bias_level = wm8580_set_bias_level, - - .component_driver = { - .controls = wm8580_snd_controls, - .num_controls = ARRAY_SIZE(wm8580_snd_controls), - .dapm_widgets = wm8580_dapm_widgets, - .num_dapm_widgets = ARRAY_SIZE(wm8580_dapm_widgets), - .dapm_routes = wm8580_dapm_routes, - .num_dapm_routes = ARRAY_SIZE(wm8580_dapm_routes), - }, +static const struct snd_soc_component_driver soc_component_dev_wm8580 = { + .probe = wm8580_probe, + .remove = wm8580_remove, + .set_bias_level = wm8580_set_bias_level, + .controls = wm8580_snd_controls, + .num_controls = ARRAY_SIZE(wm8580_snd_controls), + .dapm_widgets = wm8580_dapm_widgets, + .num_dapm_widgets = ARRAY_SIZE(wm8580_dapm_widgets), + .dapm_routes = wm8580_dapm_routes, + .num_dapm_routes = ARRAY_SIZE(wm8580_dapm_routes), + .idle_bias_on = 1, + .pmdown_time = 1, + .endianness = 1, + .non_legacy_dai_naming = 1, }; static const struct regmap_config wm8580_regmap = { @@ -1037,18 +1036,12 @@ static int wm8580_i2c_probe(struct i2c_client *i2c, return -EINVAL; } - ret = snd_soc_register_codec(&i2c->dev, - &soc_codec_dev_wm8580, wm8580_dai, ARRAY_SIZE(wm8580_dai)); + ret = devm_snd_soc_register_component(&i2c->dev, + &soc_component_dev_wm8580, wm8580_dai, ARRAY_SIZE(wm8580_dai)); return ret; } -static int wm8580_i2c_remove(struct i2c_client *client) -{ - snd_soc_unregister_codec(&client->dev); - return 0; -} - static const struct i2c_device_id wm8580_i2c_id[] = { { "wm8580", (kernel_ulong_t)&wm8580_data }, { "wm8581", (kernel_ulong_t)&wm8581_data }, @@ -1062,7 +1055,6 @@ static int wm8580_i2c_remove(struct i2c_client *client) .of_match_table = wm8580_of_match, }, .probe = wm8580_i2c_probe, - .remove = wm8580_i2c_remove, .id_table = wm8580_i2c_id, };