BTUSB 探测、固件与电源管理

BTUSB 探测、固件与电源管理

1. Probe

btusb_probe()匹配USB ID/interface class和driver_info quirks:

-找到interrupt、bulk、isoc endpoints;
-分配 btusb_datahci_dev
-设置 open/close/flush/send/notify;
-按Intel/Realtek/Broadcom/MediaTek等覆盖setup回调;
-claim相关interface;
-hci_register_dev()

2. RX URBs

  • interrupt IN:HCI events;
  • bulk IN:ACL;
  • isochronous IN:SCO;
    -部分设备用bulk传ISO。

Completion校验status/length,提交HCI frame并在运行状态下resubmit。

3. TX

  • command走control URB;
  • ACL走bulk OUT;
  • SCO走isoc OUT;
    -ISO依设备能力。

Anchor跟踪in-flight URBs,close/disconnect时统一kill。

4. SCO

Voice连接数变化触发work,选择alternate setting和isoc packet size。USB bandwidth或altsetting错误表现为A2DP正常但HFP语音失败。

5. 厂商初始化

USB ID/版本决定:

-Intel firmware和bootloader mode;
-Realtek patch/config;
-Broadcom patchram;
-MediaTek firmware;
-QCA/Atheros下载或quirk。

不能只按USB VID推断firmware文件名。

6. Suspend

btusb_suspend()

-阻止新TX;
-检查/等待busy计数;
-停止URBs;
-保存wake相关状态。

btusb_resume()重提RX URBs、恢复isoc和queued deferred TX。USB autosuspend由 enable_autosuspend及Kconfig默认控制。

7. Remote wake

控制器、USB host和平台电源域均需支持。若combo module电源被Rockchip rfkill切断,USB remote wake无法弥补。

8. Disconnect

必须处理主interface和isoc/diag interface先后disconnect,避免二次unregister。

9. 调试

1
2
3
4
lsusb -t
usb-devices
dmesg | grep -Ei 'Bluetooth|btusb|firmware'
cat /sys/bus/usb/devices/*/power/control

频繁 -71/-110通常先检查USB信号、电源和autosuspend,而不是HCI协议。

文章互动

阅读 --

留言

0 条留言

正在加载留言…