故事的开始, 一个不工作的读卡器
GU603ZM 也就是 rog 幻 16 2022 的一个型号,这台笔记本存在一个 rts_525a 的 pcie 的 tf 卡读卡器,自从 22 年开始它在 Linux 上就没有正常工作过,dmesg 显示 Unable to change power state from D3cold to D0, device inaccessible,神奇的是我尝试禁止设备进入 d3cold 状态,然而并没有用,它仍然会进入 d3cold 状态。
tlp 的魔法
不知道出于什么心态我在 2022 年在 Tumbleweed 上安装了一次 tlp, 然后这个读卡器就可以用了(仅限制于刚开机),但是它空闲一段时间仍然会进入 d3cold 模式,然后无法唤醒。然而我并没有使用 tlp, power-profile-daemon 才是新世界的。
rts_bpp 复活辣
rts_bpp debian wiki 是 Linux 内核在 3.x(大概也许)时候的 适用于 Realtek RTL8411 Barossa Plus Plus 读卡器的驱动,它工作很好,并且实现了一些其他的对于 rtsx_pci 的修复,这也是为什么它可以在成功驱动 rts525a。于是, 我想尝试将 rts_bpp 移植到 Linux 6.x(已经有人将其移植到了 5.6+ https://github.com/PythonNut/rts_bpp)但是由于 Linux 6 更改一些函数的定义,它无法编译为 Linux 6.x 的模块。但是我很快就放弃了,我根本没有相关经验,并且我也找不到相关的内核驱动的开发教程。于是我尝试通过虚拟机直通来使用它,但我意识到这也是不可能的,即使禁用了 rtsx_pci 驱动,我仍然无法唤醒这个读卡器,可能是因为读卡器没有使用标准的 apci 电源管理。
故事的结束?
我在 bios 设置中打开了 ErP 功能,因为我希望笔记本在睡眠时消耗更少的电量。奇迹发生了,当开启之后,只要进行一次盒盖操作然后再次唤醒笔记本(只能通过键盘,开盖唤醒的传感器被禁用了),读卡器就可以用了,不会再有无法唤醒的问题。It works, but WHY?
回顾
我认为是时候忘记这个问题了,就像当初忘记笔记本有读卡器一样,纠结这件事无异于掉进完美主义陷阱。