我正在尝试了解fsa9485驱动程序(USB开关)。我遇到了Dock初始化代码:
switch_dev_register(&switch_dock)
switch_dock
是switch_dev
类型的结构,在附件检测例程中,它使用如下:
switch_set_state(&switch_dock, attached)
我推断如下:有两种类型的码头,一种是汽车停靠站,另一种是桌面停靠站,switch_dev
类用于在它们之间切换。
为什么我们需要switch_dev
个课程?这个班级如何区分两个不同的码头?
答案 0 :(得分:3)
switch_dev_register
功能会使用sysfs
注册设备,并在/sys/
中创建文件。 Switch_set_state
更新正在运行的内核(state
文件)上创建的文件之一的值。所以在我的内核中,我可以通过读取文件“/ sys / devices / virtual / switch / dock / state”来查看状态。 State
的{{1}}为1,deskdock
为2,否则为0。这只是将硬件信息传递给用户空间的一种简单方法。
有必要在cardock
中使用switch_dev
类进行标准化。驱动程序通过读取驻留在I2C总线上的fsa9485芯片的寄存器值来区分两个扩展坞。请参阅fsa9480.c中的sysfs
,其中驱动程序从模数转换器fsa9480_detect_dev
读取值,并使用设备类型寄存器确定停靠类型。