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 804ADC433ED for ; Mon, 10 May 2021 06:17:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3E7F461449 for ; Mon, 10 May 2021 06:17:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230141AbhEJGSx (ORCPT ); Mon, 10 May 2021 02:18:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38324 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229996AbhEJGSv (ORCPT ); Mon, 10 May 2021 02:18:51 -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 23635C06138C for ; Sun, 9 May 2021 23:17:47 -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 1lfzEU-0007ZA-Su; Mon, 10 May 2021 08:17:34 +0200 Received: from ukl by ptx.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1lfzET-0004Zz-ND; Mon, 10 May 2021 08:17:33 +0200 From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= To: Michael Turquette , Stephen Boyd Cc: linux-clk@vger.kernel.org, kernel@pengutronix.de, Andrew Morton , 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 Subject: [PATCH v6 RESEND 1/6] clk: generalize devm_clk_get() a bit Date: Mon, 10 May 2021 08:17:19 +0200 Message-Id: <20210510061724.940447-2-u.kleine-koenig@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210510061724.940447-1-u.kleine-koenig@pengutronix.de> References: <20210510061724.940447-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. 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 99325C433ED for ; Mon, 10 May 2021 06:22:37 +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 0F3BC61421 for ; Mon, 10 May 2021 06:22:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0F3BC61421 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=5K8GgmzLfxh4VWgY8mIN6yhiRrcds9h7ysdxPUw7as8=; b=Vn2a4sX28ZoVg2g9wakNatykk k4jXxcwrNlMpigO1ouB8OTgMxLZ2y71RxJ6W2nstlFEvOZ6bprodCqzlW3IxyXtMC3Bf1iK5NRdC1 bkvSSULLo+/F80v4eiWyLiWcar2nvNXUdkxQQ2NQrsJdGfKm34Aw/wanGOn0d6d9luxtbOK7XZFG3 y1ghUtgPJbXxhgrk1BJLzANvgIWTrYKo1WWks4a6kfhbYnC+yaS5bKQBQhfxbsX23iGnMyuJju4nl K/ssXE9lH+63qK+CU02mtymwBs/Jmp9hEbM7b+n4X1mKrppXHUghGJkoSuDcXVhCI4G+sIa0V0b6o +sNWlKILw==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lfzHt-00DLGg-RK; Mon, 10 May 2021 06:21:06 +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 1lfzEg-00DKrG-V8 for linux-arm-kernel@desiato.infradead.org; Mon, 10 May 2021 06:17:58 +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=pUy+4D5TFii7Pmk+5N6F3FfD+2zip6+SY+8PnwpmhrM=; b=IF/MHFabCHDxs8OqcS+2+29zYN BaM0mTe3TyVWGbAvPgQz2D4VIct9diNvs4vYD5HIvI68rADh+uvzG0sxHa42WTc3WF6wVfncrT0/u 6h2LKCoLyupRzUyC1cMLLNiYaS6oCpIIs9xwHtkyrF+c/OePDBDf2NAnTpmHZhLknytai5O4fVZwp EzcFHqEEXRvU1yBbm3Zs+FNmeBT7r8HCqe7XMHMhooy4JXQAPt5kyhO8zwVKRdOEXMPU7r0+D7A7m +BVnRJC7NFq66kgeTGw7Zbb8+frAIexwGZ0u2lqIih5Ks67so1Vnf9iGzV1o/+fdOLdGRoYEn68P0 RyTTwhNg==; 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 1lfzEe-008KaP-79 for linux-arm-kernel@lists.infradead.org; Mon, 10 May 2021 06:17:45 +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 1lfzEU-0007ZA-Su; Mon, 10 May 2021 08:17:34 +0200 Received: from ukl by ptx.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1lfzET-0004Zz-ND; Mon, 10 May 2021 08:17:33 +0200 From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= To: Michael Turquette , Stephen Boyd Subject: [PATCH v6 RESEND 1/6] clk: generalize devm_clk_get() a bit Date: Mon, 10 May 2021 08:17:19 +0200 Message-Id: <20210510061724.940447-2-u.kleine-koenig@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210510061724.940447-1-u.kleine-koenig@pengutronix.de> References: <20210510061724.940447-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-20210509_231744_298302_12C06CA6 X-CRM114-Status: GOOD ( 18.11 ) 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 , Claudiu Beznea , Wolfram Sang , Oleksij Rempel , Ludovic Desroches , Thierry Reding , kernel@pengutronix.de, Andrew Morton , linux-spi@vger.kernel.org, Lee Jones , linux-clk@vger.kernel.org, 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 eHQgY29tbWl0IHRvIGFkZCBzb21lIG1vcmUKZGV2bV9jbGsgaGVscGVycy4KClNpZ25lZC1vZmYt Ynk6IFV3ZSBLbGVpbmUtS8O2bmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+Ci0t LQogZHJpdmVycy9jbGsvY2xrLWRldnJlcy5jIHwgNjcgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDUwIGluc2VydGlvbnMoKyksIDE3IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Nsay1kZXZyZXMuYyBiL2RyaXZl cnMvY2xrL2Nsay1kZXZyZXMuYwppbmRleCBiZTE2MDc2NDkxMWIuLjkxYzk5NTgxNWI1NyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9jbGsvY2xrLWRldnJlcy5jCisrKyBiL2RyaXZlcnMvY2xrL2Nsay1k ZXZyZXMuYwpAQCAtNCwzOSArNCw3MiBAQAogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgogI2lu Y2x1ZGUgPGxpbnV4L2dmcC5oPgogCitzdHJ1Y3QgZGV2bV9jbGtfc3RhdGUgeworCXN0cnVjdCBj bGsgKmNsazsKKwl2b2lkICgqZXhpdCkoc3RydWN0IGNsayAqY2xrKTsKK307CisKIHN0YXRpYyB2 b2lkIGRldm1fY2xrX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpCiB7Ci0J Y2xrX3B1dCgqKHN0cnVjdCBjbGsgKiopcmVzKTsKKwlzdHJ1Y3QgZGV2bV9jbGtfc3RhdGUgKnN0 YXRlID0gKihzdHJ1Y3QgZGV2bV9jbGtfc3RhdGUgKiopcmVzOworCisJaWYgKHN0YXRlLT5leGl0 KQorCQlzdGF0ZS0+ZXhpdChzdGF0ZS0+Y2xrKTsKKworCWNsa19wdXQoc3RhdGUtPmNsayk7CiB9 CiAKLXN0cnVjdCBjbGsgKmRldm1fY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNo YXIgKmlkKQorc3RhdGljIHN0cnVjdCBjbGsgKl9fZGV2bV9jbGtfZ2V0KHN0cnVjdCBkZXZpY2Ug KmRldiwgY29uc3QgY2hhciAqaWQsCisJCQkJICBzdHJ1Y3QgY2xrICooKmdldCkoc3RydWN0IGRl dmljZSAqZGV2LCBjb25zdCBjaGFyICppZCksCisJCQkJICBpbnQgKCppbml0KShzdHJ1Y3QgY2xr ICpjbGspLAorCQkJCSAgdm9pZCAoKmV4aXQpKHN0cnVjdCBjbGsgKmNsaykpCiB7Ci0Jc3RydWN0 IGNsayAqKnB0ciwgKmNsazsKKwlzdHJ1Y3QgZGV2bV9jbGtfc3RhdGUgKnN0YXRlOworCXN0cnVj dCBjbGsgKmNsazsKKwlpbnQgcmV0OwogCi0JcHRyID0gZGV2cmVzX2FsbG9jKGRldm1fY2xrX3Jl bGVhc2UsIHNpemVvZigqcHRyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwdHIpCisJc3RhdGUgPSBk ZXZyZXNfYWxsb2MoZGV2bV9jbGtfcmVsZWFzZSwgc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwp OworCWlmICghc3RhdGUpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JY2xrID0gY2xr X2dldChkZXYsIGlkKTsKLQlpZiAoIUlTX0VSUihjbGspKSB7Ci0JCSpwdHIgPSBjbGs7Ci0JCWRl dnJlc19hZGQoZGV2LCBwdHIpOwotCX0gZWxzZSB7Ci0JCWRldnJlc19mcmVlKHB0cik7CisJY2xr ID0gZ2V0KGRldiwgaWQpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGNs ayk7CisJCWdvdG8gZXJyX2Nsa19nZXQ7CiAJfQogCisJaWYgKGluaXQpIHsKKwkJcmV0ID0gaW5p dChjbGspOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfY2xrX2luaXQ7CisJfQorCisJc3RhdGUt PmNsayA9IGNsazsKKwlzdGF0ZS0+ZXhpdCA9IGV4aXQ7CisKKwlkZXZyZXNfYWRkKGRldiwgc3Rh dGUpOworCiAJcmV0dXJuIGNsazsKKworZXJyX2Nsa19pbml0OgorCisJY2xrX3B1dChjbGspOwor ZXJyX2Nsa19nZXQ6CisKKwlkZXZyZXNfZnJlZShzdGF0ZSk7CisJcmV0dXJuIEVSUl9QVFIocmV0 KTsKIH0KLUVYUE9SVF9TWU1CT0woZGV2bV9jbGtfZ2V0KTsKIAotc3RydWN0IGNsayAqZGV2bV9j bGtfZ2V0X29wdGlvbmFsKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCitzdHJ1 Y3QgY2xrICpkZXZtX2Nsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkK IHsKLQlzdHJ1Y3QgY2xrICpjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBpZCk7CisJcmV0dXJuIF9f ZGV2bV9jbGtfZ2V0KGRldiwgaWQsIGNsa19nZXQsIE5VTEwsIE5VTEwpOwogCi0JaWYgKGNsayA9 PSBFUlJfUFRSKC1FTk9FTlQpKQotCQlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woZGV2 bV9jbGtfZ2V0KTsKIAotCXJldHVybiBjbGs7CitzdHJ1Y3QgY2xrICpkZXZtX2Nsa19nZXRfb3B0 aW9uYWwoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKK3sKKwlyZXR1cm4gX19k ZXZtX2Nsa19nZXQoZGV2LCBpZCwgY2xrX2dldF9vcHRpb25hbCwgTlVMTCwgTlVMTCk7CiB9CiBF WFBPUlRfU1lNQk9MKGRldm1fY2xrX2dldF9vcHRpb25hbCk7CiAKLS0gCjIuMzAuMgoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJu ZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK