V4L/DVB (9099): em28xx: Add detection for K-WORLD DVB-T 310U
Correct firmware type to MTS Correct audio routing for composite/s-video Add DVB-T detection. This patch uses the eeprom hash method for detection as the vendor/product ids are also used for the DIGIVOX_AD. This may be a clone of the same product. Explanatory text has been added prior to the hask look-up in anticipation that it may help others. The following has been tested to work: Analogue TV (PAL-I) Composite In DVB-T (UK Crystal Palace) USB AUDIO The following has not been tested but probably works: S-Video In Signed-off-by: Darron Broad <darron@kewl.org> Signed-off-by: Douglas Schilling Landgraf <dougsland@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
674cbc691c
commit
da3808e10f
@ -46,7 +46,7 @@
|
|||||||
45 -> Pinnacle PCTV DVB-T (em2870)
|
45 -> Pinnacle PCTV DVB-T (em2870)
|
||||||
46 -> Compro, VideoMate U3 (em2870) [185b:2870]
|
46 -> Compro, VideoMate U3 (em2870) [185b:2870]
|
||||||
47 -> KWorld DVB-T 305U (em2880) [eb1a:e305]
|
47 -> KWorld DVB-T 305U (em2880) [eb1a:e305]
|
||||||
48 -> KWorld DVB-T 310U (em2880)
|
48 -> KWorld DVB-T 310U (em2880) [eb1a:e310]
|
||||||
49 -> MSI DigiVox A/D (em2880) [eb1a:e310]
|
49 -> MSI DigiVox A/D (em2880) [eb1a:e310]
|
||||||
50 -> MSI DigiVox A/D II (em2880) [eb1a:e320]
|
50 -> MSI DigiVox A/D II (em2880) [eb1a:e320]
|
||||||
51 -> Terratec Hybrid XS Secam (em2880) [0ccd:004c]
|
51 -> Terratec Hybrid XS Secam (em2880) [0ccd:004c]
|
||||||
|
@ -930,22 +930,23 @@ struct em28xx_board em28xx_boards[] = {
|
|||||||
},
|
},
|
||||||
[EM2880_BOARD_KWORLD_DVB_310U] = {
|
[EM2880_BOARD_KWORLD_DVB_310U] = {
|
||||||
.name = "KWorld DVB-T 310U",
|
.name = "KWorld DVB-T 310U",
|
||||||
.valid = EM28XX_BOARD_NOT_VALIDATED,
|
|
||||||
.vchannels = 3,
|
.vchannels = 3,
|
||||||
.tuner_type = TUNER_XC2028,
|
.tuner_type = TUNER_XC2028,
|
||||||
|
.has_dvb = 1,
|
||||||
|
.mts_firmware = 1,
|
||||||
.decoder = EM28XX_TVP5150,
|
.decoder = EM28XX_TVP5150,
|
||||||
.input = { {
|
.input = { {
|
||||||
.type = EM28XX_VMUX_TELEVISION,
|
.type = EM28XX_VMUX_TELEVISION,
|
||||||
.vmux = TVP5150_COMPOSITE0,
|
.vmux = TVP5150_COMPOSITE0,
|
||||||
.amux = 0,
|
.amux = EM28XX_AMUX_VIDEO,
|
||||||
}, {
|
}, {
|
||||||
.type = EM28XX_VMUX_COMPOSITE1,
|
.type = EM28XX_VMUX_COMPOSITE1,
|
||||||
.vmux = TVP5150_COMPOSITE1,
|
.vmux = TVP5150_COMPOSITE1,
|
||||||
.amux = 1,
|
.amux = EM28XX_AMUX_AC97_LINE_IN,
|
||||||
}, {
|
}, { /* S-video has not been tested yet */
|
||||||
.type = EM28XX_VMUX_SVIDEO,
|
.type = EM28XX_VMUX_SVIDEO,
|
||||||
.vmux = TVP5150_SVIDEO,
|
.vmux = TVP5150_SVIDEO,
|
||||||
.amux = 1,
|
.amux = EM28XX_AMUX_AC97_LINE_IN,
|
||||||
} },
|
} },
|
||||||
},
|
},
|
||||||
[EM2881_BOARD_DNT_DA2_HYBRID] = {
|
[EM2881_BOARD_DNT_DA2_HYBRID] = {
|
||||||
@ -1260,6 +1261,7 @@ static struct em28xx_reg_seq em2882_terratec_hybrid_xs_digital[] = {
|
|||||||
static struct em28xx_hash_table em28xx_eeprom_hash [] = {
|
static struct em28xx_hash_table em28xx_eeprom_hash [] = {
|
||||||
/* P/N: SA 60002070465 Tuner: TVF7533-MF */
|
/* P/N: SA 60002070465 Tuner: TVF7533-MF */
|
||||||
{0x6ce05a8f, EM2820_BOARD_PROLINK_PLAYTV_USB2, TUNER_YMEC_TVF_5533MF},
|
{0x6ce05a8f, EM2820_BOARD_PROLINK_PLAYTV_USB2, TUNER_YMEC_TVF_5533MF},
|
||||||
|
{0x966a0441, EM2880_BOARD_KWORLD_DVB_310U, TUNER_XC2028},
|
||||||
};
|
};
|
||||||
|
|
||||||
/* I2C devicelist hash table for devices with generic USB IDs */
|
/* I2C devicelist hash table for devices with generic USB IDs */
|
||||||
@ -1745,6 +1747,20 @@ void em28xx_card_setup(struct em28xx *dev)
|
|||||||
break;
|
break;
|
||||||
case EM2820_BOARD_UNKNOWN:
|
case EM2820_BOARD_UNKNOWN:
|
||||||
case EM2800_BOARD_UNKNOWN:
|
case EM2800_BOARD_UNKNOWN:
|
||||||
|
/*
|
||||||
|
* The K-WORLD DVB-T 310U is detected as an MSI Digivox AD.
|
||||||
|
*
|
||||||
|
* This occurs because they share identical USB vendor and
|
||||||
|
* product IDs.
|
||||||
|
*
|
||||||
|
* What we do here is look up the EEPROM hash of the K-WORLD
|
||||||
|
* and if it is found then we decide that we do not have
|
||||||
|
* a DIGIVOX and reset the device to the K-WORLD instead.
|
||||||
|
*
|
||||||
|
* This solution is only valid if they do not share eeprom
|
||||||
|
* hash identities which has not been determined as yet.
|
||||||
|
*/
|
||||||
|
case EM2880_BOARD_MSI_DIGIVOX_AD:
|
||||||
if (!em28xx_hint_board(dev))
|
if (!em28xx_hint_board(dev))
|
||||||
em28xx_set_model(dev);
|
em28xx_set_model(dev);
|
||||||
break;
|
break;
|
||||||
|
@ -452,6 +452,15 @@ static int dvb_init(struct em28xx *dev)
|
|||||||
goto out_free;
|
goto out_free;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case EM2880_BOARD_KWORLD_DVB_310U:
|
||||||
|
dvb->frontend = dvb_attach(zl10353_attach,
|
||||||
|
&em28xx_zl10353_with_xc3028,
|
||||||
|
&dev->i2c_adap);
|
||||||
|
if (attach_xc3028(0x61, dev) < 0) {
|
||||||
|
result = -EINVAL;
|
||||||
|
goto out_free;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
printk(KERN_ERR "%s/2: The frontend of your DVB/ATSC card"
|
printk(KERN_ERR "%s/2: The frontend of your DVB/ATSC card"
|
||||||
" isn't supported yet\n",
|
" isn't supported yet\n",
|
||||||
|
Loading…
Reference in New Issue
Block a user