From nobody Mon Feb 9 02:13:15 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 852A836403C; Wed, 7 Jan 2026 15:10:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767798612; cv=none; b=sw3mYKFd6COqyHgNg6xWsd4hFTy9R4Aay3ApB/ILjfYnX8wCHRdZ6wBkniyxOc5NxEArFcYsdQESTipOuEgPpY0m29kXmZ4wdcvlxj5V4HuRPGMpiE393ir+brnzujvCGGIQrhExSDjUffjo04sWw5aiKjNpf7+gFbuUTvK1yk8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767798612; c=relaxed/simple; bh=90di0w1PwxPIRzuSClWm8hTlTurueeQPrjHhHA1IgeE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Lr+CpMhW1a+OY2t5pf2yTBL9mZjZMO5gYCpsDxlCP68xj2UY8LxyVbTTeQeapxwfXOGxFlrjg9POunI+e8ym/ukQrYwUIF6/sWe28VCf+L3NDgpT7oeLXp+lZ6t1KT5JttyXbOPSGpfMbCdyUGlQPTB5gEG3thyASDItwgJRi7U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=WbxUGimf; arc=none smtp.client-ip=148.251.105.195 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 (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="WbxUGimf" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1767798608; bh=90di0w1PwxPIRzuSClWm8hTlTurueeQPrjHhHA1IgeE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=WbxUGimfzP1F2xdrdKe/4cd+wlHBTKhKTGbIJq3+nq4YJ2hsGZfl7PcRgQ4RGiBs1 dtSuohh7qCBvMt0aJuuvXZfkQTiaG4QDZ9nx9ak+XP+t/JRMwRc+9iCl5jI/diqDNK dLqasMDWtpSjOnCaPPPKpS/agyuMomX7YkrtoFWONOXCLUgvmzyl/n8cmA2SJNpkX5 GeJSvxuSN4GhvqLeXEOdJnjSEcxCU0LxaUjx+hQSbqBzrZrppwCiz9bvJBwLCAFWiX w/tYrDOBR7aAWG6Ydn2+yoQJp0lXhTUYV09eF92e5fEmZ7M1Y81NwfByPFfBig9Pzy dv/MMlIrcuw8A== Received: from [192.168.0.79] (unknown [IPv6:2804:14d:72b4:81ae:67c:16ff:fe57:b5a3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: dwlsalmeida) by bali.collaboradmins.com (Postfix) with ESMTPSA id 75C9117E1529; Wed, 7 Jan 2026 16:10:04 +0100 (CET) From: Daniel Almeida Date: Wed, 07 Jan 2026 12:09:53 -0300 Subject: [PATCH v3 2/3] 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: quoted-printable Message-Id: <20260107-clk-type-state-v3-2-77d3e3ee59c2@collabora.com> References: <20260107-clk-type-state-v3-0-77d3e3ee59c2@collabora.com> In-Reply-To: <20260107-clk-type-state-v3-0-77d3e3ee59c2@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 , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross 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, Daniel Almeida X-Mailer: b4 0.14.3 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 Reviewed-by: Gary Guo --- rust/kernel/clk.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/rust/kernel/clk.rs b/rust/kernel/clk.rs index 6323b40dc7ba..e840e7c20af7 100644 --- a/rust/kernel/clk.rs +++ b/rust/kernel/clk.rs @@ -95,6 +95,49 @@ impl Sealed for super::Prepared {} impl Sealed for super::Enabled {} } =20 + /// Obtains and enables a [`devres`]-managed [`Clk`] for a bound devic= e. + /// + /// [`devres`]: crate::devres::Devres + pub fn devm_enable(dev: &Device, name: Option<&CStr>) -> Result= { + let name =3D 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 devic= e. + /// + /// This does not print any error messages if the clock is not found. + /// + /// [`devres`]: crate::devres::Devres + pub fn devm_enable_optional(dev: &Device, name: Option<&CStr>) = -> Result { + let name =3D name.map_or(ptr::null(), |n| n.as_char_ptr()); + + // SAFETY: It is safe to call [`devm_clk_get_optional_enabled`] wi= th 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. + pub fn devm_enable_optional_with_rate( + dev: &Device, + name: Option<&CStr>, + rate: Hertz, + ) -> Result { + let name =3D 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 should be disabled when dropped. --=20 2.52.0