[PATCH AUTOSEL 6.18] platform/x86: oxpec: add support for OneXPlayer Super X

From: Sasha Levin

Date: Mon Aug 31 2026 - 12:05:41 EST


From: Alexander Egorov <begeebe@xxxxxxxxx>

[ Upstream commit 0b6573e23acc7bca808e539e3edea49683f106de ]

OneXPlayer Super X identifies itself via DMI as:

board vendor: ONE-NETBOOK
board name: ONEXPLAYER SUPER X
product name: ONEXPLAYER SUPER X

Current mainline oxpec does not contain a matching DMI entry for this
system, so the in-tree driver is not auto-loaded.

The tested Super X fan, PWM, turbo-toggle, and battery charge-control EC
layout matches the existing ONEXPLAYER G1 A handling.

Add a DMI match for OneXPlayer Super X and reuse the oxp_g1_a board data.

Reviewed-by: Derek J Clark <derekjohn.clark@xxxxxxxxx>
Reviewed-by: Antheas Kapenekakis <lkml@xxxxxxxxxxx>
Signed-off-by: Alexander Egorov <begeebe@xxxxxxxxx>
Link: https://patch.msgid.link/20260519155124.3240359-1-begeebe@xxxxxxxxx
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx>
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:** `[platform/x86: oxpec]` `[add]` — Add DMI match so the
existing oxpec driver auto-loads on OneXPlayer Super X hardware.

### Step 1.2: Tags
**Record:**
- **Reviewed-by:** Derek J. Clark, Antheas Kapenekakis, Ilpo Järvinen
(subsystem maintainer)
- **Signed-off-by:** Alexander Egorov (author), Ilpo Järvinen
(maintainer commit)
- **Link:**
https://patch.msgid.link/20260519155124.3240359-1-begeebe@xxxxxxxxx
- No Fixes:, Reported-by:, Tested-by:, Cc: stable@xxxxxxxxxxxxxxx, or
syzbot tags
- Notable: Three Reviewed-by lines including the x86 platform maintainer
— strong review signal

### Step 1.3: Body Analysis
**Record:**
- **Bug:** OneXPlayer Super X reports DMI `ONE-NETBOOK` / `ONEXPLAYER
SUPER X`, but no matching `dmi_table` entry exists, so
`oxp_platform_init()` returns `-ENODEV` and the driver never loads.
- **Symptom:** No fan control (PWM/hwmon), no turbo-toggle sysfs, no
battery charge-control EC features on Super X.
- **Root cause:** Missing DMI quirk entry; EC layout matches existing
`oxp_g1_a` profile.
- **Version info:** None stated; hardware is a new OneXPlayer variant.

### Step 1.4: Hidden Bug Fix?
**Record:** Not disguised — this is explicit hardware enablement.
Functionally it fixes “driver doesn’t bind on this machine,” which is a
real usability defect for Super X owners, though not a crash or security
issue.

---

## Phase 2: Diff Analysis

### Step 2.1: Inventory
**Record:**
- **Files:** `drivers/platform/x86/oxpec.c` only (+7 lines)
- **Functions modified:** `dmi_table[]` static data only; no function
logic changed
- **Scope:** Single-file, surgical DMI table addition

### Step 2.2: Code Flow Change
**Record:**
- **Before:** `dmi_first_match(dmi_table)` fails for Super X →
`oxp_platform_init()` returns `-ENODEV` → no platform device, no
hwmon/battery EC sysfs.
- **After:** Super X matches new entry → `board = oxp_g1_a` → driver
probes and exposes fan PWM, turbo toggle, charge control identical to
G1 A.
- **Path affected:** Module init / DMI matching only (normal boot path
for matching hardware).

### Step 2.3: Bug Mechanism
**Record:** **Hardware workaround / DMI quirk** — same category as
PCI/USB ID additions. Missing DMI match prevents driver binding on
known-compatible hardware.

### Step 2.4: Fix Quality
**Record:** Obviously correct — reuses tested `oxp_g1_a` board data per
author hardware validation. Minimal diff, no logic changes. Regression
risk: very low (only affects machines with exact DMI string `ONEXPLAYER
SUPER X`).

---

## Phase 3: Git History Investigation

### Step 3.1: Blame
**Record:** Adjacent G1 A entry introduced in `b369395c895bf` (“Add
support for the OneXPlayer G1”, Apr 2025); `driver_data = oxp_g1_a` set
in `232b41d3c2ce8` (Jul 2025). G1 A support is an ancestor of HEAD and
present in `v6.18`.

### Step 3.2: Fixes: Tag
**Record:** N/A — no Fixes: tag.

### Step 3.3: Related File History
**Record:** Recent oxpec DMI additions already backported to this 6.18.y
tree:
- `43c40bfb85038` — OneXPlayer APEX
- `1faaa81aabab7` — OneXPlayer X1z
- `ba6af12e600bf` — Aokzoe A2 Pro
- `0a4e44eb4b0c1` — OneXPlayer X1 Air (committed by Greg K-H with
upstream marker)

Same pattern, same file, same driver. Standalone one-commit change.

### Step 3.4: Author Context
**Record:** Alexander Egorov authored this patch; Antheas Kapenekakis is
the primary oxpec maintainer (authored most recent device additions).
Ilpo Järvinen is x86 platform maintainer and committed the patch.

### Step 3.5: Dependencies
**Record:** Requires `oxp_g1_a` enum and its EC handling — **present in
this tree** since v6.18. No other commits needed. Patch inserts cleanly
between G1 A and G1 i entries.

---

## Phase 4: Mailing List and External Research

### Step 4.1: Original Discussion
**Record:** `b4 dig -c <commit>` not possible — commit is not in local
tree. Lore/patch.msgid.link fetch blocked (Anubis bot protection).
**UNVERIFIED:** full mailing-list thread content and any explicit stable
nominations in replies.

### Step 4.2: Reviewers
**Record:** From commit message — Derek J. Clark (oxpec co-maintainer),
Antheas Kapenekakis (oxpec maintainer), Ilpo Järvinen (x86 platform
maintainer). Appropriate reviewers CC’d per commit metadata.

### Step 4.3: Bug Report
**Record:** N/A — no Reported-by or external bug link beyond patch
submission.

### Step 4.4: Related Patches
**Record:** Standalone; not part of a multi-patch series. Same class as
other oxpec DMI additions already in 6.18.y.

### Step 4.5: Stable List History
**Record:** **UNVERIFIED** (lore blocked). However, four analogous oxpec
DMI additions are already in `v6.18..v6.18.44`, establishing precedent
in this tree.

---

## Phase 5: Code Semantic Analysis

### Step 5.1: Key Functions
**Record:** Only `dmi_table[]` modified. Relevant init path:
`oxp_platform_init()` → `dmi_first_match()` →
`platform_create_bundle()`.

### Step 5.2: Callers
**Record:** `oxp_platform_init()` is `module_init` — runs at module load
/ built-in init. Affects every boot on matching DMI hardware when
`CONFIG_OXP_EC` is enabled.

### Step 5.3: Callees
**Record:** `dmi_first_match()`, `platform_create_bundle()`,
`oxp_platform_probe()` — standard platform driver init. `oxp_g1_a` path
uses existing `read_from_ec`/`write_to_ec` for fan, turbo, battery.

### Step 5.4: Reachability
**Record:** Triggered automatically at boot on OneXPlayer Super X with
`CONFIG_OXP_EC=y/m`. No userspace syscall needed; affects all Super X
users on this kernel.

### Step 5.5: Similar Patterns
**Record:** Nine+ prior DMI entries in same table for other
OneXPlayer/AOKZOE models; four similar additions already backported to
6.18.y.

---

## Phase 6: Cross-Reference Against Local Tree

### Step 6.1: Buggy Code Present?
**Record:** **YES.** Local tree is **v6.18.44**.
`drivers/platform/x86/oxpec.c` exists with `oxp_g1_a` and G1 A DMI
entry, but **no** `ONEXPLAYER SUPER X` entry (verified by grep and
reading lines 267–280). Super X owners on 6.18.44 get no oxpec support.

### Step 6.2: Backport Complications
**Record:** **Clean apply expected** — 7-line insertion between existing
G1 A and G1 i blocks; no structural divergence in that region.

### Step 6.3: Related Fixes Already Present?
**Record:** G1 A support (`b369395c895bf`) and G1 AMD turbo fix
(`232b41d3c2ce8`) already in tree. Super X fix not present.

---

## Phase 7: Subsystem Context

### Step 7.1: Subsystem Criticality
**Record:** `drivers/platform/x86/` — **PERIPHERAL** (handheld gaming
device EC driver). Important to Super X users; not core kernel.

### Step 7.2: Activity
**Record:** Actively maintained — four oxpec DMI additions backported to
6.18.y in the last few months.

---

## Phase 8: Impact and Risk Assessment

### Step 8.1: Who Is Affected
**Record:** OneXPlayer Super X owners running Linux 6.18.y with
`CONFIG_OXP_EC` enabled (typical on distro kernels for x86 handhelds).

### Step 8.2: Trigger Conditions
**Record:** Every boot on matching hardware. Common for device owners;
not timing-dependent.

### Step 8.3: Failure Mode Severity
**Record:** Missing fan control, turbo management, and battery charge
limiting — **MEDIUM** (no crash/corruption, but degraded hardware
management and potential thermal/battery issues without manual
workarounds).

### Step 8.4: Risk-Benefit
**Record:**
- **Benefit:** Enables full EC platform support on a shipping device;
consistent with prior oxpec stable backports.
- **Risk:** Very low — 7-line DMI entry, exact string match, reuses
validated board profile.
- **Ratio:** Favorable; matches established 6.18.y policy for this
driver.

---

## Phase 9: Final Synthesis

### Step 9.1: Evidence Summary

**FOR backport:**
- Trivial DMI quirk addition (stable exception category: device ID /
hardware quirk)
- Fixes real user-visible problem (driver won’t load)
- Hardware-tested; three Reviewed-by including maintainer
- Prerequisites (`oxp_g1_a`) present since v6.18
- Four analogous oxpec DMI patches already in 6.18.y
- Clean, minimal diff

**AGAINST backport:**
- Not a crash, security, or data-corruption fix
- Only affects one specific handheld model
- Mailing-list stable nomination not verified

**UNRESOLVED:**
- Full lore thread content and any explicit Cc: stable discussion

### Step 9.2: Stable Rules Checklist
1. Obviously correct and tested? **PASS** — reuses G1 A profile,
hardware-tested, maintainer-reviewed
2. Fixes real bug affecting users? **PASS** — driver fails to bind; EC
features unavailable
3. Important issue? **PASS** (moderate) — hardware management broken for
device owners; aligns with stable’s device-ID exception
4. Small and contained? **PASS** — 7 lines, one file
5. No new features/APIs? **PASS** — no new APIs; enables existing driver
on new DMI
6. Can apply to local tree? **PASS** — prerequisites present, clean
insert

### Step 9.3: Exception Category
**Record:** Hardware quirk / DMI ID addition to existing driver (stable
exception #1 and #2).

### Step 9.4: Decision Rationale

For **Linux 6.18.44** (this checkout): the oxpec driver and `oxp_g1_a`
board profile already exist, but Super X is not matched, so owners lack
fan control, turbo toggle, and battery charge management. The fix is a
7-line DMI entry reusing validated board data — the same pattern already
accepted four times in this 6.18.y series. Risk is negligible; benefit
is concrete for Super X users.

---

## Verification

- **[Phase 1]** Parsed commit message, tags, and body from user-provided
diff
- **[Phase 2]** Diff analysis: +7 lines in `dmi_table[]`, no function
logic changed
- **[Phase 3]** `git describe HEAD` → v6.18.44; `make kernelversion`
equivalent → 6.18.44
- **[Phase 3]** `git log --oneline -20 -- drivers/platform/x86/oxpec.c`
→ recent oxpec history
- **[Phase 3]** `git blame -L 267,273` → G1 A entry from
`b369395c895bf`, `oxp_g1_a` from `232b41d3c2ce8`
- **[Phase 3]** `git merge-base --is-ancestor b369395c895bf HEAD` → G1
support is ancestor
- **[Phase 3]** `git merge-base --is-ancestor b369395c895bf v6.18` → G1
support in v6.18 base
- **[Phase 3]** `git log v6.18..v6.18.44 --oneline --
drivers/platform/x86/oxpec.c` → 4 prior DMI backports
- **[Phase 3]** `git show 0a4e44eb4b0c1` → X1 Air backport by Greg K-H
with upstream marker
- **[Phase 4]** `b4 dig` → requires commit in tree; not runnable for
candidate commit
- **[Phase 4]** WebFetch lore/patch.msgid.link → blocked by Anubis;
thread content UNVERIFIED
- **[Phase 5]** Read `oxp_platform_init()` at lines 1076–1099 →
`-ENODEV` when DMI unmatched
- **[Phase 5]** Read `oxp_g1_a` usage in turbo/PWM/battery paths →
existing handling confirmed
- **[Phase 6]** Grep for `ONEXPLAYER SUPER X` → not present in tree
(only unrelated eisa.ids match)
- **[Phase 6]** Read `drivers/platform/x86/oxpec.c` lines 267–280 → G1 A
present, Super X absent
- **[Phase 6]** `git show v6.18:drivers/platform/x86/oxpec.c | grep -c
"ONEXPLAYER G1 A"` → 1 (G1 A in v6.18)
- **[Phase 7]** Kconfig `OXP_EC` at line 1025 → driver exists, depends
on ACPI_EC/ACPI_BATTERY/HWMON/X86

**YES**

drivers/platform/x86/oxpec.c | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/drivers/platform/x86/oxpec.c b/drivers/platform/x86/oxpec.c
index a30845ba37969..56df03cd195fd 100644
--- a/drivers/platform/x86/oxpec.c
+++ b/drivers/platform/x86/oxpec.c
@@ -271,6 +271,13 @@ static const struct dmi_system_id dmi_table[] = {
},
.driver_data = (void *)oxp_g1_a,
},
+ {
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
+ DMI_EXACT_MATCH(DMI_BOARD_NAME, "ONEXPLAYER SUPER X"),
+ },
+ .driver_data = (void *)oxp_g1_a,
+ },
{
.matches = {
DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
--
2.53.0