Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1// SPDX-License-Identifier: GPL-2.0
2// SPDX-FileCopyrightText: Copyright (C) 2025 Collabora Ltd.
3
4//! Rust USB driver sample.
5
6use kernel::{
7 device::{
8 self,
9 Core, //
10 },
11 prelude::*,
12 sync::aref::ARef,
13 usb, //
14};
15
16struct SampleDriver {
17 _intf: ARef<usb::Interface>,
18}
19
20kernel::usb_device_table!(
21 USB_TABLE,
22 MODULE_USB_TABLE,
23 <SampleDriver as usb::Driver>::IdInfo,
24 [(usb::DeviceId::from_id(0x1234, 0x5678), ()),]
25);
26
27impl usb::Driver for SampleDriver {
28 type IdInfo = ();
29 const ID_TABLE: usb::IdTable<Self::IdInfo> = &USB_TABLE;
30
31 fn probe(
32 intf: &usb::Interface<Core>,
33 _id: &usb::DeviceId,
34 _info: &Self::IdInfo,
35 ) -> impl PinInit<Self, Error> {
36 let dev: &device::Device<Core> = intf.as_ref();
37 dev_info!(dev, "Rust USB driver sample probed\n");
38
39 Ok(Self { _intf: intf.into() })
40 }
41
42 fn disconnect(intf: &usb::Interface<Core>, _data: Pin<&Self>) {
43 let dev: &device::Device<Core> = intf.as_ref();
44 dev_info!(dev, "Rust USB driver sample disconnected\n");
45 }
46}
47
48kernel::module_usb_driver! {
49 type: SampleDriver,
50 name: "rust_driver_usb",
51 authors: ["Daniel Almeida"],
52 description: "Rust USB driver sample",
53 license: "GPL v2",
54}