Commit da3808e1 authored by Darron Broad's avatar Darron Broad Committed by Mauro Carvalho Chehab

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: default avatarDarron Broad <darron@kewl.org>
Signed-off-by: default avatarDouglas Schilling Landgraf <dougsland@linuxtv.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 674cbc69
...@@ -46,7 +46,7 @@ ...@@ -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[] = { ...@@ -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[] = { ...@@ -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) ...@@ -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) ...@@ -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",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment