[PATCH AUTOSEL 6.18-5.10] net: usb: qmi_wwan: add MeiG SRM813Q
From: Sasha Levin
Date: Mon Aug 31 2026 - 16:25:55 EST
From: Jan Volckaert <janvolck@xxxxxxxxx>
[ Upstream commit 9758c11fc6c138a79a28a5659feeaa3abde7aa6a ]
Add support for the Qualcomm Technology Snapdragon X35-based MeiG SRM813Q
module.
The module can be put in different modes via AT commands
to enable/disable GPS functionality:
MODEM - PPP mode(2dee:4d63): AT+SER=1,1
If#= 0: RMNET
If#= 1: DIAG/ADB
If#= 2: MODEM
If#= 3: AT
P: Vendor=2dee ProdID=4d63 Rev=05.15
S: Manufacturer=MEIG
S: Product=LTE-A Module
S: SerialNumber=1bd51f0e
C: #Ifs= 4 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=85(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
I: If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=87(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
NMEA mode(2dee:4d64): AT+SER=51,1
If#= 0: RMNET
If#= 1: DIAG/ADB
If#= 2: NMEA
If#= 3: AT
P: Vendor=2dee ProdID=4d64 Rev=05.15
S: Manufacturer=MEIG
S: Product=LTE-A Module
S: SerialNumber=1bd51f0e
C: #Ifs= 4 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=85(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
I: If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=87(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
Signed-off-by: Jan Volckaert <janvolck@xxxxxxxxx>
Link: https://patch.msgid.link/20260517153237.55995-2-janvolck@xxxxxxxxx
Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
---
LLM Generated explanations, may be completely bogus:
## Phase 1: Commit Message Forensics
### Step 1.1: Subject Line
**Record:** `[net: usb: qmi_wwan]` `[add]` — Add USB device ID table
entries for the MeiG SRM813Q LTE modem (Snapdragon X35-based) to the
existing `qmi_wwan` driver.
### Step 1.2: Commit Message Tags
**Record:**
- **Fixes:** — not present (expected for manual review)
- **Reported-by:** — none
- **Tested-by:** — none
- **Reviewed-by:** — none
- **Acked-by:** — none
- **Link:**
`https://patch.msgid.link/20260517153237.55995-2-janvolck@xxxxxxxxx`
(patch 2/2 in series)
- **Cc: stable@xxxxxxxxxxxxxxx** — not present on this commit (the
companion `option.c` patch in this tree does have it)
- **Signed-off-by:** Jan Volckaert `<janvolck@xxxxxxxxx>` (author),
Jakub Kicinski `<kuba@xxxxxxxxxx>` (netdev maintainer)
- **Notable:** Maintainer sign-off from Jakub Kicinski; detailed
`lsusb`-style descriptors for two USB product IDs (`2dee:4d63`,
`2dee:4d64`); patch 2 of 2 (companion is `USB: serial: option: add
MeiG SRM813Q`)
### Step 1.3: Commit Body Analysis
**Record:**
- **Bug description:** Not a kernel crash/corruption bug. The MeiG
SRM813Q modem exposes its RMNET/QMI data interface on USB interface #0
(`Prot=50`, driver `qmi_wwan`), but without table entries the kernel
will not bind `qmi_wwan` to this device.
- **Symptom:** Users with this modem get no `wwan0`/RMNET network
interface; cellular data does not work. Serial/DIAG/AT ports are
handled separately by the `option` driver.
- **Root cause:** Missing `usb_device_id` entries in `qmi_wwan.c` for
vendor `0x2dee`, products `0x4d63` (Modem/PPP mode) and `0x4d64` (NMEA
mode).
- **Version info:** None stated; hardware is new (Snapdragon X35, USB
3.20).
### Step 1.4: Hidden Bug Fix Detection
**Record:** Not a hidden bug fix. This is explicit **hardware
enablement** — a new device ID addition to an existing driver. No error-
path, locking, refcount, or memory-safety changes.
---
## Phase 2: Diff Analysis
### Step 2.1: Change Inventory
**Record:**
- **Files:** `drivers/net/usb/qmi_wwan.c` — +2 lines
- **Functions modified:** `products[]` USB device ID table only (static
data, no function body changes)
- **Scope:** Single-file, surgical device ID addition
### Step 2.2: Code Flow Change
**Record:**
- **Hunk (products[] table):** Before → device not matched by
`qmi_wwan`; QMI interface #0 left unbound. After → `qmi_wwan` binds to
interface #0 for `2dee:4d63` and `2dee:4d64`, using
`QMI_QUIRK_SET_DTR` (same pattern as Quectel, SIMCom, u-blox entries
on interface 0).
- **Execution path:** USB device enumeration / driver probe at plug-in
time.
### Step 2.3: Bug Mechanism
**Record:** Category **h) Hardware workarounds / device ID addition**.
Without entries, `qmi_wwan` never probes the RMNET interface. The
`QMI_QUIRK_SET_DTR` flag ensures proper DTR/power management during bind
(consistent with other Qualcomm-based modems lacking auto-DTR).
### Step 2.4: Fix Quality
**Record:** Obviously correct — interface #0 confirmed by commit message
`lsusb` output (`Driver=qmi_wwan` on `If#= 0`). Minimal change.
Regression risk very low: only affects devices with these specific
VID/PID pairs that currently have no `qmi_wwan` binding at all.
---
## Phase 3: Git History Investigation
### Step 3.1: Blame
**Record:** Insertion point is immediately after
`{QMI_FIXED_INTF(0x2dee, 0x4d22, 5)}` (MeiG SRM825L), introduced by
commit `1ca645a2f74a4` (Aug 2024). The SRM813Q entries are new; no pre-
existing buggy code to blame.
### Step 3.2: Fixes: Tag
**Record:** Not applicable — no `Fixes:` tag.
### Step 3.3: Related File History
**Record:** Recent `qmi_wwan.c` changes in this tree are predominantly
similar device-ID additions (Telit, Quectel, Fibocom, MeiG SRM825L). The
companion `option.c` patch (`38ba1a464c0d1`, upstream `7d2b37d3e42d`) is
**already present** in this tree. The `qmi_wwan` half is **not yet** in
this tree — creating a half-enabled state for SRM813Q users.
### Step 3.4: Author Context
**Record:** Jan Volckaert submitted the companion `option.c` patch
(already merged here with `Cc: stable@xxxxxxxxxxxxxxx`). Jakub Kicinski
(netdev maintainer) signed off on the `qmi_wwan` patch per commit
message.
### Step 3.5: Dependencies
**Record:** Part of a 2-patch series with `USB: serial: option: add MeiG
SRM813Q`. The `option` half is already in v6.18.44. This `qmi_wwan`
patch is standalone (applies independently) but functionally completes
modem support. No structural/API prerequisites beyond existing
`QMI_QUIRK_SET_DTR` macro and `qmi_wwan` driver.
---
## Phase 4: Mailing List and External Research
### Step 4.1: Original Discussion
**Record:** Link points to `20260517153237.55995-2-janvolck@xxxxxxxxx`
(patch 2/2). `b4 dig -c` could not match this commit (not yet in local
git). `WebFetch` and `curl` to lore.kernel.org returned 403/bot
protection — discussion content **unverified**. Patch series structure
(2/2) confirmed from message ID.
### Step 4.2: Reviewers
**Record:** UNVERIFIED via b4 (commit not in tree). Jakub Kicinski
Signed-off-by confirms netdev maintainer acceptance.
### Step 4.3: Bug Report
**Record:** No external bug report, syzbot, or user crash report.
Hardware enablement driven by author testing with physical device
(`lsusb` descriptors provided).
### Step 4.4: Related Patches
**Record:** Patch 1/2 (`option.c`, commit `38ba1a464c0d1`) already in
v6.18.44 with `Cc: stable@xxxxxxxxxxxxxxx`. This patch 2/2 completes
RMNET data path support.
### Step 4.5: Stable List History
**Record:** UNVERIFIED (lore access blocked). Companion `option.c` patch
explicitly nominated for stable in this tree.
---
## Phase 5: Code Semantic Analysis
### Step 5.1: Key Functions
**Record:** Only `products[]` static table modified. Probe/bind handled
by existing `qmi_wwan_probe()` → `qmi_wwan_bind()`.
### Step 5.2: Callers
**Record:** USB core calls `qmi_wwan` probe during device enumeration
when VID/PID/interface match `products[]`. Standard hot-plug path for
USB modems.
### Step 5.3: Callees
**Record:** On bind with `QMI_QUIRK_SET_DTR`, existing code calls
`qmi_wwan_manage_power()` and `qmi_wwan_change_dtr()` — well-established
path for Qualcomm modems.
### Step 5.4: Reachability
**Record:** Triggered by plugging in MeiG SRM813Q USB modem. Common user
operation for cellular connectivity. Not syscall-triggered, but standard
device hotplug.
### Step 5.5: Similar Patterns
**Record:** Dozens of identical-pattern entries in `products[]` (e.g.,
`QMI_QUIRK_SET_DTR(0x2c7c, ...)`, `QMI_FIXED_INTF(0x2dee, 0x4d22, 5)`
for sibling MeiG SRM825L). Telit/Quectel additions in this tree
routinely carry `Cc: stable@xxxxxxxxxxxxxxx`.
---
## Phase 6: Cross-Reference Against Local Tree (v6.18.44)
### Step 6.1: Buggy Code Exists?
**Record:** Yes — the **absence** of entries is the issue.
`drivers/net/usb/qmi_wwan.c` line 1454 has SRM825L (`0x2dee:0x4d22`) but
**not** SRM813Q (`0x4d63`, `0x4d64`). Meanwhile
`drivers/usb/serial/option.c` already has all six SRM813Q entries (lines
2472–2476). Half-enabled state confirmed.
### Step 6.2: Backport Complications
**Record:** Clean apply — `git apply --check` succeeded with zero
conflicts against current `qmi_wwan.c`.
### Step 6.3: Related Fixes Already Present?
**Record:** `option.c` SRM813Q support present (`38ba1a464c0d1`). No
`qmi_wwan` SRM813Q fix present. No duplicate.
---
## Phase 7: Subsystem and Maintainer Context
### Step 7.1: Subsystem Criticality
**Record:** `drivers/net/usb/` — IMPORTANT. USB WWAN/cellular modems
used in laptops, routers, IoT, embedded. Not core-kernel, but critical
for affected hardware users.
### Step 7.2: Subsystem Activity
**Record:** Actively maintained — frequent device ID additions and bug
fixes in `drivers/net/usb/` on this branch.
---
## Phase 8: Impact and Risk Assessment
### Step 8.1: Who Is Affected
**Record:** Users of MeiG SRM813Q (Snapdragon X35) USB LTE modules.
Config-dependent: `CONFIG_USB_NET_QMI_WWAN`. Currently broken for
cellular data on v6.18.44 despite partial `option` driver support.
### Step 8.2: Trigger Conditions
**Record:** Plug in MeiG SRM813Q modem. Deterministic, every time. No
privilege required beyond normal USB device access.
### Step 8.3: Failure Mode Severity
**Record:** No kernel crash/oops. **Functional failure** — no
RMNET/`wwan` network interface, no cellular data connectivity. Severity:
**MEDIUM** for affected users (device unusable for its primary purpose),
**LOW** globally (single modem model).
### Step 8.4: Risk-Benefit
**Record:**
- **Benefit:** Enables cellular data on SRM813Q; completes support
started by already-merged `option.c` patch. Standard stable device-ID
backport.
- **Risk:** Very low — 2 lines, only matches specific VID/PID, no
behavior change for any other device.
- **Ratio:** High benefit for affected users, negligible risk.
---
## Phase 9: Final Synthesis
### Step 9.1: Evidence Summary
**FOR backport:**
- Explicit stable exception: new USB device IDs to existing driver
- 2-line, surgical, applies cleanly to v6.18.44
- Companion `option.c` patch already in tree with `Cc: stable`
- Without this, SRM813Q users lack `qmi_wwan`/RMNET — modem data path
non-functional
- Maintainer (Jakub Kicinski) signed off
- Identical pattern to other stable-nominated `qmi_wwan` device
additions in this tree
**AGAINST backport:**
- Not a crash/security/corruption fix
- Affects only one modem model (limited user population)
- No explicit `Cc: stable` on this specific commit message
- Mailing list discussion unverified
**UNRESOLVED:**
- Full lore review thread content
- Whether author tested RMNET connectivity end-to-end (descriptors
strongly support correctness)
### Step 9.2: Stable Rules Checklist
1. Obviously correct and tested? **PASS** — descriptors match table
entries; maintainer SOB; established macro pattern
2. Fixes real bug affecting users? **PASS** — hardware non-functional
for data without it; completes half-merged series
3. Important issue? **PASS (MEDIUM)** — no crash, but primary device
function broken for affected users
4. Small and contained? **PASS** — 2 lines, one file
5. No new features/APIs? **PASS** — device ID table only (stable
exception category)
6. Can apply to local tree? **PASS** — verified clean apply
### Step 9.3: Exception Category
**Record:** **NEW DEVICE IDs** — adding USB VID/PID entries to the
existing `qmi_wwan` driver. Textbook stable backport material.
### Step 9.4: Decision Rationale
For **v6.18.44**, this commit should be backported. It is a minimal
device ID addition that enables RMNET/cellular data on the MeiG SRM813Q
modem. The `qmi_wwan` driver and all required infrastructure already
exist in this tree. The companion `option.c` patch is already merged
here (with stable nomination), leaving users in a broken partial-support
state until this `qmi_wwan` half is also applied. This matches the
stable exception for new device IDs and follows the same pattern as
other `qmi_wwan` modem additions routinely backported to stable.
---
## Verification
- **[Phase 1]** Parsed subject, tags, body from user-provided commit
message
- **[Phase 1]** Confirmed patch 2/2 series structure from message ID
`55995-2`
- **[Phase 2]** Diff analysis: +2 lines in `products[]`,
`QMI_QUIRK_SET_DTR(0x2dee, 0x4d63/0x4d64, 0)`
- **[Phase 3]** `git describe HEAD` → `v6.18.44` (VERSION 6, PATCHLEVEL
18, SUBLEVEL 44)
- **[Phase 3]** `git blame -L 1454,1454` → SRM825L added by
`1ca645a2f74a4` (Aug 2024)
- **[Phase 3]** `git log --oneline -20 -- drivers/net/usb/qmi_wwan.c` →
recent device-ID additions confirmed
- **[Phase 3]** `git show 38ba1a464c0d1` → companion `option.c` patch
present with `Cc: stable@xxxxxxxxxxxxxxx`
- **[Phase 3]** `git cat-file -t 7d2b37d3e42d` → upstream option commit
exists in tree
- **[Phase 3]** `grep 0x4d63/0x4d64` in `qmi_wwan.c` → no matches (not
yet present)
- **[Phase 4]** `b4 dig -c 1ca645a2f74a4` → found SRM825L lore link
(wrong commit, expected)
- **[Phase 4]** `WebFetch`/`curl` lore.kernel.org → 403/bot blocked;
thread content UNVERIFIED
- **[Phase 5]** Read `QMI_QUIRK_SET_DTR` macro and DTR quirk logic at
lines 821–825, 938–958
- **[Phase 5]** `grep QMI_QUIRK_SET_DTR` → many similar entries confirm
pattern
- **[Phase 6]** `grep SRM813Q/0x4d63` in `option.c` → 6 entries present
(lines 2472–2476)
- **[Phase 6]** `grep SRM813Q/0x4d63` in `qmi_wwan.c` → only SRM825L
(`0x4d22`), not SRM813Q
- **[Phase 6]** `git apply --check` on provided diff → applies cleanly
- **[Phase 7]** `git log --oneline -20 -- drivers/net/usb/` → active
subsystem
- **[Phase 8]** Confirmed failure mode: no `qmi_wwan` bind → no cellular
data (not a crash)
- **[Phase 9]** `git show e81a7f65288c7` → similar Telit addition has
`Cc: stable@xxxxxxxxxxxxxxx`
**YES**
drivers/net/usb/qmi_wwan.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 05acac10cd2ba..94cdb61dca83d 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -1452,6 +1452,8 @@ static const struct usb_device_id products[] = {
{QMI_QUIRK_SET_DTR(0x1546, 0x1342, 4)}, /* u-blox LARA-L6 */
{QMI_QUIRK_SET_DTR(0x33f8, 0x0104, 4)}, /* Rolling RW101 RMNET */
{QMI_FIXED_INTF(0x2dee, 0x4d22, 5)}, /* MeiG Smart SRM825L */
+ {QMI_QUIRK_SET_DTR(0x2dee, 0x4d63, 0)}, /* MeiG SRM813Q w/ Modem(PPP) */
+ {QMI_QUIRK_SET_DTR(0x2dee, 0x4d64, 0)}, /* MeiG SRM813Q w/ NMEA */
/* 4. Gobi 1000 devices */
{QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */
--
2.53.0