// 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",
}
