From patchwork Tue Mar 14 13:46:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chester Lin X-Patchwork-Id: 13174467 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D7A71C6FD1C for ; Tue, 14 Mar 2023 13:48:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=43xcbcaLBmtFQ/0YZ8TMAexnovXkNql6WZZMgSYbwY4=; b=e8KoJ/fNg+tWec 4jzxpJqSnqesA1qyzcVcD2eoxPyOgOOWhb3vt+N+J5lp0MvbSpzHcl6C6ca3Ns+dRh8E5/xec/PbR M3e+iZgxn02kYxpvk1xkM7LKgA4Fxv8YVpLHCLVVuE5bInD+vCzCJYGkBK1hTbZDhrJeSvAI/ReoC AqjqzNvE99oCgDvQ4H9zl5jz4zcLXc5yVtW9llHq8HM1yDicilhc5CafYrSDZU77lXZpcFTM+dRMV Ug5jof4jaxtZJyZDNqeZAxCZ5ulQpYkrRqftnRjRB3bBy/NaYKxlfqlBGpa2RQbjPERqC+i/l5ZJs pxj2N3ext3yJkPH6zl7A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pc4zg-00AL8J-2w; Tue, 14 Mar 2023 13:47:12 +0000 Received: from mail-vi1eur03on20607.outbound.protection.outlook.com ([2a01:111:f400:fe1b::607] helo=EUR03-VI1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pc4zb-00AL5Y-3C for linux-arm-kernel@lists.infradead.org; Tue, 14 Mar 2023 13:47:09 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=j/mRhNIkkji5QUcgOnhdcRr9SSFtl7BHiMGULB9mIpJ0HAd6xF/n9CyVXqwijR9bJyBvGG7y9dmmr0xxcH1FfWIpwzdCBr4ve0JXPKjfHzWzqBlWZ4e2BV6D3W8Wq8R6//vsNuDL7T91oQ45OgEYkpx3NbZwm6EabeJeV8EB69uKyTSFfgDUAZ+zjf8YFDe/g/MvdatAA7sUJxpxTdsVc9vDU1Zc+3kleTotFx49TTQzrNM2BIYJNu2cHdNJuw+O4XQFdhudZ5pcalskRDQo1pUDL+XFcojvPTGmZOiintedGXK1bLXtlVXxcXHi0Z6dVmE40UUfX2NmLxari/xh5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xfjqW5GlwrTKSJhwwHNfS58Vv86TZipLBF+s2WS+ke0=; b=R62NMDaE0bYWAfGd+PrJqQtl+QXnKdScVGYZFfVseVS05crbY3dwTd9UwJrgB7O9FtLzyQkz+cfifkMYCIaAju84Fn3KsAvl+yk9U5Cr62enuud7WLNgQ3xdYt4s7fLsNiGe6A8dydWbQyhnPAgBiga+Yog75S1W9qhbe/xufSbNKEapzHaQzziiiqSV0x5+FEV4+wnEWcuFy0J//QRI6Eag4i4PWH7vUT8OSPJgJUwBkoM96o0dbdKgukEoYVuRP3Fv9va5Txm4MMWQdJx/ck2D4X8L0YpxWTwyJ3kMCS43t9HBBZ9tBZNKd0B5kEcLzdSXibX3pMFA+8hYquqnvw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xfjqW5GlwrTKSJhwwHNfS58Vv86TZipLBF+s2WS+ke0=; b=GiIiiMmpITB/qHF/y7A2w+hy0ug32WXMU8uw8MB38U0YIl8uj+S94i6CjblexGtsfVQ/aSMc0ljscUDBM3ohVT++CzKLQDugyNmNPaep0aNnLKY534nVOJOrG105B7liq4sEVeHwgB+8HWoRNEE1WrdRgOX/4cWVWjNM9J27CrCJ5RVaRGyv8ppQUCDaC8n+lnDELcDfMHYd3h+rkD/DsHMAWOdXtClHG/ETJfStBz6F67XJs9IXtIrLS7rQOkxhOFQDWi+SEjsbcyh5Fjs8cTROmIEn9iRJsVrKB5t/V81IHP/LXdG+o2dM6hc0jXaJSrR9vGQAlZN/lLs9EpxJwQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from AM0PR0402MB3428.eurprd04.prod.outlook.com (2603:10a6:208:1a::25) by AS5PR04MB9895.eurprd04.prod.outlook.com (2603:10a6:20b:651::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.26; Tue, 14 Mar 2023 13:47:04 +0000 Received: from AM0PR0402MB3428.eurprd04.prod.outlook.com ([fe80::2b1f:7e5:94d0:3ba9]) by AM0PR0402MB3428.eurprd04.prod.outlook.com ([fe80::2b1f:7e5:94d0:3ba9%3]) with mapi id 15.20.6178.026; Tue, 14 Mar 2023 13:47:04 +0000 From: Chester Lin To: Linus Walleij , Andy Shevchenko Cc: Chester Lin , NXP S32 Linux Team , linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Ghennadi Procopciuc , Andrei Stefanescu , Radu Pirea , =?utf-8?q?Andreas_F=C3=A4rber?= , Matthias Brugger Subject: [PATCH 2/3] pinctrl: s32cc: refactor pin config parsing Date: Tue, 14 Mar 2023 21:46:41 +0800 Message-Id: <20230314134642.21535-3-clin@suse.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20230314134642.21535-1-clin@suse.com> References: <20230314134642.21535-1-clin@suse.com> X-ClientProxiedBy: FR0P281CA0120.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a8::10) To AM0PR0402MB3428.eurprd04.prod.outlook.com (2603:10a6:208:1a::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM0PR0402MB3428:EE_|AS5PR04MB9895:EE_ X-MS-Office365-Filtering-Correlation-Id: 8fa5ca3a-a43a-4796-c3da-08db2492987c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jg6pGDevBvNR/VgJz7nwflECvS2rYsqx9NKZmHudggkuvUt9Xv7gHbhcvAJMfvwHkN+74FbLprctU2DKuPna/d7Xxj6YcFsrSR0apAmCGrv1eGYp+sBeGh7o39E7ip3Do/cQWI1viCsaccxNBNnKcniJqRfqM9cFre1+8VRTbaOJu2zYQir3nmECdwN3aI+23aQ+DQ6/prbHNzx77qcEZs4H/EX4miczWolkv2y+ExS0S3egFkGRtDiYnC+UsiTVZVJ/Ra7zUcp5GZAWyMKgPMm4ZcfuJDzaS2EztD0l7lRirXt01oAanIsDm5PUtDeWSsV8WKKbPVwPPlxaaTcLYbO0j0/8t0D6mihZkCfc8Shv28OwcE1l+/QjCwVV9xPn3sheAJKo6p8o+BtLlW0ss7p/b6wRVfIVvZthy8iw17tpS7vxRDRvSbzXHEEUPiCBcBiBlPZG7HJpAmJ0U4Ejzz4RqQ6xZUPubCSPUqzNGVQViV/WqELPDO+U7pe5BaEt3wFrLh0M9Rv8jrdLyvDCgsd5YzgFutm+Gnl2xdRcnpWeCmqcnNZ79BcL91z7MT/Au+pHqcBdovYEI01pUNGxCnZmm2T/icUH54bLsn232Ie+dQ+6V1Wk/Gi4/Yy17c0xK9KyHukZ6yZHx2qHXLjRTA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR0402MB3428.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(39860400002)(396003)(346002)(366004)(136003)(376002)(451199018)(8936002)(36756003)(54906003)(478600001)(110136005)(316002)(66476007)(8676002)(66946007)(4326008)(66556008)(7416002)(41300700001)(2906002)(5660300002)(86362001)(6486002)(6512007)(6506007)(1076003)(26005)(6666004)(107886003)(186003)(2616005)(38100700002)(83380400001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: o4rnbE4ZN7B4KrT5UDRrECFxxXErchxqA+yWUIXJfHoiZxLUtpQAz4csbJAN7IrSGKOIMU1cYsMko77hZ9FTk/5ndtE1gdPxigo5J+pp80CkcId08jTRW9dtc1UQ2J0PKikuNc5sK+w0HbUP8r9syrPBx5/poVyxYFUk/eqBaRlvlPoWfohkXicfjeY+hRJpibqdZpmIFStluB29QpqyqQU5MutoQjiHP69G2exz5nZhZugh5ACxNKm4r2T8qSOQUifKTVJRmo5UzaHH+zVUkgwiVOUgHOKItWtbbMMu2F+c+DtKJu/F+7i0m2EOEFqaXEN2rvB5EbA5h00yEznOgS5vnV1+eW+RKC/cPuULCMmtjL11bJejd/TDTOxnPMhFvX7SDek1El/j1pV5YXGEQjFRuGvqX8tthD6UiTDiYAdi2k4gvO+NyA+idTkQBBuUs3t/baVpq9rY98E0XPjPk+XUCCAmuzSi8sO/I1Svu+h5HP6CLzQcWbVYOe0Fi+36HMiYZpz9RCyUxl3cjglHmnPhAMLPj0UB752iSblg9WyHRHxrws/pxaEt0Ly0EmF2xyZiSOSYMNlLHL7Mxr/Q9MMWxLPcoqaa0HTD0NzBkvPJedfLc/yKffv7AOVB6G2iZ5CaxpP+9+mq2SyNjoi+aJx8ObmKXFdgxw67fahuBJ69ukgNXpfv9wcOqQkOeIq1LDcj6Fo1L7eeN3k0WepeBtcvdeLOU2XTmUYlO+BKsMFV9o4Y4QTL3OUjaejWSOz81t/jT6m/1FyNfVoDipNwjQS2yOp3ZcI3IvVNE9PY6WcD+pj9bwx/A8b24Mh+0lP7sZWahrhqMIwOR8JMmyL3GSG47nV0Y/+5Kzw2lgmZ09/8XlC/v/e411iktKsMvMd92u9Rb/oiZtiGYdwxP3y0jbYxTpx4JOyJ7C1XWbHDOmRq4LWOxKcQY3VHFCoeh88KJhl1d2tL1yXrc1kZH6/f7s4PlV6bDDCCUeEkWQJAicwIzY90CHcktoY1cd7tuOTXZD7njv+dCSSGkHRNdnCFzU8yuVljTJ7S3gZmMQD9znowaWdR5gzlyoOQBLwzXuwzarso0Xlqdjibqtz1AyPLupy9lV7SdjWqYRZM0XKTAvsR7g/DO9OZG8XvJ0SqFyN8AvbroVijyo8M1ClP3mbecc+mg5Z6ZLXuUm2A5QP5cTxCuRHCas2rIqz0vMZGtuUT6tojp08o3XyJ2lO/6PgijXx9XKQF0FYd5kgN9rlRINZEv2v4vMQqsNFRxYU8s+roFbU0l/bX8QmyiThg/dPvfZTwyou0foy3ZX/tmyOGbyBUuDsMj97x0Rjzi1hAdVM09z3nvkdVZt1I5pNJEVXapfwNPVOtmZLNS5W7DjKdUW7uw4eYy1V7ph5abA0WNT3GvrflnY8brYvOB/cYN5LynPV8kyfBAs37opdnd9d0lHpZr0FywDprvw9a56a/4Dlrs+re6zC5f5SPawl4QQ7E8g5aeP9Ep5jJejJu8G8VrBl3dbZ/a5HcJJMQROGuA2GrZ0VFt8Q0fGDtpTMYhnOWHd4CNyuZ+YH1bcCbyWcYG6Y= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8fa5ca3a-a43a-4796-c3da-08db2492987c X-MS-Exchange-CrossTenant-AuthSource: AM0PR0402MB3428.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Mar 2023 13:47:04.8164 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: lQzKEncIBrUvtXc8S5hloaL3Ffxv3M42cYTsFa7l84FuK92FUcfV1VBLJ9OnVgy6 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS5PR04MB9895 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230314_064708_032528_B0C066F9 X-CRM114-Status: GOOD ( 14.14 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Move common codes into smaller inline functions and remove some argument handlings that are not actually used by either S32 MSCR register or generic config params. Signed-off-by: Chester Lin --- drivers/pinctrl/nxp/pinctrl-s32cc.c | 82 ++++++++++++++++++----------- 1 file changed, 50 insertions(+), 32 deletions(-) diff --git a/drivers/pinctrl/nxp/pinctrl-s32cc.c b/drivers/pinctrl/nxp/pinctrl-s32cc.c index 7a38e3216b0c..9508fc1e9a90 100644 --- a/drivers/pinctrl/nxp/pinctrl-s32cc.c +++ b/drivers/pinctrl/nxp/pinctrl-s32cc.c @@ -39,6 +39,9 @@ #define S32_MSCR_ODE BIT(20) #define S32_MSCR_OBE BIT(21) +#define S32_CFG_SET true +#define S32_CFG_CLR false + static struct regmap_config s32_regmap_config = { .reg_bits = 32, .val_bits = 32, @@ -475,32 +478,57 @@ static int s32_get_slew_regval(int arg) return -EINVAL; } -static int s32_get_pin_conf(enum pin_config_param param, u32 arg, - unsigned int *mask, unsigned int *config) +static inline void s32_pin_config(unsigned int *mask, unsigned int *config, + unsigned int bits, bool set) +{ + if (set) + *config |= bits; + else + *config &= ~bits; + *mask |= bits; +} + +static inline void s32_pull_enable(enum pin_config_param param, + unsigned int *mask, unsigned int *config) +{ + + if (param == PIN_CONFIG_BIAS_PULL_UP) { + s32_pin_config(mask, config, S32_MSCR_PUS | S32_MSCR_PUE, + S32_CFG_SET); + } else if (param == PIN_CONFIG_BIAS_PULL_DOWN) { + *config &= ~S32_MSCR_PUS; + *config |= S32_MSCR_PUE; + *mask |= S32_MSCR_PUS | S32_MSCR_PUE; + } +} + +static inline void s32_pull_disable(unsigned int *mask, unsigned int *config) +{ + s32_pin_config(mask, config, S32_MSCR_PUS | S32_MSCR_PUE, S32_CFG_CLR); +} + +static int s32_parse_pincfg(unsigned long pincfg, unsigned int *mask, + unsigned int *config) { + enum pin_config_param param; + u32 arg; int ret; + param = pinconf_to_config_param(pincfg); + arg = pinconf_to_config_argument(pincfg); + switch (param) { /* All pins are persistent over suspend */ case PIN_CONFIG_PERSIST_STATE: return 0; case PIN_CONFIG_DRIVE_OPEN_DRAIN: - *config |= S32_MSCR_ODE; - *mask |= S32_MSCR_ODE; + s32_pin_config(mask, config, S32_MSCR_ODE, S32_CFG_SET); break; case PIN_CONFIG_OUTPUT_ENABLE: - if (arg) - *config |= S32_MSCR_OBE; - else - *config &= ~S32_MSCR_OBE; - *mask |= S32_MSCR_OBE; + s32_pin_config(mask, config, S32_MSCR_OBE, S32_CFG_SET); break; case PIN_CONFIG_INPUT_ENABLE: - if (arg) - *config |= S32_MSCR_IBE; - else - *config &= ~S32_MSCR_IBE; - *mask |= S32_MSCR_IBE; + s32_pin_config(mask, config, S32_MSCR_IBE, S32_CFG_SET); break; case PIN_CONFIG_SLEW_RATE: ret = s32_get_slew_regval(arg); @@ -510,25 +538,17 @@ static int s32_get_pin_conf(enum pin_config_param param, u32 arg, *mask |= S32_MSCR_SRE(~0); break; case PIN_CONFIG_BIAS_PULL_UP: - if (arg) - *config |= S32_MSCR_PUS; - else - *config &= ~S32_MSCR_PUS; - fallthrough; case PIN_CONFIG_BIAS_PULL_DOWN: - if (arg) - *config |= S32_MSCR_PUE; - else - *config &= ~S32_MSCR_PUE; - *mask |= S32_MSCR_PUE | S32_MSCR_PUS; + s32_pull_enable(param, mask, config); break; case PIN_CONFIG_BIAS_HIGH_IMPEDANCE: - *config &= ~(S32_MSCR_ODE | S32_MSCR_OBE | S32_MSCR_IBE); - *mask |= S32_MSCR_ODE | S32_MSCR_OBE | S32_MSCR_IBE; - fallthrough; + s32_pin_config(mask, config, + S32_MSCR_ODE | S32_MSCR_OBE | S32_MSCR_IBE, + S32_CFG_CLR); + s32_pull_disable(mask, config); + break; case PIN_CONFIG_BIAS_DISABLE: - *config &= ~(S32_MSCR_PUS | S32_MSCR_PUE); - *mask |= S32_MSCR_PUS | S32_MSCR_PUE; + s32_pull_disable(mask, config); break; default: return -EOPNOTSUPP; @@ -554,9 +574,7 @@ static int s32_pinconf_mscr_update(struct pinctrl_dev *pctldev, pin_get_name(pctldev, pin_id), num_configs); for (i = 0; i < num_configs; i++) { - ret = s32_get_pin_conf(pinconf_to_config_param(configs[i]), - pinconf_to_config_argument(configs[i]), - &mask, &config); + ret = s32_parse_pincfg(configs[i], &mask, &config); if (ret) return ret; }