diff options
| author | Darron Broad <darron@kewl.org> | 2008-09-30 01:46:41 -0400 |
|---|---|---|
| committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2008-10-04 22:15:17 -0400 |
| commit | da3808e10faca68b064ac897753fa4e1707d29a4 (patch) | |
| tree | 65ad1d6e7bd0e9f6450ca8a5ce2b39b73ff26276 | |
| parent | 674cbc691c5439134bb2ea064c0ee1311fc92384 (diff) | |
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>
| -rw-r--r-- | Documentation/video4linux/CARDLIST.em28xx | 2 | ||||
| -rw-r--r-- | drivers/media/video/em28xx/em28xx-cards.c | 26 | ||||
| -rw-r--r-- | drivers/media/video/em28xx/em28xx-dvb.c | 9 |
3 files changed, 31 insertions, 6 deletions
diff --git a/Documentation/video4linux/CARDLIST.em28xx b/Documentation/video4linux/CARDLIST.em28xx index 89c7f32abf9f..53449cb99b17 100644 --- a/Documentation/video4linux/CARDLIST.em28xx +++ b/Documentation/video4linux/CARDLIST.em28xx | |||
| @@ -46,7 +46,7 @@ | |||
| 46 | 45 -> Pinnacle PCTV DVB-T (em2870) | 46 | 45 -> Pinnacle PCTV DVB-T (em2870) |
| 47 | 46 -> Compro, VideoMate U3 (em2870) [185b:2870] | 47 | 46 -> Compro, VideoMate U3 (em2870) [185b:2870] |
| 48 | 47 -> KWorld DVB-T 305U (em2880) [eb1a:e305] | 48 | 47 -> KWorld DVB-T 305U (em2880) [eb1a:e305] |
| 49 | 48 -> KWorld DVB-T 310U (em2880) | 49 | 48 -> KWorld DVB-T 310U (em2880) [eb1a:e310] |
| 50 | 49 -> MSI DigiVox A/D (em2880) [eb1a:e310] | 50 | 49 -> MSI DigiVox A/D (em2880) [eb1a:e310] |
| 51 | 50 -> MSI DigiVox A/D II (em2880) [eb1a:e320] | 51 | 50 -> MSI DigiVox A/D II (em2880) [eb1a:e320] |
| 52 | 51 -> Terratec Hybrid XS Secam (em2880) [0ccd:004c] | 52 | 51 -> Terratec Hybrid XS Secam (em2880) [0ccd:004c] |
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c index c7456e976655..279307cc3adb 100644 --- a/drivers/media/video/em28xx/em28xx-cards.c +++ b/drivers/media/video/em28xx/em28xx-cards.c | |||
| @@ -930,22 +930,23 @@ struct em28xx_board em28xx_boards[] = { | |||
| 930 | }, | 930 | }, |
| 931 | [EM2880_BOARD_KWORLD_DVB_310U] = { | 931 | [EM2880_BOARD_KWORLD_DVB_310U] = { |
| 932 | .name = "KWorld DVB-T 310U", | 932 | .name = "KWorld DVB-T 310U", |
| 933 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
| 934 | .vchannels = 3, | 933 | .vchannels = 3, |
| 935 | .tuner_type = TUNER_XC2028, | 934 | .tuner_type = TUNER_XC2028, |
| 935 | .has_dvb = 1, | ||
| 936 | .mts_firmware = 1, | ||
| 936 | .decoder = EM28XX_TVP5150, | 937 | .decoder = EM28XX_TVP5150, |
| 937 | .input = { { | 938 | .input = { { |
| 938 | .type = EM28XX_VMUX_TELEVISION, | 939 | .type = EM28XX_VMUX_TELEVISION, |
| 939 | .vmux = TVP5150_COMPOSITE0, | 940 | .vmux = TVP5150_COMPOSITE0, |
| 940 | .amux = 0, | 941 | .amux = EM28XX_AMUX_VIDEO, |
| 941 | }, { | 942 | }, { |
| 942 | .type = EM28XX_VMUX_COMPOSITE1, | 943 | .type = EM28XX_VMUX_COMPOSITE1, |
| 943 | .vmux = TVP5150_COMPOSITE1, | 944 | .vmux = TVP5150_COMPOSITE1, |
| 944 | .amux = 1, | 945 | .amux = EM28XX_AMUX_AC97_LINE_IN, |
| 945 | }, { | 946 | }, { /* S-video has not been tested yet */ |
| 946 | .type = EM28XX_VMUX_SVIDEO, | 947 | .type = EM28XX_VMUX_SVIDEO, |
| 947 | .vmux = TVP5150_SVIDEO, | 948 | .vmux = TVP5150_SVIDEO, |
| 948 | .amux = 1, | 949 | .amux = EM28XX_AMUX_AC97_LINE_IN, |
| 949 | } }, | 950 | } }, |
| 950 | }, | 951 | }, |
| 951 | [EM2881_BOARD_DNT_DA2_HYBRID] = { | 952 | [EM2881_BOARD_DNT_DA2_HYBRID] = { |
| @@ -1260,6 +1261,7 @@ static struct em28xx_reg_seq em2882_terratec_hybrid_xs_digital[] = { | |||
| 1260 | static struct em28xx_hash_table em28xx_eeprom_hash [] = { | 1261 | static struct em28xx_hash_table em28xx_eeprom_hash [] = { |
| 1261 | /* P/N: SA 60002070465 Tuner: TVF7533-MF */ | 1262 | /* P/N: SA 60002070465 Tuner: TVF7533-MF */ |
| 1262 | {0x6ce05a8f, EM2820_BOARD_PROLINK_PLAYTV_USB2, TUNER_YMEC_TVF_5533MF}, | 1263 | {0x6ce05a8f, EM2820_BOARD_PROLINK_PLAYTV_USB2, TUNER_YMEC_TVF_5533MF}, |
| 1264 | {0x966a0441, EM2880_BOARD_KWORLD_DVB_310U, TUNER_XC2028}, | ||
| 1263 | }; | 1265 | }; |
| 1264 | 1266 | ||
| 1265 | /* I2C devicelist hash table for devices with generic USB IDs */ | 1267 | /* I2C devicelist hash table for devices with generic USB IDs */ |
| @@ -1745,6 +1747,20 @@ void em28xx_card_setup(struct em28xx *dev) | |||
| 1745 | break; | 1747 | break; |
| 1746 | case EM2820_BOARD_UNKNOWN: | 1748 | case EM2820_BOARD_UNKNOWN: |
| 1747 | case EM2800_BOARD_UNKNOWN: | 1749 | case EM2800_BOARD_UNKNOWN: |
| 1750 | /* | ||
| 1751 | * The K-WORLD DVB-T 310U is detected as an MSI Digivox AD. | ||
| 1752 | * | ||
| 1753 | * This occurs because they share identical USB vendor and | ||
| 1754 | * product IDs. | ||
| 1755 | * | ||
| 1756 | * What we do here is look up the EEPROM hash of the K-WORLD | ||
| 1757 | * and if it is found then we decide that we do not have | ||
| 1758 | * a DIGIVOX and reset the device to the K-WORLD instead. | ||
| 1759 | * | ||
| 1760 | * This solution is only valid if they do not share eeprom | ||
| 1761 | * hash identities which has not been determined as yet. | ||
| 1762 | */ | ||
| 1763 | case EM2880_BOARD_MSI_DIGIVOX_AD: | ||
| 1748 | if (!em28xx_hint_board(dev)) | 1764 | if (!em28xx_hint_board(dev)) |
| 1749 | em28xx_set_model(dev); | 1765 | em28xx_set_model(dev); |
| 1750 | break; | 1766 | break; |
diff --git a/drivers/media/video/em28xx/em28xx-dvb.c b/drivers/media/video/em28xx/em28xx-dvb.c index 4b992bc0083c..d2b1a1a52689 100644 --- a/drivers/media/video/em28xx/em28xx-dvb.c +++ b/drivers/media/video/em28xx/em28xx-dvb.c | |||
| @@ -452,6 +452,15 @@ static int dvb_init(struct em28xx *dev) | |||
| 452 | goto out_free; | 452 | goto out_free; |
| 453 | } | 453 | } |
| 454 | break; | 454 | break; |
| 455 | case EM2880_BOARD_KWORLD_DVB_310U: | ||
| 456 | dvb->frontend = dvb_attach(zl10353_attach, | ||
| 457 | &em28xx_zl10353_with_xc3028, | ||
| 458 | &dev->i2c_adap); | ||
| 459 | if (attach_xc3028(0x61, dev) < 0) { | ||
| 460 | result = -EINVAL; | ||
| 461 | goto out_free; | ||
| 462 | } | ||
| 463 | break; | ||
| 455 | default: | 464 | default: |
| 456 | printk(KERN_ERR "%s/2: The frontend of your DVB/ATSC card" | 465 | printk(KERN_ERR "%s/2: The frontend of your DVB/ATSC card" |
| 457 | " isn't supported yet\n", | 466 | " isn't supported yet\n", |
