Commit 0f549d25 authored by Igor Korotin's avatar Igor Korotin Committed by Danilo Krummrich
Browse files

rust: driver: Consolidate `Adapter::of_id_info` methods using `#[cfg]`



Refactor the `of_id_info` methods in the `Adapter` trait to reduce
duplication. Previously, the method had two versions selected
via `#[cfg(...)]` and `#[cfg(not(...))]`. This change merges them into a
single method by using `#[cfg]` blocks within the method body.

Suggested-by: default avatarBenno Lossin <lossin@kernel.org>
Signed-off-by: default avatarIgor Korotin <igor.korotin.linux@gmail.com>
Link: https://lore.kernel.org/r/20250620153656.294468-1-igor.korotin.linux@gmail.com


[ Fix clippy warning if #[cfg(not(CONFIG_OF))]; fix checkpatch.pl line
  length warnings. - Danilo ]
Signed-off-by: default avatarDanilo Krummrich <dakr@kernel.org>
parent a74931eb
Loading
Loading
Loading
Loading
+21 −19
Original line number Diff line number Diff line
@@ -147,30 +147,32 @@ pub trait Adapter {
    /// Returns the driver's private data from the matching entry in the [`of::IdTable`], if any.
    ///
    /// If this returns `None`, it means there is no match with an entry in the [`of::IdTable`].
    #[cfg(CONFIG_OF)]
    fn of_id_info(dev: &device::Device) -> Option<&'static Self::IdInfo> {
        #[cfg(not(CONFIG_OF))]
        {
            let _ = dev;
            None
        }

        #[cfg(CONFIG_OF)]
        {
            let table = Self::of_id_table()?;

            // SAFETY:
            // - `table` has static lifetime, hence it's valid for read,
        // - `dev` is guaranteed to be valid while it's alive, and so is `pdev.as_ref().as_raw()`.
            // - `dev` is guaranteed to be valid while it's alive, and so is `dev.as_raw()`.
            let raw_id = unsafe { bindings::of_match_device(table.as_ptr(), dev.as_raw()) };

            if raw_id.is_null() {
                None
            } else {
            // SAFETY: `DeviceId` is a `#[repr(transparent)` wrapper of `struct of_device_id` and
            // does not add additional invariants, so it's safe to transmute.
                // SAFETY: `DeviceId` is a `#[repr(transparent)` wrapper of `struct of_device_id`
                // and does not add additional invariants, so it's safe to transmute.
                let id = unsafe { &*raw_id.cast::<of::DeviceId>() };

                Some(table.info(<of::DeviceId as crate::device_id::RawDeviceId>::index(id)))
            }
        }

    #[cfg(not(CONFIG_OF))]
    #[allow(missing_docs)]
    fn of_id_info(_dev: &device::Device) -> Option<&'static Self::IdInfo> {
        None
    }

    /// Returns the driver's private data from the matching entry of any of the ID tables, if any.