一个USB设备能够进入低功耗模式(支持挂起和恢复(。
主机还可以为设备启动挂起和恢复,在这种情况下,主机知道设备状态。
场景是:
- 设备启动低功耗模式。
- 主机驱动程序 想要访问有关设备低功耗状态的此信息
- 驱动程序如何从 Linux 内核获取此信息?
根据 USB规范,USB 设备无法挂起与 USB 主机的链接。只有主机可以挂起链接。此外,挂起(U3(与低功耗模式(U1/U2(不同。设备可以通过与主机协商来开始切换到低功耗模式,但不能挂起。
现在让我们考虑你的意思是低功耗模式 (U1/U2(,然后主机驱动程序无法知道端口何时切换到设备启动的低功耗模式,因为不会有事件。您需要自行监控链路状态,以查看链路是否已切换到低功耗模式。
据我所知,有一个API用于获取连接到集线器的设备的链接状态。
static void xhci_hub_report_link_state(struct xhci_hcd *xhci,
u32 *status, u32 status_reg)
此 API 可用于跟踪通过外部集线器连接的设备的链路状态。但是没有可用于读取根集线器端口链接状态的 API。如果主控制器驱动程序公开任何接口,则可以使用该接口。
请参阅 dwc3 控制器代码,其中公开了一个可用于读取链路状态的 debugfs 接口。
路径 - USB/DWC3/debugfs.c
应用程序接口-
static int dwc3_link_state_show(struct seq_file *s, void *unused)
PS - 我考虑过你有XHCI控制器。但对于 EHCI 控制器来说也几乎相同。设备永远无法挂起 USB 链接。