samples: rust: add a USB driver sample
In light of the newly-added Rust abstractions for USB devices and drivers, add a sample USB rust driver that serves both to showcase what is currently supported, as well as be the only user of the USB abstractions for now. Signed-off-by: Daniel Almeida <daniel.almeida@collabora.com> Link: https://lore.kernel.org/r/20250825-b4-usb-v1-2-7aa024de7ae8@collabora.com [ force USB = y for now - gregkh ] Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
e7e2296b0e
commit
cc80dbb73b
|
@ -83,6 +83,17 @@ config SAMPLE_RUST_DRIVER_PLATFORM
|
|||
|
||||
If unsure, say N.
|
||||
|
||||
config SAMPLE_RUST_DRIVER_USB
|
||||
tristate "USB Driver"
|
||||
depends on USB = y
|
||||
help
|
||||
This option builds the Rust USB driver sample.
|
||||
|
||||
To compile this as a module, choose M here:
|
||||
the module will be called rust_driver_usb.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config SAMPLE_RUST_DRIVER_FAUX
|
||||
tristate "Faux Driver"
|
||||
help
|
||||
|
|
|
@ -7,6 +7,7 @@ obj-$(CONFIG_SAMPLE_RUST_PRINT) += rust_print.o
|
|||
obj-$(CONFIG_SAMPLE_RUST_DMA) += rust_dma.o
|
||||
obj-$(CONFIG_SAMPLE_RUST_DRIVER_PCI) += rust_driver_pci.o
|
||||
obj-$(CONFIG_SAMPLE_RUST_DRIVER_PLATFORM) += rust_driver_platform.o
|
||||
obj-$(CONFIG_SAMPLE_RUST_DRIVER_USB) += rust_driver_usb.o
|
||||
obj-$(CONFIG_SAMPLE_RUST_DRIVER_FAUX) += rust_driver_faux.o
|
||||
obj-$(CONFIG_SAMPLE_RUST_DRIVER_AUXILIARY) += rust_driver_auxiliary.o
|
||||
obj-$(CONFIG_SAMPLE_RUST_CONFIGFS) += rust_configfs.o
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
// SPDX-FileCopyrightText: Copyright (C) 2025 Collabora Ltd.
|
||||
|
||||
//! Rust USB driver sample.
|
||||
|
||||
use kernel::{device, device::Core, prelude::*, sync::aref::ARef, usb};
|
||||
|
||||
struct SampleDriver {
|
||||
_intf: ARef<usb::Interface>,
|
||||
}
|
||||
|
||||
kernel::usb_device_table!(
|
||||
USB_TABLE,
|
||||
MODULE_USB_TABLE,
|
||||
<SampleDriver as usb::Driver>::IdInfo,
|
||||
[(usb::DeviceId::from_id(0x1234, 0x5678), ()),]
|
||||
);
|
||||
|
||||
impl usb::Driver for SampleDriver {
|
||||
type IdInfo = ();
|
||||
const ID_TABLE: usb::IdTable<Self::IdInfo> = &USB_TABLE;
|
||||
|
||||
fn probe(
|
||||
intf: &usb::Interface<Core>,
|
||||
_id: &usb::DeviceId,
|
||||
_info: &Self::IdInfo,
|
||||
) -> Result<Pin<KBox<Self>>> {
|
||||
let dev: &device::Device<Core> = intf.as_ref();
|
||||
dev_info!(dev, "Rust USB driver sample probed\n");
|
||||
|
||||
let drvdata = KBox::new(Self { _intf: intf.into() }, GFP_KERNEL)?;
|
||||
Ok(drvdata.into())
|
||||
}
|
||||
|
||||
fn disconnect(intf: &usb::Interface<Core>, _data: Pin<&Self>) {
|
||||
let dev: &device::Device<Core> = intf.as_ref();
|
||||
dev_info!(dev, "Rust USB driver sample disconnected\n");
|
||||
}
|
||||
}
|
||||
|
||||
kernel::module_usb_driver! {
|
||||
type: SampleDriver,
|
||||
name: "rust_driver_usb",
|
||||
authors: ["Daniel Almeida"],
|
||||
description: "Rust USB driver sample",
|
||||
license: "GPL v2",
|
||||
}
|
Loading…
Reference in New Issue