From patchwork Tue Oct 30 07:46:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 10660515 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AF4FA14DE for ; Tue, 30 Oct 2018 07:46:20 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 95E9429132 for ; Tue, 30 Oct 2018 07:46:20 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 88AC9299D9; Tue, 30 Oct 2018 07:46:20 +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=-2.7 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_INVALID,DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham 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 EA15A29132 for ; Tue, 30 Oct 2018 07:46:18 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 13FFC26770D; Tue, 30 Oct 2018 08:46:17 +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 7AB4A2677D0; Tue, 30 Oct 2018 08:46:14 +0100 (CET) Received: from JPN01-TY1-obe.outbound.protection.outlook.com (mail-ty1jpn01on0125.outbound.protection.outlook.com [104.47.93.125]) by alsa0.perex.cz (Postfix) with ESMTP id 4327E267692 for ; Tue, 30 Oct 2018 08:46:10 +0100 (CET) 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:X-MS-Exchange-SenderADCheck; bh=A/oeLggjDvzTPmntpSQTQyPSJWBi+VwgTa3xr/kTiDg=; b=Q4MzH8jB17EzI+hJG9gVT+e0DZXPOx354GJBYDJiR8ZAbx62PFFlvG/XZkT60HYtJkT9XnlOedWwxSGTJS2oJvMCENTcAkrQdHuTcFkTG0R2r+e577E5cNdsIynvygIkqqAySYV4q+owLY+A+6AHPsxGHwVm4JQAX5tArlgbs7U= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=kuninori.morimoto.gx@renesas.com; Received: from morimoto-PC.renesas.com (211.11.155.130) by OSAPR01MB3316.jpnprd01.prod.outlook.com (2603:1096:604:52::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1250.20; Tue, 30 Oct 2018 07:46:05 +0000 Message-ID: <87efc7sx53.wl-kuninori.morimoto.gx@renesas.com> From: Kuninori Morimoto User-Agent: Wanderlust/2.15.9 Emacs/24.5 Mule/6.0 To: Mark Brown In-Reply-To: <87ftwnsx93.wl-kuninori.morimoto.gx@renesas.com> References: <87ftwnsx93.wl-kuninori.morimoto.gx@renesas.com> MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Date: Tue, 30 Oct 2018 07:46:05 +0000 X-Originating-IP: [211.11.155.130] X-ClientProxiedBy: TY2PR02CA0048.apcprd02.prod.outlook.com (2603:1096:404:a6::36) To OSAPR01MB3316.jpnprd01.prod.outlook.com (2603:1096:604:52::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 04258295-a7af-40e1-af74-08d63e3bbf97 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:OSAPR01MB3316; X-Microsoft-Exchange-Diagnostics: 1; OSAPR01MB3316; 3:foF3Re03jwJ8wtfRTUgXOKx1gsvcWs2kQkdYl0GVKGeOPlxz8Bn3LltV8ShVQo+ILAWzqwxxZgESaZydf4F+A0FHk467t9jjHhOifhkHRsU5bPQq++vQGem8nUG8Sc/BqVRTFPcMUYejIpbEz6CkielceO6gKuuvxy8Ous77D9HBYkHYrwZUWDyLZYEjRIJfAEs3Yjl4ePW7Qgc9/48r5QRb25coLlNlvb4FfPJKIwKqAp8aZPPQ9FN1rMhskffi; 25:JdwAvHknRpSH0UfZswws7Zd7YlYJNAHV3Q51TwnaJ40HoaMFNcY3xTTzl5pIldh1a1AFzlLsr6bG0zrWzmtdKbHbAworvXzzdCX+e+5BjvCRCiQXZw0GuYKvwrX0VRqSg60WkiuAiv/yG/X5HEiKtOhYZGfgKsPBcDO+5+AAYMAcoAgS0Rszc/1TkXqgXLkmf49aVmDYH1anJb0qQf3qdOc52pMvKHxOG8NPC1UqTL8Z0lHbI1sAUDJR7Y/9vlO/pf98zxpLu1xey2iF2qN4TSe2kU7aKIaNzjGhR7cZGg9tJL0/c+uBWpLUTheaqsyCI4bIf0FldrvcJtBJ7hnkcA==; 31:f0MPeylHQ8AN++yhLoa3TTL0F0pDr7ckojQL4cSyGVRbLB/b1sHWPwzCWroE6bsnB1d+UIFlnMWufgKwKqT8vi9+//fUSHXqGZ9BsYTjFk+72adZmPaKjAVfSt/to7bSSNTeYzPJqGvYzPHMqOHid/7vjGkAjy4jgp/kaREyfUJULbM7MYb25q8DoP1Z1bHRIb60MjYwzV00uzUQ/4fPGxJrmxMFwEinbuZCxhxz51g= X-MS-TrafficTypeDiagnostic: OSAPR01MB3316: X-Microsoft-Exchange-Diagnostics: 1; OSAPR01MB3316; 20:uPK1vna3nlBYA1lmWM5T3M8BBPHSxd/GLelSOOfr4pk09Cpna7F50fgzRSzj/VaHmkKlQdxpFAscx16+hdP8i1SSHh9+/1vgRR5EyPm3QSieQfMbRGxS21pR+uyD24delgYyGiDhMMtu+IttqN+vbHSoTYMh7PLdc7J4NkN4Ljtx+XUiTSlLf1FXsudkVmDrSw9JmWhAwAPa7Bex7ZLApoYhpVG66I5/hwL0HZcjdKl/bNodpqSUsnLwIGh6fd2LEwpIF58sMf+SwEDMlHAHeB/qtouCc6KGPmcXBoT8lmMNXI+AlnCkUhA4fjJ25uTEWhSxTi2G33We8MurCqONj/zGHtZXOxjfV7VdZCfZGx5HqBXAaikkMB+eZE0RKU7i/vmL2NFNvLPq6W60g37E3g6w85FVbKBHVwOf/Ohj7tDDCdfd0mQj5qZpUXlvpqH6v7d+A9mQQ1w4UAkCgpDYOiBdabx4dQ3+ptFonqIyjROVb0ajyFThAUhTxTFEnu5M; 4:VMJ/NOs7ok2Gg01yTGL8XL1NFnz2cusqIunlAXln7GJABg+/bFMZwpcixrHzYKn/UQwlnQmelLNZJK59ikbW4vKhLAcqzzKaQVbtuOJwLtZJkTFmaIxzmniDzgGHRWwFkiqcPNZR5y5y+fvMHR6f5FU9vMxymNMMnj2G5oAqdD9yegmgUdVeLI1UXWTst8EjPBYBZGmilxloxx/wFq3F5hCmmW8/y9RjNUstr4d+ljSy/n+nBMA3jS9QZYxlKDPfDfoJRAtggBqNpYn3O+v9hA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231382)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(6055026)(148016)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123560045)(20161123564045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:OSAPR01MB3316; BCL:0; PCL:0; RULEID:; SRVR:OSAPR01MB3316; X-Forefront-PRVS: 08417837C5 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(366004)(39860400002)(376002)(136003)(346002)(396003)(199004)(189003)(66066001)(68736007)(386003)(4744004)(97736004)(76176011)(105586002)(52116002)(7696005)(16526019)(4326008)(106356001)(186003)(53416004)(81156014)(50466002)(5024004)(14444005)(26005)(6486002)(81166006)(8676002)(316002)(8936002)(5660300001)(305945005)(2906002)(486006)(53936002)(86362001)(575784001)(69596002)(6116002)(3846002)(446003)(7736002)(11346002)(16586007)(23726003)(58126008)(25786009)(956004)(47776003)(2616005)(476003)(6916009)(478600001)(36756003)(142923001)(16060500001); DIR:OUT; SFP:1102; SCL:1; SRVR:OSAPR01MB3316; H:morimoto-PC.renesas.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: renesas.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; OSAPR01MB3316; 23:thXVj3hQ/O3A/IPoA3i+wXqYemaljjcJ7IUbObvXG?= qIxtB5lJkN64GlLUNiDbMeNJAqdi58KkYEkSd/evPsQZoxhqWAMmYiaPWW/PDf2b0q+qJSOQKnffEf+E54fQDbt+ZZhMMZm0nUAxacUwLUwNR8pD1oz/l7TDnTSvcxplVo3NEVrbmstFe5ga+Z00VfoAr0jkXrfyXudRs3VZodUgPgpv2PzfRCZ8ERW6W4y8ac1lFqdVBRvGJwKlYr6AHav4RrMkFx3A9xo6r/ZsO0qfaMj1lhLUmNsWYZ6I9WcTrEKAtsKujYJDTcht7wcYjtAv3JaXPmNarxP6UjOMJi5FDUmhWBKkKt1AB/otXHJA3p/Edc/wXiNcHEwnBrFkNG3sJXhQkQd+d6JloLBWc6HEPRsHNCw5LG9XFN8a54TBsEFeLo2v9ZYIkklUOiCA9FSFsFM7XslWlzJzJDxBN/298Z3Td3FREiRevKOV0RcoaC9o7ZkPmahvjGOeD+jv5CNOGbu2t1uIQNy9V7/9e8t9vgEOMIbfjpjQcjhPTgba10NgYyH17JNHljYOWShYGVMD5sHV1QLczn3/k/7NREvr46ii/DGbHT9klrcBXex/g80mYfTo3p2X7IM30R+lBWPpDnZZQAzx9FhG2frn/MZTGApZFv5rMbp1lCvAFeO8i9SCmXM/Rlmxz/tMcR3IzhcPT1XGMt0jvrsjZ8AHwc0aOQXnbG4FcOHOceabwcBgCasMF9MnweFF4x0qxwi5hBPMBKvVq+8pP3Wb9iZ8gJGVD7csNDEw5ehBfm3PQGSKBN+WPzZfpimEI3RaIrdopGsHvfhGALmr2VhJa8+7l50HsQu7oHNRnZ6Hg6+y5U2jX23Oru2MR9TElBhSzNVEn978DJA8kgs+RHNkMBGSb50YjALDnsFMDM/icwilYRNRcWnJp99fUvteyFPQQieHltWLrLRzOzRhu2Zx0SL/lCpMM3fxToI8v0j96B/a2uolULeOBYKbI/cSqCGGr5p2nfdz1mh04G6NQ9M0WyOudVHOI2OIbFnaz0IRxLXxMslJzq9roIQ1MLxi2D+hl0wmQp/HWn3V5PzSHd0Yo+rc6h/EtgiLaCzWUFB63i5wvkKSxbxi/NzBQT/2kk3ZLW/rpvaUCL1zNyKg3X7gCudQ5FwIDLsDTNtgGONVEF8GxypK7uCNgNXYichvO2SsXXxG9ONw7eQLuAgJr3ecgCXuYRCqI4oNLvjhlm1udbs7NSGwdfGZsWlgNQj/V5WG78f8NRL X-Microsoft-Antispam-Message-Info: J6XenQKq4o4onaXECFW0zWt3czZ8V+Eo4KevAhDJyqwt+Mi81sajQ5VHAPtFPG4PH9nIkBuVds8Ky4q+aQ3RgZLdhfN/ZZK+5DX8JUMcYRxwzqn8MtSnDa9TjZdaTw/cgV31sqhn+ehtsq8ohJ5kkSAtRy6+tyhrWmWV7Q3W9j4e53T30Y3OxZdz55phz+RLZ/9sXGPhbnCGMWIf2IY3TKv1GHYEsQCfxlxR7rHt1SrWi6XPuhJxjt9SERneN7WAUJig2GngVeqCdgpXwSU6cQmwRYOnrRdVgB2VD4ZKv88YRCMhV+NvdpvlgpP4MTizCv9d+otKDgBtPCM68eQS9N7cCH7kLb6i/WjgjiZrY44= X-Microsoft-Exchange-Diagnostics: 1; OSAPR01MB3316; 6:QGEYwFBfDcHhmyR9QL3A3PYKN34AS0aoJIuv7QoWXhskc8NVwACuDNYXqNzm94arXna8AMvAAMSpPUOMfAUGzhadlE6/gKCtgE5UiyDwlWA757tSPPO0qDbel/IUyPO6eg4rXtivWTswTzcVegKJtJzAxJIPG3UUkAkprpypLs/7XU9uuGU6dAOdwl3HL4fNdDsGtNCjEcRuMzxCPi8Oifv4KDhD7i7AOLCPB9HXedgZCP8QX6L6QWjqwWgFCIhj0wn53MBDKYd3TSRFfbVY4/sC+W2tWwehBn+6oUK88gNBjGIrNopyjgDvKvy4H1uxhoRVdal/zild5JmuwqzTOk93MbaaBKpB5jMhw9BDhoM5tSMz8j7be1yS8/blTCHE5pRbhEGzebAjREpGKwjpR295Uc5+etEhx9/GkYZ+kJdKF7xY1yCHoaBPHEDS4ju8R/CBaEZcIyJOfRiWkGfx2w==; 5:aCJo8pj4XqcEsy7b79xsNJSs1QIz3JTmZ4u17JYO6E7uzIG1S1qY6zhBWB1rIqtiAmZQqecWbrsClMdIqq/K5KBrXXZ9DxNqlFa+JWiZgBKNUJtUlGXsqSJTGhoJzbIfJbxdxEeTpLamIlmrTag0tVNszm6FW+aTYK0JE/aCfy4=; 7:r4pxjDoCjW6C2hJFkbUToCFjcWp0bB91E65VE4hwOKLU8m74mcyE3W35cutFUw+EU+lYItFVSls/jubUXGQWCoi5luSMe/lZAKJ/3WGLO04rwTHwGuxiMVvT87eijVG1IKOp1eHl9GETbMN6YwVaU3UQM+TZkGgLRJfSI9nw+mun8Tw4I0lzWrWThy5y8SgcjJ+ELJvptprgvX9Yp/IunU4sSI9oW97olOwNXA1mrh0Pc6jgsB0I2S8s8GAH9rkI SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; OSAPR01MB3316; 20:QoDKLAAUBdYUdFZLRtKN8OQPRXogGmE/yA33H0W+emXCUyH+lanxToYSvKla1nCr7isxxUZgXZEO1mnFMI7REv/IB4DCXmNlwAWGgsSupNaIn9EOv4edFeudt+7dLNr0QuuEiVQy0f5UA07++6/8LGedJ+RE2DNuEWOvxkYpTH0= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Oct 2018 07:46:05.7145 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 04258295-a7af-40e1-af74-08d63e3bbf97 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSAPR01MB3316 Cc: Linux-ALSA Subject: [alsa-devel] [PATCH 1/3] ASoC: rsnd: move .get_status under rsnd_mod_ops 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 Each mod needs to have .get_status, but current driver is handling it under rsnd_mod, instead of rsnd_mod_ops. It is not any make sence. This patch moves it to rsnd_mod_ops, and tidyup its parameter order to align to other callback functions. Signed-off-by: Kuninori Morimoto --- sound/soc/sh/rcar/adg.c | 2 +- sound/soc/sh/rcar/cmd.c | 11 +++-- sound/soc/sh/rcar/core.c | 10 ++-- sound/soc/sh/rcar/ctu.c | 3 +- sound/soc/sh/rcar/dma.c | 26 +++++----- sound/soc/sh/rcar/dvc.c | 3 +- sound/soc/sh/rcar/mix.c | 3 +- sound/soc/sh/rcar/rsnd.h | 13 ++--- sound/soc/sh/rcar/src.c | 24 ++++----- sound/soc/sh/rcar/ssi.c | 124 ++++++++++++++++++++++++----------------------- sound/soc/sh/rcar/ssiu.c | 37 +++++++------- 11 files changed, 129 insertions(+), 127 deletions(-) diff --git a/sound/soc/sh/rcar/adg.c b/sound/soc/sh/rcar/adg.c index 28327dd..6768a66 100644 --- a/sound/soc/sh/rcar/adg.c +++ b/sound/soc/sh/rcar/adg.c @@ -613,7 +613,7 @@ int rsnd_adg_probe(struct rsnd_priv *priv) return -ENOMEM; ret = rsnd_mod_init(priv, &adg->mod, &adg_ops, - NULL, NULL, 0, 0); + NULL, 0, 0); if (ret) return ret; diff --git a/sound/soc/sh/rcar/cmd.c b/sound/soc/sh/rcar/cmd.c index cc191cd..e6bb6a9 100644 --- a/sound/soc/sh/rcar/cmd.c +++ b/sound/soc/sh/rcar/cmd.c @@ -116,10 +116,11 @@ static int rsnd_cmd_stop(struct rsnd_mod *mod, } static struct rsnd_mod_ops rsnd_cmd_ops = { - .name = CMD_NAME, - .init = rsnd_cmd_init, - .start = rsnd_cmd_start, - .stop = rsnd_cmd_stop, + .name = CMD_NAME, + .init = rsnd_cmd_init, + .start = rsnd_cmd_start, + .stop = rsnd_cmd_stop, + .get_status = rsnd_mod_get_status, }; static struct rsnd_mod *rsnd_cmd_mod_get(struct rsnd_priv *priv, int id) @@ -162,7 +163,7 @@ int rsnd_cmd_probe(struct rsnd_priv *priv) for_each_rsnd_cmd(cmd, priv, i) { ret = rsnd_mod_init(priv, rsnd_mod_get(cmd), &rsnd_cmd_ops, NULL, - rsnd_mod_get_status, RSND_MOD_CMD, i); + RSND_MOD_CMD, i); if (ret) return ret; } diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c index f930f51..5373eba 100644 --- a/sound/soc/sh/rcar/core.c +++ b/sound/soc/sh/rcar/core.c @@ -137,8 +137,8 @@ struct dma_chan *rsnd_mod_dma_req(struct rsnd_dai_stream *io, return mod->ops->dma_req(io, mod); } -u32 *rsnd_mod_get_status(struct rsnd_dai_stream *io, - struct rsnd_mod *mod, +u32 *rsnd_mod_get_status(struct rsnd_mod *mod, + struct rsnd_dai_stream *io, enum rsnd_mod_type type) { return &mod->status; @@ -148,9 +148,6 @@ int rsnd_mod_init(struct rsnd_priv *priv, struct rsnd_mod *mod, struct rsnd_mod_ops *ops, struct clk *clk, - u32* (*get_status)(struct rsnd_dai_stream *io, - struct rsnd_mod *mod, - enum rsnd_mod_type type), enum rsnd_mod_type type, int id) { @@ -164,7 +161,6 @@ int rsnd_mod_init(struct rsnd_priv *priv, mod->type = type; mod->clk = clk; mod->priv = priv; - mod->get_status = get_status; return ret; } @@ -472,7 +468,7 @@ static int rsnd_status_update(u32 *status, enum rsnd_mod_type *types = rsnd_mod_sequence[is_play]; \ for_each_rsnd_mod_arrays(i, mod, io, types, RSND_MOD_MAX) { \ int tmp = 0; \ - u32 *status = mod->get_status(io, mod, types[i]); \ + u32 *status = mod->ops->get_status(mod, io, types[i]); \ int func_call = rsnd_status_update(status, \ __rsnd_mod_shift_##fn, \ __rsnd_mod_add_##fn, \ diff --git a/sound/soc/sh/rcar/ctu.c b/sound/soc/sh/rcar/ctu.c index ad70237..2805847 100644 --- a/sound/soc/sh/rcar/ctu.c +++ b/sound/soc/sh/rcar/ctu.c @@ -341,6 +341,7 @@ static struct rsnd_mod_ops rsnd_ctu_ops = { .quit = rsnd_ctu_quit, .hw_params = rsnd_ctu_hw_params, .pcm_new = rsnd_ctu_pcm_new, + .get_status = rsnd_mod_get_status, }; struct rsnd_mod *rsnd_ctu_mod_get(struct rsnd_priv *priv, int id) @@ -404,7 +405,7 @@ int rsnd_ctu_probe(struct rsnd_priv *priv) } ret = rsnd_mod_init(priv, rsnd_mod_get(ctu), &rsnd_ctu_ops, - clk, rsnd_mod_get_status, RSND_MOD_CTU, i); + clk, RSND_MOD_CTU, i); if (ret) { of_node_put(np); goto rsnd_ctu_probe_done; diff --git a/sound/soc/sh/rcar/dma.c b/sound/soc/sh/rcar/dma.c index 6d19475..e5c30ee 100644 --- a/sound/soc/sh/rcar/dma.c +++ b/sound/soc/sh/rcar/dma.c @@ -289,12 +289,13 @@ static int rsnd_dmaen_pointer(struct rsnd_mod *mod, } static struct rsnd_mod_ops rsnd_dmaen_ops = { - .name = "audmac", - .prepare = rsnd_dmaen_prepare, - .cleanup = rsnd_dmaen_cleanup, - .start = rsnd_dmaen_start, - .stop = rsnd_dmaen_stop, - .pointer= rsnd_dmaen_pointer, + .name = "audmac", + .prepare = rsnd_dmaen_prepare, + .cleanup = rsnd_dmaen_cleanup, + .start = rsnd_dmaen_start, + .stop = rsnd_dmaen_stop, + .pointer = rsnd_dmaen_pointer, + .get_status = rsnd_mod_get_status, }; /* @@ -477,10 +478,11 @@ static int rsnd_dmapp_attach(struct rsnd_dai_stream *io, } static struct rsnd_mod_ops rsnd_dmapp_ops = { - .name = "audmac-pp", - .start = rsnd_dmapp_start, - .stop = rsnd_dmapp_stop, - .quit = rsnd_dmapp_stop, + .name = "audmac-pp", + .start = rsnd_dmapp_start, + .stop = rsnd_dmapp_stop, + .quit = rsnd_dmapp_stop, + .get_status = rsnd_mod_get_status, }; /* @@ -756,7 +758,7 @@ static int rsnd_dma_alloc(struct rsnd_dai_stream *io, struct rsnd_mod *mod, *dma_mod = rsnd_mod_get(dma); ret = rsnd_mod_init(priv, *dma_mod, ops, NULL, - rsnd_mod_get_status, type, dma_id); + type, dma_id); if (ret < 0) return ret; @@ -823,5 +825,5 @@ int rsnd_dma_probe(struct rsnd_priv *priv) priv->dma = dmac; /* dummy mem mod for debug */ - return rsnd_mod_init(NULL, &mem, &mem_ops, NULL, NULL, 0, 0); + return rsnd_mod_init(NULL, &mem, &mem_ops, NULL, 0, 0); } diff --git a/sound/soc/sh/rcar/dvc.c b/sound/soc/sh/rcar/dvc.c index 2b16e0c..d65f24b 100644 --- a/sound/soc/sh/rcar/dvc.c +++ b/sound/soc/sh/rcar/dvc.c @@ -306,6 +306,7 @@ static struct rsnd_mod_ops rsnd_dvc_ops = { .init = rsnd_dvc_init, .quit = rsnd_dvc_quit, .pcm_new = rsnd_dvc_pcm_new, + .get_status = rsnd_mod_get_status, }; struct rsnd_mod *rsnd_dvc_mod_get(struct rsnd_priv *priv, int id) @@ -365,7 +366,7 @@ int rsnd_dvc_probe(struct rsnd_priv *priv) } ret = rsnd_mod_init(priv, rsnd_mod_get(dvc), &rsnd_dvc_ops, - clk, rsnd_mod_get_status, RSND_MOD_DVC, i); + clk, RSND_MOD_DVC, i); if (ret) { of_node_put(np); goto rsnd_dvc_probe_done; diff --git a/sound/soc/sh/rcar/mix.c b/sound/soc/sh/rcar/mix.c index 8e3b57e..a3e0370 100644 --- a/sound/soc/sh/rcar/mix.c +++ b/sound/soc/sh/rcar/mix.c @@ -256,6 +256,7 @@ static struct rsnd_mod_ops rsnd_mix_ops = { .init = rsnd_mix_init, .quit = rsnd_mix_quit, .pcm_new = rsnd_mix_pcm_new, + .get_status = rsnd_mod_get_status, }; struct rsnd_mod *rsnd_mix_mod_get(struct rsnd_priv *priv, int id) @@ -315,7 +316,7 @@ int rsnd_mix_probe(struct rsnd_priv *priv) } ret = rsnd_mod_init(priv, rsnd_mod_get(mix), &rsnd_mix_ops, - clk, rsnd_mod_get_status, RSND_MOD_MIX, i); + clk, RSND_MOD_MIX, i); if (ret) { of_node_put(np); goto rsnd_mix_probe_done; diff --git a/sound/soc/sh/rcar/rsnd.h b/sound/soc/sh/rcar/rsnd.h index 4464d1d..d25fb5c 100644 --- a/sound/soc/sh/rcar/rsnd.h +++ b/sound/soc/sh/rcar/rsnd.h @@ -301,6 +301,9 @@ struct rsnd_mod_ops { int (*cleanup)(struct rsnd_mod *mod, struct rsnd_dai_stream *io, struct rsnd_priv *priv); + u32 *(*get_status)(struct rsnd_mod *mod, + struct rsnd_dai_stream *io, + enum rsnd_mod_type type); }; struct rsnd_dai_stream; @@ -310,9 +313,6 @@ struct rsnd_mod { struct rsnd_mod_ops *ops; struct rsnd_priv *priv; struct clk *clk; - u32 *(*get_status)(struct rsnd_dai_stream *io, - struct rsnd_mod *mod, - enum rsnd_mod_type type); u32 status; }; /* @@ -385,9 +385,6 @@ int rsnd_mod_init(struct rsnd_priv *priv, struct rsnd_mod *mod, struct rsnd_mod_ops *ops, struct clk *clk, - u32* (*get_status)(struct rsnd_dai_stream *io, - struct rsnd_mod *mod, - enum rsnd_mod_type type), enum rsnd_mod_type type, int id); void rsnd_mod_quit(struct rsnd_mod *mod); @@ -396,8 +393,8 @@ struct dma_chan *rsnd_mod_dma_req(struct rsnd_dai_stream *io, void rsnd_mod_interrupt(struct rsnd_mod *mod, void (*callback)(struct rsnd_mod *mod, struct rsnd_dai_stream *io)); -u32 *rsnd_mod_get_status(struct rsnd_dai_stream *io, - struct rsnd_mod *mod, +u32 *rsnd_mod_get_status(struct rsnd_mod *mod, + struct rsnd_dai_stream *io, enum rsnd_mod_type type); struct rsnd_mod *rsnd_mod_next(int *iterator, struct rsnd_dai_stream *io, diff --git a/sound/soc/sh/rcar/src.c b/sound/soc/sh/rcar/src.c index cd38a43..7de7afd 100644 --- a/sound/soc/sh/rcar/src.c +++ b/sound/soc/sh/rcar/src.c @@ -527,16 +527,17 @@ static int rsnd_src_pcm_new(struct rsnd_mod *mod, } static struct rsnd_mod_ops rsnd_src_ops = { - .name = SRC_NAME, - .dma_req = rsnd_src_dma_req, - .probe = rsnd_src_probe_, - .init = rsnd_src_init, - .quit = rsnd_src_quit, - .start = rsnd_src_start, - .stop = rsnd_src_stop, - .irq = rsnd_src_irq, - .hw_params = rsnd_src_hw_params, - .pcm_new = rsnd_src_pcm_new, + .name = SRC_NAME, + .dma_req = rsnd_src_dma_req, + .probe = rsnd_src_probe_, + .init = rsnd_src_init, + .quit = rsnd_src_quit, + .start = rsnd_src_start, + .stop = rsnd_src_stop, + .irq = rsnd_src_irq, + .hw_params = rsnd_src_hw_params, + .pcm_new = rsnd_src_pcm_new, + .get_status = rsnd_mod_get_status, }; struct rsnd_mod *rsnd_src_mod_get(struct rsnd_priv *priv, int id) @@ -605,8 +606,7 @@ int rsnd_src_probe(struct rsnd_priv *priv) } ret = rsnd_mod_init(priv, rsnd_mod_get(src), - &rsnd_src_ops, clk, rsnd_mod_get_status, - RSND_MOD_SRC, i); + &rsnd_src_ops, clk, RSND_MOD_SRC, i); if (ret) { of_node_put(np); goto rsnd_src_probe_done; diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c index fcb4df2..cb66986 100644 --- a/sound/soc/sh/rcar/ssi.c +++ b/sound/soc/sh/rcar/ssi.c @@ -681,6 +681,41 @@ static irqreturn_t rsnd_ssi_interrupt(int irq, void *data) return IRQ_HANDLED; } +static u32 *rsnd_ssi_get_status(struct rsnd_mod *mod, + struct rsnd_dai_stream *io, + enum rsnd_mod_type type) +{ + /* + * SSIP (= SSI parent) needs to be special, otherwise, + * 2nd SSI might doesn't start. see also rsnd_mod_call() + * + * We can't include parent SSI status on SSI, because we don't know + * how many SSI requests parent SSI. Thus, it is localed on "io" now. + * ex) trouble case + * Playback: SSI0 + * Capture : SSI1 (needs SSI0) + * + * 1) start Capture -> SSI0/SSI1 are started. + * 2) start Playback -> SSI0 doesn't work, because it is already + * marked as "started" on 1) + * + * OTOH, using each mod's status is good for MUX case. + * It doesn't need to start in 2nd start + * ex) + * IO-0: SRC0 -> CTU1 -+-> MUX -> DVC -> SSIU -> SSI0 + * | + * IO-1: SRC1 -> CTU2 -+ + * + * 1) start IO-0 -> start SSI0 + * 2) start IO-1 -> SSI0 doesn't need to start, because it is + * already started on 1) + */ + if (type == RSND_MOD_SSIP) + return &io->parent_ssi_status; + + return rsnd_mod_get_status(mod, io, type); +} + /* * SSI PIO */ @@ -876,18 +911,19 @@ static int rsnd_ssi_prepare(struct rsnd_mod *mod, } static struct rsnd_mod_ops rsnd_ssi_pio_ops = { - .name = SSI_NAME, - .probe = rsnd_ssi_common_probe, - .remove = rsnd_ssi_common_remove, - .init = rsnd_ssi_pio_init, - .quit = rsnd_ssi_quit, - .start = rsnd_ssi_start, - .stop = rsnd_ssi_stop, - .irq = rsnd_ssi_irq, - .pointer = rsnd_ssi_pio_pointer, - .pcm_new = rsnd_ssi_pcm_new, - .hw_params = rsnd_ssi_hw_params, - .prepare = rsnd_ssi_prepare, + .name = SSI_NAME, + .probe = rsnd_ssi_common_probe, + .remove = rsnd_ssi_common_remove, + .init = rsnd_ssi_pio_init, + .quit = rsnd_ssi_quit, + .start = rsnd_ssi_start, + .stop = rsnd_ssi_stop, + .irq = rsnd_ssi_irq, + .pointer = rsnd_ssi_pio_pointer, + .pcm_new = rsnd_ssi_pcm_new, + .hw_params = rsnd_ssi_hw_params, + .prepare = rsnd_ssi_prepare, + .get_status = rsnd_ssi_get_status, }; static int rsnd_ssi_dma_probe(struct rsnd_mod *mod, @@ -951,19 +987,20 @@ static struct dma_chan *rsnd_ssi_dma_req(struct rsnd_dai_stream *io, } static struct rsnd_mod_ops rsnd_ssi_dma_ops = { - .name = SSI_NAME, - .dma_req = rsnd_ssi_dma_req, - .probe = rsnd_ssi_dma_probe, - .remove = rsnd_ssi_common_remove, - .init = rsnd_ssi_init, - .quit = rsnd_ssi_quit, - .start = rsnd_ssi_start, - .stop = rsnd_ssi_stop, - .irq = rsnd_ssi_irq, - .pcm_new = rsnd_ssi_pcm_new, - .fallback = rsnd_ssi_fallback, - .hw_params = rsnd_ssi_hw_params, - .prepare = rsnd_ssi_prepare, + .name = SSI_NAME, + .dma_req = rsnd_ssi_dma_req, + .probe = rsnd_ssi_dma_probe, + .remove = rsnd_ssi_common_remove, + .init = rsnd_ssi_init, + .quit = rsnd_ssi_quit, + .start = rsnd_ssi_start, + .stop = rsnd_ssi_stop, + .irq = rsnd_ssi_irq, + .pcm_new = rsnd_ssi_pcm_new, + .fallback = rsnd_ssi_fallback, + .hw_params = rsnd_ssi_hw_params, + .prepare = rsnd_ssi_prepare, + .get_status = rsnd_ssi_get_status, }; int rsnd_ssi_is_dma_mode(struct rsnd_mod *mod) @@ -1091,41 +1128,6 @@ int __rsnd_ssi_is_pin_sharing(struct rsnd_mod *mod) return !!(rsnd_flags_has(rsnd_mod_to_ssi(mod), RSND_SSI_CLK_PIN_SHARE)); } -static u32 *rsnd_ssi_get_status(struct rsnd_dai_stream *io, - struct rsnd_mod *mod, - enum rsnd_mod_type type) -{ - /* - * SSIP (= SSI parent) needs to be special, otherwise, - * 2nd SSI might doesn't start. see also rsnd_mod_call() - * - * We can't include parent SSI status on SSI, because we don't know - * how many SSI requests parent SSI. Thus, it is localed on "io" now. - * ex) trouble case - * Playback: SSI0 - * Capture : SSI1 (needs SSI0) - * - * 1) start Capture -> SSI0/SSI1 are started. - * 2) start Playback -> SSI0 doesn't work, because it is already - * marked as "started" on 1) - * - * OTOH, using each mod's status is good for MUX case. - * It doesn't need to start in 2nd start - * ex) - * IO-0: SRC0 -> CTU1 -+-> MUX -> DVC -> SSIU -> SSI0 - * | - * IO-1: SRC1 -> CTU2 -+ - * - * 1) start IO-0 -> start SSI0 - * 2) start IO-1 -> SSI0 doesn't need to start, because it is - * already started on 1) - */ - if (type == RSND_MOD_SSIP) - return &io->parent_ssi_status; - - return rsnd_mod_get_status(io, mod, type); -} - int rsnd_ssi_probe(struct rsnd_priv *priv) { struct device_node *node; @@ -1192,7 +1194,7 @@ int rsnd_ssi_probe(struct rsnd_priv *priv) ops = &rsnd_ssi_dma_ops; ret = rsnd_mod_init(priv, rsnd_mod_get(ssi), ops, clk, - rsnd_ssi_get_status, RSND_MOD_SSI, i); + RSND_MOD_SSI, i); if (ret) { of_node_put(np); goto rsnd_ssi_probe_done; diff --git a/sound/soc/sh/rcar/ssiu.c b/sound/soc/sh/rcar/ssiu.c index 39b6764..ebcb826 100644 --- a/sound/soc/sh/rcar/ssiu.c +++ b/sound/soc/sh/rcar/ssiu.c @@ -22,6 +22,16 @@ struct rsnd_ssiu { ((pos) = ((struct rsnd_ssiu *)(priv)->ssiu + i)); \ i++) +static u32 *rsnd_ssiu_get_status(struct rsnd_mod *mod, + struct rsnd_dai_stream *io, + enum rsnd_mod_type type) +{ + struct rsnd_ssiu *ssiu = rsnd_mod_to_ssiu(mod); + int busif = rsnd_ssi_get_busif(io); + + return &ssiu->busif_status[busif]; +} + static int rsnd_ssiu_init(struct rsnd_mod *mod, struct rsnd_dai_stream *io, struct rsnd_priv *priv) @@ -115,8 +125,9 @@ static int rsnd_ssiu_init(struct rsnd_mod *mod, } static struct rsnd_mod_ops rsnd_ssiu_ops_gen1 = { - .name = SSIU_NAME, - .init = rsnd_ssiu_init, + .name = SSIU_NAME, + .init = rsnd_ssiu_init, + .get_status = rsnd_ssiu_get_status, }; static int rsnd_ssiu_init_gen2(struct rsnd_mod *mod, @@ -279,10 +290,11 @@ static int rsnd_ssiu_stop_gen2(struct rsnd_mod *mod, } static struct rsnd_mod_ops rsnd_ssiu_ops_gen2 = { - .name = SSIU_NAME, - .init = rsnd_ssiu_init_gen2, - .start = rsnd_ssiu_start_gen2, - .stop = rsnd_ssiu_stop_gen2, + .name = SSIU_NAME, + .init = rsnd_ssiu_init_gen2, + .start = rsnd_ssiu_start_gen2, + .stop = rsnd_ssiu_stop_gen2, + .get_status = rsnd_ssiu_get_status, }; static struct rsnd_mod *rsnd_ssiu_mod_get(struct rsnd_priv *priv, int id) @@ -304,16 +316,6 @@ int rsnd_ssiu_attach(struct rsnd_dai_stream *io, return rsnd_dai_connect(mod, io, mod->type); } -static u32 *rsnd_ssiu_get_status(struct rsnd_dai_stream *io, - struct rsnd_mod *mod, - enum rsnd_mod_type type) -{ - struct rsnd_ssiu *ssiu = rsnd_mod_to_ssiu(mod); - int busif = rsnd_ssi_get_busif(io); - - return &ssiu->busif_status[busif]; -} - int rsnd_ssiu_probe(struct rsnd_priv *priv) { struct device *dev = rsnd_priv_to_dev(priv); @@ -337,8 +339,7 @@ int rsnd_ssiu_probe(struct rsnd_priv *priv) for_each_rsnd_ssiu(ssiu, priv, i) { ret = rsnd_mod_init(priv, rsnd_mod_get(ssiu), - ops, NULL, rsnd_ssiu_get_status, - RSND_MOD_SSIU, i); + ops, NULL, RSND_MOD_SSIU, i); if (ret) return ret; }