From patchwork Thu Sep 10 07:03:08 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 7151201 Return-Path: X-Original-To: patchwork-alsa-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 26990BEEC1 for ; Thu, 10 Sep 2015 07:05:43 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 21C54208E1 for ; Thu, 10 Sep 2015 07:05:42 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id CCB67208CA for ; Thu, 10 Sep 2015 07:05:40 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id CB8BD26586F; Thu, 10 Sep 2015 09:05:38 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Status: No, score=-2.6 required=5.0 tests=BAD_ENC_HEADER,BAYES_00, NO_DNS_FOR_FROM, RCVD_IN_DNSWL_LOW, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 Received: from alsa0.perex.cz (localhost [IPv6:::1]) by alsa0.perex.cz (Postfix) with ESMTP id 16F3B2658B1; Thu, 10 Sep 2015 09:04:30 +0200 (CEST) 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 566862657FC; Thu, 10 Sep 2015 09:04:28 +0200 (CEST) Received: from relmlie1.idc.renesas.com (relmlor2.renesas.com [210.160.252.172]) by alsa0.perex.cz (Postfix) with ESMTP id 93E5D26571B for ; Thu, 10 Sep 2015 09:03:12 +0200 (CEST) Received: from unknown (HELO relmlir3.idc.renesas.com) ([10.200.68.153]) by relmlie1.idc.renesas.com with ESMTP; 10 Sep 2015 16:03:11 +0900 Received: from relmlac1.idc.renesas.com (relmlac1.idc.renesas.com [10.200.69.21]) by relmlir3.idc.renesas.com (Postfix) with ESMTP id 1F2393F713; Thu, 10 Sep 2015 16:03:11 +0900 (JST) Received: by relmlac1.idc.renesas.com (Postfix, from userid 0) id 11F2E8002E; Thu, 10 Sep 2015 16:03:11 +0900 (JST) Received: from relmlac1.idc.renesas.com (localhost [127.0.0.1]) by relmlac1.idc.renesas.com (Postfix) with ESMTP id 092BF8002D; Thu, 10 Sep 2015 16:03:11 +0900 (JST) Received: from relmlii1.idc.renesas.com [10.200.68.65] by relmlac1.idc.renesas.com with ESMTP id SAG27600; Thu, 10 Sep 2015 16:03:11 +0900 X-IronPort-AV: E=Sophos;i="5.17,502,1437404400"; d="scan'";a="194139524" Received: from mail-sg2apc01lp0244.outbound.protection.outlook.com (HELO APC01-SG2-obe.outbound.protection.outlook.com) ([65.55.88.244]) by relmlii1.idc.renesas.com with ESMTP/TLS/AES256-SHA; 10 Sep 2015 16:03:10 +0900 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=kuninori.morimoto.gx@renesas.com; Received: from morimoto-PC.renesas.com (211.11.155.144) by SIXPR06MB0608.apcprd06.prod.outlook.com (10.160.237.15) with Microsoft SMTP Server (TLS) id 15.1.262.15; Thu, 10 Sep 2015 07:03:08 +0000 Message-ID: <871te6oj49.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: <878u8eoj7x.wl%kuninori.morimoto.gx@renesas.com> References: <878u8eoj7x.wl%kuninori.morimoto.gx@renesas.com> MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Date: Thu, 10 Sep 2015 07:03:08 +0000 X-Originating-IP: [211.11.155.144] X-ClientProxiedBy: KAWPR01CA0003.jpnprd01.prod.outlook.com (25.161.24.13) To SIXPR06MB0608.apcprd06.prod.outlook.com (25.160.237.15) X-Microsoft-Exchange-Diagnostics: 1; SIXPR06MB0608; 2:Bka9GWqsMXRDPoeuYHRw4MaGK1Hn9j5gH394E04nqcPYbF3b4I61tB9Kb+0Xh0XmcSSbmY2rV58PVqrN0YQRpRDyQSDxO3cnDk4orp12ZuEUcajng/lpOyBcEGVRDik3j7BAOGeXiWcNBqtje5b+oRq6NKXwrood+6mHNRvP03M=; 3:ApGejgnfYFl5r7eWxpnCZ3xv9FgG/oCNia1Rg1FMCtrw13iIpxYKG5b1K3+fmjQtTXgeQ6HO0uRst8UN6AGET8Cc3efqOnp+ZUamzyNqYj2Ojy9+oPb4Gjv4a51JGmbYIWm3k/0KjeEPeDpIzY0G3A==; 25:uXFL1YxyRupf0d2f4ZwidyWhYDbyhFK2Dd8wSNYo1/wfhXKw2wQd24xoFJsJk/ma0lxCuiuPKy/rXoYWg3QrVffm49ZJ10L1EszpfOXwakyeenKYFGzatcsombKY9BPAH+4s1Uzd8EcUBqgGAot9cMPBweOpiWjmO07XreADRevw5UDA2pkg/e5lUHXwfG62tIWCHfIM7WJ72pOSNZQDMg+LjpHSv8K6TkQqBA+q1cm4Dbvu5O4OJUU674mndeyJ X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SIXPR06MB0608; X-Microsoft-Exchange-Diagnostics: 1; SIXPR06MB0608; 20:7ZVKuv5k2WX89Yf2xTS9oBfiwAj4sNXgK6b/YHUwI9yDVkPqSa5p369IX78TdR79HSUd0lYXW3ph3GuF2asmMwhG67gPns7CBwjoa/TQ04WjTQIyDwctkc+tTn0TaA0X69Ox84OkxdcoLcLyEuTp3HFIQ4YCswrtBIOq4ezP5cRhXWxp165TSLAjvggxBxUpwbqzNXDtVSysNjsP8TDzkrDh+UM5XUCld6SOEZXc6altU13ho6RLNAiGS1ATq36YstN/1fDA5iyuEcGN7SEcI8wzx6HqBo78yV4jYLxSZxRYOkYHOE21gXA2fByBeePG5kYUkLw1cI7f9ykVqPLnInd0IpvEQjB6hyjXSlC294l3U59im0uQKPpYtvrX8u5BmhV8xOQB+Cdd85hjU0pr0DMz3OgqjJFGNkMRSkQcPRsWOY5VaUhC6umNr6C5s/UicsBeuyfHg0YJlUrFkyrZk8zCOBtHAfmTXAGWEx0cnon6+8k9I82HM9HPDQHydCi4; 4:HjD48gfuyqRTwDZ5XRuSWRfYeFGpgIEa4yRa8d2nYi/5AvLU1oQm4JuZYSctEYi0pqWKakyzrIUGdww6LSScGygk/w7P8HNL7m2VFZOlu32Z+w8LIphV63lS6ZC1hnGfOW7rRN11IGBUboD655bKCUtdOY6l5w5KoPRLundLrepF+XrKFvHrePrlQa9wmf3XjZbMjBb3GjJAzOvoPDJrbbbjT7zBp8/Wrh11pyHhQUNw4qJwAK50u+z7R8nZ8HVQEZz8j/Jbe6Jf0GMEqnJZ+vJnbp5rZk4K5hW+PJ8feU8ei3GIMHJ7C/BYRV24J1bA X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(5005006)(8121501046)(3002001); SRVR:SIXPR06MB0608; BCL:0; PCL:0; RULEID:; SRVR:SIXPR06MB0608; X-Forefront-PRVS: 06952FC175 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(199003)(189002)(47776003)(106356001)(5001960100002)(110136002)(42186005)(229853001)(5001830100001)(36756003)(50466002)(101416001)(4001540100001)(97736004)(5001860100001)(83506001)(69596002)(33646002)(4001350100001)(46406003)(122386002)(76176999)(87976001)(5004730100002)(86362001)(77156002)(23726002)(40100003)(189998001)(68736005)(50986999)(19580395003)(2950100001)(64706001)(92566002)(66066001)(81156007)(5007970100001)(77096005)(46102003)(53416004)(62966003)(54356999)(105586002)(19580405001); DIR:OUT; SFP:1102; SCL:1; SRVR:SIXPR06MB0608; H:morimoto-PC.renesas.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SIXPR06MB0608; 23:WOn5a/Ye7K/XOFOJSWpx62cW5k+VRPUNqQxxGWs7i?= =?us-ascii?Q?1Cw7sSe9Duei+99g3niiet7pMEecnwLqdO1UIbLvPixWMb3Q1J+/FWgfQJ5H?= =?us-ascii?Q?SSNm4yThH/3GKgMn6h0DJ9zGUjiG/kxBaD/y4ME7QsOclFGEbbyJbnbVGxXN?= =?us-ascii?Q?oZ2fiK63BFz8+PU6IX23nyUfD8x+1D9YExQEOqhPxME7OlUMByNv024v8gN6?= =?us-ascii?Q?cJNl0KsILLgrnawWbX3jCFEj4z2KRopPHgN/dkU6W2IXHL27WQh0qVMnxHbA?= =?us-ascii?Q?RfQnzpidm4CpCW7tpBi7mlmY65sZegl815VNYxE4Ili2tLT4z7kL7AYdVd4u?= =?us-ascii?Q?2fByeiAmMKD5KZM6lnDAxBoGMtOYXcYPBJhzvJMwAjXRfwBLaf5vUTSBs8pW?= =?us-ascii?Q?50wTcjLIdnU3G81Ba9AYkHI/CRnIWWT4W5e1hpluIRXNrb8YhDqJx3EvH6fr?= =?us-ascii?Q?ooHCh8le70Wyn37HnXKYh9SDwPqGBJRA2WRF232tnGxaIAe8M6MmbPkZK0Uu?= =?us-ascii?Q?+axDn8Ssz58+W7KpmuxBkI58Sdedo9BUdP7mUikC7Biu/l5ie7hUGYAJk1gw?= =?us-ascii?Q?OyMp4IHMvZCiFxZsYWaws3vMrJ22Hmd8Qud0H8Y+zLd/5K0PgOf96AiTNJAu?= =?us-ascii?Q?4KhGqgMICRK+233iFXYJ88WsZEcAhI0czhDX+1O8P26u/ZfEZYWA8JCX2R6w?= =?us-ascii?Q?kfKX1O5tYcwib4ir7erZwac1hg/2DN0lTrKCFttagrzAOfTvZmeVrKgTCVWf?= =?us-ascii?Q?kQULhbfaze7myNE1R1VbP45NQvBf4mRW2W9tltw3X1TFDFyzDkXObEhwoeHQ?= =?us-ascii?Q?F5qYP7Z4bH4wLMtNw9uSqwx4l5XbGlGeglR7PiXaFH/FaJ+GwNU42QA6uDCf?= =?us-ascii?Q?3YqRpPshpovzlZsgxAbp2sl3+CJw/2zQcv1jYHUvJMVCQ5XlpiHhiH/GNYXZ?= =?us-ascii?Q?MQX0gl2t3gxl4lViT2FMXVGw/8YCMuNzzKgIgyJznZY5Wy0TtWQVEmSNT1dU?= =?us-ascii?Q?jSVLWxcF0FxZRtfpYLEJnvSwCQ/6+MzF/2umXNOsl+cqQxfDxXZXlG4YD6aP?= =?us-ascii?Q?MRRXHTX4Cu7FtE9qf1tih8Yv1FVsdI+YPHPkM1aWmqSrFDRlIlV9l4q1ygAW?= =?us-ascii?Q?Yq6pgBxNKG07ddQu1N3X5MN5NAZZfWm700AwjtnrGVRiow09X7UAqauZStbd?= =?us-ascii?Q?iKfuQwvHQzkfjcIAxsHRyQ7fwUoRwjM0jeN7h1yNf0qdxtZZCc+3474Fal3T?= =?us-ascii?Q?o2gHte/hVN6o6L9xBU=3D?= X-Microsoft-Exchange-Diagnostics: 1; SIXPR06MB0608; 5:3SR6Ma+dEUTwYUPNYXs8icXe4EKC0dZU9cpybpEjggx1QFTwoMTjKdIUFFgOmbNNWj18Awa3QizFqqM8iS59Yq6x4RPb6xM/z+5tSjeABDurGnWSy84M1gFYPUHuVjtEjs+ddQBcGoM4jrdNsnaqJw==; 24:vEgXlNtcgo+NcFPfDjLK274r/YZ3YhL2HvFAcJJAwDWTGgCoe4qYfeVCARI9cC944BbreE3q7FPfiT4l1WlhQzomR5pK198doTDIsSlDlIY=; 20:L141z5lkfp/jZHivl3divgnUJNp1SHAGbv0P0yWn2wHFjf9bnUPtVUZjQJU50tJRICLFclmChbGfADIuCDX2Qoqx6HMEc7jkC+L1H/EoSXgfk72A7VMXjnlTsZBsN7CO0ax/XOnDgwk1/ZTT3z/YWHeQjvBe2jbBs3znAIqSdRo= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2015 07:03:08.1137 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SIXPR06MB0608 Cc: Linux-ALSA , Simon , Liam Girdwood Subject: [alsa-devel] [PATCH 4/9] ASoC: rsnd: add common mod confirm method 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 Renesas sound has SSI/SRC/DVC/MIX/ADG modules, and these have original register mapping. Thus this driver is using regmap field, and each module is using it based on each module ID. Sometimes, each module needs other module to controlling. but current each function is using just "mod" as parameter name. This is confusable. For example, if SSI0 and SRC2 are connected, and if SRC module function has bug of module access, and if it needs to control connected SSI, SRC function will access to SSI2 (It should access to SSI0, but it uses SRC's ID 2). This is easy to happen in current driver style. To avoid this kind of confusable trouble, this patch adds module confirm macro for debug purpose. Signed-off-by: Kuninori Morimoto --- sound/soc/sh/rcar/adg.c | 30 +++++++++++++++++++----------- sound/soc/sh/rcar/core.c | 11 +++++++++++ sound/soc/sh/rcar/rsnd.h | 11 +++++++++++ 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/sound/soc/sh/rcar/adg.c b/sound/soc/sh/rcar/adg.c index 9ff1736..48bb38d 100644 --- a/sound/soc/sh/rcar/adg.c +++ b/sound/soc/sh/rcar/adg.c @@ -81,19 +81,21 @@ int rsnd_adg_set_cmd_timsel_gen2(struct rsnd_mod *mod, return 0; } -static int rsnd_adg_set_src_timsel_gen2(struct rsnd_mod *mod, +static int rsnd_adg_set_src_timsel_gen2(struct rsnd_mod *src_mod, struct rsnd_dai_stream *io, u32 timsel) { - struct rsnd_priv *priv = rsnd_mod_to_priv(mod); + struct rsnd_priv *priv = rsnd_mod_to_priv(src_mod); struct rsnd_adg *adg = rsnd_priv_to_adg(priv); struct rsnd_mod *adg_mod = rsnd_mod_get(adg); int is_play = rsnd_io_is_play(io); - int id = rsnd_mod_id(mod); + int id = rsnd_mod_id(src_mod); int shift = (id % 2) ? 16 : 0; u32 mask, ws; u32 in, out; + rsnd_mod_confirm_src(src_mod); + ws = rsnd_adg_ssi_ws_timing_gen2(io); in = (is_play) ? timsel : ws; @@ -129,12 +131,12 @@ static int rsnd_adg_set_src_timsel_gen2(struct rsnd_mod *mod, return 0; } -int rsnd_adg_set_convert_clk_gen2(struct rsnd_mod *mod, +int rsnd_adg_set_convert_clk_gen2(struct rsnd_mod *src_mod, struct rsnd_dai_stream *io, unsigned int src_rate, unsigned int dst_rate) { - struct rsnd_priv *priv = rsnd_mod_to_priv(mod); + struct rsnd_priv *priv = rsnd_mod_to_priv(src_mod); struct rsnd_adg *adg = rsnd_priv_to_adg(priv); struct rsnd_mod *adg_mod = rsnd_mod_get(adg); struct device *dev = rsnd_priv_to_dev(priv); @@ -149,6 +151,8 @@ int rsnd_adg_set_convert_clk_gen2(struct rsnd_mod *mod, adg->rbgb_rate_for_48khz_div_6, /* 0100: RBGB */ }; + rsnd_mod_confirm_src(src_mod); + min = ~0; val = 0; en = 0; @@ -186,7 +190,7 @@ int rsnd_adg_set_convert_clk_gen2(struct rsnd_mod *mod, return -EIO; } - ret = rsnd_adg_set_src_timsel_gen2(mod, io, val); + ret = rsnd_adg_set_src_timsel_gen2(src_mod, io, val); if (ret < 0) { dev_err(dev, "timsel error\n"); return ret; @@ -199,12 +203,14 @@ int rsnd_adg_set_convert_clk_gen2(struct rsnd_mod *mod, return 0; } -int rsnd_adg_set_convert_timing_gen2(struct rsnd_mod *mod, +int rsnd_adg_set_convert_timing_gen2(struct rsnd_mod *src_mod, struct rsnd_dai_stream *io) { u32 val = rsnd_adg_ssi_ws_timing_gen2(io); - return rsnd_adg_set_src_timsel_gen2(mod, io, val); + rsnd_mod_confirm_src(src_mod); + + return rsnd_adg_set_src_timsel_gen2(src_mod, io, val); } int rsnd_adg_set_convert_clk_gen1(struct rsnd_priv *priv, @@ -269,15 +275,17 @@ find_rate: return 0; } -static void rsnd_adg_set_ssi_clk(struct rsnd_mod *mod, u32 val) +static void rsnd_adg_set_ssi_clk(struct rsnd_mod *ssi_mod, u32 val) { - struct rsnd_priv *priv = rsnd_mod_to_priv(mod); + struct rsnd_priv *priv = rsnd_mod_to_priv(ssi_mod); struct rsnd_adg *adg = rsnd_priv_to_adg(priv); struct rsnd_mod *adg_mod = rsnd_mod_get(adg); - int id = rsnd_mod_id(mod); + int id = rsnd_mod_id(ssi_mod); int shift = (id % 4) * 8; u32 mask = 0xFF << shift; + rsnd_mod_confirm_ssi(ssi_mod); + val = val << shift; /* diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c index 870f944..eec294d 100644 --- a/sound/soc/sh/rcar/core.c +++ b/sound/soc/sh/rcar/core.c @@ -127,6 +127,17 @@ MODULE_DEVICE_TABLE(of, rsnd_of_match); #define rsnd_info_id(priv, io, name) \ ((io)->info->name - priv->info->name##_info) +void rsnd_mod_make_sure(struct rsnd_mod *mod, enum rsnd_mod_type type) +{ + if (mod->type != type) { + struct rsnd_priv *priv = rsnd_mod_to_priv(mod); + struct device *dev = rsnd_priv_to_dev(priv); + + dev_warn(dev, "%s[%d] is not your expected module\n", + rsnd_mod_name(mod), rsnd_mod_id(mod)); + } +} + /* * rsnd_mod functions */ diff --git a/sound/soc/sh/rcar/rsnd.h b/sound/soc/sh/rcar/rsnd.h index f35d9cc..e4068d7 100644 --- a/sound/soc/sh/rcar/rsnd.h +++ b/sound/soc/sh/rcar/rsnd.h @@ -627,4 +627,15 @@ void rsnd_dvc_remove(struct platform_device *pdev, struct rsnd_priv *priv); struct rsnd_mod *rsnd_dvc_mod_get(struct rsnd_priv *priv, int id); +#ifdef DEBUG +void rsnd_mod_make_sure(struct rsnd_mod *mod, enum rsnd_mod_type type); +#define rsnd_mod_confirm_ssi(mssi) rsnd_mod_make_sure(mssi, RSND_MOD_SSI) +#define rsnd_mod_confirm_src(msrc) rsnd_mod_make_sure(msrc, RSND_MOD_SRC) +#define rsnd_mod_confirm_dvc(mdvc) rsnd_mod_make_sure(mdvc, RSND_MOD_DVC) +#else +#define rsnd_mod_confirm_ssi(mssi) +#define rsnd_mod_confirm_src(msrc) +#define rsnd_mod_confirm_dvc(mdvc) +#endif + #endif