From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 87215C433ED for ; Mon, 10 May 2021 17:42:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5FEFB614A5 for ; Mon, 10 May 2021 17:42:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232139AbhEJRnN (ORCPT ); Mon, 10 May 2021 13:43:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50882 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232880AbhEJRnI (ORCPT ); Mon, 10 May 2021 13:43:08 -0400 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 41158C061763 for ; Mon, 10 May 2021 10:42:02 -0700 (PDT) Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lg9ug-0005HI-Fy; Mon, 10 May 2021 19:41:50 +0200 Received: from ukl by ptx.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1lg9uf-0006aT-0Z; Mon, 10 May 2021 19:41:49 +0200 From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= To: Michael Turquette , Stephen Boyd Cc: linux-clk@vger.kernel.org, Jonathan Cameron , Alexandru Ardelean , Andrew Morton , kernel@pengutronix.de, Claudiu Beznea , Thierry Reding , Lee Jones , Nicolas Ferre , Alexandre Belloni , Ludovic Desroches , linux-pwm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Alessandro Zummo , linux-rtc@vger.kernel.org, Mark Brown , linux-spi@vger.kernel.org, Wolfram Sang , Oleksij Rempel , Jonathan Cameron Subject: [PATCH v7 1/6] clk: generalize devm_clk_get() a bit Date: Mon, 10 May 2021 19:41:37 +0200 Message-Id: <20210510174142.986250-2-u.kleine-koenig@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210510174142.986250-1-u.kleine-koenig@pengutronix.de> References: <20210510174142.986250-1-u.kleine-koenig@pengutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0 X-SA-Exim-Mail-From: ukl@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-rtc@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rtc@vger.kernel.org Allow to add an exit hook to devm managed clocks. Also use clk_get_optional() in devm_clk_get_optional instead of open coding it. The generalisation will be used in the next commit to add some more devm_clk helpers. Reviewed-by: Jonathan Cameron Signed-off-by: Uwe Kleine-König --- drivers/clk/clk-devres.c | 67 ++++++++++++++++++++++++++++++---------- 1 file changed, 50 insertions(+), 17 deletions(-) diff --git a/drivers/clk/clk-devres.c b/drivers/clk/clk-devres.c index be160764911b..91c995815b57 100644 --- a/drivers/clk/clk-devres.c +++ b/drivers/clk/clk-devres.c @@ -4,39 +4,72 @@ #include #include +struct devm_clk_state { + struct clk *clk; + void (*exit)(struct clk *clk); +}; + static void devm_clk_release(struct device *dev, void *res) { - clk_put(*(struct clk **)res); + struct devm_clk_state *state = *(struct devm_clk_state **)res; + + if (state->exit) + state->exit(state->clk); + + clk_put(state->clk); } -struct clk *devm_clk_get(struct device *dev, const char *id) +static struct clk *__devm_clk_get(struct device *dev, const char *id, + struct clk *(*get)(struct device *dev, const char *id), + int (*init)(struct clk *clk), + void (*exit)(struct clk *clk)) { - struct clk **ptr, *clk; + struct devm_clk_state *state; + struct clk *clk; + int ret; - ptr = devres_alloc(devm_clk_release, sizeof(*ptr), GFP_KERNEL); - if (!ptr) + state = devres_alloc(devm_clk_release, sizeof(*state), GFP_KERNEL); + if (!state) return ERR_PTR(-ENOMEM); - clk = clk_get(dev, id); - if (!IS_ERR(clk)) { - *ptr = clk; - devres_add(dev, ptr); - } else { - devres_free(ptr); + clk = get(dev, id); + if (IS_ERR(clk)) { + ret = PTR_ERR(clk); + goto err_clk_get; } + if (init) { + ret = init(clk); + if (ret) + goto err_clk_init; + } + + state->clk = clk; + state->exit = exit; + + devres_add(dev, state); + return clk; + +err_clk_init: + + clk_put(clk); +err_clk_get: + + devres_free(state); + return ERR_PTR(ret); } -EXPORT_SYMBOL(devm_clk_get); -struct clk *devm_clk_get_optional(struct device *dev, const char *id) +struct clk *devm_clk_get(struct device *dev, const char *id) { - struct clk *clk = devm_clk_get(dev, id); + return __devm_clk_get(dev, id, clk_get, NULL, NULL); - if (clk == ERR_PTR(-ENOENT)) - return NULL; +} +EXPORT_SYMBOL(devm_clk_get); - return clk; +struct clk *devm_clk_get_optional(struct device *dev, const char *id) +{ + return __devm_clk_get(dev, id, clk_get_optional, NULL, NULL); } EXPORT_SYMBOL(devm_clk_get_optional); -- 2.30.2 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BAFA1C433ED for ; Mon, 10 May 2021 18:01:55 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4598D61155 for ; Mon, 10 May 2021 18:01:55 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4598D61155 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version: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=da5LlH3w0W4KHOrztYD4wdmtNKEU7sGGSOwgmsTeUpo=; b=VH6SNhV2F+E5BnYIlpNXrRa45 7/zmKIeT/6Ra2Dc+NEzev7dNG23l+16BbowmL8lj0fkhMgaKUNl3l/Ehi6SwquI6RcF/WoXK7yU1f 4zz6qBcqxOSqsWsfcjVvPQFr/YulSlzu7V2uYfbvFkBckAYE7ENDeG0kotJ6qIEYTSC3JXms/w975 bZJU+k6KmcDV0kw7zGizaXKHRJLFERbPHTQP0b6eKeAh6mExkdA/BHZHZEpNlkYQxcXDI5W9Fz6xG iDRHvhKnodw6t8THE1iXfgRbVZg6iPAFvPoFNDMUnyXoguYIHFPZ7NBgkyDEas4V6cf0mg8kQ+jil At68cgjog==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lgACe-00FKa9-Dg; Mon, 10 May 2021 18:00:24 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lg9uq-00FE1z-L4 for linux-arm-kernel@desiato.infradead.org; Mon, 10 May 2021 17:42:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: Content-Type:MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Sender:Reply-To:Content-ID:Content-Description; bh=8UtPnGOHDSIU4ek8CZ1bSZDeUGoJb5UW1Y2nPH87FnM=; b=JX8ZgeCYa9n+ys45b2GcR1MGvu 9MZRQ+8jR8y3tdmWrFJkd6Y6zUkus2/vyYbFQgSjuM7ce2S+Wq6CXVtQV8jxECA11x4ccUrj1/KUU fqd/gYh4XFM3vdSNr5VPiND46amsJ5KPVEo+JtAKF8KO6QD9prj+jcqFg8oBkvPqcJNE/PV98v2GS V6WoEcI9yW+16TlHgCMVFxP0Jf0YYtAO8W5GhrOcyJSfS18H6wHqbmMg9zyUvX20NEZVWDouYYetS vkYObClCEOQznN3CHATJWwmpE5hHWD7E1gQxak0zA6BfF8kolxl/NLakd04M9N3QkBNNKUrufyjCL aAl3Ha9Q==; Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lg9un-008zk0-KP for linux-arm-kernel@lists.infradead.org; Mon, 10 May 2021 17:41:59 +0000 Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lg9ug-0005HI-Fy; Mon, 10 May 2021 19:41:50 +0200 Received: from ukl by ptx.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1lg9uf-0006aT-0Z; Mon, 10 May 2021 19:41:49 +0200 From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= To: Michael Turquette , Stephen Boyd Subject: [PATCH v7 1/6] clk: generalize devm_clk_get() a bit Date: Mon, 10 May 2021 19:41:37 +0200 Message-Id: <20210510174142.986250-2-u.kleine-koenig@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210510174142.986250-1-u.kleine-koenig@pengutronix.de> References: <20210510174142.986250-1-u.kleine-koenig@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0 X-SA-Exim-Mail-From: ukl@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-arm-kernel@lists.infradead.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210510_104157_692706_D32CFA55 X-CRM114-Status: GOOD ( 18.10 ) 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: , Cc: linux-rtc@vger.kernel.org, linux-pwm@vger.kernel.org, Alexandre Belloni , Alessandro Zummo , Mark Brown , linux-clk@vger.kernel.org, Wolfram Sang , Oleksij Rempel , Ludovic Desroches , Thierry Reding , Alexandru Ardelean , kernel@pengutronix.de, Jonathan Cameron , Andrew Morton , linux-spi@vger.kernel.org, Lee Jones , Claudiu Beznea , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org QWxsb3cgdG8gYWRkIGFuIGV4aXQgaG9vayB0byBkZXZtIG1hbmFnZWQgY2xvY2tzLiBBbHNvIHVz ZQpjbGtfZ2V0X29wdGlvbmFsKCkgaW4gZGV2bV9jbGtfZ2V0X29wdGlvbmFsIGluc3RlYWQgb2Yg b3BlbiBjb2RpbmcgaXQuClRoZSBnZW5lcmFsaXNhdGlvbiB3aWxsIGJlIHVzZWQgaW4gdGhlIG5l eHQgY29tbWl0IHRvIGFkZCBzb21lIG1vcmUKZGV2bV9jbGsgaGVscGVycy4KClJldmlld2VkLWJ5 OiBKb25hdGhhbiBDYW1lcm9uIDxKb25hdGhhbi5DYW1lcm9uQGh1YXdlaS5jb20+ClNpZ25lZC1v ZmYtYnk6IFV3ZSBLbGVpbmUtS8O2bmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+ Ci0tLQogZHJpdmVycy9jbGsvY2xrLWRldnJlcy5jIHwgNjcgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDUwIGluc2VydGlvbnMoKyksIDE3 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Nsay1kZXZyZXMuYyBiL2Ry aXZlcnMvY2xrL2Nsay1kZXZyZXMuYwppbmRleCBiZTE2MDc2NDkxMWIuLjkxYzk5NTgxNWI1NyAx MDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvY2xrLWRldnJlcy5jCisrKyBiL2RyaXZlcnMvY2xrL2Ns ay1kZXZyZXMuYwpAQCAtNCwzOSArNCw3MiBAQAogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgog I2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogCitzdHJ1Y3QgZGV2bV9jbGtfc3RhdGUgeworCXN0cnVj dCBjbGsgKmNsazsKKwl2b2lkICgqZXhpdCkoc3RydWN0IGNsayAqY2xrKTsKK307CisKIHN0YXRp YyB2b2lkIGRldm1fY2xrX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpCiB7 Ci0JY2xrX3B1dCgqKHN0cnVjdCBjbGsgKiopcmVzKTsKKwlzdHJ1Y3QgZGV2bV9jbGtfc3RhdGUg KnN0YXRlID0gKihzdHJ1Y3QgZGV2bV9jbGtfc3RhdGUgKiopcmVzOworCisJaWYgKHN0YXRlLT5l eGl0KQorCQlzdGF0ZS0+ZXhpdChzdGF0ZS0+Y2xrKTsKKworCWNsa19wdXQoc3RhdGUtPmNsayk7 CiB9CiAKLXN0cnVjdCBjbGsgKmRldm1fY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0 IGNoYXIgKmlkKQorc3RhdGljIHN0cnVjdCBjbGsgKl9fZGV2bV9jbGtfZ2V0KHN0cnVjdCBkZXZp Y2UgKmRldiwgY29uc3QgY2hhciAqaWQsCisJCQkJICBzdHJ1Y3QgY2xrICooKmdldCkoc3RydWN0 IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCksCisJCQkJICBpbnQgKCppbml0KShzdHJ1Y3Qg Y2xrICpjbGspLAorCQkJCSAgdm9pZCAoKmV4aXQpKHN0cnVjdCBjbGsgKmNsaykpCiB7Ci0Jc3Ry dWN0IGNsayAqKnB0ciwgKmNsazsKKwlzdHJ1Y3QgZGV2bV9jbGtfc3RhdGUgKnN0YXRlOworCXN0 cnVjdCBjbGsgKmNsazsKKwlpbnQgcmV0OwogCi0JcHRyID0gZGV2cmVzX2FsbG9jKGRldm1fY2xr X3JlbGVhc2UsIHNpemVvZigqcHRyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwdHIpCisJc3RhdGUg PSBkZXZyZXNfYWxsb2MoZGV2bV9jbGtfcmVsZWFzZSwgc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJO RUwpOworCWlmICghc3RhdGUpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JY2xrID0g Y2xrX2dldChkZXYsIGlkKTsKLQlpZiAoIUlTX0VSUihjbGspKSB7Ci0JCSpwdHIgPSBjbGs7Ci0J CWRldnJlc19hZGQoZGV2LCBwdHIpOwotCX0gZWxzZSB7Ci0JCWRldnJlc19mcmVlKHB0cik7CisJ Y2xrID0gZ2V0KGRldiwgaWQpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlyZXQgPSBQVFJfRVJS KGNsayk7CisJCWdvdG8gZXJyX2Nsa19nZXQ7CiAJfQogCisJaWYgKGluaXQpIHsKKwkJcmV0ID0g aW5pdChjbGspOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfY2xrX2luaXQ7CisJfQorCisJc3Rh dGUtPmNsayA9IGNsazsKKwlzdGF0ZS0+ZXhpdCA9IGV4aXQ7CisKKwlkZXZyZXNfYWRkKGRldiwg c3RhdGUpOworCiAJcmV0dXJuIGNsazsKKworZXJyX2Nsa19pbml0OgorCisJY2xrX3B1dChjbGsp OworZXJyX2Nsa19nZXQ6CisKKwlkZXZyZXNfZnJlZShzdGF0ZSk7CisJcmV0dXJuIEVSUl9QVFIo cmV0KTsKIH0KLUVYUE9SVF9TWU1CT0woZGV2bV9jbGtfZ2V0KTsKIAotc3RydWN0IGNsayAqZGV2 bV9jbGtfZ2V0X29wdGlvbmFsKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCitz dHJ1Y3QgY2xrICpkZXZtX2Nsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpp ZCkKIHsKLQlzdHJ1Y3QgY2xrICpjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBpZCk7CisJcmV0dXJu IF9fZGV2bV9jbGtfZ2V0KGRldiwgaWQsIGNsa19nZXQsIE5VTEwsIE5VTEwpOwogCi0JaWYgKGNs ayA9PSBFUlJfUFRSKC1FTk9FTlQpKQotCQlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0wo ZGV2bV9jbGtfZ2V0KTsKIAotCXJldHVybiBjbGs7CitzdHJ1Y3QgY2xrICpkZXZtX2Nsa19nZXRf b3B0aW9uYWwoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKK3sKKwlyZXR1cm4g X19kZXZtX2Nsa19nZXQoZGV2LCBpZCwgY2xrX2dldF9vcHRpb25hbCwgTlVMTCwgTlVMTCk7CiB9 CiBFWFBPUlRfU1lNQk9MKGRldm1fY2xrX2dldF9vcHRpb25hbCk7CiAKLS0gCjIuMzAuMgoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1r ZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpo dHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJu ZWwK