78 lines · 2.1 KB · Rust
RawDownload
// SPDX-License-Identifier: GPL-2.0 //! Rust SoC Platform driver sample. use kernel::{    acpi,    device::Core,    of,    platform,    prelude::*,    soc,    str::CString,    sync::aref::ARef, //};use pin_init::pin_init_scope; #[pin_data]struct SampleSocDriver {    pdev: ARef<platform::Device>,    #[pin]    _dev_reg: soc::Registration,} kernel::of_device_table!(    OF_TABLE,    <SampleSocDriver as platform::Driver>::IdInfo,    [(of::DeviceId::new(c"test,rust-device"), ())]); kernel::acpi_device_table!(    ACPI_TABLE,    <SampleSocDriver as platform::Driver>::IdInfo,    [(acpi::DeviceId::new(c"LNUXBEEF"), ())]); impl platform::Driver for SampleSocDriver {    type IdInfo = ();    type Data<'bound> = Self;    const OF_ID_TABLE: Option<of::IdTable<Self::IdInfo>> = Some(&OF_TABLE);    const ACPI_ID_TABLE: Option<acpi::IdTable<Self::IdInfo>> = Some(&ACPI_TABLE);     fn probe<'bound>(        pdev: &'bound platform::Device<Core<'_>>,        _info: Option<&'bound Self::IdInfo>,    ) -> impl PinInit<Self, Error> + 'bound {        dev_dbg!(pdev, "Probe Rust SoC driver sample.\n");         let pdev = pdev.into();        pin_init_scope(move || {            let machine = CString::try_from(c"My cool ACME15 dev board")?;            let family = CString::try_from(c"ACME")?;            let revision = CString::try_from(c"1.2")?;            let serial_number = CString::try_from(c"12345")?;            let soc_id = CString::try_from(c"ACME15")?;             let attr = soc::Attributes {                machine: Some(machine),                family: Some(family),                revision: Some(revision),                serial_number: Some(serial_number),                soc_id: Some(soc_id),            };             Ok(try_pin_init!(SampleSocDriver {                pdev: pdev,                _dev_reg <- soc::Registration::new(attr),            }? Error))        })    }} kernel::module_platform_driver! {    type: SampleSocDriver,    name: "rust_soc",    authors: ["Matthew Maurer"],    description: "Rust SoC Driver",    license: "GPL",}