GIGABYTE AERO 16 OLED (2023) で充電上限を設定する
普段 AC 電源で利用しているので、バッテリを 100 % まで充電してしまうのは寿命的に望ましくない。
p37-ec-aero-15 にあるように、Embedded Controller (EC) レジスタを操作することで充電上限を設定できるようだ。自分がテストしたところ、 0x0F.2 を 1 にすることでバッテリ制限モードが有効になり、0xA9 で指定した % が上限となる。興味深いことに、現在の充電量がこれを超えていると、その値になるまで放電するようだ。0x0F.2 を 0 にすると 0xA9 は 97 % に戻ってしまうので、0x0F.2 を再度立てるときは、0xA9 も再設定しなければならない。0xC6.0 が何を意味しているのかは分からない。0x0F.2 と連動しているように見える。上記レポジトリのドキュメントでは、0x0F.2 だけだと急速充電モードであり、0xC6.0 を入れると上限設定が有効になるとある。また、このレジスタはシャットダウンしてから再び起動しても覚えているように見えて、シャットダウンした状態で数日放っておいたらリセットされていた。よく分からない。
p37-ec-aero-15
は ec_sys
モジュール経由で EC を直接操作する一方、gigabyte-laptop-wmi は、ACPI の WMI (Window Management Instrumentation) 経由で EC を操作するカーネルモジュールだ。自分の機種では、
#define WMI_STRING_WMBC "\\_SB.PCI0.AMW0.WMBC" #define WMI_STRING_WMBD "\\_SB.PCI0.AMW0.WMBD"
となっているところで、PCI0
を PC00
に変更しないと動かなかった。
これを insmode
すると、/sys/devices/platform/gigabyte-laptop/charge_mode
と /sys/devices/platform/gigabyte-laptop/charge_limit
が出現し、値を設定できる。
これは WMI メソッドを呼び出して値を設定している(gigabyte_laptop_set_devstate
関数)のだが、その第一引数としてレジスタ番号を指定する。このレジスタ番号は、上の EC のレジスタ番号と全く異なる。例えば、EC 0x0F.2 らしきものが 0x64、EC 0xA9 らしきものが 0x65 (EC 0xC6.0 の操作はない)。CPU と GPU 温度も EC 0x60, 0x61 に対して 0xE1, 0xE2 である。また、bit 単位でのアクセスもなく、より「意味論的」になっているようだ。
では、こういうアドレスをどこから取得するのかというと、Windows 上の公式ツールで設定を変える前後での EC レジスタの変化を、RWEverything などでダンプするようだ。ACPI メソッドについては、次のようにして ACPI テーブルをダンプし、メソッドも解析できるっぽい。
sudo acpidump > acpi.raw acpixtract -a acpi.raw
これで、テーブルごとに dat ファイルができるので、
for f in *.dat; do iasl -d $f; done
などとして読めるようにする。
こういうハードウェア固有の情報を hw-probe
でまとめて取得したものを皆がアップロードする Linux Hardware Database というものがあり、そこから ACPI 関係を抽出したレポジトリもあるようだ。ここに Gigabyte AORUS (2015) の情報があり、上記メソッドの存在が分かる(WMBD で検索)。ここで、たとえば 0x65 を見ると、LPCB.ECDV.BCPC
の値を設定しており、BCPC で検索すると ECF2, EmbeddedControl
なるものの Offset (0xA9)
にあるので、EC のアドレスと対応していることが確認できる。なお、このレジスタにはいろいろなものがあるが、4 文字の略称となっており、TCPU (CPU 温度) などごく一部を除けば意味が分からない。
- "Writing an ACPI driver - an introduction": DSDT (Differentiated System Description Table) をダンプし、AML (ACPI Machine Language) を ASL (ACPI Source Language) に戻して解析。東芝ラップトップの Bluetooth オン・オフスイッチの不具合を解消するドライバを開発している。
- "Writing a WMI driver - an introduction": DSDT から WMI 関係のメソッドを探してドライバを書く方法。
読んだ
BBC "Why is Twitter limiting how many tweets you can see?"
AI 企業などがツイートを取得するのを防ぎたいという思惑があるにせよ、ツイート表示回数を制限すれば広告も減るから Twitter にとっても損なのではと思いきや、もともと広告に依存する収入モデルをやめたがっていたらしい。広告主の意向の影響を受けたくないからだという。放射光学会誌 「蛍光 X 線ホログラフィーの進歩」
式 1 の導出とか定在波線による対称性の拡張とか細かいことは分からなかったが、概念は理解した。ただ、原子位置が単エネルギーホログラフィーでズレるというのは深刻な問題なんじゃないの? なぜそれが起きるの? 像回復アルゴリズムにおける何らかの近似・仮定が破綻している?
見た
- Tom Scott "How can you legally fly a plane designed in 1910?"
ライト兄弟の飛行機を、最低限の設計変更(翼を捻るかわりにエルロンをつけるなど)で飛べるようにしたもの。