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はありません。ホストコントローラドライバが任意のインタフェースを公開する場合は、それを使用できます。
リンク状態の読み取りに使用できるdebugfsインターフェイスを公開するdwc3コントローラコードを参照してください。
パス - USB/dwc3/debugfs.c
API -
static int dwc3_link_state_show(struct seq_file *s, void *unused)
PS - 私はあなたがXHCIコントローラを持っていると考えられてきました。しかし、EHCIコントローラでもほぼ同じです。デバイスはUSBリンクを中断することはありません。
sysfsはこの情報を提供しています。こちらをご覧ください:https://www.kernel.org/doc/html/latest/driver-api/usb/power-management.html – ApriOri
ありがとう、@ApriOri、リモートウェイクアップ、サスペンドおよびレジュームの機能を有効または無効にする方法、およびautosuspend_delay_msを設定する方法を設定できます。これらはすべてUSBデバイスの動作に関するすべての設定です。デバイスが低電力モードで起動しているときにデバイスのステータスが必要です。 .....私はデバイスのレジュームを制御できるように。再開プロセスの制御に関する情報はありません。 – AnuragChauhan