Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752035AbdHBH2S (ORCPT ); Wed, 2 Aug 2017 03:28:18 -0400 Received: from mail-eopbgr10105.outbound.protection.outlook.com ([40.107.1.105]:45235 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751190AbdHBH1t (ORCPT ); Wed, 2 Aug 2017 03:27:49 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peda@axentia.se; From: Peter Rosin To: linux-kernel@vger.kernel.org Cc: Peter Rosin , Wolfram Sang , Stephen Warren , linux-i2c@vger.kernel.org Subject: [PATCH 1/2] i2c: mux: pinctrl: remove platform_data Date: Wed, 2 Aug 2017 09:27:27 +0200 Message-Id: <20170802072728.24586-2-peda@axentia.se> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170802072728.24586-1-peda@axentia.se> References: <20170802072728.24586-1-peda@axentia.se> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [81.224.168.30] X-ClientProxiedBy: AM5PR0102CA0026.eurprd01.prod.exchangelabs.com (2603:10a6:206::39) To DB6PR0202MB2552.eurprd02.prod.outlook.com (2603:10a6:4:1b::10) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e6701fdf-6957-4080-da7d-08d4d977f7b7 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(2017082002075)(300000503095)(300135400095)(201703131423075)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:DB6PR0202MB2552; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0202MB2552;3:sO4g7BfVN+osw8eTuAm7bY76mrFdfFSKpKma5SEjvsMqUzzG3rzV7PZ/MF/Cs/jiZ29AipLTVgCVcrFgcNKMqR0xG8+CDJEPNVD329jFJ2kZJEIj3RPOIeslv7ytyPxgEQ7fX1rQqhSHEA4Ps83Dl2mwjyjk3mVwWKI8YXiNK4LnGRk8fxzUmhqiwdUmytDjH2iV54gscse5a6m6E2vM1uuosgnZoJAbSzbyrhXHAQxds2Qa4QkDtSkhlB9/9B1xb4afvXqxPqohdhZ0leV+Rfzj0yUkLGd7VC24oH/LwHQC4Z8mJZTRuX67R9FpNAAE2uVu6gHpMGNgXni6NZBwSPe2q4V9WAht22KOlv88tLlRcMedFTCkbvSLHl4tWuVRRv1VKqUuIa70oNze8u/eFVjEU7L6KyD2m/el2SAS3O844/OI4pOHZv7mkclEjQqzrO9yL2mXd/rzoi441DY4zzI8iNtHO7i039vNO5shcIRLwgzhEKJ3kvVbEYNNJjPixV2Wqbzu88eigFIFXYQPFbO8EPJs9+lyPrcb+gwgQIWvs47qDoryNqCmx1Mk7HLDpA5if4C9iimuIWohq5J5A43maoVmy3YrCU/VI0vYWT7pKrGn6dObFFTzrnGmuQL3z472PTSI/opLM0dryMLZyoyKxbAPnZnoGxsku38bjiowgclAapJN6Ljfy+T0ZU2zdb4qL2xgtOy70FvGCAUAUysUGki0o7fxc1NJVbT/ZtOhbrm4PWi0Gg6evL2l7x7sBDBVpQGjI+8Is1XgAjkv5dcYli8QWD++kwkc2gK0cGY= X-MS-TrafficTypeDiagnostic: DB6PR0202MB2552: X-Microsoft-Exchange-Diagnostics: 1;DB6PR0202MB2552;25:bo4KmNNxYw4AaU0Xw6a0rWSgUq1XcW58qSU9cKUGyQwGiQ5cpjBP53js4MHGvzMUYLOiKQ6HdBT3eE1hmo0E1rzZZRByVLZd3/w36LWoFmDLoAj7E/N1B3QBKLZe4nJab9z1wtsDuiJsEm4q58aWQUYJtitkL52Xe8VotgVhLcGDkGZy2jg72OsJlgFPD/g+lQ86me202YpiKObm+KOAKFvgDzZL3Vr3NKJPUJT/QCuGL0BOYyoErmWNjoOQ8r+4E1GHYTW5j0lpIEM9LrShCKe5oqTfnhJ7Zep6I0Nr9sl60Ao4IssbEkRZobxRINndtpHfCgyg0i7DHxsbLQ3Qb+gaZa5Vh4Fih5OR5IXk2bESofwSwbPTUgl+cg9rL/72s//XRNZ80piCZvoTQ5fCG6KJL7JZHep2Eg+ZZltC8YvyNyKo490I+ihMJrZAO4LQkBTaIRdkh9myf6IPujOYYWctrIUyA550/09Hk8sbarnNM8keuoEdGVIqc0AuuxYAz0Nx51G57U2d6fCg/qo1+CzzDZfC2loEGSvmJ3ql0jlDD9ePioGQd/643xOGTGc68MURhBoqRFQV6yLG1C+9fU/rGelHEgzuaYo1oMxpNZUPRL8uS25cgXB2afkKJe0CH4HdjpjJifNbAVqEn9eWtH5jmAIyaSpBCl/zeYOt1RXiUCS0hlubGlTB0g9MvPzGDcj9/D8jde/7vLlV0WNs6V4N7JcaXlDq5qdfrJ+iHJgBaHp8qgFAQ6ESZCtZj29YSQ+iW87vssCegsfITtfLipc2zQInZ0YelyJAHb9WHgAub+Dw6x1sd5CSckcfvzoT2YH1tp3GKXcw1P+jhMeYpXezSbrjPWe2KEsVM7U5q7HuomIlpYemcPGTResEHqFeQ/5tr0lUiY0EPUOw8lR/Wh4iN6BPAfv2RJ1193u3Cr0= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0202MB2552;31:2p5PnpV0R5ii92d5lW1kDTNVhq2m6aSR/hGRVa1cFdXYtboMmb56QBeUqskyuKm6j2eUc8mh3TNsKmfdfErek+d4CSxcrYrFRdDslMCmjaFGP6MajlqIESpDJtA/tCXY7U1t8k1vHAW8U4CNDFBOyENvMVWrpoJojQe6jn559OrO0q0Ifl+KsnVOEOuzFcQkAB6ULZKL+lcipgryhKApyvaEjH9wAZ4OGJX5YNlaWT0ICU9EnMzbC8KKBIwUnbbdSIxktt8hGkEkdZniNa9JeeK0+TJgyuE5Z4HE4jJ8OZjp4u7iuisneUpmvZudMCm8ois0OFBLJfmyaXg7HudJwfl4GqJTR63zIqYDAQ+u01vzrq8Wiu0exl8eDh4m8Ghwaeb97XOEBv2KP72RAQk8Zg96xPz82joh8cOZNxD3+JwmzdekI+eVh32OGIcqQ2D/JI/GG7enpENPwLWCItQLd9IGHpdCh85ZTNW8+SAj+xosH+BQ27E3IQIypRRLFs8Ks7jThki1ia6U/Q5+uYZwzMp57jSD/L+00/Q1NJAJ0xeSviy4vdxoPuxwOt4MAeI3XMsVPWrwMwwFwZZc/N+/8SpXWdWpCPCcdVlqYOkMuJNZqUEAcXSQAvMXVA1eqhug5Ai39DYtMkfp81YsO/JfgExNiR07Mr260DaEjlFcjQU= X-Exchange-Antispam-Report-Test: UriScan:(250305191791016)(22074186197030)(131327999870524); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(93006095)(93001095)(3002001)(10201501046)(6041248)(20161123558100)(20161123555025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123562025)(2016111802025)(6043046)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:DB6PR0202MB2552;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:DB6PR0202MB2552; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB6PR0202MB2552;4:fM9F8fYKi4bpQ4E+RK6G0PbgU6pFPekB1+DJU854?= =?us-ascii?Q?CstVQxz3swWwx4migNAdgtWpuZL9VkQlB52G6TFigzT8UWSCQ5THNwzCT84d?= =?us-ascii?Q?Pbq8w6ST7tOarZO53fYw8YlGcTCU/II6RmvMIyw30fM9ujy3wz5DiFx0urrW?= =?us-ascii?Q?b04x8tjnwvrSJ4Fzbxp9AnipyJeCrcZlqHjN7LtIA0eMQu+ktsm1kw1pSDp+?= =?us-ascii?Q?hC2Ri4m+pJcl7fLe9xrhZW99fRwXmRIFYDm4CWVbHmBdRJ7D72OnvwzJSncf?= =?us-ascii?Q?uxgFh0QA8ejBnoctyrUa2Qy6JY3ICbhjZwz/BbkD7BBjjFqPuMbDjAZOEb1S?= =?us-ascii?Q?bVM2IHjcl6eF7d38SVafLTx+/pr6dnyylEFGvgNJu/bqNP4a1xq3KQNWu+9o?= =?us-ascii?Q?Fu08aDrUCKDOV2I3pN+DMGKmib8pLBBXd+admwm5mx9fleYmmc7LDK5KtQnj?= =?us-ascii?Q?f4VMKtDyzgzt6uMM6hc8HvLtMt9KfHGUhBDF9aH/XL/+p0db87hEeiNpUs5l?= =?us-ascii?Q?78ZVWKg6r8Py4pZ6QYj1/Iu/JnjTWx3XoVo7Chnm75mOed2vSqV3iE43chHb?= =?us-ascii?Q?5O7I01Zw2scWFrJjgUS/ZSJ26SbvBzvSKOW9xrqqBV9BrF/0Prw5Wu2j7jJN?= =?us-ascii?Q?EojvFgBDONlsddf3aAty7P2QM6o31v6CWyymMVDsbqvHwqYYRcKzIhRbz1bb?= =?us-ascii?Q?P9q7FamQZebPprrGlkVZJj5QhzbIJr3pOffw48nR1Pw2kxR0Gu2qWnscYAwy?= =?us-ascii?Q?0G3tL4wXgOYCYBmQB0CrmCUTtIwkiFmmoRkXoNzshvfvC/X+Ox7EYdL0eCYM?= =?us-ascii?Q?RjeZs0PGJDOBs3uGWnRseGx64e/aEqvK32CLckHvcbmt8li9S0s41CtjPCLN?= =?us-ascii?Q?KqUtzJBQL0sd13DYjizas1zghG+/sdPJq790R+n2cRW7QFMMCAwHkUGZ24vl?= =?us-ascii?Q?/NZ2nQKAoD3qCV7IltkF08MYn3thfPA23hRrfh89xv8a0+kFN9KQIwP8BlkN?= =?us-ascii?Q?cncf6JtFryF/hiYZQ4tfk8n3dVOlIfnL/e7TdxpFIfloGxh4aAWMoZaW9aqs?= =?us-ascii?Q?HhSZ8uW4OrZ+Jx9PCNigRHcjILAgyug9bsfL/o6k49PA75pixKZOWhYpQkPm?= =?us-ascii?Q?UXWpC1E1kR1jNS1K1aR6HIjES/eZP/7bKIAaV+erzkqj06tDIr++RigmDZOL?= =?us-ascii?Q?L0rcAntDOxD+DpdXigmPljhHoYpCCvLLQ4iMqYljHko8wiI4dZIOciHSbWqm?= =?us-ascii?Q?re06wcuTYu7BV56dm5RDgzAAA1wfwrL17gd5mywm4rdZCqOzS0ghsl3Z4+c7?= =?us-ascii?Q?GuSg/8RQgDpGcH+fw8z0N8Q=3D?= X-Forefront-PRVS: 0387D64A71 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(7370300001)(4630300001)(6009001)(39410400002)(39400400002)(39830400002)(39450400003)(189002)(199003)(7350300001)(6486002)(110136004)(105586002)(50466002)(2351001)(5003940100001)(5660300001)(4326008)(50986999)(38730400002)(106356001)(7736002)(68736007)(2361001)(42186005)(6666003)(6506006)(305945005)(33646002)(48376002)(478600001)(74482002)(2950100002)(6916009)(8676002)(53936002)(2906002)(81166006)(81156014)(50226002)(47776003)(25786009)(6116002)(3846002)(36756003)(97736004)(575784001)(86362001)(76176999)(54906002)(189998001)(66066001)(1076002)(6306002)(6512007)(101416001)(2004002)(42262002)(309714004);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0202MB2552;H:orc.pedanet;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB6PR0202MB2552;23:/WfTSA/rLqvfo1BnuTzZ8bHBrpinTmIu8jr/sRQ?= =?us-ascii?Q?B802j0Ggoonq+fE4SfK7dbtgFDKBwt3xJeLmmElsTzEGr2NgguD1CkIwQDMj?= =?us-ascii?Q?4p1bGFcEDREj3b4GkjaG77eOJBqIPhbIagmTp9U0jQCRmj2USwrQfWNbc+sQ?= =?us-ascii?Q?N6qsqzhdYJ3JdUQGTtUMhYaQFCe460HycvBGzJoR1f9aZqV5QasJhdfYxwWr?= =?us-ascii?Q?7Q3hVEVACd7HFMJlvA1HaDLQ8pVA/rVsbT1XnD2t8eWgNGcJ+xsPAieGtNZe?= =?us-ascii?Q?85/zq2TthVydxSt+PusGpjdFNWfIOppo/L4Ketjmnvhllt0RqkEkZlghkRK8?= =?us-ascii?Q?AMp1iICcdDnS17boqll6RN8XdayyJDClmm8IT/7laYzeuGDbK9fWlCwIFNDV?= =?us-ascii?Q?jwTLQ61msEmIP44WLJAqohhNgYVdrT0ZCnLk8Hbw5j1mLFu16naFvMT6qfcY?= =?us-ascii?Q?ILM74Pa9aTuS+PDHRXCd1dzqUD9PbiI8TZLDX2pkpFcXTYFo/fIx4X9YyI3L?= =?us-ascii?Q?EtbH8MYvKR5BWzzAkekpY02vK09HJexomi9SsJ9TtT1WTIrNoLuJg+rDaa4k?= =?us-ascii?Q?rxg7sOSDYcqKmsT7V/88KqV+B7sLkrKBf5a6rGNv1NR1bMSFTDSnXPyyKfG9?= =?us-ascii?Q?Mzy1uD68y80lU0d7xthoM4iXr5y+PU/rNxZvK2BwOrQwx53JKV5iDo6S8wzQ?= =?us-ascii?Q?m0rqY7iTt/RFoSE1I/fH9Tfyo/BZLLTPIObjFT1rvcRjYbHQvxB+tOixnAPq?= =?us-ascii?Q?EyuPTMsQZXMOKtH/QVo0/UkaMkcoNoAiFZAJ03bihf5Jxx9ELSSF5J99mgfW?= =?us-ascii?Q?JYEhRscSxHY6bzknZGNz3yOkctB0trDRWN9NeUiFXgbEkfu//Ww2ALtGWAtu?= =?us-ascii?Q?DiSKiKNkYVI6t/+7PbnfnaEaClg14aVk84O4SB1sca7xiLXGv3AeLA7l3Ret?= =?us-ascii?Q?rTEv+w5DVFpmqi94M+ab0oaAcTqDlMNUgFaeCtCU47Tj8juNlCAAqf8P1O4t?= =?us-ascii?Q?HemLWxFllurALaSOaqJTpX66AqmRkdPFs3MirIKTplRK9hvC3TA8My8e2UiY?= =?us-ascii?Q?zVg8VxUmfEE0RlJUulvl2UQOFvsCUsRo/VActz7MgPosuG/jcA5e9zC1frql?= =?us-ascii?Q?0xxTs1eysdkgAactttnhRmDFvNi2qajyo8MijVFfyHmctDX6p9ku7sxIQCXU?= =?us-ascii?Q?+EWJDQac11MWB5t4rx/PVd6/bW2ctgJYP6ErNule8SjgTKMDEBWStZSopwU3?= =?us-ascii?Q?sPxVDRqs8VDLXQf1KKtp3SfVtyyoZ/bPtocwu0zPb+LTiVFmMKD2JLt2VNjk?= =?us-ascii?Q?7mvvyyAb5oJmqIx4JEJr7AOdAJBwpHjMhZPiXeiQvXoI3Qdx85riOOEoEp0p?= =?us-ascii?Q?elVUYBWynLYH9BZGRd751eJVwPlbGgDI9TEUGmyqOtJ0LsvJ4V6Q0f6CS2Th?= =?us-ascii?Q?W5fhb5Se4vA=3D=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB6PR0202MB2552;6:cufisH1GzRcDbQL+NQ4CqFZmSuot3MzZf+a7i4WF?= =?us-ascii?Q?weTLw3r3FRob4kzKTAUqSV0VeTn3OiVXsnDxSrG8Rk6KpyJNDMSVP+0ktr2I?= =?us-ascii?Q?iyPbup+H+31Wh6PAw1tejQMbDglswTppZWgnCJ6Wq4ffmcD1gW4S1Oxwj17t?= =?us-ascii?Q?Ti8Fyfd+uL56vjsPevKeV4Pnq/6zPAF78XIc4CNiJ3EqQfmy6TiZa4lVX3z2?= =?us-ascii?Q?Gu5IbQD4jZ1y1dwKvz0HyBd1U9mljLqBLDnBR7CT0zZL5u+UrS7CAA9gDUuZ?= =?us-ascii?Q?RxqDeTwJ60S4LzI9QjU2VAF+6eWS5jGcBIB5eEp7yo7nV79Tr2zakKqvjwLQ?= =?us-ascii?Q?5mUf1ByezluBvPHJUksSK+QU1p3VZ7BSE4zaGF2PHpCoE1aXa0ENamk58EQT?= =?us-ascii?Q?9tq+QgBH8ZE3nauJZMTWOKqJnyO3+CgbZzCrUm2V8qqICJeiBqdDB1yi76UG?= =?us-ascii?Q?dsA9LP54w8DtsZscnNqQTCdPoeYRyCkKA0kAvUSP0qfGyCrQ8lAt1U7Gmg57?= =?us-ascii?Q?LqaHPG/9HMKKK0HbCoEd5vpnkTZTnq+oEh2uG80XySmu/rLIhbeWPU+6u+oB?= =?us-ascii?Q?ZaM2ts7qs2XZ83wd+d0sQ+XFOd6H5ReygCusrAfiwIzioQvjSkdHILCeA3Vr?= =?us-ascii?Q?PmMxxN0wHAHHKl2oI3HC4IxHX2Ob5H4TJszaRIvEDbaQ3cytFwQoDgzRFdz5?= =?us-ascii?Q?/o9zRN7aFhuzY/K2l+NETCZ6dF0VBCVcOmqH+Lq4na9khM5iQhLjA4bLilWD?= =?us-ascii?Q?okoVop2QNB4gg3MueqEAz1U7Z50Kb3QLosNHS7wD4nhXVStX8iTX3W0Kw6M9?= =?us-ascii?Q?QMbqtKhoTj9zpr6saiOEyIbn7YKbIpi9jrWKoC5Ymk1i4A502StLu3+RrpwQ?= =?us-ascii?Q?IB2xSJtyN02aGoS+kYaqiCiRwLKhSvPq/hRepeYwR9/kN+fIYLAiAZzCJleY?= =?us-ascii?Q?gquEoTSB/NLStujeuoox4weqq8XdwJMOQJqdLT1VzHkb0fnHF2Wjjnrv3L8C?= =?us-ascii?Q?hik=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0202MB2552;5:o+M3UyEq2Bpwo/M+LuKN2VAKVLZZGw2+69TnGu7FBXUNUtv06q45GEEpxgT8E3JUbhSmBRkIm9c/Y1UgqL1xi48HqrUH7SFehlQIZ+Hselp8/t4ec8q73kdds6oW+9sWkJbbw7Wm7wayZGIh1PaqzfWHEk4uHix6ueN5pDHrusprfwAxhvKj7F+HYxwTkE9I2tmOQ1zXeS3iJxcL4oSxgbgrsUoHTiCxg4FxEni2jmJwKWlJ10m8hRIDkq5/TMY00G7tt+SFVXJUG/R96LKCnwBA+zP0koMy47cBEkMLEMuqD6K/g5S5qSmkk1ErwcezHTScKhvlUVQ4ZWYM9HFzMBOeN13C3SClD9iGSGxp4OeJAUM8EOd3OegsUlgbE1Zg1aLvmIfd8W2eB7dL6SdsWplBpIPI3B/FLQjgAv+MBNNbimgnvoLeBVdlyce5fgnWEc9/JdYJl2cnEgEtFTTct1YhMikn404Yyy/fLV1ZyLORP94bA+GEVLZ27KHo7Qk0;24:5UmgsdeFDhAWM3GnYEDW/IZ5GomAWIkzaBcmvHoXTHuREjJlBBOC3ZUVd/inUwDsnh/2uz6x2Ar/8g3W8m1OAwTm9JB4Gr5xKJ0MP1c+GQI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0202MB2552;7:Vzx0jrxmf+2KYkEj8T5h7cF/Pi+hw71eIcw8C/EA3CRUJjpEQCqVsfSgR1UBjDk3uPg0O/4RI+WUO0L5f1tPeWbU5HNtF9Z5KGY+1dfeNLsEOc/KndokpvfeT4IRn2eHyXmZWZDbR+m+YGliOexwrk/yi6tIHJLZRHPSbi1BvIfT+EUaFx5pnIbdPCvLDT9XtdgDBQxGTNFyon3aajYFF05aWbuUrD34pWXfX4IGUc+D9ZMCu0o/lJN5ZYVi+Pi+3t2DBU7tvJirS0gRLK3MVViyyxNxaLkQGJSHg4JTXer0KeDKQtv5YeZYzIznx1HwtpCbK39PHTpKI8fuNFWZY79YEUV5ZsXPZz6BYAg71txl5yforz2uGp/dAWMcYv7xPZO/hpcs757RprTynGUU6/0MbQw3RLXxzarXUOsJYoGhTXus3iIoe76wPulHZ+aZjkeKEHuwI8PUPKMlmYt3M35ULbldc2ColitNqYTrAAviTKKd1RGSXdyg4F+SHbG7ET4Dkd6EpPHztsTn1cr26kcGln/d174LfnzEngFaUwH7sGvyKwl0fYl30oAgtxUKjTrBKozgzeVmNqaW7mqoKEG7pikwSEf36Qvz4bfPPVzV/7mb7nIbdiYf6P7p4gqrequzRGsaKbuNqYeJIIqu9lzIfDb8lzFjZ4C4NDpJ5/VaRXHwo/Cn4U2e7cIddGB5H4QmEJ4GXAy/7qWK89uszavlfDhuJMoU+z/b4ZeJ5PpSwlMqMs22NNqQBsLHfEY/CW7XNhIaSqRfmVLW82MQn9EDH+74fv9f4+Y5zT11BiU= X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2017 07:27:44.0658 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0202MB2552 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 11203 Lines: 380 No platform (at least no upstreamed platform) has ever used this platform_data. Just drop it and simplify the code. Signed-off-by: Peter Rosin --- drivers/i2c/muxes/Kconfig | 1 + drivers/i2c/muxes/i2c-mux-pinctrl.c | 219 ++++++++++++------------------------ include/linux/i2c-mux-pinctrl.h | 41 ------- 3 files changed, 72 insertions(+), 189 deletions(-) delete mode 100644 include/linux/i2c-mux-pinctrl.h diff --git a/drivers/i2c/muxes/Kconfig b/drivers/i2c/muxes/Kconfig index 2c64d0e0740f..1bba95ecc7c0 100644 --- a/drivers/i2c/muxes/Kconfig +++ b/drivers/i2c/muxes/Kconfig @@ -76,6 +76,7 @@ config I2C_MUX_PCA954x config I2C_MUX_PINCTRL tristate "pinctrl-based I2C multiplexer" depends on PINCTRL + depends on OF || COMPILE_TEST help If you say yes to this option, support will be included for an I2C multiplexer that uses the pinctrl subsystem, i.e. pin multiplexing. diff --git a/drivers/i2c/muxes/i2c-mux-pinctrl.c b/drivers/i2c/muxes/i2c-mux-pinctrl.c index 7c0c264b07bc..aa4a3bf9507f 100644 --- a/drivers/i2c/muxes/i2c-mux-pinctrl.c +++ b/drivers/i2c/muxes/i2c-mux-pinctrl.c @@ -20,14 +20,12 @@ #include #include #include -#include #include #include #include #include "../../pinctrl/core.h" struct i2c_mux_pinctrl { - struct i2c_mux_pinctrl_platform_data *pdata; struct pinctrl *pinctrl; struct pinctrl_state **states; struct pinctrl_state *state_idle; @@ -47,80 +45,6 @@ static int i2c_mux_pinctrl_deselect(struct i2c_mux_core *muxc, u32 chan) return pinctrl_select_state(mux->pinctrl, mux->state_idle); } -#ifdef CONFIG_OF -static int i2c_mux_pinctrl_parse_dt(struct i2c_mux_pinctrl *mux, - struct platform_device *pdev) -{ - struct device_node *np = pdev->dev.of_node; - int num_names, i, ret; - struct device_node *adapter_np; - struct i2c_adapter *adapter; - - if (!np) - return 0; - - mux->pdata = devm_kzalloc(&pdev->dev, sizeof(*mux->pdata), GFP_KERNEL); - if (!mux->pdata) - return -ENOMEM; - - num_names = of_property_count_strings(np, "pinctrl-names"); - if (num_names < 0) { - dev_err(&pdev->dev, "Cannot parse pinctrl-names: %d\n", - num_names); - return num_names; - } - - mux->pdata->pinctrl_states = devm_kzalloc(&pdev->dev, - sizeof(*mux->pdata->pinctrl_states) * num_names, - GFP_KERNEL); - if (!mux->pdata->pinctrl_states) - return -ENOMEM; - - for (i = 0; i < num_names; i++) { - ret = of_property_read_string_index(np, "pinctrl-names", i, - &mux->pdata->pinctrl_states[mux->pdata->bus_count]); - if (ret < 0) { - dev_err(&pdev->dev, "Cannot parse pinctrl-names: %d\n", - ret); - return ret; - } - if (!strcmp(mux->pdata->pinctrl_states[mux->pdata->bus_count], - "idle")) { - if (i != num_names - 1) { - dev_err(&pdev->dev, - "idle state must be last\n"); - return -EINVAL; - } - mux->pdata->pinctrl_state_idle = "idle"; - } else { - mux->pdata->bus_count++; - } - } - - adapter_np = of_parse_phandle(np, "i2c-parent", 0); - if (!adapter_np) { - dev_err(&pdev->dev, "Cannot parse i2c-parent\n"); - return -ENODEV; - } - adapter = of_find_i2c_adapter_by_node(adapter_np); - of_node_put(adapter_np); - if (!adapter) { - dev_err(&pdev->dev, "Cannot find parent bus\n"); - return -EPROBE_DEFER; - } - mux->pdata->parent_bus_num = i2c_adapter_id(adapter); - put_device(&adapter->dev); - - return 0; -} -#else -static inline int i2c_mux_pinctrl_parse_dt(struct i2c_mux_pinctrl *mux, - struct platform_device *pdev) -{ - return 0; -} -#endif - static struct i2c_adapter *i2c_mux_pinctrl_root_adapter( struct pinctrl_state *state) { @@ -141,110 +65,109 @@ static struct i2c_adapter *i2c_mux_pinctrl_root_adapter( return root; } +static struct i2c_adapter *i2c_mux_pinctrl_parent_adapter(struct device *dev) +{ + struct device_node *np = dev->of_node; + struct device_node *parent_np; + struct i2c_adapter *parent; + + parent_np = of_parse_phandle(np, "i2c-parent", 0); + if (!parent_np) { + dev_err(dev, "Cannot parse i2c-parent\n"); + return ERR_PTR(-ENODEV); + } + parent = of_find_i2c_adapter_by_node(parent_np); + of_node_put(parent_np); + if (!parent) + return ERR_PTR(-EPROBE_DEFER); + + return parent; +} + static int i2c_mux_pinctrl_probe(struct platform_device *pdev) { + struct device *dev = &pdev->dev; + struct device_node *np = dev->of_node; struct i2c_mux_core *muxc; struct i2c_mux_pinctrl *mux; + struct i2c_adapter *parent; struct i2c_adapter *root; - int i, ret; - - mux = devm_kzalloc(&pdev->dev, sizeof(*mux), GFP_KERNEL); - if (!mux) { - ret = -ENOMEM; - goto err; - } + int num_names, i, ret; + const char *name; - mux->pdata = dev_get_platdata(&pdev->dev); - if (!mux->pdata) { - ret = i2c_mux_pinctrl_parse_dt(mux, pdev); - if (ret < 0) - goto err; - } - if (!mux->pdata) { - dev_err(&pdev->dev, "Missing platform data\n"); - ret = -ENODEV; - goto err; + num_names = of_property_count_strings(np, "pinctrl-names"); + if (num_names < 0) { + dev_err(dev, "Cannot parse pinctrl-names: %d\n", + num_names); + return num_names; } - mux->states = devm_kzalloc(&pdev->dev, - sizeof(*mux->states) * mux->pdata->bus_count, - GFP_KERNEL); - if (!mux->states) { - dev_err(&pdev->dev, "Cannot allocate states\n"); - ret = -ENOMEM; - goto err; - } + parent = i2c_mux_pinctrl_parent_adapter(dev); + if (IS_ERR(parent)) + return PTR_ERR(parent); - muxc = i2c_mux_alloc(NULL, &pdev->dev, mux->pdata->bus_count, 0, 0, - i2c_mux_pinctrl_select, NULL); + muxc = i2c_mux_alloc(parent, dev, num_names, + sizeof(*mux) + num_names * sizeof(*mux->states), + 0, i2c_mux_pinctrl_select, NULL); if (!muxc) { ret = -ENOMEM; - goto err; + goto err_put_parent; } - muxc->priv = mux; + mux = i2c_mux_priv(muxc); + mux->states = (struct pinctrl_state **)(mux + 1); platform_set_drvdata(pdev, muxc); - mux->pinctrl = devm_pinctrl_get(&pdev->dev); + mux->pinctrl = devm_pinctrl_get(dev); if (IS_ERR(mux->pinctrl)) { ret = PTR_ERR(mux->pinctrl); - dev_err(&pdev->dev, "Cannot get pinctrl: %d\n", ret); - goto err; + dev_err(dev, "Cannot get pinctrl: %d\n", ret); + goto err_put_parent; } - for (i = 0; i < mux->pdata->bus_count; i++) { - mux->states[i] = pinctrl_lookup_state(mux->pinctrl, - mux->pdata->pinctrl_states[i]); + + for (i = 0; i < num_names; i++) { + ret = of_property_read_string_index(np, "pinctrl-names", i, + &name); + if (ret < 0) { + dev_err(dev, "Cannot parse pinctrl-names: %d\n", ret); + goto err_put_parent; + } + + mux->states[i] = pinctrl_lookup_state(mux->pinctrl, name); if (IS_ERR(mux->states[i])) { ret = PTR_ERR(mux->states[i]); - dev_err(&pdev->dev, - "Cannot look up pinctrl state %s: %d\n", - mux->pdata->pinctrl_states[i], ret); - goto err; - } - } - if (mux->pdata->pinctrl_state_idle) { - mux->state_idle = pinctrl_lookup_state(mux->pinctrl, - mux->pdata->pinctrl_state_idle); - if (IS_ERR(mux->state_idle)) { - ret = PTR_ERR(mux->state_idle); - dev_err(&pdev->dev, - "Cannot look up pinctrl state %s: %d\n", - mux->pdata->pinctrl_state_idle, ret); - goto err; + dev_err(dev, "Cannot look up pinctrl state %s: %d\n", + name, ret); + goto err_put_parent; } - muxc->deselect = i2c_mux_pinctrl_deselect; - } + if (strcmp(name, "idle")) + continue; - muxc->parent = i2c_get_adapter(mux->pdata->parent_bus_num); - if (!muxc->parent) { - dev_err(&pdev->dev, "Parent adapter (%d) not found\n", - mux->pdata->parent_bus_num); - ret = -EPROBE_DEFER; - goto err; + if (i != num_names - 1) { + dev_err(dev, "idle state must be last\n"); + ret = -EINVAL; + goto err_put_parent; + } + mux->state_idle = mux->states[i]; + muxc->deselect = i2c_mux_pinctrl_deselect; } root = i2c_root_adapter(&muxc->parent->dev); muxc->mux_locked = true; - for (i = 0; i < mux->pdata->bus_count; i++) { + for (i = 0; i < num_names; i++) { if (root != i2c_mux_pinctrl_root_adapter(mux->states[i])) { muxc->mux_locked = false; break; } } - if (muxc->mux_locked && mux->pdata->pinctrl_state_idle && - root != i2c_mux_pinctrl_root_adapter(mux->state_idle)) - muxc->mux_locked = false; - if (muxc->mux_locked) - dev_info(&pdev->dev, "mux-locked i2c mux\n"); + dev_info(dev, "mux-locked i2c mux\n"); - for (i = 0; i < mux->pdata->bus_count; i++) { - u32 bus = mux->pdata->base_bus_num ? - (mux->pdata->base_bus_num + i) : 0; - - ret = i2c_mux_add_adapter(muxc, bus, i, 0); + /* Do not add any adapter for the idle state (if it's there at all). */ + for (i = 0; i < num_names - !!mux->state_idle; i++) { + ret = i2c_mux_add_adapter(muxc, 0, i, 0); if (ret) goto err_del_adapter; } @@ -253,8 +176,9 @@ static int i2c_mux_pinctrl_probe(struct platform_device *pdev) err_del_adapter: i2c_mux_del_adapters(muxc); +err_put_parent: i2c_put_adapter(muxc->parent); -err: + return ret; } @@ -264,16 +188,15 @@ static int i2c_mux_pinctrl_remove(struct platform_device *pdev) i2c_mux_del_adapters(muxc); i2c_put_adapter(muxc->parent); + return 0; } -#ifdef CONFIG_OF static const struct of_device_id i2c_mux_pinctrl_of_match[] = { { .compatible = "i2c-mux-pinctrl", }, {}, }; MODULE_DEVICE_TABLE(of, i2c_mux_pinctrl_of_match); -#endif static struct platform_driver i2c_mux_pinctrl_driver = { .driver = { diff --git a/include/linux/i2c-mux-pinctrl.h b/include/linux/i2c-mux-pinctrl.h deleted file mode 100644 index a65c86429e84..000000000000 --- a/include/linux/i2c-mux-pinctrl.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * i2c-mux-pinctrl platform data - * - * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef _LINUX_I2C_MUX_PINCTRL_H -#define _LINUX_I2C_MUX_PINCTRL_H - -/** - * struct i2c_mux_pinctrl_platform_data - Platform data for i2c-mux-pinctrl - * @parent_bus_num: Parent I2C bus number - * @base_bus_num: Base I2C bus number for the child busses. 0 for dynamic. - * @bus_count: Number of child busses. Also the number of elements in - * @pinctrl_states - * @pinctrl_states: The names of the pinctrl state to select for each child bus - * @pinctrl_state_idle: The pinctrl state to select when no child bus is being - * accessed. If NULL, the most recently used pinctrl state will be left - * selected. - */ -struct i2c_mux_pinctrl_platform_data { - int parent_bus_num; - int base_bus_num; - int bus_count; - const char **pinctrl_states; - const char *pinctrl_state_idle; -}; - -#endif -- 2.11.0