From patchwork Sat Apr 13 10:32:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srinivas Kandagatla X-Patchwork-Id: 162168 Delivered-To: patch@linaro.org Received: by 2002:a02:c6d8:0:0:0:0:0 with SMTP id r24csp638181jan; Sat, 13 Apr 2019 03:34:19 -0700 (PDT) X-Google-Smtp-Source: APXvYqwZlN4pBNJc814VxII4wAK0R9pkF7R5yCZ51DvElo+m5B8bWLBSbZamFQxobFPI8GcWcPAd X-Received: by 2002:a17:902:822:: with SMTP id 31mr37561997plk.41.1555151659689; Sat, 13 Apr 2019 03:34:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555151659; cv=none; d=google.com; s=arc-20160816; b=f3Utl7I69+fPqFMJsKHh5Y9z46Cezpr2NqkJgzAVIFIkx5cSIhewb597gqnL+LCGVB bY72jtqNOYaao524JHc8gGAvr3fKf5c7qd8kDiafmG/ujpubqb3Ij5mtWUi01qDYKMvg EwtsYL7x302kt409rcYYKWP4cM7J59Mwd2MhosC5M61mxPLbjpSa4ilKArifpNCqR1qk HziiCyIo4vJcAANrgZzov9+z9RMkJ0fwmt5BI7RGiTgLNO0qXGxqvwNK+iBGfmjfDaQ3 uUeLFlXKVj6Bc6cuhwqclSzMEs1jG+RYa1qbNzdAa/G9zgyGnYjT6ehxJYB7U0pe9dtJ O5uw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=susrZ/t6ndqXD8gtL1bPnnTkE0wp/sBtA8tijngjVXE=; b=Vn76ZyZXioFr/3D1B66dUCP0eMel3LsjVp7YROfKMwR8hMrjqdkj3pe66dO0MkrMRw LoRHrSWe2GJxHd4plPkjnqK5l9l7cxUd4A4GyEyx9Zu58OuyHF6H9/XwjmTW2BpgYqHL oKkQ16NljWuyEl79t5D8Ms6+wqqNygm5H3v//YsMEvwDrENFb/52McHKCHbzREqln50r j59NM/egWtzGupyIKHysPREh+cgvwbcCLJEbzaVY7bIN+VOvWkzx067DYVkQvX+ADB1f 5udH0TfPy1yL8Hvl77A2hc7/sT7XAMpt+cfuDxgklcOLIvQgssTfTpibKVL93l4pVUSJ MiKw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=rdLcW4tx; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p17si40394380pgl.181.2019.04.13.03.34.19; Sat, 13 Apr 2019 03:34:19 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=rdLcW4tx; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727548AbfDMKeS (ORCPT + 30 others); Sat, 13 Apr 2019 06:34:18 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:41680 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727222AbfDMKdV (ORCPT ); Sat, 13 Apr 2019 06:33:21 -0400 Received: by mail-wr1-f67.google.com with SMTP id r4so15095880wrq.8 for ; Sat, 13 Apr 2019 03:33:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=susrZ/t6ndqXD8gtL1bPnnTkE0wp/sBtA8tijngjVXE=; b=rdLcW4txUmwM07tUHPT2l3M+l+eVZcPG/na6ShUXFajhnSMt2eiekl30h1qy1i30T6 AsUa8twbaAjzvT21dRHaYu2W3BTGKvkkQRSGBnxGyOtzI7QcUSEcuPEkQ7spBR5nBFh8 6cipjcQvTbdYihOZb9xFpR9MTS+po5v3hqgFY4EAckXeOy4oC9R84gVAnnYAzxBznt/W wmebPIinsysxPhwkPK85tpfpBCl9gKQAyXJWkes3pYRKC0t+Zft5n1EusCaBdN9mkvTJ 6PyC6nVzySr4UNx6X0/183vGY186BTD1jb6PxK3l76B9fiDiEP9actBps1lsfjSlG+k/ Bg+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=susrZ/t6ndqXD8gtL1bPnnTkE0wp/sBtA8tijngjVXE=; b=CVGZfC0UhOWS655Z49wTDgky3UNNjazTIbn5K1uwJ4m5R5cuq0V8NvE5FjcbvsnKTS KyhRAaN2XUDj3QeSMmHYb69egoQcc/QtAhFTrKNV77P+SXs/RZoyrgOZX2QRYTe6ToWy F4ajWJFTWNwIAWncHDLIYUBmPvhcMPfBw6mgzj1ez87OPeKV79DTSO30Mt06MXx6qY+Z 3oNk0jOt9EJZFcHXKTstQE4Z18XEWP6jPIMELhrM6+kecx5UIVFWWnyeWAw4dVIdlLgT t1YvLd45YkqQBEenvNc+jxvZfMvpbjN/XrdBXx/yABM45+rL/lk8LpYdxwIjDYZuNgk9 dIbQ== X-Gm-Message-State: APjAAAVf3qbAyuMBPJpw1MYpXMsZ25lGC3d6oBrTPkhMq/Dh5jowKIi/ CO9iV7TEGa5UY9KyR8tz0tKq+A== X-Received: by 2002:adf:b60a:: with SMTP id f10mr8879614wre.116.1555151600081; Sat, 13 Apr 2019 03:33:20 -0700 (PDT) Received: from srini-hackbox.lan (cpc89974-aztw32-2-0-cust43.18-1.cable.virginm.net. [86.30.250.44]) by smtp.gmail.com with ESMTPSA id u17sm19547303wmu.36.2019.04.13.03.33.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 13 Apr 2019 03:33:19 -0700 (PDT) From: Srinivas Kandagatla To: gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, srinivas.kandagatla@linaro.org Subject: [RESEND PATCH 12/20] nvmem: core: add nvmem_cell_read_u16 Date: Sat, 13 Apr 2019 11:32:57 +0100 Message-Id: <20190413103305.9576-13-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190413103305.9576-1-srinivas.kandagatla@linaro.org> References: <20190413103305.9576-1-srinivas.kandagatla@linaro.org> MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Fabrice Gasnier Add nvmem_cell_read_u16() helper to ease read of an u16 value on consumer side. This is inspired by nvmem_cell_read_u32() function. This helper is useful on stm32 that has 16 bits data cells stored in non volatile memory. Signed-off-by: Fabrice Gasnier Signed-off-by: Srinivas Kandagatla --- drivers/nvmem/core.c | 37 ++++++++++++++++++++++++++++++++++ include/linux/nvmem-consumer.h | 7 +++++++ 2 files changed, 44 insertions(+) -- 2.21.0 diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index f24008b66826..1d00f5671368 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -1334,6 +1334,43 @@ int nvmem_cell_write(struct nvmem_cell *cell, void *buf, size_t len) } EXPORT_SYMBOL_GPL(nvmem_cell_write); +/** + * nvmem_cell_read_u16() - Read a cell value as an u16 + * + * @dev: Device that requests the nvmem cell. + * @cell_id: Name of nvmem cell to read. + * @val: pointer to output value. + * + * Return: 0 on success or negative errno. + */ +int nvmem_cell_read_u16(struct device *dev, const char *cell_id, u16 *val) +{ + struct nvmem_cell *cell; + void *buf; + size_t len; + + cell = nvmem_cell_get(dev, cell_id); + if (IS_ERR(cell)) + return PTR_ERR(cell); + + buf = nvmem_cell_read(cell, &len); + if (IS_ERR(buf)) { + nvmem_cell_put(cell); + return PTR_ERR(buf); + } + if (len != sizeof(*val)) { + kfree(buf); + nvmem_cell_put(cell); + return -EINVAL; + } + memcpy(val, buf, sizeof(*val)); + kfree(buf); + nvmem_cell_put(cell); + + return 0; +} +EXPORT_SYMBOL_GPL(nvmem_cell_read_u16); + /** * nvmem_cell_read_u32() - Read a cell value as an u32 * diff --git a/include/linux/nvmem-consumer.h b/include/linux/nvmem-consumer.h index 312bfa5efd80..8f8be5b00060 100644 --- a/include/linux/nvmem-consumer.h +++ b/include/linux/nvmem-consumer.h @@ -61,6 +61,7 @@ void nvmem_cell_put(struct nvmem_cell *cell); void devm_nvmem_cell_put(struct device *dev, struct nvmem_cell *cell); void *nvmem_cell_read(struct nvmem_cell *cell, size_t *len); int nvmem_cell_write(struct nvmem_cell *cell, void *buf, size_t len); +int nvmem_cell_read_u16(struct device *dev, const char *cell_id, u16 *val); int nvmem_cell_read_u32(struct device *dev, const char *cell_id, u32 *val); /* direct nvmem device read/write interface */ @@ -122,6 +123,12 @@ static inline int nvmem_cell_write(struct nvmem_cell *cell, return -EOPNOTSUPP; } +static inline int nvmem_cell_read_u16(struct device *dev, + const char *cell_id, u16 *val) +{ + return -EOPNOTSUPP; +} + static inline int nvmem_cell_read_u32(struct device *dev, const char *cell_id, u32 *val) {