From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0B06B3911AB; Mon, 6 Jul 2026 14:38:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.11 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783348718; cv=pass; b=s2cvGjy+e+WjBykt4UkI2UT7JzL9jb/0SBIJg333L1rC1aCNWWdRChOzLWqMBD73T/t31Ebf8hscpTvtzmGUqN3j9TUD0wMf8XnVgbHBrFyb5zoZqRTugTtsNAK0oVcm6Vp+c32WZiMlvjUSm61XCtkyRBnszPSknHiOuCT42zA= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783348718; c=relaxed/simple; bh=tF7AljJwtTFuS1zxSK2Z1txTblLIjES1aUAsy+O4Oho=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=J/haB9sGGX2y3kIJ2c7MqA4CbOIDEPZM/Y/YkFfE0xMRt6PF5h5Mgufgkqs97f+L1xllB6qOvwBYvf/BMTby1Cv+k4JyDIrbM8cM9r0IhKtVE+/me+BOdOZQcTvuiQp7qupiX5tqxFpxb444A0DgYsODu6Od7w8MajO2bM6o6zY= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=daniel.almeida@collabora.com header.b=YzEdmPKh; arc=pass smtp.client-ip=136.143.188.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=daniel.almeida@collabora.com header.b="YzEdmPKh" ARC-Seal: i=1; a=rsa-sha256; t=1783348674; cv=none; d=zohomail.com; s=zohoarc; b=fC1kHJIMI8EMzhCyfTZIwXDwzqZYFG38b79rW8RQkMPYTnLqa4c8q5FLuPef2MGonvs0ZHWpER0zycLEn8/EWEWZPXvBXa49Z7GWAMbMKWcQuauWo1oHKwa3gEBCuLVNCXOp3gM5aWu4B60+VGGpoCDUiiPICt3mxOjt8SlcRQ0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783348674; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=nGOFMadA6trjWagAE4R3R81yB6gXYE/D7KXnaPswwtM=; b=bkpGybzdDSxBGUdhE67Doit2e7emaIN/k/WQRzsR284jOj4TwFMlnV20DjFC0EYX2w4SgRewjKCFv+rRZFE3iXTD7q2ohPikTUbOmUc15qI7ohe2IpkWUwuHxBBWwNQKwwtIq2HtgMCzu/bWtpLi/LwqpMV0qALQ4mhs9qSCKSc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=daniel.almeida@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1783348674; s=zohomail; d=collabora.com; i=daniel.almeida@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=nGOFMadA6trjWagAE4R3R81yB6gXYE/D7KXnaPswwtM=; b=YzEdmPKh2Mco7bA/gnkich800xFRjea/TYKt8ZXIBjyjE847Aag1jdJEok9MojSF aHzgfkog4KgjaIRW3cCdAjWRGWtVvLN/PG+YRLhYW3Cgx91WZx0H0x1s2U3R/bM83lt PVFS8C5E7PnvRD4Nc8gDdIGpaiXDXvHU46oY+yx8= Received: by mx.zohomail.com with SMTPS id 1783348672663992.9747630995766; Mon, 6 Jul 2026 07:37:52 -0700 (PDT) From: Daniel Almeida Date: Mon, 06 Jul 2026 11:37:14 -0300 Subject: [PATCH v5 3/4] rust: clk: add devres-managed clks Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260706-clk-type-state-v5-3-67c5f326a16c@collabora.com> References: <20260706-clk-type-state-v5-0-67c5f326a16c@collabora.com> In-Reply-To: <20260706-clk-type-state-v5-0-67c5f326a16c@collabora.com> To: "Rafael J. Wysocki" , Viresh Kumar , Danilo Krummrich , Alice Ryhl , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Drew Fustini , Guo Ren , Fu Wei , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= , Michael Turquette , Stephen Boyd , Miguel Ojeda , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Daniel Almeida , Michal Wilczynski , Boqun Feng , Boqun Feng Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-riscv@lists.infradead.org, linux-pwm@vger.kernel.org, linux-clk@vger.kernel.org, rust-for-linux@vger.kernel.org, Boris Brezillon , =?utf-8?q?Onur_=C3=96zkan?= , Maurice X-Mailer: b4 0.15.2 X-ZohoMailClient: External The clk API allows fine-grained control, but some drivers might be more interested in a "set and forget" API. Expand the current API to support this. The clock will automatically be disabled, unprepared and freed when the device is unbound from the bus without further intervention by the driver. Signed-off-by: Daniel Almeida --- rust/kernel/clk.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/rust/kernel/clk.rs b/rust/kernel/clk.rs index dd5fd656271e..b9a44f83843a 100644 --- a/rust/kernel/clk.rs +++ b/rust/kernel/clk.rs @@ -96,6 +96,52 @@ impl Sealed for super::Prepared {} impl Sealed for super::Enabled {} } + /// Obtains and enables a [`devres`]-managed [`Clk`] for a bound device. + /// + /// [`devres`]: crate::devres::Devres + #[inline] + pub fn devm_enable(dev: &Device, name: Option<&CStr>) -> Result { + let name = name.map_or(ptr::null(), |n| n.as_char_ptr()); + + // SAFETY: It is safe to call [`devm_clk_get_enabled`] with a valid + // device pointer. + from_err_ptr(unsafe { bindings::devm_clk_get_enabled(dev.as_raw(), name) })?; + Ok(()) + } + + /// Obtains and enables a [`devres`]-managed [`Clk`] for a bound device. + /// + /// This does not print any error messages if the clock is not found. + /// + /// [`devres`]: crate::devres::Devres + #[inline] + pub fn devm_enable_optional(dev: &Device, name: Option<&CStr>) -> Result { + let name = name.map_or(ptr::null(), |n| n.as_char_ptr()); + + // SAFETY: It is safe to call [`devm_clk_get_optional_enabled`] with a + // valid device pointer. + from_err_ptr(unsafe { bindings::devm_clk_get_optional_enabled(dev.as_raw(), name) })?; + Ok(()) + } + + /// Same as [`devm_enable_optional`], but also sets the rate. + #[inline] + pub fn devm_enable_optional_with_rate( + dev: &Device, + name: Option<&CStr>, + rate: Hertz, + ) -> Result { + let name = name.map_or(ptr::null(), |n| n.as_char_ptr()); + + // SAFETY: It is safe to call + // [`devm_clk_get_optional_enabled_with_rate`] with a valid device + // pointer. + from_err_ptr(unsafe { + bindings::devm_clk_get_optional_enabled_with_rate(dev.as_raw(), name, rate.as_hz()) + })?; + Ok(()) + } + /// A trait representing the different states that a [`Clk`] can be in. pub trait ClkState: private::Sealed { /// Whether the clock is enabled in this state. -- 2.54.0