On Fri Sep 18 18:07:32 2026 -0400, David Wood wrote:
> The StarTech.com SVID2USB23 is an EM2860 + TVP5150AM1 + EMP202 capture
> dongle that ships with the generic eb1a:5051 USB ID, so it is picked up
> as the EM2860/TVP5150 reference design. Video works, but analog audio
> capture is silent: the ALSA device yields a flat noise floor of about
> -85 dBFS whether or not anything is connected.
>
> Audio on this board is not on the em28xx vendor path. Chip config
> register 0x00 reads 0x50, so the board exposes a USB Audio Class
> interface, claimed by snd-usb-audio, that is fed by the EMP202 ADC.
> The ADC record source is selected by AC97_REC_SEL, which
> em28xx_audio_analog_set() only programs when EM28XX_AOUT_PCM_IN is set
> in the input's .aout. With .amux alone only the mixer volume registers
> are written, and the record source stays at its reset value (Mic, not
> wired on this board), so the ADC captures nothing.
>
> Add a board entry for the SVID2USB23 with .aout selecting the PCM
> record path from Line In, and identify the board by its EEPROM hash,
> leaving the reference design entry untouched. Boards with this USB ID
> that do not match a hash keep the reference design as before, without
> any extra log output. card=114 also selects the entry by hand.
>
> Verified on the SVID2USB23: the board is identified as card=114 and the
> driver programs AC97_REC_SEL to 0x0404 on its own at probe. Toggling
> that register alone with everything else held constant is what
> separates working (-22 dBFS, line level) from silent (-85 dBFS)
> capture. AC97_POWERDOWN reads 0x420d (ADC, analog and reference all
> ready) throughout, so this is not a power or GPIO problem.
>
> The V4L2 mute control still defaults to 1 and gates the bridge audio
> path, so clearing it remains necessary to hear anything; that is a
> separate issue.
>
> Signed-off-by: David Wood <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>
Patch committed.
Thanks,
Hans Verkuil
.../admin-guide/media/em28xx-cardlist.rst | 4 +++
drivers/media/usb/em28xx/em28xx-cards.c | 38 ++++++++++++++++++++++
drivers/media/usb/em28xx/em28xx.h | 1 +
3 files changed, 43 insertions(+)
---
diff --git a/Documentation/admin-guide/media/em28xx-cardlist.rst
b/Documentation/admin-guide/media/em28xx-cardlist.rst
index 741aa7f7c882..df2595b439aa 100644
--- a/Documentation/admin-guide/media/em28xx-cardlist.rst
+++ b/Documentation/admin-guide/media/em28xx-cardlist.rst
@@ -450,3 +450,7 @@ EM28xx cards list
- StarTech SVID2USB232
- em28281
- eb1a:8286
+ * - 114
+ - StarTech.com SVID2USB23
+ - em2860
+ - eb1a:5051
diff --git a/drivers/media/usb/em28xx/em28xx-cards.c
b/drivers/media/usb/em28xx/em28xx-cards.c
index b7c534fc8a21..8440eafad44e 100644
--- a/drivers/media/usb/em28xx/em28xx-cards.c
+++ b/drivers/media/usb/em28xx/em28xx-cards.c
@@ -1194,6 +1194,28 @@ const struct em28xx_board em28xx_boards[] = {
.amux = EM28XX_AMUX_LINE_IN,
} },
},
+ /*
+ * eb1a:5051 StarTech.com SVID2USB23
+ * Ships with the generic EM2860/TVP5150 reference design USB ID and
+ * is told apart by EEPROM hash. Audio leaves over a USB Audio Class
+ * endpoint fed by the EMP202 ADC, so the record source must be set.
+ */
+ [EM2860_BOARD_STARTECH_SVID2USB23] = {
+ .name = "StarTech.com SVID2USB23",
+ .tuner_type = TUNER_ABSENT, /* Capture only device */
+ .decoder = EM28XX_TVP5150,
+ .input = { {
+ .type = EM28XX_VMUX_COMPOSITE,
+ .vmux = TVP5150_COMPOSITE1,
+ .amux = EM28XX_AMUX_LINE_IN,
+ .aout = EM28XX_AOUT_PCM_IN | EM28XX_AOUT_PCM_LINE,
+ }, {
+ .type = EM28XX_VMUX_SVIDEO,
+ .vmux = TVP5150_SVIDEO,
+ .amux = EM28XX_AMUX_LINE_IN,
+ .aout = EM28XX_AOUT_PCM_IN | EM28XX_AOUT_PCM_LINE,
+ } },
+ },
[EM2861_BOARD_PLEXTOR_PX_TV100U] = {
.name = "Plextor ConvertX PX-TV100U",
.tuner_type = TUNER_TNF_5335MF,
@@ -3093,6 +3115,7 @@ static const struct em28xx_hash_table
em28xx_eeprom_hash[] = {
{0x4e913442, EM2882_BOARD_DIKOM_DK300, TUNER_XC2028},
{0x85dd871e, EM2882_BOARD_ZOLID_HYBRID_TV_STICK, TUNER_XC2028},
{0x8f597549, EM2860_BOARD_MYGICA_UTV3, TUNER_TENA_TNF_931D_DFDR1},
+ {0x11b79572, EM2860_BOARD_STARTECH_SVID2USB23, TUNER_ABSENT},
};
/* I2C devicelist hash table for devices with generic USB IDs */
@@ -3457,6 +3480,21 @@ static void em28xx_card_setup(struct em28xx *dev)
em28xx_pre_card_setup(dev);
}
break;
+ case EM2860_BOARD_TVP5150_REFERENCE_DESIGN:
+ /*
+ * Retail boards shipping with the generic eb1a:5051 USB ID
+ * land here. Pick out the ones that need a board-specific
+ * setup by EEPROM hash; the rest keep the reference design.
+ */
+ for (i = 0; i < ARRAY_SIZE(em28xx_eeprom_hash); i++) {
+ if (dev->hash == em28xx_eeprom_hash[i].hash) {
+ dev->model = em28xx_eeprom_hash[i].model;
+ dev->tuner_type = em28xx_eeprom_hash[i].tuner;
+ break;
+ }
+ }
+ em28xx_set_model(dev);
+ break;
default:
em28xx_set_model(dev);
}
diff --git a/drivers/media/usb/em28xx/em28xx.h
b/drivers/media/usb/em28xx/em28xx.h
index 8eee639b0940..c916b159f73a 100644
--- a/drivers/media/usb/em28xx/em28xx.h
+++ b/drivers/media/usb/em28xx/em28xx.h
@@ -162,6 +162,7 @@
/* Params for validated field */
#define EM28XX_BOARD_NOT_VALIDATED 1
#define EM28XX_BOARD_VALIDATED 0
+#define EM2860_BOARD_STARTECH_SVID2USB23 114
/* Params for em28xx_cmd() audio */
#define EM28XX_START_AUDIO 1
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]