Re: [PATCH 0/6] usb: typec: add Qualcomm PMI8998 USB Type-C role-switch support
From: David Heidelberg
Date: Tue Jul 28 2026 - 04:29:44 EST
On 18/05/2026 22:22, taygoth wrote:
This series adds USB Type-C role-switch support for the PMI8998 PMIC
used on SDM845 phones (OnePlus 6/6T, Xiaomi Poco F1, SHIFT 6mq), which
have been locked to USB peripheral mode under mainline kernels until
now.
The PMI8998 SMB2 charger block integrates a Type-C detection unit at
SPMI offset 0x1300 that performs CC sensing, debounce and Rp/Rd
resolution entirely in hardware. The state is exposed through the
TYPE_C_STATUS_4 register and reported via a single consolidated
"type-c-change" interrupt. The new driver reads that status on every
interrupt and pushes the negotiated role to a usb_role_switch consumer
(dwc3), enabling automatic peripheral/host switching on cable change.
Because the hardware handles the Type-C state machine natively, no
software TCPM port manager is required.
The Type-C block shares the SMB2 USBIN region with the already
mainlined qcom_pmi8998-charger driver. The two coexist on the shared
SPMI regmap without write conflict: the typec driver only reads
TYPE_C_STATUS_* and touches the IRQ enable bits at offsets
0x130b-0x130f and 0x1367-0x1368.
The PMI8998 USB OTG VBUS boost converter at offset 0x1100 has the
same CMD_OTG / OTG_CFG / OTG_CURRENT_LIMIT register layout as PM8150B,
so the existing drivers/regulator/qcom_usb_vbus-regulator can drive it
through a compatible cascade -- only the DT binding needs the new
compatible string added.
Power Delivery is not implemented. The PMI8998 PDPHY block at offset
0x1700 is register-identical to PM8150B and could be wired through
the existing drivers/usb/typec/tcpm/qcom code in a follow-up if PD
negotiation becomes a requirement.
Tested-on: OnePlus 6T (sdm845-oneplus-fajita) running Mobian
6.12-sdm845. A USB flash drive, USB ethernet adapter, USB WiFi
adapter (TP-Link Archer T2) and a self-powered USB-C dock with
downstream ethernet all enumerate through xHCI after the role
transitions from peripheral to host. Repeat plug/unplug cycles drive
the role through device -> none -> host -> none -> device cleanly
with no IRQ stalls or stale role-switch state.
Hello Максим,
1st, let me say happy to hear about progress here, I missed this message - due to huge traffic in linux-arm-msm*.
2nd, I have locally version which does work with DisplayPort (SHIFT 6MQ), does work with dockstation USB (e.g. perperials are recognized and does work), but doesn't provide power to the usb devices (haven't figureout, and it's more clanker work than mine here).
3rd, added Sam into +Cc, as he's interested in the pmi8998 too, plus there are others doing some experiments with pmi8998 in Matrix room https://matrix.to/#/#sdm845:ixit.cz .
What's your current state? Would you be interested joining the room and chat? or we can do some email exchange of trees and work done :)
David
* there is phone-devel@xxxxxxxxxxxxxxx, where this type of contribution stand out a bit, possibly for next iteration
[...]