os/fs/sysfs/builders/
input.rs1use alloc::format;
6use alloc::sync::Arc;
7
8use crate::fs::sysfs::device_registry;
9use crate::fs::sysfs::inode::SysfsInode;
10use crate::vfs::{FsError, Inode};
11
12pub fn build_input_devices(root: &Arc<SysfsInode>) -> Result<(), FsError> {
16 let class_inode = root.lookup("class")?;
17 let class = class_inode
18 .downcast_ref::<SysfsInode>()
19 .ok_or(FsError::InvalidArgument)?;
20
21 let input_inode = class.lookup("input")?;
22 let input_dir = input_inode
23 .downcast_ref::<SysfsInode>()
24 .ok_or(FsError::InvalidArgument)?;
25
26 for dev_info in device_registry::list_input_devices() {
28 let target = format!("../../devices/platform/{}", dev_info.name);
30 let symlink = SysfsInode::new_symlink(target);
31 input_dir.add_child(&dev_info.name, symlink)?;
32 }
33
34 Ok(())
35}