[PATCH] media: au0828: add support for Monoprice 106456 USB ATSC/QAM tuner

From: Joseph Breihan via B4 Relay

Date: Sun Jul 05 2026 - 01:11:18 EST


From: Joseph Breihan <linux@xxxxxxxxxxxxxxxxx>

The Monoprice 106456 (board rev TV22AD-A, also sold as the AnyTV
AUTV002) is a USB ATSC/QAM tuner that enumerates as 05e1:0400 and
reports itself as a "Syntek Semiconductor USB 2.0 Video Capture
Controller". The hardware is an Auvitek AU0828A bridge with an AU8522
demodulator and an NXP TDA18271HDC2 tuner at I2C address 0x60 -- the
same demod/tuner combination as the existing Hauppauge Woodbury board.

Adds board profile and the USB ID so the device binds. The digital
frontend is electrically identical to the Woodbury, so share that
board's au8522/tda18271 configuration and attach path rather than
duplicating it. Tested with over-the-air 8VSB ATSC: it locks and
streams a live 720p transport stream.

Some 05e1:0400 units reportedly ship a Microtune MT2131 tuner with an
AU8502 demodulator instead. This patch does not handle that variant,
but it can't regress it either: 05e1:0400 matches no driver today, and
on the MT2131 units tda18271_attach() just fails, so no frontend is
registered.

Signed-off-by: Joseph Breihan <linux@xxxxxxxxxxxxxxxxx>
---
drivers/media/usb/au0828/au0828-cards.c | 14 ++++++++++++++
drivers/media/usb/au0828/au0828-cards.h | 1 +
drivers/media/usb/au0828/au0828-dvb.c | 1 +
3 files changed, 16 insertions(+)

diff --git a/drivers/media/usb/au0828/au0828-cards.c b/drivers/media/usb/au0828/au0828-cards.c
index 9929ce5dcdc..8ab100db01a 100644
--- a/drivers/media/usb/au0828/au0828-cards.c
+++ b/drivers/media/usb/au0828/au0828-cards.c
@@ -124,6 +124,17 @@ struct au0828_board au0828_boards[] = {
},
},
},
+ [AU0828_BOARD_MONOPRICE_106456] = {
+ /*
+ * Monoprice 106456 USB ATSC/QAM tuner (board rev TV22AD-A),
+ * a.k.a. AnyTV AUTV002, USB ID 05e1:0400. Same AU8522 demod +
+ * NXP TDA18271HDC2 tuner @ 0x60 as the Hauppauge Woodbury.
+ */
+ .name = "Monoprice 106456 USB ATSC/QAM (TV22AD-A)",
+ .tuner_type = TUNER_NXP_TDA18271,
+ .tuner_addr = 0x60,
+ .i2c_clk_divider = AU0828_I2C_CLK_250KHZ,
+ },
[AU0828_BOARD_HAUPPAUGE_HVR1265] = {
.name = "Hauppauge HVR1265",
.tuner_type = TUNER_XC5000,
@@ -294,6 +305,7 @@ void au0828_gpio_setup(struct au0828_dev *dev)
case AU0828_BOARD_HAUPPAUGE_WOODBURY:
case AU0828_BOARD_HAUPPAUGE_HVR1265:
case AU0828_BOARD_HAUPPAUGE_IMPACTVCBE:
+ case AU0828_BOARD_MONOPRICE_106456:
/* GPIO's
* 4 - CS5340
* 5 - AU8522 Demodulator
@@ -378,6 +390,8 @@ struct usb_device_id au0828_usb_id_table[] = {
.driver_info = AU0828_BOARD_HAUPPAUGE_HVR950Q_MXL },
{ USB_DEVICE(0x05e1, 0x0480),
.driver_info = AU0828_BOARD_HAUPPAUGE_WOODBURY },
+ { USB_DEVICE(0x05e1, 0x0400),
+ .driver_info = AU0828_BOARD_MONOPRICE_106456 },
{ USB_DEVICE(0x2040, 0x8200),
.driver_info = AU0828_BOARD_HAUPPAUGE_WOODBURY },
{ USB_DEVICE(0x2040, 0x7260),
diff --git a/drivers/media/usb/au0828/au0828-cards.h b/drivers/media/usb/au0828/au0828-cards.h
index a438aeb334a..a4a283731f7 100644
--- a/drivers/media/usb/au0828/au0828-cards.h
+++ b/drivers/media/usb/au0828/au0828-cards.h
@@ -13,3 +13,4 @@
#define AU0828_BOARD_HAUPPAUGE_WOODBURY 5
#define AU0828_BOARD_HAUPPAUGE_IMPACTVCBE 6
#define AU0828_BOARD_HAUPPAUGE_HVR1265 7
+#define AU0828_BOARD_MONOPRICE_106456 8
diff --git a/drivers/media/usb/au0828/au0828-dvb.c b/drivers/media/usb/au0828/au0828-dvb.c
index 31123e6f9fc..9c95b7ceaec 100644
--- a/drivers/media/usb/au0828/au0828-dvb.c
+++ b/drivers/media/usb/au0828/au0828-dvb.c
@@ -600,6 +600,7 @@ int au0828_dvb_register(struct au0828_dev *dev)
&mxl5007t_hvr950q_config);
break;
case AU0828_BOARD_HAUPPAUGE_WOODBURY:
+ case AU0828_BOARD_MONOPRICE_106456:
dvb->frontend = dvb_attach(au8522_attach,
&hauppauge_woodbury_config,
&dev->i2c_adap);

---
base-commit: 8dac27bfa2f994ecb11f01a63641527d17d48fc1
change-id: 20260705-au0828-monoprice-de5a4c39c74f

Best regards,
--
Joseph Breihan <linux@xxxxxxxxxxxxxxxxx>