summaryrefslogtreecommitdiff
path: root/samples/rust/rust_driver_usb.rs
diff options
context:
space:
mode:
authorJiri Kosina <jkosina@suse.com>2025-12-02 14:46:11 +0100
committerJiri Kosina <jkosina@suse.com>2025-12-02 14:46:11 +0100
commit7362b5b493102c6b71827c2da22117b475528f6d (patch)
tree62888e5fb3459077d2874c61bc8b378d7bf5c7da /samples/rust/rust_driver_usb.rs
parenteb41c955b05ea015275b3188b27b3960a95ae149 (diff)
parent06416555c883e3ffabcc62ad39617c23d6b2f012 (diff)
Merge branch 'for-6.19/nintendo' into for-linus
- switch to WQ_PERCPU workaueues (Marco Crivellari) - reduce potential initialization blocking time of hid-nintendo (Willy Huang)
Diffstat (limited to 'samples/rust/rust_driver_usb.rs')
-rw-r--r--samples/rust/rust_driver_usb.rs47
1 files changed, 47 insertions, 0 deletions
diff --git a/samples/rust/rust_driver_usb.rs b/samples/rust/rust_driver_usb.rs
new file mode 100644
index 000000000000..5c396f421de7
--- /dev/null
+++ b/samples/rust/rust_driver_usb.rs
@@ -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",
+}