Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: cx88: Add support for NotOnlyTV LV3H card

Add support for the PCI hybrid card NotOnlyTV LV3H. This card consists of:
- A/V Controller: Conexant CX-23883
- Tuner: Xceive XC3028L
- DVB-T Decoder: Zarlink ZL10353

This patch adds support for DVB-T, Analog TV, FM radio, composite and
S-video inputs. The IR input isn't supported.

Since the PCI subsystem ID (14f1:8852) is the same as the Geniatech
X8000-MT, but they are different boards, the card is only supported via
insmod option: options cx88xx card=91

For the record this is the eeprom dump, useful if someone wanted to
implement the card auto detection:

07 ff ff ff f1 14 52 88 04 04 32 55 f8 00 a2 02
a1 00 40 63 06 11 44 30 03 df 40 80 00 20 00 73
3c 10 00 00 00 00 ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff a0 00

Signed-off-by: Daniel Gonzalez Cabanelas <dgcbueu@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>

authored by

Daniel Gonzalez Cabanelas and committed by
Mauro Carvalho Chehab
e6f45ea2 1d96e53f

+45
+43
drivers/media/pci/cx88/cx88-cards.c
··· 1781 1781 }, 1782 1782 .mpeg = CX88_MPEG_DVB, 1783 1783 }, 1784 + [CX88_BOARD_NOTONLYTV_LV3H] = { 1785 + .name = "NotOnlyTV LV3H", 1786 + .tuner_type = TUNER_XC2028, 1787 + .radio_type = UNSET, 1788 + .tuner_addr = 0x61, 1789 + .radio_addr = ADDR_UNSET, 1790 + /* if gpio1:bit9 is enabled, DVB-T won't work */ 1791 + 1792 + .input = { { 1793 + .type = CX88_VMUX_TELEVISION, 1794 + .vmux = 0, 1795 + .gpio0 = 0x0000, 1796 + .gpio1 = 0xa141, 1797 + .gpio2 = 0x0000, 1798 + }, { 1799 + .type = CX88_VMUX_COMPOSITE1, 1800 + .vmux = 1, 1801 + .gpio0 = 0x0000, 1802 + .gpio1 = 0xa161, 1803 + .gpio2 = 0x0000, 1804 + }, { 1805 + .type = CX88_VMUX_SVIDEO, 1806 + .vmux = 2, 1807 + .gpio0 = 0x0000, 1808 + .gpio1 = 0xa161, 1809 + .gpio2 = 0x0000, 1810 + } }, 1811 + .radio = { 1812 + .type = CX88_RADIO, 1813 + .gpio0 = 0x0000, 1814 + .gpio1 = 0xa141, 1815 + .gpio2 = 0x0000, 1816 + }, 1817 + .mpeg = CX88_MPEG_DVB, 1818 + }, 1784 1819 [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO] = { 1785 1820 .name = "DViCO FusionHDTV DVB-T PRO", 1786 1821 .tuner_type = TUNER_XC2028, ··· 2689 2654 .subdevice = 0x6f18, 2690 2655 .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL, 2691 2656 }, { 2657 + /* Also NotOnlyTV LV3H (version 1.11 is silkscreened on the board) */ 2692 2658 .subvendor = 0x14f1, 2693 2659 .subdevice = 0x8852, 2694 2660 .card = CX88_BOARD_GENIATECH_X8000_MT, ··· 3157 3121 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO: 3158 3122 case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO: 3159 3123 return cx88_dvico_xc2028_callback(core, command, arg); 3124 + case CX88_BOARD_NOTONLYTV_LV3H: 3160 3125 case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: 3161 3126 case CX88_BOARD_WINFAST_DTV1800H: 3162 3127 return cx88_xc3028_winfast1800h_callback(core, command, arg); ··· 3359 3322 udelay(1000); 3360 3323 break; 3361 3324 3325 + case CX88_BOARD_NOTONLYTV_LV3H: 3362 3326 case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: 3363 3327 case CX88_BOARD_WINFAST_DTV1800H: 3364 3328 cx88_xc3028_winfast1800h_callback(core, XC2028_TUNER_RESET, 0); ··· 3415 3377 * power management for now 3416 3378 */ 3417 3379 ctl->disable_power_mgmt = 1; 3380 + break; 3381 + case CX88_BOARD_NOTONLYTV_LV3H: 3382 + ctl->demod = XC3028_FE_ZARLINK456; 3383 + ctl->fname = XC3028L_DEFAULT_FIRMWARE; 3384 + ctl->read_not_reliable = 1; 3418 3385 break; 3419 3386 case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: 3420 3387 case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME:
+1
drivers/media/pci/cx88/cx88-dvb.c
··· 1378 1378 fe->ops.tuner_ops.set_config(fe, &ctl); 1379 1379 } 1380 1380 break; 1381 + case CX88_BOARD_NOTONLYTV_LV3H: 1381 1382 case CX88_BOARD_PINNACLE_HYBRID_PCTV: 1382 1383 case CX88_BOARD_WINFAST_DTV1800H: 1383 1384 fe0->dvb.frontend = dvb_attach(zl10353_attach,
+1
drivers/media/pci/cx88/cx88.h
··· 228 228 #define CX88_BOARD_WINFAST_DTV1800H_XC4000 88 229 229 #define CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36 89 230 230 #define CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43 90 231 + #define CX88_BOARD_NOTONLYTV_LV3H 91 231 232 232 233 enum cx88_itype { 233 234 CX88_VMUX_COMPOSITE1 = 1,