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