01. Prerequisites & Safety Boundaries
- Target Device & OS: BlackBerry Passport (
SQW100-1 / SQW100-3 / SQW100-4, codenamewolverine) runningLineageOS 18.1-UNOFFICIAL-wseries(Android 11 / API 30, SELinuxEnforcing). Non-wolverinedevices are rejected automatically. - Provisioned SIM: Insert an active 4G/5G USIM with VoLTE enabled on your carrier account and confirm LTE data attaches normally.
- Idle Phone State: Ensure no call is active, battery is above 30%, and use a reliable USB data cable.
02. Enable LineageOS 18.1 USB & Rooted Debugging
When using Method 1 (Windows EXE) or Method 3 (Portable CLI), Magisk is not required:
- Open Settings → About phone and tap Build number 7 times to unlock Developer Options.
- Open Settings → System → Advanced → Developer options.
- Turn ON Android debugging (USB debugging).
- Turn ON Rooted debugging on the same screen.
- Connect via USB and accept the “Allow USB debugging?” RSA fingerprint dialog on the phone.
03. Method 1: Windows Desktop One-Click EXE (Recommended)
- Download and launch
passport-android11-volte-1.0.0-r1-windows-x64.exe. - Verify your Passport serial appears in the “ADB Device” selector and click “1. Check Status (Read-Only)”.
- Click “2. Backup & Activate VoLTE (Recommended)” and confirm.
- The tool switches to
adb root, saves a pre-deployment EFS snapshot under%LOCALAPPDATA%\passport-android11-volte\backups\, provisions Stage 6A +EFS_SYNC, installsPassportVolteIms.apkv2.3 with persistentCarrierConfig, reboots normally, and polls untilvolte_stack_healthy: true.
04. Method 2: On-Device Companion App (For Magisk Users)
- Install
PassportVolteManager-1.0.0-r1.apkon your Passport (directly on the phone or via the desktop button “Install Mobile Companion App”). - Tap “Refresh Status” anytime to inspect IMS service &
QMI_IMSAregistration (works even without root). - If Magisk (
su) is installed, tap “Activate / Repair Native VoLTE (Root)” and grant the Magisk superuser prompt to run SHA-256-verified backup, Stage 6A provisioning, APK installation, and normal reboot right on the device.
05. Method 3: macOS / Linux / Cross-Platform Portable ZIP
Extract passport-android11-volte-1.0.0-r1-portable.zip (requires Python 3.9+ and adb):
python3 cli/volte_ctl.py self-test
python3 cli/volte_ctl.py status
python3 cli/volte_ctl.py deploy
# Or launch the cross-platform Tkinter GUI:
python3 cli/gui.py
06. Method 4: LineageOS 18.1 ROM Integration & MSM8974 Porting
ROM builders can include PassportVolteIms directly in /system/priv-app/ using rom-integration/Android.bp and device-passport-volte.mk:
mkdir -p packages/apps/PassportVolteIms
cp -r src/android-ims-service/* src/qmi-imsa-probe rom-integration/Android.bp packages/apps/PassportVolteIms/
# Add to device/blackberry/wolverine/device.mk:
$(call inherit-product, packages/apps/PassportVolteIms/device-passport-volte.mk)
Because Android ROM zips do not overwrite Qualcomm’s dedicated modem EFS partition, Stage 6A modem provisioning must still be run once per physical handset. For porting notes covering OnePlus One, Xperia Z2/Z3, Galaxy S5, Mi 4, LG G3, and HTC One M8, see MSM8974_PORTING_GUIDE.md.
07. SIM Swapping & Multi-Carrier Notes
Stage 6A modem EFS settings use the standard ims APN and dynamic PCO (mode=0) and remain stored across SIM swaps. Because Android’s CarrierConfig is keyed per SIM subId, after inserting a different VoLTE SIM simply click “Upgrade Bridge APK Only” (or run python3 cli/volte_ctl.py upgrade-apk) to bind CarrierConfig to the new SIM.
08. Live Call Acceptance Checklist
- Unplug the USB cable so the phone operates completely standalone;
- Place an outgoing call in the stock Dialer: confirm clear two-way audio and verify the status bar stays on LTE / 4G throughout the call;
- Receive an incoming call: confirm ringing, accurate Caller ID display (not “Unknown”), and clean hangup;
- Reboot the phone normally, wait ~30 seconds after unlock, and place another call to confirm hands-free boot recovery.
09. Full Factory Modem EFS Rollback
Click “Restore Factory Modem EFS & Uninstall” in the desktop GUI or run:
python3 cli/volte_ctl.py rollback
10. Verify SHA-256 Checksums
# Windows PowerShell:
Get-FileHash "$HOME\Downloads\passport-android11-volte-1.0.0-r1-windows-x64.exe" -Algorithm SHA256
# macOS / Linux:
shasum -a 256 ~/Downloads/passport-android11-volte-1.0.0-r1-portable.zip