From patchwork Wed Dec 27 22:59:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrey Smirnov X-Patchwork-Id: 10134197 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 712A460318 for ; Wed, 27 Dec 2017 23:03:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 633352CA80 for ; Wed, 27 Dec 2017 23:03:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 57E482D479; Wed, 27 Dec 2017 23:03:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, RCVD_IN_DNSWL_MED autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id E9C442CA80 for ; Wed, 27 Dec 2017 23:03:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=rbPHiSKoEdR8bBOj8GXPBvk2EyziyAQZ2/nCQz39pgw=; b=rP/XPT94ktJJw6ouYJ91acD3FI xlUE63vbPeMk1hVstYy2j1V8T6zpOV6LJ6MeAz1IknyStUK8zDQrNlRt/NtHwmH6rHbKh/lodcHz1 2fdWnCv6MVK44PJZdyjOZkveDvX4u8MBMp39fcaqMfLSfM0qhJPEwbDicEpAyKz/Tw3Sox81U7Ym1 papWJuMJNWgcWag1Q5CC92c01XigCCNzhMT3EER+TVGTYVzDA9pkspI7bp9dHy9czQUfN9GoowAqw AA6KqNkZdWYOvboarnlDJ1bEWNpqPzX+D5hew9LmAMg7B3O0wmF7+sWevZo4Mrbkn3ZoLY1sQv8i4 UYeMg+fA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.89 #1 (Red Hat Linux)) id 1eUKjr-0006ZF-2a; Wed, 27 Dec 2017 23:03:55 +0000 Received: from mail-pl0-x242.google.com ([2607:f8b0:400e:c01::242]) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1eUKgT-0004RN-CB; Wed, 27 Dec 2017 23:00:28 +0000 Received: by mail-pl0-x242.google.com with SMTP id d21so20134748pll.1; Wed, 27 Dec 2017 15:00:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=JVHtL8zsGosXkI18QjZhF4Ls+khc4cqhpgZ+ZXjdbyo=; b=imrKc+fqnNCDJ5onSe/L1sltmy9BLsgEX1ql33+FVAVXiKW96Le89F76+tew2R7QlZ nrhddNlGD1eELHeHNO+SGS6mYPl265LUBdWPdKprPrJC7NNpJfZDNCG0IlYtLc6uHoV3 k5ehcqHFoNIonBtHoxUlt2VNXlS890ZdH1ZZLBblGUHlN2C/QxUzxtcPZi66UgGOtNil NfM9tiZZk2eWOF8tgGYPi8dkUsemxNs5HzdNHnmM+ATXKKbpDvQIvnMJ3RP5fCw5E8aE fm1JCojEkyLKXaiyOVqAHmHadqYy/+cDeH4OkPRhTVjB1a2IUy1zNkuOJn/O3J0iR6jj LRRw== 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; bh=JVHtL8zsGosXkI18QjZhF4Ls+khc4cqhpgZ+ZXjdbyo=; b=rD5ISyVIIHLKYJCrfdb+Lu+mmzv6qwuc1IkaoM3EJNx52Hh59bBFe/0VKbayXz/GJR AAHkxuj8iMVXGMg0crGxSc5JxN2kyqmHs1M2kbgzMEDDNvz3LLNEy2VkbmBUnTy610Kn t0M66+PaR2A10On9/T9cfV6mKEbKZtPRjb+bCDZKWf1TFE0FxwecdxZDXcO9e8yEgmEw KBHSw+8Yseq+II6hh9CsAe1MKcJ5/rehM0N+e0uEYot5tHCta6RExesj0wgLH3kdsc3t 9HKu50Ou0PqIHsQuSKtz4vWkzJcGkG3sGC+n1nkv3iZe9KJPKCOPHY33D9XkP3Lzdlfv SFEQ== X-Gm-Message-State: AKGB3mKYwc1PE35UvFXYSSVjUeCMno+7puZnD6XfqTDAyQXLWx1aOQrh Jw5kT7Y3d+m2ZdGOm1UqG9A= X-Google-Smtp-Source: ACJfBovVuz6cu98geeqbRx9hruOvOXYiF+JpOgZEZhERgL8RSGIswr14sz+xOEvJa1w9ZDRrbW6yvw== X-Received: by 10.84.234.198 with SMTP id i6mr29086725plt.159.1514415614522; Wed, 27 Dec 2017 15:00:14 -0800 (PST) Received: from squirtle.lan (c-24-22-235-96.hsd1.wa.comcast.net. [24.22.235.96]) by smtp.gmail.com with ESMTPSA id l19sm27810326pgc.57.2017.12.27.15.00.12 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 27 Dec 2017 15:00:13 -0800 (PST) From: Andrey Smirnov To: Srinivas Kandagatla Subject: [PATCH 02/20] nvmem: Introduce devm_nvmem_(un)register() Date: Wed, 27 Dec 2017 14:59:38 -0800 Message-Id: <20171227225956.14442-3-andrew.smirnov@gmail.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20171227225956.14442-1-andrew.smirnov@gmail.com> References: <20171227225956.14442-1-andrew.smirnov@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20171227_150025_507352_72664270 X-CRM114-Status: UNSURE ( 9.75 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Heiko Stuebner , linux-rockchip@lists.infradead.org, Andrey Smirnov , Kevin Hilman , Joachim Eastwood , linux-kernel@vger.kernel.org, Masahiro Yamada , linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Matthias Brugger , linux-amlogic@lists.infradead.org, Carlo Caione , cphealy@gmail.com MIME-Version: 1.0 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+patchwork-linux-rockchip=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Introduce devm_nvmem_register()/devm_nvmem_unregister() to make .remove() unnecessary in trivial drivers. Cc: Srinivas Kandagatla Cc: Heiko Stuebner Cc: Masahiro Yamada Cc: Carlo Caione Cc: Kevin Hilman Cc: Matthias Brugger Cc: Joachim Eastwood Cc: cphealy@gmail.com Cc: linux-kernel@vger.kernel.org Cc: linux-mediatek@lists.infradead.org Cc: linux-rockchip@lists.infradead.org Cc: linux-amlogic@lists.infradead.org Cc: linux-arm-kernel@lists.infradead.org Signed-off-by: Andrey Smirnov --- drivers/nvmem/core.c | 41 +++++++++++++++++++++++++++++++++++++++++ include/linux/nvmem-provider.h | 17 +++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 57cbeacfbeb2..84f07ba1f36d 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -551,6 +551,47 @@ int nvmem_unregister(struct nvmem_device *nvmem) } EXPORT_SYMBOL_GPL(nvmem_unregister); +static void devm_nvmem_release(struct device *dev, void *res) +{ + WARN_ON(nvmem_unregister(*(struct nvmem_device **)res)); +} + +struct nvmem_device *devm_nvmem_register(struct device *dev, + const struct nvmem_config *config) +{ + struct nvmem_device **ptr, *nvmem; + + ptr = devres_alloc(devm_nvmem_release, sizeof(*ptr), GFP_KERNEL); + if (!ptr) + return ERR_PTR(-ENOMEM); + + nvmem = nvmem_register(config); + + if (!IS_ERR(nvmem)) { + *ptr = nvmem; + devres_add(dev, ptr); + } else { + devres_free(ptr); + } + + return nvmem; +} +EXPORT_SYMBOL_GPL(devm_nvmem_register); + +static int devm_nvmem_match(struct device *dev, void *res, void *data) +{ + struct nvmem_device **r = res; + + return *r == data; +} + +int devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem) +{ + return devres_release(dev, devm_nvmem_release, devm_nvmem_match, nvmem); +} +EXPORT_SYMBOL(devm_nvmem_unregister); + + static struct nvmem_device *__nvmem_device_get(struct device_node *np, struct nvmem_cell **cellp, const char *cell_id) diff --git a/include/linux/nvmem-provider.h b/include/linux/nvmem-provider.h index 497706f5adca..493f2f529f00 100644 --- a/include/linux/nvmem-provider.h +++ b/include/linux/nvmem-provider.h @@ -47,6 +47,11 @@ struct nvmem_config { struct nvmem_device *nvmem_register(const struct nvmem_config *cfg); int nvmem_unregister(struct nvmem_device *nvmem); +struct nvmem_device *devm_nvmem_register(struct device *dev, + const struct nvmem_config *cfg); + +int devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem); + #else static inline struct nvmem_device *nvmem_register(const struct nvmem_config *c) @@ -59,5 +64,17 @@ static inline int nvmem_unregister(struct nvmem_device *nvmem) return -ENOSYS; } +static inline struct nvmem_device * +devm_nvmem_register(struct device *dev, const struct nvmem_config *c) +{ + return nvmem_register(c); +} + +static inline int +devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem) +{ + return nvmem_unregister(nvmem); +} + #endif /* CONFIG_NVMEM */ #endif /* ifndef _LINUX_NVMEM_PROVIDER_H */