From patchwork Wed Jun 21 11:59:54 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dong Aisheng X-Patchwork-Id: 778799 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 3wt3Gr6h5Qz9ryr for ; Wed, 21 Jun 2017 22:01:56 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751144AbdFUMB4 (ORCPT ); Wed, 21 Jun 2017 08:01:56 -0400 Received: from mail-bl2nam02on0054.outbound.protection.outlook.com ([104.47.38.54]:20274 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751118AbdFUMBz (ORCPT ); Wed, 21 Jun 2017 08:01:55 -0400 Received: from CY4PR03CA0075.namprd03.prod.outlook.com (10.171.242.144) by BY2PR0301MB0631.namprd03.prod.outlook.com (10.160.63.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1178.14; Wed, 21 Jun 2017 12:01:52 +0000 Received: from BN1BFFO11FD038.protection.gbl (2a01:111:f400:7c10::1:111) by CY4PR03CA0075.outlook.office365.com (2603:10b6:910:4d::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1199.15 via Frontend Transport; Wed, 21 Jun 2017 12:01:52 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; gmail.com; dkim=none (message not signed) header.d=none; gmail.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1BFFO11FD038.mail.protection.outlook.com (10.58.144.101) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1178.14 via Frontend Transport; Wed, 21 Jun 2017 12:01:51 +0000 Received: from b29396-OptiPlex-7040.ap.freescale.net (b29396-OptiPlex-7040.ap.freescale.net [10.192.242.182]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v5LC1Q1s009655; Wed, 21 Jun 2017 05:01:48 -0700 From: Dong Aisheng To: CC: , , , , , , , Dong Aisheng , Alexandre Courbot Subject: [PATCH V4 6/7] pinctrl: imx: make imx_pmx_ops.gpio_set_direction platform specific callbacks Date: Wed, 21 Jun 2017 19:59:54 +0800 Message-ID: <1498046395-30001-7-git-send-email-aisheng.dong@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1498046395-30001-1-git-send-email-aisheng.dong@nxp.com> References: <1498046395-30001-1-git-send-email-aisheng.dong@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131425201121287526; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39380400002)(39850400002)(39400400002)(39410400002)(39860400002)(39840400002)(39450400003)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(54534003)(9170700003)(104016004)(105606002)(106466001)(2351001)(2906002)(498600001)(50986999)(2950100002)(6916009)(6666003)(76176999)(33646002)(77096006)(48376002)(50466002)(7416002)(8656002)(305945005)(5660300001)(53936002)(38730400002)(110136004)(54906002)(47776003)(86362001)(5003940100001)(36756003)(189998001)(50226002)(8936002)(85426001)(356003)(81166006)(8676002)(4326008)(39060400002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR0301MB0631; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; MX:1; A:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD038; 1:mtTx0hJmEfD6JTEEmxDgkMIr7bzhlmUSl+BcUaVUj1fE2jz9VtbDk8QJLQA1fUd1EjBAB4t3Aadpv0CyPBZafrSbJcvTzmMZvTsW1GwQONYSmcQlGz1efHaa/0KuGQniLKSYk6tka9Y8b9z1QGo1RntllDrMthylwpxsNRRibu0u/RQUrY2Zz2RtodpCTAgXF1PINyNIA1HTnS3eEYS4R5pk+F+5xzNzqsKmDsHpN9dPsrjsuIvO4YThhZ49euhynAloRYs2efH21ZsvKRaFUVxIyxpFUBc7treTODWBCFVm/aLfnnmkv8dAeunGxrjh6AQ+ja9fy0ab9nSubcykCi25QfLXJ/OjqACziC3ORtX3toEeFkl/tcuARJtVXePH9tKypkkEunkAzmWP65eJNtvo0VVKGYo/kL/Ze5gIwkQCRPHMiq6CZWmzk42t0MKcdNyownE2JhmLnHpG58DHsqpjfoLVwKjt7IbW94A2b/OitbO6R4k8kr+KoakVZslOHfI8TQvVdqRU71BkLqNrLSgXIrCIxZV0GAui+427KkSrS0Ce7x0pBD2c7YyMg4IiMYAFBZLrxpCUPWeeyPuSKA== MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 678b33e3-6d2e-4b9c-fc02-08d4b89d4dd2 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:BY2PR0301MB0631; X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB0631; 3:tM0ggZ35hMxS0qu2tkBJOu3AY1tI3PWGmMKMOHfGqUvZKWxUmnS0vNaIHsZYhXQK3dV/vTgqR1sSg6+9cQTBddJUTY02aOdKMOVf8PjG0+14mytqQxTmAlyvkka3dsxEC2AUEtqbyqCwYSIdmmMXwCicgiXixjTuKZgEfDWwopHt5B5eMu25MXBP536Gu7IXif8hv9uzjrcMsn4CctjduhPHGl5HgriOJQzWyhnXteqRz5cQyLvepKsjT/cgb3zB3UUt6wBCL0WFinpS+FCFfHm2UePCpZ3A9FufFft1dOIZ1vXmcno8PQ8ZboD4oXGCDCjwrUWyN066fZNjmoBQYUMvNQM/CrNfXUpESHOooCq49ZAx8KpnYyRB0IIP51XDIrH6bI8fFMssWpZIfaVgJMnCtTSJq1fLcJ2TCDpIJACOiWvRgw3sVpvTGtNQf0jd; 25:fwH3V9hZY6KW5/e5Wh6pbnroMN2sa98FR7OSi9FElbVoPUnXx0kvjZPX4VIFzmfNSf/vkjlbS3JgCjbvPT2JdUL+KiovvuOewJaGYV5B6M4oJkAd07EuUhe5BPmxj0rbmbOcrgqhk8nGdHK4CljBZNphVecg9hXyYkfqc6uzm5S77Ud2sOFXRkA4NqY61w0oOKRgETCkWQPyWb8JLE22NoO5Ls2atbuMNbtebHzXu3yYEvNZLzN355ZWAaRUy+cqeVP2W2EjY+rGnm/0l6JqxbjCJXac8/U1KE2SwJeMaJNjxQg1aiahonKKy/DI8R9vZtIuaVqqDHZIfd0vTXiObE+6OcG6f1YnsqADPts/mr1h0nKTqiMUcTexh6ds7eydivbNTVz6jqqrIV31IQd8FOcI/l4wKckpLisEpyXKMJvI4H2B8zYQXjF782Y6ATtoWugqF8rdicxJu4MW53xQ4Brtjt6Zi4v31zOY3uoEYR4= X-MS-TrafficTypeDiagnostic: BY2PR0301MB0631: X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB0631; 31:TdIPOP9m82hNL1+svkYj7ezdK2Ga6Ub9R4dAoexL+yUa+kQITOxzeEHpklOekmBJ++/Q2Wh/+yTz7ZeYnxLP5RRaJVqzoD9TRScVeIaM+u3BqSEsEtGkge/38BBQUG7b3SWg5EIbfwqUSHZ/3U1Dgc5uJ13ytmK1mUlvtjcdI5aNw0jMZGXjamLAYgA3aHn4+tRSTPilThw8zp2hZlv/xSLeJf6pRy4/ooSdVcapH4SGGADjFcoLGWw0LK8inDQ+ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(601004)(2401047)(5005006)(13016025)(8121501046)(13018025)(100000703101)(100105400095)(10201501046)(3002001)(93006095)(93001095)(6055026)(6096035)(20161123561025)(20161123565025)(20161123556025)(20161123563025)(20161123559100)(201703131430075)(201703131448075)(201703131433075)(201703161259150)(201703151042153)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:BY2PR0301MB0631; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:BY2PR0301MB0631; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR0301MB0631; 4:pOqjKFSo9yure3OHDswW/isxpFkSEFJBFYZ5nKhX?= =?us-ascii?Q?dvxbE33b7+yfFrveolCMK96QGuutdUK/0HTDjHXFME7pEgRv0b3cPcP64akN?= =?us-ascii?Q?c73e97bikMsAnSoJr0F761CbsqUsuUdLMyJHQQfFX7rLd0vC9DCTZbgJ4hhc?= =?us-ascii?Q?8lYPUopixrB0iqN0d8kErTt4KxzEgHL7g42jK41/5iJMZwiifhZiIAfiDSTP?= =?us-ascii?Q?tM8lK/MPZLDBTxX6QD6Qcupy679G5TxplT3X+ZwCisVviz+ca2wR8PdsxMHZ?= =?us-ascii?Q?9gvXQ9JhbDgSymKNnfLmM9SmgGLauufN8SX9/j1B/dhjNW+ITuMX0PqvAKz5?= =?us-ascii?Q?laINiO4SgXjJ4wodQpTHGwsKHwrA0A9Kmm9+6/4Tv6I1NLI0TeJ7FQ9gLvju?= =?us-ascii?Q?/8fRwy5NoKHhfwIpbJGkg4S+gTS4n/o9ZcRfAGczIKSubROkb944nyop8frk?= =?us-ascii?Q?ZqblSHlJD+Xjsphzk30sAM2wnNAM6DA7GzEmN0NKr99fVT/3q/5mn2k+CAYU?= =?us-ascii?Q?f0LDM4XdKBEsU5kfM3g0nPCAXysO602td3cPA/XllOZOYfrS/X6vr+3a4Efm?= =?us-ascii?Q?zV1oAc8k/jO+u9GqwDCdpplTyBoqMa868facz2VA3LDX9fzkDWeKq35g07GQ?= =?us-ascii?Q?8j12C62f4tQXl35GuN2KN9TrVaiIQLQnHvedOFH2QVxk9Aa8fPVPVDmnOoB4?= =?us-ascii?Q?uWHcieozBESYlAd2Yy5Lipy77W3l8Q2iuSCqEXDeJ5KCK1qKlXM/Y8cnjPAY?= =?us-ascii?Q?0mMWwZJ++unT4XWuIKeoZAcNFNwpBgNw5HF6CluCZXer27wyqXzhhpqHgK/P?= =?us-ascii?Q?U1ZUer3YLkBXt/ZIkV4yIRI3gfVWLSPKfo2vtKMsDVd7K3D+RttVaGHBBdhF?= =?us-ascii?Q?jba9QQKjpcEDDdG4dWTz1smiNcA07L7gFWQ9JJ61EuZ4oVDBV4UilvBbyPP+?= =?us-ascii?Q?ETU7zfW31gN47EFenIyuvAI+dj4L0Mt5Sj3AF3TW6t9DK3GO62hf+wza93Ce?= =?us-ascii?Q?DvCZFe6GL5bkkWGyy/kQ4gaFhck5yvA8dezOd6wdXr9ycr14s2XUW4/lZ2WA?= =?us-ascii?Q?G96aK6SdFP3+a7hfG4GRrmWUxOGFf/0Po1nIlLqfvVF/xW4hp8U4BO7NEUCo?= =?us-ascii?Q?/BuNHlA7z+GR3GE+hqHTFoCYtO8KiGTeEcLBPfdF3AOKUy5OWXt6CeiLFwom?= =?us-ascii?Q?D+FR0SNJNR+cQjM8oKXaWojwUpvDEFpqozaJ6DT1EgSzdz+l9fDxKOol5rGb?= =?us-ascii?Q?JLUNo+QwIw8w6d5ayg4=3D?= X-Forefront-PRVS: 0345CFD558 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR0301MB0631; 23:ANfAS4jSFRPioyZ3BEo090kQPmuHNfB2UhEkpjX?= =?us-ascii?Q?ODa9u7A9xgVQFM8+ef2+B36z7Hh+9MfwvLmxFYjfvOpeKF3Z5ipZ5WlJDBgg?= =?us-ascii?Q?qST+xRyMLDKS7T7tQllxD6ySwpJ+/91ANT6xCIV0903xDDlUFuJyjM1YaDaK?= =?us-ascii?Q?MVdN40SmpkYyKXFRz0ro3NQUeEBbGUVUQ/U0ekhzYDjfI9sgL5TqKyGxDsoO?= =?us-ascii?Q?jA0dDfW1X4yWlbSYw7xqyzPRnCAPfqOdV8XzxWML/Fb1f7oUUJwQTn5iRyGv?= =?us-ascii?Q?KdjV19FMzkQ02yXaxX3PYgxcnhCgYfgEjWTKxNZIvezRkaj9GhUR74F+RQlo?= =?us-ascii?Q?fj4Seu+mhcD16R37bbF3kqk+i2BeNOimrZ4zqjv5T3+3/EADOh+nlDngW6u4?= =?us-ascii?Q?D6EVBO4TObaOx0TV27viWWAvOwR+xGnoQWOKI++tzKMfrr2dGmh5mUHiJ09B?= =?us-ascii?Q?dYSNr0kvdiDFv1eIZM300AsgO+L2igQ7S3Np8Uy2bEomioppziU4Bjwzb/GC?= =?us-ascii?Q?m9kVGqj1hsiXne8IYIdWSZsyRnaSYxft8oLhtxV76S+GMMiwQs4hUUUWIF8L?= =?us-ascii?Q?JoOgiHFUcz2SYLo3BG036TzNBWHD2VTKtRlJ42yAk9BD0ImTCZNwffrX0etd?= =?us-ascii?Q?hTLasl+95eSPyTxtJSMW7ZhZgNZaX/ablKOvgOZ28d7vuuBNvxGbcBjF57WU?= =?us-ascii?Q?ZGrZC5/KSbpEQH0OEgRS3YYLjcxchCIayCj07OMZaAZ2snQNKF+4PFSOOXAW?= =?us-ascii?Q?WMH+I77T2WWD6AIwGgkQ9VBif9nxnnZcuClPcYi1IX0/f0JVGw/QeyjhaS5l?= =?us-ascii?Q?KdCqyoUDNCWOPUb0dPYFQaIEpi4SIINfciEvuaqODccs14dMsqas+TVQwIoD?= =?us-ascii?Q?Dg88rZmG9xfvckKFb07w2G+wS7o/s/4UOJW00FNdj3ABSzSfj6jfTBKdOhGI?= =?us-ascii?Q?462xopOOCiIpiOOWXMwIBD+G/JVYC8u9Ed1nby8XGOBr68L4/7BqzArim0e7?= =?us-ascii?Q?fccdXPWhWREDbd1A4HOEEqA38+R3bnvAqelsK07vB5Sn+hggdch40n6n9dwB?= =?us-ascii?Q?D3n6enAQ/HkwfNsXuiMiLE2swrtzoYcvPUEKzJQm4iKd5vpTPNfRrCvLSJCT?= =?us-ascii?Q?HaYwjmFKpmj8sfra7GYneI0AuqfK/m1QvsQ7OlXwV3Me9jY+tzU+HBgexnsV?= =?us-ascii?Q?bE6RZcoDJ6OKPQkvnJJ5rupVrumhl/XGcrqVqDl/eN8vzh6dFe+rL68QL9Oe?= =?us-ascii?Q?TGAO1p2MKpHbsvJV8GB5FAw7mazVjHeLXPvgwOGPbehX0HrjigOHw6nxCu0P?= =?us-ascii?Q?OCfY56KnoH74Tqyvjsm7fx2o=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR0301MB0631; 6:YyUMWL/hTYnX9odCNoFiO3UrOEjWhC7i1cgjvYCk?= =?us-ascii?Q?u6gqWSopCA/015oJ7qzWzK0cLW0aI/Ha99UaJ33l+PR/XZjHOIGCvxUOmeus?= =?us-ascii?Q?76bakhNEI4m11VtF2qAS3XO/z5yBe+dMB2Z9RKpiLHAKnF4iu1auAuQQjezc?= =?us-ascii?Q?FjiqSlBb+yTBb1qfNzxhJ1ktffyVvPZhjmnHVXbPXKXEANJzKIEXC56mPHi6?= =?us-ascii?Q?wZakkZ8NYGuo3i2WtyQnAkjTOnFxoKHaEY5Z9z+uEYUrOTqWlAB6YHwiUY1o?= =?us-ascii?Q?AkOPzpAFOYUFfBWjdwdl5H0BVxWPDDSge375WjaQUJkMvAaCNDEw0/H8yPv7?= =?us-ascii?Q?wim0Dgj8bOcg21msxLrUyzUM1mJf6/TWDENctz40B/0IoQtJWGk79VD4LFI+?= =?us-ascii?Q?KklyQmLpT7iecBY8QaCrQEe5AtMPezP1F7tvrRzyZSIF5srbQQjsMd+CKEyH?= =?us-ascii?Q?jWhfop7+clvunipUaRV78zvedHf3TMsVSB+9oH3KUMPZdMkJQhxtbvSdEuEZ?= =?us-ascii?Q?Xl2vI/W9C9IklWuKJnKmdFgbGjbrXuwbN00NIjeygnFSsJZLrAil5MOPUnVk?= =?us-ascii?Q?6xBj9eqQc+TqPq4OkecG0hTKoEZevcTqstIcRrRlhLf8RdAcCkyUwbEBvaLJ?= =?us-ascii?Q?Bdu3UvVMMN0a5OX6w/OcEEBmRxvVyTDXKcblU2MANFd1RIx9ZnE3QIchNWjI?= =?us-ascii?Q?X3mE1oWdpnRLK4C5xO4Jj5ep32w5H7HoE+s97K5+7KXmVM5vMGMneVVdQ+lE?= =?us-ascii?Q?IwRiZoR9i7jLiJE99LtLM57I5ahdaDS8NKS3wPZCScc13ttzEVveyPIjvxdl?= =?us-ascii?Q?L28iNeKlQMc1u3IJiYGddInhqxeNLESAEaV5PzohcKuHa7qyQme5eHy253qc?= =?us-ascii?Q?61Vw77iHjSxIGeysWZtEDgvW4f5wyVkS3orZxAQwnGdoivLRiZznufNU7SV0?= =?us-ascii?Q?eKFTixCPQAIsZNjTwqPvY8FMuQoHOFXupVbYUtZDMQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB0631; 5:lr2W+rKMHZtvn1stdMK4zv6b45V/kre4mdv7Kali72lcPLRJYaiLbvCw5x2/W/9kE8Ov7+UxVz6qvpXMkSAGC4tcnxZOnLQTWEQZPpekoSpcrxMzZSg006QvY7QeyxkT2RNIUfs5Og7LIchodOMl8WeJzwHk0Sy34dOUeso/4bmOU0LrNou30MLLvfeCL43lY/DUsb+9S7NxSNeVRL/zOrj9i21fintUzQP/OK/1YJzoZVXOJa2u9G26PNkThvz9oD6ft1LqA9nIexamr+1XgQsVRuSA3MX/9NVD/mMs5sAmQHg9ldd0m9qpWVXVIpxZ6QCNQ34hg7snbIRwfab2W/xc7zIwCds50TJuHSUMzJRgWHMIA9RcVDbaM1HJ6SJLzZSheoTmK4hlRL7Uv2I/Gw3oBd8h+rgpMFchNsT4jV3WjHluip20jkuwn6fIQMFRnsUzkcfUX9CoFqQqDv4qYHbu9WLSTFQyQmuk9R5d18CsBl9aDRYb8QNVIUYVGhUTZtUwo6+sLGQZtjSgIGICBA==; 24:GFrDBg1HpaAbu6cc3YXkzicHM4RByLZE7KWciKxbRBHRHY8AcIpFdeZaLKuIrnF0uyPQGj/oZB0hOvNmI9YDykefy3QJdtIwBMP9P+6M5PE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB0631; 7:PF38KKEcFoXotYLUwr1c+5q/jNMKER+7EBd37Y769guOUBoJJKdkFb/jH0NK3Iu6qKbnKEOMTOdqU62WSWIzTekGESW2KGlxIYNuAm7Su6gLEtAVqyYAJ1toDLWxm24xuLLxIr3CX58Vm+GpQeLD+bMP8ZIdShQmRKmSrsaOsf31apbF4jgUeNg4g2DtY/EGj/33u3MbBEICTJ8vIU4tQSO2LXepwt71n68Mo9aUnsUEmQFE9/ZD+DBYaNNnEK10DmluIe/u1m0KvEoyMppELwuj4V92QIKNrsA2YmtS8VOcQ9swy2JnlwzCAKWZ/abPtR+KxB+NPsQ5SdkSx4aHxRWCDtSagPbx80LlpTIPdJgo3mNWTb8wnauTufy8JjWOawr/U8y0O/MQ41yXDxEkvwNdEegmZ8qX2nj3Pe9xVpVMZMM6vnkW7jzV9KR3xlQSC3EzTMbuqRiam94JN6q9JglH8kwHOzydq2FfyV/12QYYzBt/5qs7lEVB/dINf5zWxOw5CP9ShDkkxs/OnOam7WQWaIWK/6zT3/aumHvfB0LwX306ICbel6jyfhR9umeZvTjcSSJBaICggHiZ/8IM9UEJneFG/PYIt/H2LiXocLMtNOCUeaDJq1wq9bxTArrCQjDgjKHBEVgLJOCTbiQlD0gsMTyzwI037lTfKzg26g3Mm1vrWsEv/YaQYuLu2nO3Z7P7EAIOmqVJn4I00389xalYoGaSTHzy6VQgus3yy4PAh12pouLswR/ZaOsbG5z5v+Rw1tWWbBu7S9sqGwOaqYVUwi2q+cb/Z67r5wTZVH0= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jun 2017 12:01:51.9415 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR0301MB0631 Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org Various IMX platforms may have different imx_pmx_ops.gpio_set_direction implementations, so let's make it platform specific callbacks instead of the fixed common one. Currently only VF610 platform implements it. No function level changes. Cc: Stefan Agner Cc: Linus Walleij Cc: Alexandre Courbot Cc: Shawn Guo Signed-off-by: Dong Aisheng Acked-by: Stefan Agner --- ChangeLog: * new patch. --- drivers/pinctrl/freescale/pinctrl-imx.c | 48 +++---------------------------- drivers/pinctrl/freescale/pinctrl-imx.h | 20 +++++++++++++ drivers/pinctrl/freescale/pinctrl-vf610.c | 25 ++++++++++++++++ 3 files changed, 49 insertions(+), 44 deletions(-) diff --git a/drivers/pinctrl/freescale/pinctrl-imx.c b/drivers/pinctrl/freescale/pinctrl-imx.c index 505fe79..ad23e39 100644 --- a/drivers/pinctrl/freescale/pinctrl-imx.c +++ b/drivers/pinctrl/freescale/pinctrl-imx.c @@ -35,18 +35,6 @@ #define IMX_NO_PAD_CTL 0x80000000 /* no pin config need */ #define IMX_PAD_SION 0x40000000 /* set SION */ -/** - * @dev: a pointer back to containing device - * @base: the offset to the controller in virtual memory - */ -struct imx_pinctrl { - struct device *dev; - struct pinctrl_dev *pctl; - void __iomem *base; - void __iomem *input_sel_base; - struct imx_pinctrl_soc_info *info; -}; - static inline const struct group_desc *imx_pinctrl_find_group_by_name( struct pinctrl_dev *pctldev, const char *name) @@ -255,42 +243,11 @@ static int imx_pmx_set(struct pinctrl_dev *pctldev, unsigned selector, return 0; } -static int imx_pmx_gpio_set_direction(struct pinctrl_dev *pctldev, - struct pinctrl_gpio_range *range, unsigned offset, bool input) -{ - struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); - struct imx_pinctrl_soc_info *info = ipctl->info; - const struct imx_pin_reg *pin_reg; - u32 reg; - - /* - * Only Vybrid has the input/output buffer enable flags (IBE/OBE) - * They are part of the shared mux/conf register. - */ - if (!(info->flags & SHARE_MUX_CONF_REG)) - return 0; - - pin_reg = &info->pin_regs[offset]; - if (pin_reg->mux_reg == -1) - return -EINVAL; - - /* IBE always enabled allows us to read the value "on the wire" */ - reg = readl(ipctl->base + pin_reg->mux_reg); - if (input) - reg &= ~0x2; - else - reg |= 0x2; - writel(reg, ipctl->base + pin_reg->mux_reg); - - return 0; -} - -static const struct pinmux_ops imx_pmx_ops = { +struct pinmux_ops imx_pmx_ops = { .get_functions_count = pinmux_generic_get_function_count, .get_function_name = pinmux_generic_get_function_name, .get_function_groups = pinmux_generic_get_function_groups, .set_mux = imx_pmx_set, - .gpio_set_direction = imx_pmx_gpio_set_direction, }; /* decode generic config into raw register values */ @@ -793,6 +750,9 @@ int imx_pinctrl_probe(struct platform_device *pdev, imx_pinctrl_desc->custom_params = info->custom_params; imx_pinctrl_desc->num_custom_params = info->num_custom_params; + /* platform specific callback */ + imx_pmx_ops.gpio_set_direction = info->gpio_set_direction; + mutex_init(&info->mutex); ipctl->info = info; diff --git a/drivers/pinctrl/freescale/pinctrl-imx.h b/drivers/pinctrl/freescale/pinctrl-imx.h index 880bba7..5aa22b5 100644 --- a/drivers/pinctrl/freescale/pinctrl-imx.h +++ b/drivers/pinctrl/freescale/pinctrl-imx.h @@ -16,9 +16,12 @@ #define __DRIVERS_PINCTRL_IMX_H #include +#include struct platform_device; +extern struct pinmux_ops imx_pmx_ops; + /** * struct imx_pin - describes a single i.MX pin * @pin: the pin_id of this pin @@ -76,6 +79,23 @@ struct imx_pinctrl_soc_info { unsigned int num_decodes; void (*fixup)(unsigned long *configs, unsigned int num_configs, u32 *raw_config); + + int (*gpio_set_direction)(struct pinctrl_dev *pctldev, + struct pinctrl_gpio_range *range, + unsigned offset, + bool input); +}; + +/** + * @dev: a pointer back to containing device + * @base: the offset to the controller in virtual memory + */ +struct imx_pinctrl { + struct device *dev; + struct pinctrl_dev *pctl; + void __iomem *base; + void __iomem *input_sel_base; + struct imx_pinctrl_soc_info *info; }; #define IMX_CFG_PARAMS_DECODE(p, m, o) \ diff --git a/drivers/pinctrl/freescale/pinctrl-vf610.c b/drivers/pinctrl/freescale/pinctrl-vf610.c index 3bd8556..ac18bb6 100644 --- a/drivers/pinctrl/freescale/pinctrl-vf610.c +++ b/drivers/pinctrl/freescale/pinctrl-vf610.c @@ -295,10 +295,35 @@ static const struct pinctrl_pin_desc vf610_pinctrl_pads[] = { IMX_PINCTRL_PIN(VF610_PAD_PTA7), }; +static int vf610_pmx_gpio_set_direction(struct pinctrl_dev *pctldev, + struct pinctrl_gpio_range *range, + unsigned offset, bool input) +{ + struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); + struct imx_pinctrl_soc_info *info = ipctl->info; + const struct imx_pin_reg *pin_reg; + u32 reg; + + pin_reg = &info->pin_regs[offset]; + if (pin_reg->mux_reg == -1) + return -EINVAL; + + /* IBE always enabled allows us to read the value "on the wire" */ + reg = readl(ipctl->base + pin_reg->mux_reg); + if (input) + reg &= ~0x2; + else + reg |= 0x2; + writel(reg, ipctl->base + pin_reg->mux_reg); + + return 0; +} + static struct imx_pinctrl_soc_info vf610_pinctrl_info = { .pins = vf610_pinctrl_pads, .npins = ARRAY_SIZE(vf610_pinctrl_pads), .flags = SHARE_MUX_CONF_REG | ZERO_OFFSET_VALID, + .gpio_set_direction = vf610_pmx_gpio_set_direction, .mux_mask = 0x700000, .mux_shift = 20, };