Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp457467pxb; Thu, 23 Sep 2021 04:02:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw2nbUBT1oMyzdhyNmUtIfmtpKblfynUZp+aCbDMEYlLgHClQRKfQdadIPXOQCd688Zkpea X-Received: by 2002:a05:6e02:1ba3:: with SMTP id n3mr3322568ili.253.1632394962457; Thu, 23 Sep 2021 04:02:42 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1632394962; cv=pass; d=google.com; s=arc-20160816; b=iR18NVgFJ9MR22KpicgRBdRB/sBdCWViuvOI5xqsM1bavRpF8j0B1nxxSiUQA8lhAa +5evhTZz7Rze8Pq2TPrKHVnpPpRhJn0o4G0QWPImTf9BXibtB/OL3fuTuPkeWFhPpoqR m0Lq3FzxiM8KW/7GE7NzQSL4qfq1rVBHk90VuwN7JPr91SFC6iTybyCflgEPUXnbSMFu He4AFxLNbbmhxD/9baB6nF2Z8Gc5xj4h/U/P95OGbv6K1kJoudyPsFElV/P36MCTkD9T Y3/CmNs4JQIZR8Lkc66U6fPXLh0NdESihjkv33hVM1YN/7QVDC35i6BKmpSfNh2H8VUm WfiA== 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=XkNim5Upv15BilG6gSXnmwwW9jSE+qvZPNitUH82U5I=; b=aLyBEdRqaMnAXV61CYz0Yy3zDNQxdLnco7hbGcb6uIItKvpQAsR9uXwu+N0VoXV58u BGdsgGGDGj2XCBzn/HnJZWzTC8QlBNZG+nv8HWaiMP4wjUAtnoEvQbF2m/L/bw1Y93vs PZXbmSPjGtLql2MtN/nXMqedssm1fHduNVnBoplxIkkKDxrc6xkdqHu/N5hMNSpIdsJk EKnGKLLnH5EzmeTlnXTgxgQpSxuAV/3nkMi7Lc7oiLoruIg/4wTESDHRlh5ot5u76vbk cbrlf5br33mwIdlQwNNacVOT0P/WHQ90S0nmy2p2ItbIIsJM/noSfWG3uzZ+iWVnnrAg N3Qg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=L4QZBmVk; 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 t19si5500278jac.62.2021.09.23.04.02.30; Thu, 23 Sep 2021 04:02:42 -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=L4QZBmVk; 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 S240526AbhIWLC4 (ORCPT + 99 others); Thu, 23 Sep 2021 07:02:56 -0400 Received: from mail-eopbgr40073.outbound.protection.outlook.com ([40.107.4.73]:54915 "EHLO EUR03-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S240529AbhIWLCw (ORCPT ); Thu, 23 Sep 2021 07:02:52 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=S3XGUbl0w6nRg97NNDnko+pSFJqjJFfNEURAP4c9WFqji1+kfnKf9apU6Z6WFS/FgldPT2a6AqucCm6KnVgH3GNf14B5X/6d3Y08Svp3R+YtwQ/Q3Fmh/nmOkIoJAKg7jmR0WcrXpAbmJS5uf5eEsfa1S42I+A9yQ4pKB2MHZARDafTmnET2SzaHEVRnU4uZ5GhBzAqYRwcN+VyivkGu5SCREJwcSSTkvl+Dnjdlrt1IE9m/2nfiIR4KwnFegt1IjVnEb4/X5IWQovyJ/9ZxC2mgpP5OKUdQAxMAU+jGAV5JoM4Ryfh+JWt2NZqR4Q3WhIIelNEsK1LNtgZXEHg42g== 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=XkNim5Upv15BilG6gSXnmwwW9jSE+qvZPNitUH82U5I=; b=gL20nIKXAL7LD8rcVucgHTfLrO4L8Cgr3Ky6dIDrjE9u7bGln28KJgZsXvyUVCrkq73Lcwz3pTPJWC33CCzIMYQ7Aag2CSiFk9v0vcn4aDGB47OkmXZlQ4T+HKlb6pTNkApFxTbQY0x3i+63Zs6oG7+AdMJoBtu71fEqCq0hskjQfkoZd8esAaLQl95qOKMSdoHAl+BmUj3GNyi4cH9vf3hKzBvYqR91a8EFU0Uge35IOxJTZYR50nae8gByffQs2Uh28yc/SEotk3uBepsaGNh24A5aLgWBGUaEeEPfrrkioDdirvh1jgEuNg0Ge8WA96HJK2Rc8IFhI4v78XZTDw== 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=XkNim5Upv15BilG6gSXnmwwW9jSE+qvZPNitUH82U5I=; b=L4QZBmVkXFvJXPukdejsM+Ktvaape0wsS5VmBE+3ZpSsOChCKK81jTzhaunMd+yKfVDo/qYELNzamrPY1h18nFSMsBsj4lXmFxcM0H+z+DZaJ5rLOkNiJlgqlsnDIW3ryV9/H/iKshEW/RhOfvFJSBV5H0A+e/UbU72nZMTnv3Q= 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 DBBPR04MB7836.eurprd04.prod.outlook.com (2603:10a6:10:1f3::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4544.14; Thu, 23 Sep 2021 11:01: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.4544.013; Thu, 23 Sep 2021 11:01:15 +0000 From: Joakim Zhang To: srinivas.kandagatla@linaro.org, robh+dt@kernel.org, shawnguo@kernel.org, a.fatoum@pengutronix.de Cc: kernel@pengutronix.de, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-imx@nxp.com Subject: [PATCH V2 3/6] nvmem: core: add nvmem cell post processing callback Date: Thu, 23 Sep 2021 19:01:06 +0800 Message-Id: <20210923110109.29785-4-qiangqing.zhang@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210923110109.29785-1-qiangqing.zhang@nxp.com> References: <20210923110109.29785-1-qiangqing.zhang@nxp.com> Content-Type: text/plain X-ClientProxiedBy: SG2PR02CA0004.apcprd02.prod.outlook.com (2603:1096:3:17::16) To DB8PR04MB6795.eurprd04.prod.outlook.com (2603:10a6:10:fa::15) MIME-Version: 1.0 Received: from localhost.localdomain (119.31.174.71) by SG2PR02CA0004.apcprd02.prod.outlook.com (2603:1096:3:17::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4544.13 via Frontend Transport; Thu, 23 Sep 2021 11:01:12 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5e60a49c-6d25-4f0e-68b4-08d97e81764e X-MS-TrafficTypeDiagnostic: DBBPR04MB7836: 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: 2ilupEI6iChT0D4t+qCxESwUmQbKEUs/JgzC1O3IzFcJHXBSxUkrNKHj++CEN+6UNavBemSDaZxes6DX5jMLFJt1UjEP9SZQyuXkwbktZyM4E19GkUxEVhI52CpHSquZwvi6y4lV/B8NixRgY0oTYTIA2H4Er0P9RZsTojgLeQ2crCVlmM5kbctwBZh0iNCINYWC93laFvxeD+I5kQjOfekNBhCVrdK9xyfiPg/eZwivr5psPtPSBUMKsgqUgv1rvAj8Fk6w6kE/IH1w+Vfqnxaoz/Md2dDNMC6onQAIuT/0w3OInRvRe/ZzkBS3qkfzF8XYMEs6C7ikmAQstZtkY/uBEj3k2EpLkh6CoF4SFmv1F5O+WzQuKiyifzYByD4evHvVxlssXIRYj6fG7jIFkWxffqaWJ35z9+rjtfYmX3RW+uSnd0N7Ozbn7E/LwqFZlR/4bFtTu1KLY6ekfZN2yiLIReOZDtcAaNnw81XW8/bq2aibiw8PO/CPFT5SKxyNxlTy049jcvgepR5+v0P4bYCpfZT96y5oT5y5UERei7ti9G/1mGy4wffgtpFybzSQe1rXwyFOmVePNqfCjkmRmDi5u3y1bkXObDa62X5rntR1W/mPo3i2ez/6Oy5yqvImG5jZ/d7bAGSws10Lv4NSHv1qntzPa3QU7HRDg8eBHtjlmM/CjhJqYy6u/PN6mVw9XRxaZuUO+qKO3yWOLGgRHg== 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)(366004)(6486002)(1076003)(36756003)(8936002)(86362001)(186003)(66946007)(2906002)(6512007)(38100700002)(38350700002)(26005)(8676002)(66476007)(6666004)(6506007)(5660300002)(66556008)(508600001)(2616005)(316002)(83380400001)(956004)(4326008)(52116002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?qDlUGJroz/yRlhbg81+A8WePwXOlqsxp2PvyesB45g3Cjc/3X7G5/x8MSxbA?= =?us-ascii?Q?/T9uBOS64JocTfNiRcrPVDJ2MJtbpbPKw+xs4V4Yuydjl89Us0UPViCdYPO5?= =?us-ascii?Q?/x+q9WKfU373H+HRITm4OUHdzf5PBYpc6G+YH1OPEQPExf8BXEyTPUj+KhG0?= =?us-ascii?Q?HYUyl356Lc5FGweoKwlQYjRai+a+TDB9zXMcrlEfkCv1meiPR5djXwvzPHLn?= =?us-ascii?Q?61CmJdj9vOkpnhYuW9ThK2luRDQY03OfVDR4avoD2WnW9eCZyuTOxyNLnBRO?= =?us-ascii?Q?5oF7/DJZDmo46B6FOLs46zzndTF/9zlCjhiz7vo4exdM+qg/a1uCs3eoGMUI?= =?us-ascii?Q?qBpiy/9BnTkUyI+pKvNUKqcWc1NN5ETXvxh78ZVM4USFgi46XN7nB+89Ms9Z?= =?us-ascii?Q?hTWadbtXW4zsTesp7OANA3mxTuvezkD2CvJqWS3qbp727f0jzSol3Gsphp5c?= =?us-ascii?Q?397/vO2fPK+42eJ6zVDJAYWSh2PlJ/w0PXJmJkYZ28gPnp075vWbquZa4PJy?= =?us-ascii?Q?Ne2hG/JxMVQRRcuDtOc2VKGJ20kwMUBH+6jD0x9v5cUhQqyiqqpwWXvTPMCQ?= =?us-ascii?Q?YMc+1pR5U1HJWIZphTEW4I4tIbJ8R/wMb4BeezRkYoBMcTzCiMC5OLGC/SSv?= =?us-ascii?Q?wAe93HGMMMfQOF0AvyYBH2bAYhYrD74Yy3md9pdQoIkN+BNdL7e+KNq/YdKl?= =?us-ascii?Q?2b0Xxv+R0/QwYOxYfTLiKhy4DzJG6ZF05ZqQNrrG6Kx1LZ9TK1Mf9IL6sN/r?= =?us-ascii?Q?fySz+3MTnVZjdMcieVp4MmmjH2i9M6ThYb76UkAMhSaZTMO0Sdce1YbpABeq?= =?us-ascii?Q?Hjs1IXMggrq0eSkDnl8oYL8ekQUzWZX+OxNeC11fH85TORjYQnCmdVoi4pTf?= =?us-ascii?Q?HkZngo1ruN39LcPtZdsFigEJFblv57c5mF3LVz+L2HUsYaC0OXwFdv9G5vq0?= =?us-ascii?Q?6budI49L7O1DNw9JRJIhFwiPaHsDKd5I8n1xunfpycQkTl3Aue/9TuhQtGQi?= =?us-ascii?Q?EmIFHA3cLBNHJA1izC5Fs3YhjPpOyBHJaZrSaKnIxtq3wArx9lGuLXKcb50t?= =?us-ascii?Q?RVFiTF2ze6CBw+K11wEUH3qktpIeQf1uySWx3k6t9FqbBD8XORm5J9PnUx0V?= =?us-ascii?Q?B/xEuGozjPFGvOeQn3W6orX41Fr5lMI33wwkMTubyEPjVL43p0zfR06G3kBt?= =?us-ascii?Q?dyMAOzc5TGSMq8HV1iKk7fzpidyWD3s74iSdkbprh8bVUP+JPGl0BbLUB248?= =?us-ascii?Q?LrukQLL6aJcUtEyUsqYB75R1qt/0KVeHDOjblHiUh6ZvUuUOLpSGc8YyuN9Q?= =?us-ascii?Q?DfSmRVy56RdvmCYgLCHRJ9ZN?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5e60a49c-6d25-4f0e-68b4-08d97e81764e X-MS-Exchange-CrossTenant-AuthSource: DB8PR04MB6795.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2021 11:01:15.2218 (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: nllJNar/ApKDLezkzxjXD8Cb2qI3GRFdgolxxyf34pzZtVy3fhvEL6+r1ABcdkl8YnAZE6UQ1toqt5oKx7Tcyw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB7836 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..be555bdaf189 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_post_process: 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