RFKill、休眠唤醒与 Wi-Fi 共存
1. 标准RFKill
Bluetooth HCI设备注册rfkill,software block控制radio policy。rfkill list/block/unblock bluetooth不保证物理断电,具体取决于driver。
2. Rockchip平台实现
本厂商树另有:
net/rfkill/rfkill-bt.c;net/rfkill/rfkill-wlan.c;CONFIG_RFKILL_RK=y。
它解析 compatible = "bluetooth-platdata"的旧式属性并控制power/reset/wake/RTS/clock。
3. Power sequence
rfkill_rk_set_power()协调:
-combo shared rail;
-BT reset/power GPIO;
-device wake;
-host wake IRQ;
-RTS pin state;
-external clock;
-与Wi-Fi当前power state。
因此HCI UART transport本身可能不知道真正电源状态。
4. Wake signals
BT,wake_gpio:host通知controller保持唤醒;BT,wake_host_irq:controller唤醒host;- polarity由GPIO flags定义;
-IRQ需配置wake;
-suspend前切换sleep状态。
5. RTS GPIO
板型提供 uart_rts_gpios以及 default/rts_gpio pinctrl states。Suspend时把RTS从UART复用切到GPIO可防止模块误唤醒或实现厂商低功耗握手。
6. Shared power
Wi-Fi/BT combo可能共享VBAT/VIO/32k clock。单独重启BT时不可无条件关闭shared rail;rfkill-wlan.c和rfkill-bt.c通过全局状态协调。
7. 并发与限制
平台实现使用全局 g_rfkill,天然偏单实例;GPIO属性名称为厂商旧binding。它不同于标准UART Bluetooth child/serdev模型,迁移时不能同时让两套driver控制同一GPIO。
8. Suspend问题
常见失败:
-host wake polarity错;
-IRQ未标wake;
-wake GPIO过早拉低;
-RTS pinctrl错误;
-32k clock停;
-UART RX clock gated;
-Wi-Fi driver关闭shared rail;
-延迟work与suspend竞态。
9. 调试
1 | rfkill list |
正在加载留言…