From: Sasha Levin <sashal@kernel.org>
To: patches@lists.linux.dev, stable@vger.kernel.org
Cc: Bradford Love <brad@nextdimension.cc>,
Hans Verkuil <hverkuil+cisco@kernel.org>,
Sasha Levin <sashal@kernel.org>,
mchehab@kernel.org, linux-media@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH AUTOSEL 7.0-5.15] media: em28xx: Add a variety of DualHD usb id
Date: Mon, 20 Apr 2026 09:18:01 -0400 [thread overview]
Message-ID: <20260420132314.1023554-87-sashal@kernel.org> (raw)
In-Reply-To: <20260420132314.1023554-1-sashal@kernel.org>
From: Bradford Love <brad@nextdimension.cc>
[ Upstream commit 724e16b166534bd01d4f5bdf310310146bd4da56 ]
Include possible vid:pid combination of DualHD models
that are in the wild.
Signed-off-by: Bradford Love <brad@nextdimension.cc>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
LLM Generated explanations, may be completely bogus:
Now I have enough information to complete the full analysis. Let me
compile my findings.
---
## Full Analysis: media: em28xx: Add a variety of DualHD usb id
### PHASE 1: COMMIT MESSAGE FORENSICS
**Step 1.1: Subject Line**
- Subsystem: `media: em28xx:`
- Action verb: "Add"
- Summary: Adding new USB vid:pid entries for Hauppauge DualHD models to
the em28xx driver.
- Record: [media: em28xx] [Add] [New USB device IDs for DualHD variants
in the wild]
**Step 1.2: Tags**
- `Signed-off-by: Bradford Love <brad@nextdimension.cc>` - Author; Brad
Love is a well-known contributor for Hauppauge em28xx devices (14+
commits to this driver).
- `Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>` - Media
subsystem maintainer.
- No Fixes: tag (expected for device ID additions).
- No Reported-by: tag.
- No Cc: stable (expected — that's why we're reviewing it).
- Record: Author is a repeat contributor to this exact subsystem. Signed
off by media maintainer.
**Step 1.3: Commit Body**
- "Include possible vid:pid combination of DualHD models that are in the
wild."
- This describes real hardware variants already out in the field that
users own but cannot use because the kernel doesn't recognize the USB
IDs.
- Record: Bug = hardware not recognized. Symptom = users with DualHD
variants cannot use them. Root cause = missing USB IDs.
**Step 1.4: Hidden Bug Fix Detection**
- This is a device ID addition — a well-known exception category. While
it's "adding" code, it enables already-supported hardware. Without
these IDs, users cannot use their devices at all.
- Record: This is an explicit hardware enablement fix via device IDs.
Classic stable material.
### PHASE 2: DIFF ANALYSIS
**Step 2.1: Inventory**
- Files changed: 1 (`drivers/media/usb/em28xx/em28xx-cards.c`)
- Lines added: 12 (6 new USB_DEVICE entries, each 2 lines)
- Lines removed: 0
- Functions modified: None — changes are in the static
`em28xx_id_table[]` array.
- Record: Single-file, 12-line addition. Data-only change to USB ID
table. Zero code logic change.
**Step 2.2: Code Flow Change**
- Before: The `em28xx_id_table[]` did not include PIDs 0x8269, 0x8278,
0x826e, 0x826f, 0x8270, 0x8271.
- After: These 6 PIDs are mapped to existing board definitions
(`EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB` and
`EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595`).
- Effect: USB subsystem will now match these devices and bind the em28xx
driver.
- Record: Pure data addition to USB match table. No behavior change for
existing devices.
**Step 2.3: Bug Mechanism**
- Category: Hardware workaround / device ID addition (category h).
- The new IDs map to two existing board definitions that are fully
functional. The board definitions
(`EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB` at line 2520,
`EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595` at line 2542) already
exist and have full driver support including DVB, dual transport
stream, I2C, tuner, and LED configurations.
- Record: Missing USB IDs → device not recognized. Fix adds IDs mapping
to existing, tested board configs.
**Step 2.4: Fix Quality**
- Obviously correct: each new entry is a 2-line `USB_DEVICE` macro
mapping a vid:pid to an existing board definition. The pattern is
identical to existing entries.
- Minimal/surgical: 12 lines of pure data, zero logic changes.
- Regression risk: Effectively zero. These IDs are new — no existing
device will be affected. The only devices affected are ones that
previously weren't recognized.
- Record: Perfect quality. Zero regression risk. Follows established
patterns exactly.
### PHASE 3: GIT HISTORY INVESTIGATION
**Step 3.1: Blame**
- The DualHD DVB board support was added by Olli Salonen in commit
`11a2a949d05e9d` (2016, v4.7 timeframe).
- The DualHD 01595 ATSC/QAM board support was added by Kevin Cheng in
commit `1586342e428d80` (2017, v4.11 timeframe).
- Brad Love previously added bulk-mode PIDs (0x8265, 0x826d) in commit
`f2a326c928cca1` (2018, v4.16 timeframe).
- Record: Board definitions have been stable since v4.7/v4.11. Exist in
ALL active stable trees.
**Step 3.2: Fixes Tag** — Not applicable (no Fixes: tag, which is
expected for device ID additions).
**Step 3.3: File History**
- The em28xx-cards.c file has had very few changes since v6.1 (only 4
commits, mostly treewide cleanups).
- Record: File is stable, no conflicts expected. Standalone change.
**Step 3.4: Author**
- Brad Love has 14+ commits to the em28xx driver, including the original
DualHD bulk model support, dual transport stream fixes, disconnect
oops fixes, and other DualHD-related patches. He is effectively the
Hauppauge DualHD expert for em28xx.
- Record: Author is a domain expert for this exact hardware. Very high
trust.
**Step 3.5: Dependencies**
- No dependencies. The board definitions already exist. The only change
is adding new entries to the USB ID table.
- Record: Fully standalone. No prerequisites.
### PHASE 4: MAILING LIST AND EXTERNAL RESEARCH
**Step 4.1: Original Patch Discussion**
- Found via mail-archive: committed to media.git/next on March 12, 2026.
- Signed off by Hans Verkuil (media subsystem co-maintainer).
- Record: Patch was submitted and merged through the normal media tree
path. Signed off by maintainer.
**Step 4.2: Reviewers**
- Hans Verkuil signed off as maintainer. Brad Love is a trusted
contributor.
- Record: Proper maintainer signoff.
**Step 4.3-4.5: Bug Report and Stable Discussion**
- The commit message says "DualHD models that are in the wild" — these
are real devices owned by real users.
- No explicit stable nomination found, but device ID additions are a
well-known automatic exception category.
- Record: Real hardware in the field. No counter-indications found.
### PHASE 5: CODE SEMANTIC ANALYSIS
**Step 5.1-5.5:** Not deeply applicable for a USB ID table addition. The
`em28xx_id_table[]` is used by the USB core's `usb_match_id()` during
device enumeration. This is a standard, well-tested kernel mechanism.
The board definitions pointed to by these new IDs are already fully
exercised by the existing IDs (0x0265, 0x8265, 0x026d, 0x826d).
Record: Zero code logic change. Data table addition only. Existing board
configs are well-tested.
### PHASE 6: CROSS-REFERENCING AND STABLE TREE ANALYSIS
**Step 6.1:** The board definitions
(`EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB` and
`EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595`) have existed since v4.7
and v4.11 respectively. They exist in ALL active stable trees (6.1.y,
6.6.y, 6.12.y, etc.).
**Step 6.2:** The patch will apply cleanly to all stable trees. The USB
ID table area has been very stable, with only occasional new ID
additions.
**Step 6.3:** No related fixes already in stable for these specific
PIDs.
Record: Clean apply expected on all stable trees. Board support exists
everywhere.
### PHASE 7: SUBSYSTEM AND MAINTAINER CONTEXT
**Step 7.1:** Subsystem: `drivers/media/usb` — USB video capture
devices. Criticality: PERIPHERAL (specific hardware), but USB media
devices are commonly used consumer hardware.
**Step 7.2:** The em28xx driver is mature and stable, with infrequent
changes.
### PHASE 8: IMPACT AND RISK ASSESSMENT
**Step 8.1:** Affected users: Anyone with a Hauppauge WinTV-dualHD
device with these specific PIDs. These are "in the wild" — real consumer
products.
**Step 8.2:** Trigger: Simply plugging in the device. Without the IDs,
the device is completely non-functional under Linux.
**Step 8.3:** Failure mode: Device not recognized by the kernel at all.
Severity for affected users: COMPLETE (device unusable).
**Step 8.4:**
- BENEFIT: High — enables real hardware for real users. Without this,
the device is a paperweight on Linux.
- RISK: Effectively zero — 12 lines of data-only additions to a match
table. No code logic changes. No regression possible for existing
users.
- Record: Extremely favorable risk/benefit ratio.
### PHASE 9: FINAL SYNTHESIS
**Step 9.1: Evidence Summary**
FOR backporting:
- Classic device ID addition — a well-documented exception category for
stable
- 12 lines of pure data additions, zero logic changes
- Maps to existing, well-tested board definitions (in tree since
v4.7/v4.11)
- Author is the domain expert with 14+ commits to this driver
- Signed off by media subsystem maintainer
- Zero regression risk
- Enables real hardware "in the wild" for real users
- Applies cleanly to all stable trees
AGAINST backporting:
- None identified.
**Step 9.2: Stable Rules Checklist**
1. Obviously correct and tested? **YES** — trivial USB_DEVICE macro
entries mapping to existing boards.
2. Fixes a real bug? **YES** — hardware not recognized without these
IDs.
3. Important issue? **YES** — device completely non-functional without
these IDs.
4. Small and contained? **YES** — 12 lines, 1 file, data only.
5. No new features or APIs? **YES** — no new features, just new device
IDs for existing driver.
6. Can apply to stable trees? **YES** — board definitions exist in all
stable trees.
**Step 9.3: Exception Category**
This is a **NEW DEVICE ID** addition to an existing driver — explicitly
listed as an exception category that is automatically YES for stable.
### Verification
- [Phase 1] Parsed tags: Signed-off-by author (Brad Love) and maintainer
(Hans Verkuil). No Fixes/Reported-by/Cc:stable (expected).
- [Phase 2] Diff analysis: 12 lines added — 6 USB_DEVICE entries in
em28xx_id_table[]. Zero code logic changes.
- [Phase 2] New IDs (0x8269, 0x8278, 0x826e, 0x826f, 0x8270, 0x8271)
confirmed NOT in current tree via grep.
- [Phase 3] git blame: Board definitions introduced in v4.7
(11a2a949d05e9d) and v4.11 (1586342e428d80) — present in all active
stable trees.
- [Phase 3] Author history: Brad Love has 14+ em28xx commits including
prior DualHD bulk model support (f2a326c928cca1).
- [Phase 3] File history: em28xx-cards.c has had only 4 changes since
v6.1, all unrelated.
- [Phase 4] Mail archive confirms commit was merged to media.git/next on
March 12, 2026, signed by Hans Verkuil.
- [Phase 5] Change is data-only (USB ID table). No code flow analysis
needed.
- [Phase 6] Board definitions exist in all stable trees (v5.15.y through
v6.12.y). Clean apply expected.
- [Phase 8] Risk: zero (data-only). Benefit: enables completely non-
functional hardware for real users.
**YES**
drivers/media/usb/em28xx/em28xx-cards.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c
index 59a2e4db75b72..2d19f8ecd6857 100644
--- a/drivers/media/usb/em28xx/em28xx-cards.c
+++ b/drivers/media/usb/em28xx/em28xx-cards.c
@@ -2757,10 +2757,22 @@ struct usb_device_id em28xx_id_table[] = {
.driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB },
{ USB_DEVICE(0x2040, 0x8265),
.driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB },
+ { USB_DEVICE(0x2040, 0x8269),
+ .driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB },
+ { USB_DEVICE(0x2040, 0x8278),
+ .driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB },
{ USB_DEVICE(0x2040, 0x026d),
.driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595 },
{ USB_DEVICE(0x2040, 0x826d),
.driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595 },
+ { USB_DEVICE(0x2040, 0x826e),
+ .driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595 },
+ { USB_DEVICE(0x2040, 0x826f),
+ .driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595 },
+ { USB_DEVICE(0x2040, 0x8270),
+ .driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595 },
+ { USB_DEVICE(0x2040, 0x8271),
+ .driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595 },
{ USB_DEVICE(0x2040, 0x846d),
.driver_info = EM2874_BOARD_HAUPPAUGE_USB_QUADHD },
{ USB_DEVICE(0x0438, 0xb002),
--
2.53.0
next prev parent reply other threads:[~2026-04-20 13:25 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20260420132314.1023554-1-sashal@kernel.org>
2026-04-20 13:16 ` [PATCH AUTOSEL 7.0-5.10] media: i2c: mt9p031: Check return value of devm_gpiod_get_optional() in mt9p031_probe() Sasha Levin
2026-04-20 13:16 ` [PATCH AUTOSEL 7.0-6.12] media: ipu-bridge: Add OV5675 sensor config Sasha Levin
2026-04-20 13:18 ` Sasha Levin [this message]
2026-04-20 13:18 ` [PATCH AUTOSEL 7.0-6.1] media: em28xx: remove tuner type from Hauppauge DVB DualHD Sasha Levin
2026-04-20 13:18 ` [PATCH AUTOSEL 7.0-5.10] media: pulse8-cec: Handle partial deinit Sasha Levin
2026-04-20 13:18 ` [PATCH AUTOSEL 7.0-6.12] media: i2c: imx258: add missing mutex protection for format code access Sasha Levin
2026-04-20 13:18 ` [PATCH AUTOSEL 7.0-5.10] media: si2168: Fix i2c command timeout on embedded platforms Sasha Levin
2026-04-20 13:19 ` [PATCH AUTOSEL 7.0-6.1] media: dw100: Fix kernel oops with PREEMPT_RT enabled Sasha Levin
2026-04-20 13:19 ` [PATCH AUTOSEL 7.0-5.15] media: renesas: vsp1: histo: Fix code enumeration Sasha Levin
2026-04-20 13:19 ` [PATCH AUTOSEL 7.0-6.18] media: synopsys: hdmirx: support use with sleeping GPIOs Sasha Levin
2026-04-20 13:19 ` [PATCH AUTOSEL 7.0-5.15] media: ccs-pll: Fix pre-PLL divider calculation for EXT_IP_PLL_DIVIDER flag Sasha Levin
2026-04-20 13:20 ` [PATCH AUTOSEL 7.0-5.10] media: saa7164: Fix REV2 firmware filename Sasha Levin
2026-04-20 13:20 ` [PATCH AUTOSEL 6.18] media: rkvdec: reduce stack usage in rkvdec_init_v4l2_vp9_count_tbl() Sasha Levin
2026-04-20 13:20 ` [PATCH AUTOSEL 7.0-5.10] media: si2168: fw 4.0-11 loses warm state during sleep Sasha Levin
2026-04-20 13:21 ` [PATCH AUTOSEL 7.0-6.12] media: renesas: vsp1: Initialize format on all pads Sasha Levin
2026-04-20 13:21 ` [PATCH AUTOSEL 7.0-6.12] media: renesas: vsp1: brx: Fix format propagation Sasha Levin
2026-04-20 16:12 ` Biju Das
2026-04-20 13:21 ` [PATCH AUTOSEL 7.0-5.10] media: cx25840: Fix NTSC-J, PAL-N, and SECAM standards Sasha Levin
2026-04-20 13:21 ` [PATCH AUTOSEL 7.0-6.1] media: i2c: ar0521: Check return value of devm_gpiod_get_optional() in ar0521_probe() Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260420132314.1023554-87-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=brad@nextdimension.cc \
--cc=hverkuil+cisco@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=patches@lists.linux.dev \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox