From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161427AbdDUOcf (ORCPT ); Fri, 21 Apr 2017 10:32:35 -0400 Received: from mail-he1eur01on0102.outbound.protection.outlook.com ([104.47.0.102]:40386 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1036225AbdDUOcb (ORCPT ); Fri, 21 Apr 2017 10:32:31 -0400 Authentication-Results: pengutronix.de; dkim=none (message not signed) header.d=none;pengutronix.de; dmarc=none action=none header.from=axentia.se; Subject: Re: [PATCH v13 03/10] mux: minimal mux subsystem and gpio-based mux controller To: Philipp Zabel References: <1492101794-13444-1-git-send-email-peda@axentia.se> <1492101794-13444-4-git-send-email-peda@axentia.se> <1492784582.2364.10.camel@pengutronix.de> CC: , Greg Kroah-Hartman , Wolfram Sang , Rob Herring , Mark Rutland , Jonathan Cameron , Hartmut Knaack , Lars-Peter Clausen , Peter Meerwald-Stadler , Jonathan Corbet , , , , , Andrew Morton , Colin Ian King , Paul Gortmaker , From: Peter Rosin Organization: Axentia Technologies AB Message-ID: <9e3d48c4-0dbc-3e80-c653-b0357abf1d6f@axentia.se> Date: Fri, 21 Apr 2017 16:32:20 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <1492784582.2364.10.camel@pengutronix.de> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [81.224.171.159] X-ClientProxiedBy: VI1PR0601CA0006.eurprd06.prod.outlook.com (10.169.128.16) To DB6PR0202MB2550.eurprd02.prod.outlook.com (10.169.211.8) X-MS-Office365-Filtering-Correlation-Id: 2c79c380-8f20-41f0-77a2-08d488c33b87 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075);SRVR:DB6PR0202MB2550; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0202MB2550;3:d5eA183UopO1fKAhK3lbM0YtjnZgIAwl3bXf3Pot9DO7UnL0kMDNzzDg4l6Ddbg963oE1D7Us3p4kqcZgPjRPlff48uxAlKl0wTepDCbq39p2jGuxdA2/cDh0FKf/jMQJdV1lkBxVwFsidiiC8JdyHQT6AOb/Vlr7ewOCBCIwC2ncJlyspYr5plhq+XQvcuJ90xrYY1AmOqCHPGxBKQE2wakQq2L8+wqSKbALTiupXyE+6up1Ah/A3advfoWrnEXVRQuruGh9jEXaaVbbBJ6R7sBn3QYlChc2jR7MQEj6oU=;25:+uZCehDaizfWrtBxtr9NJ7DMjTu77LVdjk6BuTzp7r0xLKGEHYofr2nHkqXz8gkJp1MrdGVl6FielUz44cs5vUzircpKYSKLKp/eTVEA7mU2FBUaVfeQo+EfWJKVbQ5kR0YufeilRvEQyu6XyyU/9aeDpPPgxQ5lsOeFAdaGbYrAuxU9CaMppoN00gtGB31tVOX5QgKGdAZ80yaTvNooxlZXEbklx5lCFNzMpAekRDIfKN2//++yBF56h5z+5jNYi4/+r0DUCGEX6WnFN64wduCAbzNiDD4+WIGITzCTU711AXiF3BD9nRu1IBrWe5CrbchVyvpz7Z2ndVVKtjVUH4triDaE03S4qV4xhar0/xmYNwvoaKTWqSPMIE+sZ2KYX52X7DD56zV1pl/JgcbbtcjljP+QbhT7Dvsxnf+aIBLYnoTL1Tg5vc4QKw+MHe7D0YHQGz/v8o3gC2iEJg+xMg== X-Microsoft-Exchange-Diagnostics: 1;DB6PR0202MB2550;31:Q0RhkuJqgFvQs1U1D9ptM2pSuWAvaWkofz+Nf8HVCnFDmRCl0VZUfWGWZ5qHU3HdW1odrOA/SEB4wqD2obfI9qMy2v4JDv3u15S3/2sx6ThkNbKQS6L8oXPm0jMeKfHB29+cG8CviQnmxssdVr1qJNRX/bQbXyB/FBgGMUI2KZceOLyTtFTvB0pv2YnH9CHOstsIpHBzOt/dFXwHMcmeOUytnNCOZ4AZgsthzVFepJwWAebv/qm3URxoKwLUv+1yRhH/86C2Aw1kT8bUkgVP7Q== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(5005006)(8121501046)(10201501046)(93006095)(93001095)(3002001)(6041248)(2016111802025)(20161123562025)(20161123564025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(20161123555025)(6043046)(6072148);SRVR:DB6PR0202MB2550;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0202MB2550; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0202MB2550;4:oOdx2g7XUOJ2n0xDMAY6N1E6uu6xJRXmKCX4iaxuHkH4ePwc4s6BY11h0mpoHMj8bI6Lt1TUa4oys55o14XVsYyV4pCLEUTnW3BQbgnfi3VkmQZmwSO36fbAg0EE3sKI+OahfjZGrGlHjp6JgEbr6tPaJ44BukUilzPaop4eDyMgrZe6Ocy7QkpTy1KUJCyAflrpDCbfGVyVW6UQjCPSSRe7J2o7o9Nyc7MehV91UWVy439qah3T3SCTAnFwScLsm0RlpT5tkfKOb9atdASKtSTM8oaEeAyB0nWD10xbwaEB8cUrmEOwWKkhNc3ZuezfWJMSgU7ojJS15mNG9pBpGszs0Op31wBuhIT1vlSyzx6QNm0RA1ddfGZPk4nWzcLCSmULoMbcdFuljHn3jV2nncBwytPCx44OvliqWXJ1oPxtywoIedJXB8X6+/dyYA2miSmiQ7UrxmLo+UviJaP1t7p5EiDlZX9zwvx0dzUVe1DsBnAQ3IKXmC4rgqXWxH+v3nVcEZPUD2BJEIZKETIWBRB0xlHUeg8F0bT4W4F1e3wVGcnZm0ne25jh8ethFT4r3lFThli/dA/B+r5npwp4x57B2pkN3UBiUcdCER9jjfU3FAfdOghbiNXyuBZvMuEQwRp7zruNKAtfAfwspRbq38df9dwE6DWh7KQzMgFCMMEY2MulfLCw1fLadog01+H/FOR9watArNUqIh/WwdLcBnPba6d1EnXmiY7xg1elZ0b6OqrzKgor2nKOLqDVlbFsrL11llwsyLb3M53ku3OA/A== X-Forefront-PRVS: 02843AA9E0 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(39830400002)(39450400003)(39410400002)(39400400002)(24454002)(377424004)(83506001)(53936002)(8666007)(33646002)(54906002)(6916009)(2950100002)(7416002)(6666003)(230700001)(6246003)(229853002)(4326008)(36756003)(76176999)(65956001)(65806001)(54356999)(50986999)(25786009)(47776003)(66066001)(53546009)(2906002)(31696002)(117156002)(189998001)(305945005)(3846002)(74482002)(86362001)(23676002)(6116002)(50466002)(7736002)(64126003)(31686004)(6486002)(77096006)(110136004)(8676002)(42186005)(90366009)(81166006)(38730400002)(5660300001)(4001350100001)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0202MB2550;H:[192.168.0.125];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtEQjZQUjAyMDJNQjI1NTA7MjM6TDd6RTRFNTNNMkZkUkhYZ2RjMnF0N1VS?= =?utf-8?B?YUp0dUZyek1tUUtLSi9uUkxKZnJqdWtMT2duT3pGTnBPMDVPTi9HV25QcHFu?= =?utf-8?B?akh4NzJxbUx0T3g5a0R1S3VURGVCMUlvc1Y2eHlDc3BFUEZIZm5wWmpsazc2?= =?utf-8?B?UUFHc1N1QkpkNWRka2xwd3hpaUl0bks1WkpFcEY2TDJhUm5ZSktVditiNmdu?= =?utf-8?B?bk84eFNLUEdTYjAwYW1keHg5ZnJPZEh2Q2FxZEt3V1U2Ym1CSEJmZ3BORTNx?= =?utf-8?B?em5Vdm42Wno4b2dFaDAwZXNGUG1GZlhJWlBQVTEvekZzN1RtL0xxdnYvdFNM?= =?utf-8?B?Tmw3dGI0ci90dUFzUTU2b2hVc1VHdDZIRzdKYkprMUJoZndxUXRSOWRkK3Vt?= =?utf-8?B?eC9DVURXeS9ORlJLL1IwZ3NhNCtpSVhDaExqUnBDamNvR1F3akN5VGxuSGJL?= =?utf-8?B?THVyYWRLZ3Z5MU9yVzZSUGhTVWUzRk5iRU5LTGVza0hXQmFPeDZSWUNBczZw?= =?utf-8?B?WDBkaTJTNTNRZHQzdEpETFdMYXVDOUtBUmJRMnJsT3ErTVpOTjRUd2JzaUFC?= =?utf-8?B?UHFINnJiR3ZOaTdnUFBVeFRIR2pqQ2xGRnUxQlA5NTFwRmk1eGxhVTFJRVY1?= =?utf-8?B?ODh5SXRiaDFxQ0ZUWTNHbmg3TzdMV0h3MUJ0a0I0OHFCNTFPRmtSTXFoWlRU?= =?utf-8?B?cnpKSW1lNTlnZlQvYW00K2t1d2ZqVE5ld1lLOXhZQWJmdTRreDdrRFhSUXZh?= =?utf-8?B?RTg4TzFlUWdCR2hNNGkvWDJxRnoyWjB5UndIK2hReXY2Qnhqb0ZDWHhEanRY?= =?utf-8?B?UzltclNZektMQi9ZS1hobThkRUhWV1BvQXNRMmpwZjA2bE16cVZkY0YzNmNz?= =?utf-8?B?V2l4VDJxdFJXcXlySHlBVVVTY2syUDYyTXdxTGczcjFlOTFTRDZIWS9qRlNk?= =?utf-8?B?UEN6bThLemRORTRvQW9ESUlDeTZxNnJVSVlKVW5URkxPbHBqRUhwSFpQYmNR?= =?utf-8?B?cUdDaEpVcS9OSjNMMGQ5Z0Z4VGQvV3lRMjVFajBUdFhMeUx2VlJTZ1BEVHpK?= =?utf-8?B?d25ZTkhhQnJTR2hqT29NS21WVDJvM1ZsZkpyZGI5bkdTakZmNnVwR252blJU?= =?utf-8?B?YzRXNUFIazA0ZWxKZFY1cTZkMEY3VThqMjhqeFppM3Q4cElGbW1zUUpqeXZz?= =?utf-8?B?UjJyQmY3cCtMWTBWN0hFV0U5dVpiSDRnQ2g0UzRQQzVvYWNzL04ya1BNUWhu?= =?utf-8?B?OHR1M3p5ZmVMYXJiaTFKM2t3emlMYms3d2UyTkVJS0NkOVBIc3F0Vlh6K25M?= =?utf-8?B?Qlh2b09hYXdXK05RdTY2cEhtTTFNK04xQ0RhVThwdUtWaXFJNTd4ZThHNDBI?= =?utf-8?B?SUU1bitLanBLbjBkcFZnS2pRUTYwREVOWG11VllxanovQVVwSCtnR0dRdDdP?= =?utf-8?B?L1Bua2w1WEd4cDEwQ1psTngvRlM1TUxmSU5rcG90VVhQcjBKc2Q3TmRId1hQ?= =?utf-8?B?U0VwL24wSnB2elJxTUdjZHZqaURkMjFnTTlzTnNuYzR1OUlESEZHT1NmbTZZ?= =?utf-8?B?VmtPZWdnKzJ6VkQ1ODMxd1dKMmsweXNsdncySGxaN0tjWnJaWnNHR1g0N0hZ?= =?utf-8?B?WmV1enZ4SnBkWHVsZDNOV0dSVHV4RFhsOTQ3cjd1QnJqczhUMXV2VVdaamZz?= =?utf-8?B?N28wKzd1SmxzcHdsSGg1SDBCanhSTUkvMkNNSk00SFVQZ0VpNy9LMnRseGMz?= =?utf-8?B?TE5Kd1JCM3NYNTlmNzhMZ0pXNHA1dlhaUUdOWEd4SVZqVTNuL0Z6amQ2NDJi?= =?utf-8?B?dkZDVUh1aml5bmY0MENUUDZLSGxvcGwzcFN0SVFXY1I3VEZmeldXeVdSOFlh?= =?utf-8?Q?o1SV7h3Mz8dgg=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0202MB2550;6:1mlDeX19uigL/byGgkJKl9DjEKU09VDEJ0D9h4IfuMbOUcYZWGWfmdv2KBNNJnH7OYfjU47Nt3JfbpYOqd9qNlU4yRS2KN28q2CS8VyPcRzR3bmOTcC8ojoq+8i/5mMScZakLNHmnPzLv64zr4rAdlTOnYK1yvXQfK2z6EVKQ4DG2Om93P1zgOl8g12ye1ttVgAienl5nqWx2r3Yw8ZXweXkf1M5EK9nToMxAiROzKcPGD1KNRIg2q2/uIvc34z7mi6E7VAk+C3eBwGQBHweb5YESbIwmB7uGyrLoMoDsMScLY06WUcphD3cos5tJb/WMp1Uhp+iPhXfFBmXTbvab8ScrNJd18vxauEOeNcdoGZCpA3xsIiUPjszFx60JH10PmFeEYSJ39zziiMOZ6LYPWKBYXenByVYixdoe0Vjqg9GFelwHlUP2xEOjK8LeO45YOtWR5AjwwV/HNoYrajm8XvleEeaS7rbtUY3N9SfnW1iGRL2/y+7JrSRnFoaOWdzfUFE3/wdQy/nFH/7Z21iAg==;5:YVoTJ3j1/XzWXpT5ovl3LB4fdWyy94GmM1q7mGu7wWg0ExTXYVFgDCsUGXmTTo/glsjwCX3hWAyi1tPQmBfFCoj2q0GahxYzWQWLo6CQlw9joYD6nlF5GFre9oSm4/t6PzNIiO1kU3shdi4B+DWl+w==;24:tJVwQDSQPPe6/f7oi56Si32Lj9V27NWpW73ErAkI7BVCwT6I/QM6+hntzDmJO1PTOZCXiWF7bHUMwVxcgwYH5kzTvzbL4s1sJ1cmWoxlg70= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0202MB2550;7:iPmfIptwhST+NtfmMY2bSMl6wzNgBY+DST/ke29jhHVPrgWTwNnTCjmC1AUtPypwfwI5EoIFk7TmJH1YRJXhTma0IUAiTsXVNZHwzxcsEPudRdwHhXt/fP0fSdqYTA7vTqxlMWZ1weVfKBouljUUyr8mZol/kRtBnn6iPXdfDcFqNVFryWPadtxJoE5E19QvZshQNcR1uvtNNfGfGhYxSDUEcyicw8kFfcdEfs/bTHf5Sx5qFFRXJ6QGMS3352y5bklIBXsvWH4hxQ5F9NCDmtwENnSD1k0bjhnEGcg8BCLKY7zEfEt+/MMB0Xag9MuNc4M38RFJaqr1u7s1dI14Ew== X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2017 14:32:24.0285 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0202MB2550 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2017-04-21 16:23, Philipp Zabel wrote: > On Thu, 2017-04-13 at 18:43 +0200, Peter Rosin wrote: > [...] >> +int mux_chip_register(struct mux_chip *mux_chip) >> +{ >> + int i; >> + int ret; >> + >> + for (i = 0; i < mux_chip->controllers; ++i) { >> + struct mux_control *mux = &mux_chip->mux[i]; >> + >> + if (mux->idle_state == mux->cached_state) >> + continue; > > I think this should be changed to > > - if (mux->idle_state == mux->cached_state) > + if (mux->idle_state == mux->cached_state || > + mux->idle_state == MUX_IDLE_AS_IS) > continue; > > or the following mux_control_set will be called with state == > MUX_IDLE_AS_IS. Alternatively, mux_control_set should return when passed > this value. That cannot happen because ->cached_state is initialized to -1 in mux_chip_alloc, so should always be == MUX_IDLE_AS_IS when registering. And drivers are not supposed to touch ->cached_state. I.e., ->cached_state is "owned" by the core. Cheers, peda >> + ret = mux_control_set(mux, mux->idle_state); >> + if (ret < 0) { >> + dev_err(&mux_chip->dev, "unable to set idle state\n"); >> + return ret; >> + } >> + } >> + >> + ret = device_add(&mux_chip->dev); >> + if (ret < 0) >> + dev_err(&mux_chip->dev, >> + "device_add failed in mux_chip_register: %d\n", ret); >> + return ret; >> +} >> +EXPORT_SYMBOL_GPL(mux_chip_register); > > regards > Philipp > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Rosin Subject: Re: [PATCH v13 03/10] mux: minimal mux subsystem and gpio-based mux controller Date: Fri, 21 Apr 2017 16:32:20 +0200 Message-ID: <9e3d48c4-0dbc-3e80-c653-b0357abf1d6f@axentia.se> References: <1492101794-13444-1-git-send-email-peda@axentia.se> <1492101794-13444-4-git-send-email-peda@axentia.se> <1492784582.2364.10.camel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1492784582.2364.10.camel@pengutronix.de> Sender: linux-i2c-owner@vger.kernel.org To: Philipp Zabel Cc: linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Wolfram Sang , Rob Herring , Mark Rutland , Jonathan Cameron , Hartmut Knaack , Lars-Peter Clausen , Peter Meerwald-Stadler , Jonathan Corbet , linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, Andrew Morton , Colin Ian King , Paul Gortmaker , kernel@pengutronix.de List-Id: devicetree@vger.kernel.org On 2017-04-21 16:23, Philipp Zabel wrote: > On Thu, 2017-04-13 at 18:43 +0200, Peter Rosin wrote: > [...] >> +int mux_chip_register(struct mux_chip *mux_chip) >> +{ >> + int i; >> + int ret; >> + >> + for (i = 0; i < mux_chip->controllers; ++i) { >> + struct mux_control *mux = &mux_chip->mux[i]; >> + >> + if (mux->idle_state == mux->cached_state) >> + continue; > > I think this should be changed to > > - if (mux->idle_state == mux->cached_state) > + if (mux->idle_state == mux->cached_state || > + mux->idle_state == MUX_IDLE_AS_IS) > continue; > > or the following mux_control_set will be called with state == > MUX_IDLE_AS_IS. Alternatively, mux_control_set should return when passed > this value. That cannot happen because ->cached_state is initialized to -1 in mux_chip_alloc, so should always be == MUX_IDLE_AS_IS when registering. And drivers are not supposed to touch ->cached_state. I.e., ->cached_state is "owned" by the core. Cheers, peda >> + ret = mux_control_set(mux, mux->idle_state); >> + if (ret < 0) { >> + dev_err(&mux_chip->dev, "unable to set idle state\n"); >> + return ret; >> + } >> + } >> + >> + ret = device_add(&mux_chip->dev); >> + if (ret < 0) >> + dev_err(&mux_chip->dev, >> + "device_add failed in mux_chip_register: %d\n", ret); >> + return ret; >> +} >> +EXPORT_SYMBOL_GPL(mux_chip_register); > > regards > Philipp >