Received: by 2002:a05:6a10:eb17:0:0:0:0 with SMTP id hx23csp376470pxb; Wed, 8 Sep 2021 03:20:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz2mCVSp2JPr2wcXKLZxJvUYd1d7o6q1wjomffkUAXT0j7MSBn9QYcIagK/QsXiEqO0V6pd X-Received: by 2002:a5d:9145:: with SMTP id y5mr2550806ioq.200.1631096432413; Wed, 08 Sep 2021 03:20:32 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1631096432; cv=pass; d=google.com; s=arc-20160816; b=WWy85PhvlXlLuGLOqCvsppnf6ev3p5lLZXBNNnEb7J3KNBJ/8AWv3wFgTFmh3Bfc6N CWtiBbqGDd9SKsVlzxX4Bq0aPkrV0HNaAIbQ86HZ2naOALR27wfEm31Jl6nBoe4jlWVw X/RyjnOfCn+KKxJGh7seahlG1gFCE8YmIV8XC4XnMmdVlISkJduIhdY99iIxiq678cnZ XU+Xza/bdYEkdM9SlLQkjvg75zWA7QK+tvTUxoHRQpgAT7NGPngsnTQbP9wwzQYnAE04 XLiInqYxnVJbDzbhSu8BA3IWinufFvHCmyQX19Gf/+YZk6G7aIiZjAOLUMcPJ1melXxO bLfQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=xPd0T8X36HrsNg3vw5kvSnuqk2oEYo8T3/LqfwdTLJg=; b=Xj4fhI0jroHomZbVeVrIKka4MOpCukJkUfDyScTf7T2K1WK0uE/wbIaFic34ZlJyLc Hf4bTWHiF3yl1dZHVFUjbZNckND0CoJxSy2Q75V70vFDSMiQpJr40CcrrEb2sMo7Y6e/ O74W2zpo2QpdYyqFJ/sIZzkDHs5kJo/kOj/rL0OgzA9//LyJv+Wumx/ptVwnP/BZBiQv pwZB/Jr7fd6DholD02zS+E7e+4Bn8ainC4m3dX1Mkwqi0YX4J3YxCRuSc0DH9RNQmNZ0 IO0x+M7l5KR2eNWaBN793AnjuIN/oqXty8lPzuho87jK/lQBQONcInQmBHVfWcr87r9n PfZw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b="d2aN/HyM"; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c6si1699231ile.58.2021.09.08.03.20.21; Wed, 08 Sep 2021 03:20:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b="d2aN/HyM"; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1351390AbhIHKFJ (ORCPT + 99 others); Wed, 8 Sep 2021 06:05:09 -0400 Received: from mail-eopbgr80051.outbound.protection.outlook.com ([40.107.8.51]:3824 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1345759AbhIHKEZ (ORCPT ); Wed, 8 Sep 2021 06:04:25 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OoQ6bi/fXSi6pdpvpyvCfQt/YRolUN34KBgtFRW06hGaV5LEyp9oTyScgIfGRlVWg5W/wLPlP6Nq5fn1IaQuDNP3zRKsIjWmta59MxAx9QCORBTzznOUxQ+DJINo76qvlQqRP0QFoUn01t2BLs1dz9LDhi+GwS/rfjt98/kvzJ2jcvDUcnw7ISNsh2/pU5qTrCJs/9f9av92uwMdADccsO/ohOvKxvFW1ZvXAOa7VaToZGRSWmiYrEta7d7T2xlvW+rmGvt7piP9gwtVTzz8YvGwQAEB7zuFYTV5vP6R4ntzGX+WpDglmR8guLiCmYisjJ0wHXws80yTQTnvsF6xEQ== 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; bh=xPd0T8X36HrsNg3vw5kvSnuqk2oEYo8T3/LqfwdTLJg=; b=ZDZwhQdn1ctAeVwt4xyBgVXY13C4ZbXJkSfDw/Z9cWvvmLpiDkWUweLxIE93uvUdYYpferyLTVYyJMNfc3sipuTT3TnPtcDV1PMK+0xWhxx2ZnLI8FQnek4SDNLslVbS1TXXf1lWWk9Z7j5DRkImZXdQfYZ6lsGYogeanCy/Kxqt4owjsOhvPD6Ga9i00NTjRiDOKo6j+RQTY0DzQvmPc4WmHGrJ5eSM42hO47L5K2OSyWPfNusVH2bfa2XStSFtXgUPgraZJFsIGdExa+R+u6EAYn8l5JaoQmIAF860DtbgTUc2DYS8hLZJLvkrAAsRTe2XEtr20AES8VP1gPh6Cg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xPd0T8X36HrsNg3vw5kvSnuqk2oEYo8T3/LqfwdTLJg=; b=d2aN/HyML1UbrwYDfghbaiDbgwPAdTucdDC1ylxsYPAIBwErvK/RqM557hDuNARctlSGnmg6+8TQL9is3obWmEtQYFYroUws7gEHKXOBITFjxTxI5xgJ+lDy7DIasFv9NisE6JaKYtCm3ZBTkPPeRqbW+ufodIzxKA3svhsXHe4= Authentication-Results: linaro.org; dkim=none (message not signed) header.d=none;linaro.org; dmarc=none action=none header.from=nxp.com; Received: from DB8PR04MB6795.eurprd04.prod.outlook.com (2603:10a6:10:fa::15) by DB8PR04MB5786.eurprd04.prod.outlook.com (2603:10a6:10:a8::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4500.14; Wed, 8 Sep 2021 10:03:15 +0000 Received: from DB8PR04MB6795.eurprd04.prod.outlook.com ([fe80::5d5a:30b0:2bc2:312f]) by DB8PR04MB6795.eurprd04.prod.outlook.com ([fe80::5d5a:30b0:2bc2:312f%9]) with mapi id 15.20.4500.014; Wed, 8 Sep 2021 10:03:15 +0000 From: Joakim Zhang To: srinivas.kandagatla@linaro.org, robh+dt@kernel.org, shawnguo@kernel.org Cc: linux-imx@nxp.com, kernel@pengutronix.de, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/6] nvmem: core: add nvmem cell post processing callback Date: Wed, 8 Sep 2021 18:02:54 +0800 Message-Id: <20210908100257.17833-4-qiangqing.zhang@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210908100257.17833-1-qiangqing.zhang@nxp.com> References: <20210908100257.17833-1-qiangqing.zhang@nxp.com> Content-Type: text/plain X-ClientProxiedBy: SG2PR01CA0105.apcprd01.prod.exchangelabs.com (2603:1096:3:15::31) To DB8PR04MB6795.eurprd04.prod.outlook.com (2603:10a6:10:fa::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (119.31.174.71) by SG2PR01CA0105.apcprd01.prod.exchangelabs.com (2603:1096:3:15::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4500.14 via Frontend Transport; Wed, 8 Sep 2021 10:03:12 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 31b81180-6234-407d-3803-08d972afdfc7 X-MS-TrafficTypeDiagnostic: DB8PR04MB5786: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6430; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5tGx2RboWvuMBSyJ3NfXUr1ceYoUnRyvmFcOMU9t+2ijxPpGek64HLVb/Vss4BJ/yihr3W+M2rWZngCxhPD2+8LPTwQcEQqQAOpKYonk5H0DSXARnRCs9fmQyqlfdDGuebpWo+9X2OL/3NSiXbziWwcnJVn2j1bjYyqPbbj5lKt5AYCsxGFewSF+GqyX9E48hmwNRiv7HIvOtElv4y2z1XlslgoVKc3Bi8lejVrOYi44lwa0r9AD3flaNkWnCfUTQwv3lfV+fRLw3UbmPmmnsmnGcpH3h4BKB9vQuJ0D82JYlBixbheUIGobNjYWtWuDVZVj90P5NStULEHQvMqBrW2L+DDamUYGQhZ7mzvlk+FY0Wit3egvtteZk8utU0mEPCL+6TsbdxoXd2ibSZMopyI+s4XfAgQtbWhX2LcYSCfCsoUdCkyj+ZX3X5KxYT5BN/0qU4srPBrs6iBcJNsROlWMZrNuPdI9K1LTKHq3o/8/+EFKUPQF/8DHnqw4f5/uNhmRcFTvQRb+uQdQSyO7DfW2bue9UVs8rqlWW83RcYzVDm1lnrl6xPfePm0ovg6k0CwZlqRxN+MUdbRZ8NXhC4Z04YWQFvDFzbT68Z46AvakR0nL6BI7NIHbsBsns2bw9vVDG7nqGE40RxjnV/6s9Ao1kn5PVo4RWG8Ap5TarUoWy+dtkEtFokG0EII8Q2EDd/Svti8xMcDhSO6we03dlA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB8PR04MB6795.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(39860400002)(136003)(366004)(396003)(346002)(86362001)(8936002)(66556008)(6486002)(8676002)(38100700002)(2616005)(66476007)(956004)(478600001)(38350700002)(66946007)(6506007)(316002)(36756003)(52116002)(26005)(5660300002)(83380400001)(1076003)(6512007)(4326008)(6666004)(2906002)(186003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?loQoMZ1oTYp2vYGRAuajUH4fEkTuzGdlz0R/w9RCOa95fXnuvPvcqtuclh3+?= =?us-ascii?Q?jFXZr8BN0r5HxQbJGa7wovEpxc7R+QA8174jlXsO5Jiqy7t40EZ3sskpCgNy?= =?us-ascii?Q?4dx+eIixeFnX5DDnwG+F4uqwqCp0z6uZ2Y+6TOjfbNTyOdXvvWBWA/Q527Yi?= =?us-ascii?Q?wh3FxNswGnU/O+ru3O0SL9AOQRUJbO699+mLmeJ3cKmE9fIhMxpwvNEA7GHk?= =?us-ascii?Q?q8sO3sAxRNPsYHLYM3c3FgtvIHxSkN3+p4g/n7C5+wHj+FUK5zhSmzjqQyo3?= =?us-ascii?Q?CqcByLiiYBEWbt0GLVXwoqX+STuZGbX96N3w81kFXzI+NcGGEbLm4yAErJkZ?= =?us-ascii?Q?cN4Os296cJxR7I4h39KeVZxg/H+tnoGB0nX8Ya3p/L49EPNcJFHNxfRdiBbf?= =?us-ascii?Q?+TuMOasu3rSr5SXM9hb+06qOtY7E69PsKVRw3EIC1ECIwu+mb7e203flmi33?= =?us-ascii?Q?7buVLnnsjxWzQD1mSNQ++D0cdnfpVIfpdMLhE0xhKv0dvdSXTvm2J0a1rDZt?= =?us-ascii?Q?3P2k9BcmExmzE9LYxo2jdoK+B3mRyX/kCxYnaX3dGq1BU6UyNU+2Y+5oFuT1?= =?us-ascii?Q?qYEgJM4pBHOiMmMiR2hW4tQDBS3F1vxmPKUswDjO2j+q5BActJnLMjBdsGHn?= =?us-ascii?Q?09SRxUCeNmIsvtLgb/lWm/WSvRjDtm4xZAIvXpb3QGdYSCaf9M8uHyZTdE6H?= =?us-ascii?Q?nYKkcc/Dws5Jvjz1IEpeQXt19iFo+FMh4cRTHiHaPAwDzY6ZYWSFHVBy7Oi5?= =?us-ascii?Q?lkQ7yE3FNjzpeUn8SdyM9znYJEcNX+RLt7BmxYf5PTa6/UlM/RXOPL/jfI0E?= =?us-ascii?Q?XmJy28+6SYFRAPE1VYZjEPhEs7CF5crGhcu58A4AFa0EjMkyDN02ZHWtzOG8?= =?us-ascii?Q?0lH6qjT2fys8CtGMSjK8GZJDxkGiA7XrkkJ235S7d2e7XGq4d5o2b+qzYKdR?= =?us-ascii?Q?O0/dbUuuJeWeLMKTIyZWw/mb/dLTtZUvHxBtKZTVTT/WfIThwshnxgsOWhKQ?= =?us-ascii?Q?tweoWezIkEH/YzfnRrLfjLPa3C7nlyqP7oosDMtQbWaOls8a5q4bfcrPsu7g?= =?us-ascii?Q?Z7jWr8N8MUtnSj/Y2AyumGUy0qID6u6h15IESLAOZ2JwHvCLaWUfc2HuJS/X?= =?us-ascii?Q?0PSQR8rTP00SVdzplHP4r1wQhPS94uIxfGDxsGqe0A1c6BabMfB6LOIHTjx0?= =?us-ascii?Q?05tWIO7rOuMSz+leakGqbdw16d0gug1zyALd48wNvB3Q8poqNYZ0/JPmXymH?= =?us-ascii?Q?Eg63L4sSqSYr4mWRisBtS4mAnOvAX3RPqrQB4brahUhrZroJghXMHOlOfNfo?= =?us-ascii?Q?8tBR03Ed9EihPcMT2DV4MOgy?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 31b81180-6234-407d-3803-08d972afdfc7 X-MS-Exchange-CrossTenant-AuthSource: DB8PR04MB6795.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2021 10:03:15.0377 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: FsvLsP3PjMqbJ96Yubijc7qQ/UNht5rA3zTKYbqhKaSdyaCjlSq4neYPPNzB4zSZqdFG9Oi3IKMyOzY3cenM5g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB5786 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Srinivas Kandagatla Some NVMEM providers have certain nvmem cells encoded, which requires post processing before actually using it. For example mac-address is stored in either in ascii or delimited or reverse-order. Having a post-process callback hook to provider drivers would enable them to do this vendor specific post processing before nvmem consumers see it. Signed-off-by: Srinivas Kandagatla Signed-off-by: Joakim Zhang --- drivers/nvmem/core.c | 9 +++++++++ include/linux/nvmem-provider.h | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 23c08dbaf45e..4f81a3adf081 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -38,6 +38,7 @@ struct nvmem_device { unsigned int nkeepout; nvmem_reg_read_t reg_read; nvmem_reg_write_t reg_write; + nvmem_cell_post_process_t cell_post_process; struct gpio_desc *wp_gpio; void *priv; }; @@ -797,6 +798,7 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config) nvmem->type = config->type; nvmem->reg_read = config->reg_read; nvmem->reg_write = config->reg_write; + nvmem->cell_post_process = config->cell_post_process; nvmem->keepout = config->keepout; nvmem->nkeepout = config->nkeepout; if (config->of_node) @@ -1404,6 +1406,13 @@ static int __nvmem_cell_read(struct nvmem_device *nvmem, if (cell->bit_offset || cell->nbits) nvmem_shift_read_buffer_in_place(cell, buf); + if (nvmem->cell_post_process) { + rc = nvmem->cell_post_process(nvmem->priv, cell->type, + cell->offset, buf, cell->bytes); + if (rc) + return rc; + } + if (len) *len = cell->bytes; diff --git a/include/linux/nvmem-provider.h b/include/linux/nvmem-provider.h index 104505e9028f..d980c79f9605 100644 --- a/include/linux/nvmem-provider.h +++ b/include/linux/nvmem-provider.h @@ -19,6 +19,9 @@ typedef int (*nvmem_reg_read_t)(void *priv, unsigned int offset, void *val, size_t bytes); typedef int (*nvmem_reg_write_t)(void *priv, unsigned int offset, void *val, size_t bytes); +/* used for vendor specific post processing of cell data */ +typedef int (*nvmem_cell_post_process_t)(void *priv, int type, unsigned int offset, + void *buf, size_t bytes); enum nvmem_type { NVMEM_TYPE_UNKNOWN = 0, @@ -62,6 +65,7 @@ struct nvmem_keepout { * @no_of_node: Device should not use the parent's of_node even if it's !NULL. * @reg_read: Callback to read data. * @reg_write: Callback to write data. + * @cell_read_callback: Callback for vendor specific post processing of cell data * @size: Device size. * @word_size: Minimum read/write access granularity. * @stride: Minimum read/write access stride. @@ -92,6 +96,7 @@ struct nvmem_config { bool no_of_node; nvmem_reg_read_t reg_read; nvmem_reg_write_t reg_write; + nvmem_cell_post_process_t cell_post_process; int size; int word_size; int stride; -- 2.17.1