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

标签 android linux linux-kernel usb device-driver

一个 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。如果主机 Controller 驱动程序公开任何接口(interface),则可以使用该接口(interface)。

查看 dwc3 Controller 代码,它公开了一个可用于读取链接状态的 debugfs 接口(interface)。

路径 - usb/dwc3/debugfs.c

API-

static int dwc3_link_state_show(struct seq_file *s, void *unused)

PS - 我认为您有 XHCI Controller 。但 EHCI Controller 也几乎相同。设备永远不会暂停 USB 链接。

关于android - 内核如何知道 USB 设备何时自行进入低功耗模式(不是由主机启动)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45351924/

相关文章:

android - 播放视频时应用程序崩溃

android - 更改 NavigationView 的项目文本颜色

android - 重复条目 IInAppBillingService

linux-kernel - ARM 机器/主板 ID

c - Bridge mac 学习老化时间

android - 在继承方法上使用反射的正确方法

linux - Ambari 文件 View 构建失败

linux - 我如何获得由 grub2 以与发行版无关的方式加载为根设备的 cpio 归档文件制成的 initrd?

linux - bash 中的双引号

linux - 为内核模块导出每个 cpu 符号