内核如何知道 USB 设备何时自行进入低功耗模式(不是由主机启动)?



一个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 链接。

相关内容

  • 没有找到相关文章

最新更新