rust_driver_usb.rs 1.2 KB

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