From patchwork Mon Feb 15 05:22:18 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 8309561 Return-Path: X-Original-To: patchwork-alsa-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 342F39F2F0 for ; Mon, 15 Feb 2016 05:22:48 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 4947B204EB for ; Mon, 15 Feb 2016 05:22:47 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id C1EE3204D8 for ; Mon, 15 Feb 2016 05:22:45 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id D35D0261534; Mon, 15 Feb 2016 06:22:39 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Status: No, score=-1.8 required=5.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED,NO_DNS_FOR_FROM,RCVD_IN_DNSWL_NONE,T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=no version=3.3.1 Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 579F02605C7; Mon, 15 Feb 2016 06:22:31 +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 B0991261298; Mon, 15 Feb 2016 06:22:29 +0100 (CET) Received: from relmlie2.idc.renesas.com (relmlor3.renesas.com [210.160.252.173]) by alsa0.perex.cz (Postfix) with ESMTP id B2A712605C1 for ; Mon, 15 Feb 2016 06:22:22 +0100 (CET) Received: from unknown (HELO relmlir4.idc.renesas.com) ([10.200.68.154]) by relmlie2.idc.renesas.com with ESMTP; 15 Feb 2016 14:22:21 +0900 Received: from relmlac2.idc.renesas.com (relmlac2.idc.renesas.com [10.200.69.22]) by relmlir4.idc.renesas.com (Postfix) with ESMTP id 55F09441A6; Mon, 15 Feb 2016 14:22:21 +0900 (JST) Received: by relmlac2.idc.renesas.com (Postfix, from userid 0) id 4CAF22806E; Mon, 15 Feb 2016 14:22:21 +0900 (JST) Received: from relmlac2.idc.renesas.com (localhost [127.0.0.1]) by relmlac2.idc.renesas.com (Postfix) with ESMTP id 47B792806D; Mon, 15 Feb 2016 14:22:21 +0900 (JST) Received: from relmlii1.idc.renesas.com [10.200.68.65] by relmlac2.idc.renesas.com with ESMTP id QAB11588; Mon, 15 Feb 2016 14:22:21 +0900 X-IronPort-AV: E=Sophos;i="5.22,449,1449500400"; d="scan'";a="204324551" Received: from mail-sg2apc01lp0248.outbound.protection.outlook.com (HELO APC01-SG2-obe.outbound.protection.outlook.com) ([65.55.88.248]) by relmlii1.idc.renesas.com with ESMTP/TLS/AES256-SHA; 15 Feb 2016 14:22:20 +0900 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesasgroup.onmicrosoft.com; s=selector1-renesas-com; h=From:To:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Y9H079AVuYYGMHTYgg41c1t8mmIUb6PqcOVco3ByMHQ=; b=bb0LtTmVgAtRr1LIUVJbn+ionUf+mFG9z5cdc/whsg7iqUX+kgyT6qaaR2Qa1SMI1hqmDMgEPGNW45bNbejVuq3I6YmQJ0Pgk1cIfKKhdY7QK/9yMWJuT6Hb887siuuiFdwjlgtOOFlXvQNhJwNr1fGcdb3zh1s+o/KRFg8g7ls= Authentication-Results: kernel.org; dkim=none (message not signed) header.d=none; kernel.org; dmarc=none action=none header.from=renesas.com; Received: from morimoto-PC.renesas.com (211.11.155.144) by HKXPR06MB1013.apcprd06.prod.outlook.com (10.161.137.28) with Microsoft SMTP Server (TLS) id 15.1.403.16; Mon, 15 Feb 2016 05:22:18 +0000 Message-ID: <87bn7iimb5.wl%kuninori.morimoto.gx@renesas.com> From: Kuninori Morimoto User-Agent: Wanderlust/2.15.9 Emacs/24.3 Mule/6.0 MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") To: Mark Brown , Greg KH In-Reply-To: <87d1ryimdz.wl%kuninori.morimoto.gx@renesas.com> References: <87d1ryimdz.wl%kuninori.morimoto.gx@renesas.com> Date: Mon, 15 Feb 2016 05:22:18 +0000 X-Originating-IP: [211.11.155.144] X-ClientProxiedBy: OS2PR01CA0019.jpnprd01.prod.outlook.com (25.161.74.157) To HKXPR06MB1013.apcprd06.prod.outlook.com (25.161.137.28) X-Microsoft-Exchange-Diagnostics: 1; HKXPR06MB1013; 2:8Ji/iSTDIV1YtbdWwJ1B/ea80rXrAx8gmxD6l3K/mPFZy4vexUMyT5L/GoCdOT+SFo66JB4/Kvvi6nQMXpBeBP5N95DykTsimsgtsggBfFDG3Wl6uqGC144Oi2ZuhzCXbojb1ROlN0zr8FCxtoVO4w==; 3:3HvDlJJhxcLli3XxE2QhV8uaogC7USP+mIXeZxB264n8bk8xTohOjvNssIkhdP4dOFkknj6msu77STDezi7NhibDpzgCpLPSrdJElsWXc3PYtck8WFunduypfMnhuJcq; 25:LvHhX9ZSezugvyhRBqOUn16eu6gSYERMiuxzy019X6DEK992mClIInWyrtpAiYsq05kHnjHjxBiLwGfOGx1BQAvDDhJyCiu/pq5MwTHb+0uEY3etT0qvznBaEOub/zDVZKlICiWK6X2UHeNl3mel6+L7nHdVd46SUv3YdKH3qQ878ib4TNr55Ix/oNlX5Jv2iSPk5hCZVmG7CaAt17sEM8L3vMld6qMMoAm+NpbfqSlXhvhJUZX6dpWm8NCJ/NkWiE/K6llYuRYLtBi/Dx8hLd9vjznhKMLAu67KjxZOd3RREdD38OQvfWLngS/MdqBh X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HKXPR06MB1013; X-MS-Office365-Filtering-Correlation-Id: dcbf2105-379c-411a-89ee-08d335c7f9a0 X-Microsoft-Exchange-Diagnostics: 1; HKXPR06MB1013; 20:nNASfWgMHYYCVBS6io37/ZSZ0ZjBFpXEit2XkUG0J/sfirGbCjIUNrpn8cRI6olo1+sqylymH9Bg/bflQyfZTZ46UqUkXHzF00XobumoQovJNlRRDcXpHSb9IiWNTZBV9kwcR48+/j/RFjIdlMPcG4wzDpNlcATQykTZPN3Am5zCQXjL8jpmMHWfutVtJ1oSScvRnYUyyIMwhTACDLKho9xlNtmZJt++TAKhbkJbQwzrpPdw59Ohz+HHSscM+WOEyOOIzGxkbOJ7DmfANWX6WGMnOGstGuIAjeH1QJFG7jrcdLSbaj85aFfDZLqQOppDf5WIiC0GipZJMKD3ChMcJW71F8Lgm981cKadNSwGMTMT0LGtHSi9WMMiauIbDBuvrdi80Iw3+5tXLnNfu4OOM9ZI8JzoEEEdoruz/tUZOOiv3DHwof+yOWWGFZpUva7p0XCvkbQwkan6eI0ISCLzHrhw+Z3aFUVrtSHLkqqg4c+X1hk4AN4AUdWNJp1nWztE; 4:S6Gtc06NehW2RLN/geBH+diSPxDhcTi/HxfpnM41PGx57yEXJPZnDBNSehhUPKUdyazqSO863fJ30jtXilWzWaRuL9ZmLR3vTJPgIEqKwj2meIr+Tl4AXmdqnEJzGnNxTh+Y06+tS5pa7kjlijgXNV6XCvA5OfuxBgRk3SMEx9pCxTUlKpmunWNyt6+Wq5GR6vr4uYpT+7Kb+9W7Th4uCdXJcjHNEzCeNeiVJdl0yNd26pB6tmIYznXI7mPFiSZ6WmCPzSg+gb+CkvPHoX5S+TtkJyj9gWkQm8OyDRM2eMFRCUQVHd7NbpXHd2OvxP35ywwXolK/pLTD7h+XdcOHdy6fhuyTIpqgnCFHBMH0iFbilX1y6A75HqAvTNKNAMQ9 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001); SRVR:HKXPR06MB1013; BCL:0; PCL:0; RULEID:; SRVR:HKXPR06MB1013; X-Forefront-PRVS: 08534B37A7 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(92566002)(122386002)(50466002)(87976001)(83506001)(40100003)(19580405001)(42186005)(53416004)(86362001)(19580395003)(189998001)(77096005)(50986999)(2906002)(54356999)(5008740100001)(2950100001)(23726003)(46406003)(66066001)(33646002)(5001960100002)(5004730100002)(1096002)(4326007)(3846002)(6116002)(586003)(36756003)(229853001)(4001350100001)(5001770100001)(76176999)(47776003); DIR:OUT; SFP:1102; SCL:1; SRVR:HKXPR06MB1013; H:morimoto-PC.renesas.com; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HKXPR06MB1013; 23:CBSotUEGpujz4/fH5nXOuh98lh/gJChJXiLQ+UDVS?= =?us-ascii?Q?m05Rl9Sy8/ak9MR2qENLPtFSSX1S0yLq8tJAeMJJ4nD6N4q0sW0ekpkBjRUP?= =?us-ascii?Q?6Skgk7PizJr1NzGu0ZxTi4LfqC4s0OBF61PeOjTH74z/DBvnhjbnOk2i0ONG?= =?us-ascii?Q?RN6xqYB3Lm7/9+qMzIkfOFqECYg/9L7NBToq2M4kW/pDKtCNixTnsV1dWae4?= =?us-ascii?Q?ikOnh/veWV9efRyv2EVIzbsFTlV7Crn4P4jAmIf4qaAk2geTWoMYlHwPxpJ1?= =?us-ascii?Q?dOp1p8hfPjzF8gVgZYaD+V14ut0AdfJqhXPi7f9mlsFJn4hLKwPT1YnYj702?= =?us-ascii?Q?bYKcX02+w5XdDNgG2H4I+4vcE4rqh9jyfYjTScw7+aH2dNAiprhFF/3QsmU9?= =?us-ascii?Q?Aar93NjxbNQ7JpAmhRKZSC0o/fkWgpRCOy5EH/NksQ8HAbSvjmZGbaNqUMQz?= =?us-ascii?Q?zM6BhBQ+bMsKNje8zD7GJdHt5Kxmmj27S7YAtCHXi0GRl4/KUNCRbCTj2pjD?= =?us-ascii?Q?w1YXSIQiJiS840xAV18fap1Ovo2LpzdSGdmK+WLMCdnUj1sSeN+BJhJ0sJzc?= =?us-ascii?Q?rO7l1x6Qlb8whDa5HAVWPIur7mxwLbhb4scdawqzwHa7bwVtih/5kZa85QbI?= =?us-ascii?Q?bBNabZNdx45wjW/mmHs0zB7wo1wjfYtjfpVHLnuImDSGOVimlxdr2vlM5ejj?= =?us-ascii?Q?wVY1QO/kTdnjOFLklpkXEHENs8MFtHs98cgNGJ7SdEC+/7/bkt2gP/7cMn/8?= =?us-ascii?Q?60vSMaO1Ub86qUtL2LugxS2Re1i1iNoQ/+Okl5/fJhKVU/dglt8GX+WS/AxZ?= =?us-ascii?Q?P1n6p09oIXgBLFckvYJDmGD9XLCJTdvUABOMos8uO0D/YHhyzIAjXzaoARFv?= =?us-ascii?Q?dvjx6XbINcyDzp/CCn0IQCgmCLjM761qMI/QZrJ69QcDNLVj47YijpHNRIiO?= =?us-ascii?Q?Gh6Dm7e4wGU1d/XOazlLoVgMB9PTF+ZnDgXSiNciuo3TDcm2V1oAdLYS3AYY?= =?us-ascii?Q?fFl4KO69LgBnaIsiTjiY9zY?= X-Microsoft-Exchange-Diagnostics: 1; HKXPR06MB1013; 5:JYb43kv0iqkI77Egysh7lc9lbhbw4D8dg2hWzysSQKTG9j8lXpcc2udMa3EsBtsRBkQXZqq7hmnZrX/lmtl9TCmBjBh73Poy3vfN13rSr+ySqK++UiTr7I2cT2Hvo/e13IfY2YI95Q+sbjvVUtkk7Q==; 24:G0FjsyEu8+Pi6d6aD2AQTU4WNQWXjXNU4rlP8aL3MXAwReqiyidW998zQcp30UYCHuBYtBBknir/HKfmlF2Fj7JdHK01qOUdFgYfeniU3ak=; 20:G4hdZw+MZqbpGEiZgRyA2ylP5qfVUWue6s3AE4rR/LMWDmeWWKfOo0rmCWIQ45s0NDHmJBKAMj0XU3gn1ovAm3L92A9KsNOeLzTLBmT8Khdc4sZoBIRy5obK9dRV4OlOjuFU6Kf9wzq2TmMOaGp7Ku/1PDiOaVK1nxnlTG7djSk= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Feb 2016 05:22:18.7496 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HKXPR06MB1013 Cc: Linux-ALSA , Linux-Kernel Subject: [alsa-devel] [PATCH 01/15 v2][RFC] regmap: add regmap_update_bits_base() 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 Current regmap has many similar update functions like below, but the difference is very few. regmap_update_bits() regmap_update_bits_async() regmap_update_bits_check() regmap_update_bits_check_async() Furthermore, we can add *force* write option too in the future. This patch adds new regmap_update_bits_base() which is feature merged function. Above functions can be merged into it by macro. Signed-off-by: Kuninori Morimoto --- drivers/base/regmap/regmap.c | 40 ++++++++++++++++++++++++++++++++++++++++ include/linux/regmap.h | 11 +++++++++++ 2 files changed, 51 insertions(+) diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index ee54e84..4e35b2f 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c @@ -2648,6 +2648,46 @@ static int _regmap_update_bits(struct regmap *map, unsigned int reg, } /** + * regmap_update_bits_base: + * Perform a read/modify/write cycle on the + * register map with change, async, force option + * + * @map: Register map to update + * @reg: Register to update + * @mask: Bitmask to change + * @val: New value for bitmask + * @change: Boolean indicating if a write was done + * @async: Boolean indicating asynchronously + * @force: Boolean indicating use force update + * + * if async was true, + * With most buses the read must be done synchronously so this is most + * useful for devices with a cache which do not need to interact with + * the hardware to determine the current register value. + * + * Returns zero for success, a negative number on error. + */ +int regmap_update_bits_base(struct regmap *map, unsigned int reg, + unsigned int mask, unsigned int val, + bool *change, bool async, bool force) +{ + int ret; + + map->lock(map->lock_arg); + + map->async = async; + + ret = _regmap_update_bits(map, reg, mask, val, change, force); + + map->async = false; + + map->unlock(map->lock_arg); + + return ret; +} +EXPORT_SYMBOL_GPL(regmap_update_bits_base); + +/** * regmap_update_bits: Perform a read/modify/write cycle on the register map * * @map: Register map to update diff --git a/include/linux/regmap.h b/include/linux/regmap.h index 1839434..28e50a3 100644 --- a/include/linux/regmap.h +++ b/include/linux/regmap.h @@ -691,6 +691,9 @@ int regmap_raw_read(struct regmap *map, unsigned int reg, void *val, size_t val_len); int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val, size_t val_count); +int regmap_update_bits_base(struct regmap *map, unsigned int reg, + unsigned int mask, unsigned int val, + bool *change, bool async, bool force); int regmap_update_bits(struct regmap *map, unsigned int reg, unsigned int mask, unsigned int val); int regmap_write_bits(struct regmap *map, unsigned int reg, @@ -937,6 +940,14 @@ static inline int regmap_bulk_read(struct regmap *map, unsigned int reg, return -EINVAL; } +static inline int regmap_update_bits_base(struct regmap *map, unsigned int reg, + unsigned int mask, unsigned int val, + bool *change, bool async, bool force) +{ + WARN_ONCE(1, "regmap API is disabled"); + return -EINVAL; +} + static inline int regmap_update_bits(struct regmap *map, unsigned int reg, unsigned int mask, unsigned int val) {