Watch
1
0
Fork
You've already forked SouveraineOS
0

58: samcday's pmic-typec-smb2 covers most of phase 2, unrun on hardware

This commit is contained in:
Fimeg 2026-08-06 23:43:48 -04:00
commit f5dd985c96

View file

@ -1,6 +1,8 @@
# TASK 58 — host power: the SMB2 OTG boost
**Status: open — investigation first, patch second.** Created 2026-08-04,
**Status: open — investigation first, patch second. 2026-08-06: an existing
out-of-tree driver may already cover most of Phase 2 — see the section before
Phase 1 and read it before writing register code.** Created 2026-08-04,
from Casey: *"host mode still — what about the phone sharing its power to
another device?"* One kernel change unlocks host-mode *power*, power sharing
(power-bank mode), and docks without a Pi in between. **Repos:** `Pixel3Arch`
@ -24,6 +26,40 @@ his design contract is *"the kernel owns power"*: his platforms' kernels
auto-switch role on cable plug and source VBUS. The role half of that
contract works on blueline; the power half is exactly what this task is.
## Most of Phase 2 may already be written — read this before writing any of it
`https://github.com/samcday/qcom-pmic-typec-smb2` (from Casey, 2026-08-06). An
out-of-tree TCPM driver for **PM660 and PMI8998** — the SMB2-generation Type-C
block, which is this phone's. Per its README it does CC detection, role
control, VCONN and **VBUS** management, power/data role negotiation, and a PD
PHY, and **"for PMI8998 it manages the internal SMB2 OTG regulator for source
VBUS"**. It negotiates current limits through **`qcom_smbx`** — the same driver
this task measured `pmi8998-charger` bound to.
Line it up against the wall above and it is not adjacent, it is the same thing:
| This task's gap | What that driver claims |
|---|---|
| Phase 2.1 — "the silicon is in the SMB2 charger; mainline's driver just never registers it" | manages the PMI8998 internal SMB2 OTG regulator for source VBUS |
| Phase 2.3 — TYPEC/TCPM, Rp on CC so a C-to-C sink sees a source | it *is* a TCPM driver: CC detection, role control, VCONN, PD PHY |
| Phase 1.2 — read `qcom-smbx-charger`, does it touch boost/OTG at all | integrates with `qcom_smbx` for current-limit negotiation |
Its target list includes Google **crosshatch** — Pixel 3 XL, blueline's sibling
on the same PMI8998 — plus sargo/bonito (PM660) and enchilada/fajita. blueline
itself is not named, which is the porting question, not a blocker.
**The caveat is the whole reason this is a lead and not a fix:** the README says
the build matrix and DT artifacts passed *static validation* and **"no phone has
run this driver yet."** So it is unproven silicon-side by its own author. PD is
disabled in every default profile, which matches this task's ceiling finding
(PD at 12/20 V lives in SLPI firmware mainline does not run) — nothing here
needs PD.
This does not shrink Phase 1; it re-points it. The register archaeology in
Phase 1.2/1.4 becomes "read how this driver already does it", and Phase 2
becomes a port-and-test rather than a write. Casey already tracks this upstream
for pocketboot, so the fork path is established.
## Phase 1 — investigate (do this before any patch)
1. **Find the running kernel's source**`uname -r` on the phone, match the
@ -78,4 +114,6 @@ cable), `USB/README.md` (the exploration record: evidence table, correction,
live role-switch recipe), `NET_KERNEL_GAPS.md` (the kernel rebuild/reflash
path — tier 3's blocker is the same gating), TASK-25 (kernel package
signing), usb-signaller (the userspace that will switch roles against the
kernel's power contract).
kernel's power contract), and `samcday/qcom-pmic-typec-smb2` — the same
upstream pocketboot already forks, which is why the porting path is a known
one rather than a new relationship.