Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp1631521pxb; Thu, 4 Mar 2021 17:00:24 -0800 (PST) X-Google-Smtp-Source: ABdhPJwv0AlmVuPcwfrNG+9n4grBboGH7v7SAN6rmupsxLbc8FCXO86QdqqFuCFdyYAueauamwKN X-Received: by 2002:a05:6e02:20ca:: with SMTP id 10mr6375295ilq.14.1614906023942; Thu, 04 Mar 2021 17:00:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614906023; cv=none; d=google.com; s=arc-20160816; b=soqaATSrRBBGorT9ogVqyL1Bc/S/OsBNmgoygLoKMqZAXvvyI9kHD2sRrxja5104Ds vGXdVRjvaewJr5SnWy3FC5dyQR+a+RtozOclMavwKR3yJGaFl9beEro7bpWYuhoKrPUZ H+5zJOleZw090D9r75yEbl95PYCMbtzsQFLUM1md6z/D2Rf5sa3mGWZy8rRvgQdoetts wQ8lbc2luryQf+Ap5bvKpp0Ovc2TbGxKqgb4o13qZ+aaR4aqWuRfZicMmHeWmsRDobPV 0H7uuDkLUJ6j/TFUdmXXQ9x1rb4xN9dXsfWld8y0qHBse5QNFYmd3+z9KcYKhBnCCSgX o3Zg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=IxSjyHvfhJ/CRzXpd7kM65mxSitdSKejDB4yVJ8QdLI=; b=C/sIzqUilENhTFnMx86dUgc2iFonN8etWLEsPDXmtkMfBb5P8zBx1fpjL7rmRh355m KNnIGam5jUAUiHYh/etsIW31pF6lAzo40fdc7PE6aQNFOsWzWNNf8uIMpWJzg2zVAOP0 cgXQw4rq1cMkMKd9mz5X7BmuS5nXyK3U+8Tzaxjy8n5OJ7m0m7g46siws+OJQW5TIq3P 9nGe+d5Bz1utpkrCQxtjIwnZtfwFC4LfBxdUl6H4M+eNTD/V4Xiadodep2DszYZlt5TJ f/9Ke+F2kbQC4w8si9X37KXrL2heDr8hWUI+2KAwkdScwfhrV/8PMrxn0dqvuuH5cSoJ swHg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@rasmusvillemoes.dk header.s=google header.b=SGDVknug; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z10si876529ior.84.2021.03.04.17.00.10; Thu, 04 Mar 2021 17:00:23 -0800 (PST) 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=@rasmusvillemoes.dk header.s=google header.b=SGDVknug; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231309AbhCDWM4 (ORCPT + 99 others); Thu, 4 Mar 2021 17:12:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50520 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231273AbhCDWMy (ORCPT ); Thu, 4 Mar 2021 17:12:54 -0500 Received: from mail-ej1-x633.google.com (mail-ej1-x633.google.com [IPv6:2a00:1450:4864:20::633]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9A283C061762 for ; Thu, 4 Mar 2021 14:12:52 -0800 (PST) Received: by mail-ej1-x633.google.com with SMTP id mj10so32416915ejb.5 for ; Thu, 04 Mar 2021 14:12:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rasmusvillemoes.dk; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IxSjyHvfhJ/CRzXpd7kM65mxSitdSKejDB4yVJ8QdLI=; b=SGDVknug8AsUYWYZSGdHKwErk1ohZtG+21USh8vDWbvcM6aFt8ZKYPoHP34FY7/Or4 RqoAtJe0dwn1Bch/dFzWvOCOo/dEqgcOjFOFMzAB0e2Vh5Kw37/tNktSN79n3iIUqm/j jWI2HYdntIV9Dpa68IH6OENLdI+eeMvCb2PM0= 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=IxSjyHvfhJ/CRzXpd7kM65mxSitdSKejDB4yVJ8QdLI=; b=SW89AHG991dPv+1kKBqwWL/PXskdUOq3G54QcALKYzw3cvyO4uLOodW/+lEFHAjr4b ygMyCC2Te9FFRSRcsZZ2iQfZAFXd7G5RlSmBnokIJeEYl3lgL4Abhx3BAfLwZCe+VB3e KWalmdJqEKy9SYwjq07DB6TUhiT21BB160lyazvkb1WZbYgyfPkW9EkVM6XTnWiPzzgy URzGDWOrFoonkPtclmltIBpmjuWM6MUwLmhxtTKqH5MSbU1EQAJDVMLttzDmAXJNK793 P1SJsMv5WzyhpsouoqNHZ869F5l4GQbIyS8PWPWy6yUtbPtySUJdNWHio7e+c/EV/JWY AyZQ== X-Gm-Message-State: AOAM531XGjSUg+tAr5J1XqxipV6mt5ORknidyq0pTnKv18VcMTMh0SAY 4i1wg4Sxw10leVqyqZt+5Y4C5Q== X-Received: by 2002:a17:906:3acc:: with SMTP id z12mr6648419ejd.494.1614895971264; Thu, 04 Mar 2021 14:12:51 -0800 (PST) Received: from prevas-ravi.prevas.se ([80.208.71.141]) by smtp.gmail.com with ESMTPSA id q22sm362099ejy.5.2021.03.04.14.12.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Mar 2021 14:12:50 -0800 (PST) From: Rasmus Villemoes To: Arnd Bergmann , Guenter Roeck , Stephen Boyd Cc: Rob Herring , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, linux-watchdog@vger.kernel.org, Rasmus Villemoes Subject: [PATCH v2 1/3] clk: add devm_clk_prepare_enable() helper Date: Thu, 4 Mar 2021 23:12:45 +0100 Message-Id: <20210304221247.488173-2-linux@rasmusvillemoes.dk> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210304221247.488173-1-linux@rasmusvillemoes.dk> References: <20210226141411.2517368-1-linux@rasmusvillemoes.dk> <20210304221247.488173-1-linux@rasmusvillemoes.dk> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add a managed wrapper for clk_prepare_enable(). Signed-off-by: Rasmus Villemoes --- .../driver-api/driver-model/devres.rst | 1 + drivers/clk/clk-devres.c | 29 +++++++++++++++++++ include/linux/clk.h | 13 +++++++++ 3 files changed, 43 insertions(+) diff --git a/Documentation/driver-api/driver-model/devres.rst b/Documentation/driver-api/driver-model/devres.rst index cd8b6e657b94..8ee2557f9ad7 100644 --- a/Documentation/driver-api/driver-model/devres.rst +++ b/Documentation/driver-api/driver-model/devres.rst @@ -253,6 +253,7 @@ CLOCK devm_clk_hw_register() devm_of_clk_add_hw_provider() devm_clk_hw_register_clkdev() + devm_clk_prepare_enable() DMA dmaenginem_async_device_register() diff --git a/drivers/clk/clk-devres.c b/drivers/clk/clk-devres.c index be160764911b..d5bfa8cd7347 100644 --- a/drivers/clk/clk-devres.c +++ b/drivers/clk/clk-devres.c @@ -156,3 +156,32 @@ struct clk *devm_get_clk_from_child(struct device *dev, return clk; } EXPORT_SYMBOL(devm_get_clk_from_child); + +static void devm_clk_disable_unprepare(struct device *dev, void *res) +{ + clk_disable_unprepare(*(struct clk **)res); +} + +int devm_clk_prepare_enable(struct device *dev, struct clk *clk) +{ + struct clk **ptr; + int ret; + + if (!clk) + return 0; + + ptr = devres_alloc(devm_clk_disable_unprepare, sizeof(*ptr), GFP_KERNEL); + if (!ptr) + return -ENOMEM; + + ret = clk_prepare_enable(clk); + if (!ret) { + *ptr = clk; + devres_add(dev, ptr); + } else { + devres_free(ptr); + } + + return ret; +} +EXPORT_SYMBOL(devm_clk_prepare_enable); diff --git a/include/linux/clk.h b/include/linux/clk.h index 266e8de3cb51..04d135520480 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h @@ -485,6 +485,19 @@ struct clk *devm_clk_get_optional(struct device *dev, const char *id); */ struct clk *devm_get_clk_from_child(struct device *dev, struct device_node *np, const char *con_id); +/** + * devm_clk_prepare_enable - prepare and enable a clock source + * @dev: device for clock "consumer" + * @clk: clock source + * + * This function calls clk_prepare_enable() on @clk, and ensures the + * clock will automatically be disabled and unprepared when the device + * is unbound from the bus. + * + * Must not be called from within atomic context. + */ +int devm_clk_prepare_enable(struct device *dev, struct clk *clk); + /** * clk_rate_exclusive_get - get exclusivity over the rate control of a * producer -- 2.29.2