From patchwork Fri Jul 29 08:17:57 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Rosin X-Patchwork-Id: 654066 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3s13qn35wdz9s65 for ; Fri, 29 Jul 2016 19:50:13 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=axentiatech.onmicrosoft.com header.i=@axentiatech.onmicrosoft.com header.b=sFqanGn1; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750917AbcG2JuL (ORCPT ); Fri, 29 Jul 2016 05:50:11 -0400 Received: from mail-he1eur01on0131.outbound.protection.outlook.com ([104.47.0.131]:56384 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750752AbcG2JuJ (ORCPT ); Fri, 29 Jul 2016 05:50:09 -0400 X-Greylist: delayed 96891 seconds by postgrey-1.27 at vger.kernel.org; Fri, 29 Jul 2016 05:50:09 EDT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=axentiatech.onmicrosoft.com; s=selector1-axentia-se; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=3h0rwunsnanNJLmEyDTeXdbrnWSP3c07UFihsWwxwCM=; b=sFqanGn1Y7aTeVcjnAyWGds63L93noRbyQInkvn6cgKEEW530dPhkPy8hjUDP7CDnKmSXCyvdC4mKXCcXMC4M/OTTqpZ/YaucqGRrfHNnzUIaZmGoUpbxB2z0oneV51PdIt6smaKP0YX2Z4zlbqE1T1q6qNazGNKjHiZryLrQrM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peda@axentia.se; Received: from localhost.localdomain (217.210.101.82) by VI1PR02MB1312.eurprd02.prod.outlook.com (10.165.231.154) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.544.10; Fri, 29 Jul 2016 08:18:21 +0000 From: Peter Rosin To: CC: Peter Rosin , Wolfram Sang , Subject: [PATCH 2/2] i2c: move locking operations to their own struct Date: Fri, 29 Jul 2016 10:17:57 +0200 Message-ID: <1469780277-31085-3-git-send-email-peda@axentia.se> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1469780277-31085-1-git-send-email-peda@axentia.se> References: <1469780277-31085-1-git-send-email-peda@axentia.se> MIME-Version: 1.0 X-Originating-IP: [217.210.101.82] X-ClientProxiedBy: HE1PR10CA0027.EURPRD10.PROD.OUTLOOK.COM (10.167.243.165) To VI1PR02MB1312.eurprd02.prod.outlook.com (10.165.231.154) X-MS-Office365-Filtering-Correlation-Id: 17bd101a-cd49-4a20-5f71-08d3b788e813 X-Microsoft-Exchange-Diagnostics: 1; VI1PR02MB1312; 2:ttPYVPeE2O0EAv3JkFr4bLX/M/gUAG3F4Ily1TgBAcOwliS5ouEPIJFihV8vJnKmGZE+fcMN1pDOyeDDkIZxHkixaXmCxwHqMcoIWz5tQrxoEWj4CBlGF3kSyc8sDdHiQzDp1URGikFBaQcCHD6LPE4jWerH8ub4F2ZyNApcqsHXHVzG/G/Ps3L8rC5BF2TA; 3:X8w1IXbusz6oRoCBqBa3XTvb1nCa9jWlqfkcUINXTZ3wyX0ghRw6o0qshIvzr1JXnrs6jnXrC9xTmHZ5KEss9MNlNoqc2SjjXVUfb5qBwf9J/HckHuaArlw4pPldQIrd X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:VI1PR02MB1312; X-Microsoft-Exchange-Diagnostics: 1; VI1PR02MB1312; 25:jgn8WQY5jPdNrT7cmY7dhWc/nSoL/4n/WbpQkZ1VIlRjyYL2Zd7+yMjjQ6Pn8O6fej8MoP8RaB+E5OyUzPqdkmwEBgOdQEzzXItYB3ORXdrFF3zDBx/ocGOhZReL19hQAIrzZwen/uAnbJv4e6Otf7ggWNjmfGWrIVX28MDpN7FTfse3+bZrLk2zMxdMmUTxbcddeKX0a3VDWyk443+dCJIXVPsdMRcJ1cqzTdvzI6A5W5X8kbwBeO2sV552R+BZjACFQ4pfqIwn3NaUZ+rUUba8VNy85MEKctRE0MjAdb8ic0UvuIfkM20mhYykv/VN/xKUuakHS8+xZfzPd8t3WKlN3todz1Aoz/+JgVI/G25vrGOKD7aKZ8I6wg9NTfZO7yje4CCGUkKUx/czTZlRAje0Vxs+OvInJJ720OtvX5t5L2zseqdHddjqup8SQvSZ78i9K5MxcnEt9F0UkA+wwol2dl9deWV+/ATKlnungCrTWssouCd9gD+o3/5Jd9OyurnT9gfxlwchzuDwE79MH5O3keMUaAT3bWO75lVdfmdcHPoNUe/uCydiCaOoW9mU2GGpIncIjAEEyp+QyQZuIDVVKTiKUt8IYY4jzvxFOmm2hGD8xQb+7bzbZ4S988m5xq4oGQpeVGQKfki1HnCqGVsRVoYber3n6ZGc4zsJWduRXaY0FMDR781uhjvXDZlPXQldCL8BeqX3hXap/Avg662shkt28TsY++0swffz5Oihllp+knsTc0+0b7DbSD8l X-Microsoft-Exchange-Diagnostics: 1; VI1PR02MB1312; 31:geMzJLnzWqRHZnA0mS/PqOCFb/A44sQD9jsygOx0K3QRqAqUFLPXuBKbYR4cGbYP185ja5wfdcN3bcmppc+kuXbhv528idi02Apv2qYizkBA7QgxCJ3b/49ChKXQkDJJaTBXAZYXgTvZN33PkF7Hi2xEvV9pCFzaqiLR7gYVr3rlt04dB+Et90YfZhVHwxfkntAVBE6pNEjdfhj5cdckOw==; 4:i/E/wimuu89WbaMiHypN4niuU+hzw05OxiMCQvtk9ksEYYbVTP7ihUSSpcCvUXaXozYibI1UpQ6R2ejYpbUPlM8Bv8XY0gyATKb9oQDLpRqIP0muNmApGpJyEdlTaFOHIh33Urmtke3OwxuDluYrBWXx9h141Knuu0cmQUT0zyTgEfcxsXumglf6zXyzn2k/y0LticL5N4CC6az5g75n9q0ZpsgSm2XqygjOkpYucwVKuoEFBeNV8kYWj3QC80Tm1e5yz1EWbrIYIymG5hi5Yl04c+RyLaYMGy/LTO3MrfpeZH6IPi+6yf3WpVLXGvv5IjOm63nbLK2F2AnwslBW/GqhuljEJ/manLswseFANClmmWatFgDuJgeNuJW8L1k1mhZX640+wmR/oMEtg4MWbHFX7BlefN2+6PqVyW+mjvc= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040130)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6041072)(6043046); SRVR:VI1PR02MB1312; BCL:0; PCL:0; RULEID:; SRVR:VI1PR02MB1312; X-Forefront-PRVS: 0018A2705B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(6069001)(7916002)(189002)(199003)(6116002)(50226002)(586003)(110136002)(189998001)(305945005)(92566002)(81156014)(81166006)(7846002)(76176999)(5003940100001)(50986999)(7736002)(74482002)(3846002)(2906002)(97736004)(4326007)(68736007)(2950100001)(77096005)(8676002)(36756003)(66066001)(47776003)(101416001)(33646002)(19580395003)(19580405001)(106356001)(86362001)(50466002)(105586002)(48376002)(2351001)(42186005)(229853001)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:VI1PR02MB1312; H:localhost.localdomain; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: axentia.se does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR02MB1312; 23:/y4eaTQzXE55sPIHuWtKf+jTlw3zVdPcxed+Phc+t?= =?us-ascii?Q?aj0hMc7cVW84Jh41bcpPbEXzGxuXNOgcOe9cl0p9vSjdNCV7tXyAjTKkpHR8?= =?us-ascii?Q?TgGRWXI9V6YUxg2gPJQuRY3cujRuhi49xWzwGf1doTeu5CaIEkLv1cH3EQbN?= =?us-ascii?Q?DrphRNw6tFfdfTFxrkO5kBaNqH3rFCag71KQDH7MK4gM42dpftOtiT3wOVwD?= =?us-ascii?Q?oqBOio4nDp9BGuH+PzPrLDEN8lG6WEty6O8rjh88X80f6Kin2V+VIQay0HsQ?= =?us-ascii?Q?NIZ9r6NFFTEpWYEpkxxLBevMTpjQiyRGjWRyHmnK+iW/SXgx71WmBq3EoQT9?= =?us-ascii?Q?ueEfyrkcT3nQ5NoyhFGxQimXc00bu1Yp/cFJGH8vWhKSCivaEqAGYbRoRvZz?= =?us-ascii?Q?b2vUi3aRJmYf5fBxSRd5svdrE+mugpSvLMwZkDJ0SnuHLkLyEowq2juvOwVZ?= =?us-ascii?Q?8mO+ixQf3JXSl+eR2KgcL3ZFuoWWDqqoRafx8Hb92/dJa1Nm8jxvPYJz+fUX?= =?us-ascii?Q?wIOg0zdFYHmvneeVgJZxdK8mQCfaQkSabg9Xa9V6D2sWx12xnwSVPoF+oiWV?= =?us-ascii?Q?FB2S5ajXf9bcw2vavjZTw7m1ko9OLIOkHnfrmNNsECCi0HvC0ie4pxfYb9D9?= =?us-ascii?Q?42AF0ILD3Vjb5KNS5aKGPOlpW7AEWUs8flRlDjoBhbtUvLqtmJU0TFQKm1pk?= =?us-ascii?Q?dIOoZ3CZJQN9aAvDaky8SnpuwtLq4ame8T862Xa87bYl3Lcsvsd4kwAkWM27?= =?us-ascii?Q?80IbBltsRCt6X1HTlFV1cC9Lez1u2KlA85RYFmHQGnZYpuwZKOOpA8SVGAK4?= =?us-ascii?Q?kMcR+ujxo1iq9QTgN5PSFjpWReHncQbYm2MEXinSegDss/v0gur/D+rZHKvp?= =?us-ascii?Q?oibeFnYdKIQ68DM8pFBZG4hHBugqBU5YVXPkRdGB20FfyaknAkwAq3KzDRkP?= =?us-ascii?Q?bdgKjokYwpcTEa8oVXi6qnI++9OizgCFw11SD25IaL+AK6nZKTL1ERQqiAxq?= =?us-ascii?Q?Ylq4Us48qLujZevZn3vSwUdM1LyyoSYoSDcSV4PzSEMx3e2pnaXAHdtp0EQS?= =?us-ascii?Q?tXhD1H3NpPtGXbmZ0YyLYQOX0p1e7PM4nWCEB+Vq2MEN64e+Rzu64jEo6L+I?= =?us-ascii?Q?MRc5ceEd1E=3D?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR02MB1312; 6:XkVaYeajGEZ7lPmrEIobZn5ZlO09xY7Du8wFdcS3IQ2KO/jh6p8o9EPkKkIvr+MmvtIF+fUs2a+vKEAzApdK14KFsyckC4JVoa/BR3aGtfWi3sI1YlLtnNXfH/kBB+84TplMtruZrHdPIMR5hbNQuQi2JtNoFTMHpH0gP1ezdvWBKy+tkFlNkRUSxix7h33reJ7givHSqyUqE7KAcDA7dRfrcHI9b9N8rbvR5mqjXQV3pnn39mFeovMSzVKImOt31xzh864xVxEHM8VHbTpz+MSbNijykjQcA4S8bvKnKGNaXoNjHKNfi0TkTta3cRlE; 5:achSmsZYRmySC6/vDYBmVUS01NcUNTvo/YI8Lx3xXCboH8f191Kyep/ygljzxZGcrNfWzZgR18uv38lwPxpb3rlRkeZLegpRPDieIhb7wSGvKEWJ6i6f3Fn7/0EbHbX5rWOCs98d+NbFdnXezqV9Sw==; 24:mBLVdAG+DTcZwN8OmfrsALREbnT+WJaRRrJwWL1KvrGhBZD/OZ/+2sw37b2915dSIueyiLaYSPKqAlc3aehbaGCatcPEn4HaqpREu7+qLMQ=; 7:eC6diqt5SlikJl6ABdodXI7SgoSUkWWM+7fDS2sAf1ggW09oGYWRxsnJXK67m06Z63++5DBBF8a2ntvRNu41yl6UG78uNlMbuT7vLulX9LkQaZtsK2M3FPnz7fKQnrwTw6O+OLtUpPGYH552O1DARJt7k9WQeumNnuZJK9pyFxjCMHBjHSPLDzW9NDLeTY10qX5Zp0Ynmp432wtyryT4v3ouo1u93Y7R6gbPukYmw6iW/uv6bNE1FoFAa6nY1Cjg SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jul 2016 08:18:21.9835 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR02MB1312 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org This makes it trivial to constify them, so do that. Signed-off-by: Peter Rosin --- drivers/i2c/i2c-core.c | 13 ++++++++----- drivers/i2c/i2c-mux.c | 25 ++++++++++++++++--------- include/linux/i2c.h | 25 ++++++++++++++++++------- 3 files changed, 42 insertions(+), 21 deletions(-) diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c index 2c9135ffdf10..ce252ba13247 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c @@ -1511,6 +1511,12 @@ static int __process_new_adapter(struct device_driver *d, void *data) return i2c_do_add_adapter(to_i2c_driver(d), data); } +static const struct i2c_lock_operations i2c_adapter_lock_ops = { + .lock_bus = i2c_adapter_lock_bus, + .trylock_bus = i2c_adapter_trylock_bus, + .unlock_bus = i2c_adapter_unlock_bus, +}; + static int i2c_register_adapter(struct i2c_adapter *adap) { int res = 0; @@ -1533,11 +1539,8 @@ static int i2c_register_adapter(struct i2c_adapter *adap) return -EINVAL; } - if (!adap->lock_bus) { - adap->lock_bus = i2c_adapter_lock_bus; - adap->trylock_bus = i2c_adapter_trylock_bus; - adap->unlock_bus = i2c_adapter_unlock_bus; - } + if (!adap->lock_ops) + adap->lock_ops = &i2c_adapter_lock_ops; rt_mutex_init(&adap->bus_lock); rt_mutex_init(&adap->mux_lock); diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c index 764f195795e4..14741ff31041 100644 --- a/drivers/i2c/i2c-mux.c +++ b/drivers/i2c/i2c-mux.c @@ -263,6 +263,18 @@ struct i2c_mux_core *i2c_mux_alloc(struct i2c_adapter *parent, } EXPORT_SYMBOL_GPL(i2c_mux_alloc); +static const struct i2c_lock_operations i2c_mux_lock_ops = { + .lock_bus = i2c_mux_lock_bus, + .trylock_bus = i2c_mux_trylock_bus, + .unlock_bus = i2c_mux_unlock_bus, +}; + +static const struct i2c_lock_operations i2c_parent_lock_ops = { + .lock_bus = i2c_parent_lock_bus, + .trylock_bus = i2c_parent_trylock_bus, + .unlock_bus = i2c_parent_unlock_bus, +}; + int i2c_mux_add_adapter(struct i2c_mux_core *muxc, u32 force_nr, u32 chan_id, unsigned int class) @@ -312,15 +324,10 @@ int i2c_mux_add_adapter(struct i2c_mux_core *muxc, priv->adap.retries = parent->retries; priv->adap.timeout = parent->timeout; priv->adap.quirks = parent->quirks; - if (muxc->mux_locked) { - priv->adap.lock_bus = i2c_mux_lock_bus; - priv->adap.trylock_bus = i2c_mux_trylock_bus; - priv->adap.unlock_bus = i2c_mux_unlock_bus; - } else { - priv->adap.lock_bus = i2c_parent_lock_bus; - priv->adap.trylock_bus = i2c_parent_trylock_bus; - priv->adap.unlock_bus = i2c_parent_unlock_bus; - } + if (muxc->mux_locked) + priv->adap.lock_ops = &i2c_mux_lock_ops; + else + priv->adap.lock_ops = &i2c_parent_lock_ops; /* Sanity check on class */ if (i2c_mux_parent_classes(parent) & class) diff --git a/include/linux/i2c.h b/include/linux/i2c.h index e1a8d72ebccb..765bea57eeb3 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h @@ -414,6 +414,20 @@ struct i2c_algorithm { }; /** + * struct i2c_lock_operations - represent I2C locking operations + * @lock_bus: Get exclusive access to an I2C bus segment + * @trylock_bus: Try to get exclusive access to an I2C bus segment + * @unlock_bus: Release exclusive access to an I2C bus segment + * + * The main operations are wrapped by i2c_lock_bus and i2c_unlock_bus. + */ +struct i2c_lock_operations { + void (*lock_bus)(struct i2c_adapter *, unsigned int flags); + int (*trylock_bus)(struct i2c_adapter *, unsigned int flags); + void (*unlock_bus)(struct i2c_adapter *, unsigned int flags); +}; + +/** * struct i2c_timings - I2C timing information * @bus_freq_hz: the bus frequency in Hz * @scl_rise_ns: time SCL signal takes to rise in ns; t(r) in the I2C specification @@ -523,6 +537,7 @@ struct i2c_adapter { void *algo_data; /* data fields that are valid for all devices */ + const struct i2c_lock_operations *lock_ops; struct rt_mutex bus_lock; struct rt_mutex mux_lock; @@ -539,10 +554,6 @@ struct i2c_adapter { struct i2c_bus_recovery_info *bus_recovery_info; const struct i2c_adapter_quirks *quirks; - - void (*lock_bus)(struct i2c_adapter *, unsigned int flags); - int (*trylock_bus)(struct i2c_adapter *, unsigned int flags); - void (*unlock_bus)(struct i2c_adapter *, unsigned int flags); }; #define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev) @@ -584,7 +595,7 @@ int i2c_for_each_dev(void *data, int (*fn)(struct device *, void *)); static inline void i2c_lock_bus(struct i2c_adapter *adapter, unsigned int flags) { - adapter->lock_bus(adapter, flags); + adapter->lock_ops->lock_bus(adapter, flags); } /** @@ -598,7 +609,7 @@ i2c_lock_bus(struct i2c_adapter *adapter, unsigned int flags) static inline int i2c_trylock_bus(struct i2c_adapter *adapter, unsigned int flags) { - return adapter->trylock_bus(adapter, flags); + return adapter->lock_ops->trylock_bus(adapter, flags); } /** @@ -610,7 +621,7 @@ i2c_trylock_bus(struct i2c_adapter *adapter, unsigned int flags) static inline void i2c_unlock_bus(struct i2c_adapter *adapter, unsigned int flags) { - adapter->unlock_bus(adapter, flags); + adapter->lock_ops->unlock_bus(adapter, flags); } static inline void