diff options
author | Chris Pascoe <c.pascoe@itee.uq.edu.au> | 2006-02-28 06:34:59 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2006-03-08 09:36:50 -0500 |
commit | 780dfef37e2c941985b708f67aa0074edc922bea (patch) | |
tree | c7db2fd63acfce369d2af871183da2cf0614db9a /drivers/media/video | |
parent | db5d91eb36e1cc9d46016d1d44874376cfabf274 (diff) |
V4L/DVB (3408): DViCO FusionHDTV DVB-T Hybrid and ZL10353-based FusionHDTV DVB-T Plus support
Add support for the FE6600 tuner used on the DVB-T Hybrid board.
Add support for the Zarlink ZL10353 DVB-T demodulator, which supersedes the
MT352, used on the DViCO FusionHDTV DVB-T Hybrid and later model Plus boards.
Signed-off-by: Chris Pascoe <c.pascoe@itee.uq.edu.au>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video')
-rw-r--r-- | drivers/media/video/cx88/Makefile | 1 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-cards.c | 67 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-dvb.c | 108 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88.h | 1 | ||||
-rw-r--r-- | drivers/media/video/tuner-types.c | 20 |
5 files changed, 175 insertions, 22 deletions
diff --git a/drivers/media/video/cx88/Makefile b/drivers/media/video/cx88/Makefile index 2b902784facc..6482b9aa6a1f 100644 --- a/drivers/media/video/cx88/Makefile +++ b/drivers/media/video/cx88/Makefile | |||
@@ -17,6 +17,7 @@ extra-cflags-$(CONFIG_DVB_CX22702) += -DHAVE_CX22702=1 | |||
17 | extra-cflags-$(CONFIG_DVB_OR51132) += -DHAVE_OR51132=1 | 17 | extra-cflags-$(CONFIG_DVB_OR51132) += -DHAVE_OR51132=1 |
18 | extra-cflags-$(CONFIG_DVB_LGDT330X) += -DHAVE_LGDT330X=1 | 18 | extra-cflags-$(CONFIG_DVB_LGDT330X) += -DHAVE_LGDT330X=1 |
19 | extra-cflags-$(CONFIG_DVB_MT352) += -DHAVE_MT352=1 | 19 | extra-cflags-$(CONFIG_DVB_MT352) += -DHAVE_MT352=1 |
20 | extra-cflags-$(CONFIG_DVB_ZL10353) += -DHAVE_ZL10353=1 | ||
20 | extra-cflags-$(CONFIG_DVB_NXT200X) += -DHAVE_NXT200X=1 | 21 | extra-cflags-$(CONFIG_DVB_NXT200X) += -DHAVE_NXT200X=1 |
21 | extra-cflags-$(CONFIG_DVB_CX24123) += -DHAVE_CX24123=1 | 22 | extra-cflags-$(CONFIG_DVB_CX24123) += -DHAVE_CX24123=1 |
22 | extra-cflags-$(CONFIG_VIDEO_CX88_VP3054)+= -DHAVE_VP3054_I2C=1 | 23 | extra-cflags-$(CONFIG_VIDEO_CX88_VP3054)+= -DHAVE_VP3054_I2C=1 |
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c index 44e27dc646ae..d91e5b3a64ef 100644 --- a/drivers/media/video/cx88/cx88-cards.c +++ b/drivers/media/video/cx88/cx88-cards.c | |||
@@ -1071,6 +1071,27 @@ struct cx88_board cx88_boards[] = { | |||
1071 | .gpio2 = 0x00ff, | 1071 | .gpio2 = 0x00ff, |
1072 | }, | 1072 | }, |
1073 | }, | 1073 | }, |
1074 | [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID] = { | ||
1075 | .name = "DViCO FusionHDTV DVB-T Hybrid", | ||
1076 | .tuner_type = TUNER_FE6600, | ||
1077 | .radio_type = UNSET, | ||
1078 | .tuner_addr = ADDR_UNSET, | ||
1079 | .radio_addr = ADDR_UNSET, | ||
1080 | .input = {{ | ||
1081 | .type = CX88_VMUX_TELEVISION, | ||
1082 | .vmux = 0, | ||
1083 | .gpio0 = 0x0000a75f, | ||
1084 | },{ | ||
1085 | .type = CX88_VMUX_COMPOSITE1, | ||
1086 | .vmux = 1, | ||
1087 | .gpio0 = 0x0000a75b, | ||
1088 | },{ | ||
1089 | .type = CX88_VMUX_SVIDEO, | ||
1090 | .vmux = 2, | ||
1091 | .gpio0 = 0x0000a75b, | ||
1092 | }}, | ||
1093 | .dvb = 1, | ||
1094 | }, | ||
1074 | 1095 | ||
1075 | }; | 1096 | }; |
1076 | const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards); | 1097 | const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards); |
@@ -1281,6 +1302,14 @@ struct cx88_subid cx88_subids[] = { | |||
1281 | .subvendor = 0x17de, | 1302 | .subvendor = 0x17de, |
1282 | .subdevice = 0x0840, | 1303 | .subdevice = 0x0840, |
1283 | .card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT, | 1304 | .card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT, |
1305 | },{ | ||
1306 | .subvendor = 0x18ac, | ||
1307 | .subdevice = 0xdb40, | ||
1308 | .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID, | ||
1309 | },{ | ||
1310 | .subvendor = 0x18ac, | ||
1311 | .subdevice = 0xdb44, | ||
1312 | .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID, | ||
1284 | }, | 1313 | }, |
1285 | }; | 1314 | }; |
1286 | const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids); | 1315 | const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids); |
@@ -1400,6 +1429,40 @@ static void gdi_eeprom(struct cx88_core *core, u8 *eeprom_data) | |||
1400 | } | 1429 | } |
1401 | 1430 | ||
1402 | /* ----------------------------------------------------------------------- */ | 1431 | /* ----------------------------------------------------------------------- */ |
1432 | /* some DViCO specific stuff */ | ||
1433 | |||
1434 | static void dvico_fusionhdtv_hybrid_init(struct cx88_core *core) | ||
1435 | { | ||
1436 | struct i2c_msg msg = { .addr = 0x45, .flags = 0 }; | ||
1437 | int i, err; | ||
1438 | u8 init_bufs[13][5] = { | ||
1439 | { 0x10, 0x00, 0x20, 0x01, 0x03 }, | ||
1440 | { 0x10, 0x10, 0x01, 0x00, 0x21 }, | ||
1441 | { 0x10, 0x10, 0x10, 0x00, 0xCA }, | ||
1442 | { 0x10, 0x10, 0x12, 0x00, 0x08 }, | ||
1443 | { 0x10, 0x10, 0x13, 0x00, 0x0A }, | ||
1444 | { 0x10, 0x10, 0x16, 0x01, 0xC0 }, | ||
1445 | { 0x10, 0x10, 0x22, 0x01, 0x3D }, | ||
1446 | { 0x10, 0x10, 0x73, 0x01, 0x2E }, | ||
1447 | { 0x10, 0x10, 0x72, 0x00, 0xC5 }, | ||
1448 | { 0x10, 0x10, 0x71, 0x01, 0x97 }, | ||
1449 | { 0x10, 0x10, 0x70, 0x00, 0x0F }, | ||
1450 | { 0x10, 0x10, 0xB0, 0x00, 0x01 }, | ||
1451 | { 0x03, 0x0C }, | ||
1452 | }; | ||
1453 | |||
1454 | for (i = 0; i < 13; i++) { | ||
1455 | msg.buf = init_bufs[i]; | ||
1456 | msg.len = (i != 12 ? 5 : 2); | ||
1457 | err = i2c_transfer(&core->i2c_adap, &msg, 1); | ||
1458 | if (err != 1) { | ||
1459 | printk("dvico_fusionhdtv_hybrid_init buf %d failed (err = %d)!\n", i, err); | ||
1460 | return; | ||
1461 | } | ||
1462 | } | ||
1463 | } | ||
1464 | |||
1465 | /* ----------------------------------------------------------------------- */ | ||
1403 | 1466 | ||
1404 | void cx88_card_list(struct cx88_core *core, struct pci_dev *pci) | 1467 | void cx88_card_list(struct cx88_core *core, struct pci_dev *pci) |
1405 | { | 1468 | { |
@@ -1465,11 +1528,15 @@ void cx88_card_setup(struct cx88_core *core) | |||
1465 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: | 1528 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: |
1466 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: | 1529 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: |
1467 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL: | 1530 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL: |
1531 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID: | ||
1468 | /* GPIO0:0 is hooked to mt352 reset pin */ | 1532 | /* GPIO0:0 is hooked to mt352 reset pin */ |
1469 | cx_set(MO_GP0_IO, 0x00000101); | 1533 | cx_set(MO_GP0_IO, 0x00000101); |
1470 | cx_clear(MO_GP0_IO, 0x00000001); | 1534 | cx_clear(MO_GP0_IO, 0x00000001); |
1471 | msleep(1); | 1535 | msleep(1); |
1472 | cx_set(MO_GP0_IO, 0x00000101); | 1536 | cx_set(MO_GP0_IO, 0x00000101); |
1537 | if (0 == core->i2c_rc && | ||
1538 | core->board == CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID) | ||
1539 | dvico_fusionhdtv_hybrid_init(core); | ||
1473 | break; | 1540 | break; |
1474 | case CX88_BOARD_KWORLD_DVB_T: | 1541 | case CX88_BOARD_KWORLD_DVB_T: |
1475 | case CX88_BOARD_DNTV_LIVE_DVB_T: | 1542 | case CX88_BOARD_DNTV_LIVE_DVB_T: |
diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c index e48aa3f6e500..2c97d3f7101a 100644 --- a/drivers/media/video/cx88/cx88-dvb.c +++ b/drivers/media/video/cx88/cx88-dvb.c | |||
@@ -40,6 +40,9 @@ | |||
40 | # include "cx88-vp3054-i2c.h" | 40 | # include "cx88-vp3054-i2c.h" |
41 | # endif | 41 | # endif |
42 | #endif | 42 | #endif |
43 | #ifdef HAVE_ZL10353 | ||
44 | # include "zl10353.h" | ||
45 | #endif | ||
43 | #ifdef HAVE_CX22702 | 46 | #ifdef HAVE_CX22702 |
44 | # include "cx22702.h" | 47 | # include "cx22702.h" |
45 | #endif | 48 | #endif |
@@ -111,6 +114,21 @@ static struct videobuf_queue_ops dvb_qops = { | |||
111 | 114 | ||
112 | /* ------------------------------------------------------------------ */ | 115 | /* ------------------------------------------------------------------ */ |
113 | 116 | ||
117 | #if defined(HAVE_MT352) || defined(HAVE_ZL10353) | ||
118 | static int zarlink_pll_set(struct dvb_frontend *fe, | ||
119 | struct dvb_frontend_parameters *params, | ||
120 | u8 *pllbuf) | ||
121 | { | ||
122 | struct cx8802_dev *dev = fe->dvb->priv; | ||
123 | |||
124 | pllbuf[0] = dev->core->pll_addr << 1; | ||
125 | dvb_pll_configure(dev->core->pll_desc, pllbuf + 1, | ||
126 | params->frequency, | ||
127 | params->u.ofdm.bandwidth); | ||
128 | return 0; | ||
129 | } | ||
130 | #endif | ||
131 | |||
114 | #ifdef HAVE_MT352 | 132 | #ifdef HAVE_MT352 |
115 | static int dvico_fusionhdtv_demod_init(struct dvb_frontend* fe) | 133 | static int dvico_fusionhdtv_demod_init(struct dvb_frontend* fe) |
116 | { | 134 | { |
@@ -176,35 +194,22 @@ static int dntv_live_dvbt_demod_init(struct dvb_frontend* fe) | |||
176 | return 0; | 194 | return 0; |
177 | } | 195 | } |
178 | 196 | ||
179 | static int mt352_pll_set(struct dvb_frontend* fe, | ||
180 | struct dvb_frontend_parameters* params, | ||
181 | u8* pllbuf) | ||
182 | { | ||
183 | struct cx8802_dev *dev= fe->dvb->priv; | ||
184 | |||
185 | pllbuf[0] = dev->core->pll_addr << 1; | ||
186 | dvb_pll_configure(dev->core->pll_desc, pllbuf+1, | ||
187 | params->frequency, | ||
188 | params->u.ofdm.bandwidth); | ||
189 | return 0; | ||
190 | } | ||
191 | |||
192 | static struct mt352_config dvico_fusionhdtv = { | 197 | static struct mt352_config dvico_fusionhdtv = { |
193 | .demod_address = 0x0F, | 198 | .demod_address = 0x0F, |
194 | .demod_init = dvico_fusionhdtv_demod_init, | 199 | .demod_init = dvico_fusionhdtv_demod_init, |
195 | .pll_set = mt352_pll_set, | 200 | .pll_set = zarlink_pll_set, |
196 | }; | 201 | }; |
197 | 202 | ||
198 | static struct mt352_config dntv_live_dvbt_config = { | 203 | static struct mt352_config dntv_live_dvbt_config = { |
199 | .demod_address = 0x0f, | 204 | .demod_address = 0x0f, |
200 | .demod_init = dntv_live_dvbt_demod_init, | 205 | .demod_init = dntv_live_dvbt_demod_init, |
201 | .pll_set = mt352_pll_set, | 206 | .pll_set = zarlink_pll_set, |
202 | }; | 207 | }; |
203 | 208 | ||
204 | static struct mt352_config dvico_fusionhdtv_dual = { | 209 | static struct mt352_config dvico_fusionhdtv_dual = { |
205 | .demod_address = 0x0F, | 210 | .demod_address = 0x0F, |
206 | .demod_init = dvico_dual_demod_init, | 211 | .demod_init = dvico_dual_demod_init, |
207 | .pll_set = mt352_pll_set, | 212 | .pll_set = zarlink_pll_set, |
208 | }; | 213 | }; |
209 | 214 | ||
210 | #ifdef HAVE_VP3054_I2C | 215 | #ifdef HAVE_VP3054_I2C |
@@ -294,6 +299,46 @@ static struct mt352_config dntv_live_dvbt_pro_config = { | |||
294 | #endif | 299 | #endif |
295 | #endif | 300 | #endif |
296 | 301 | ||
302 | #ifdef HAVE_ZL10353 | ||
303 | static int dvico_hybrid_tune_pll(struct dvb_frontend *fe, | ||
304 | struct dvb_frontend_parameters *params, | ||
305 | u8 *pllbuf) | ||
306 | { | ||
307 | struct cx8802_dev *dev= fe->dvb->priv; | ||
308 | struct i2c_msg msg = | ||
309 | { .addr = dev->core->pll_addr, .flags = 0, | ||
310 | .buf = pllbuf + 1, .len = 4 }; | ||
311 | int err; | ||
312 | |||
313 | pllbuf[0] = dev->core->pll_addr << 1; | ||
314 | dvb_pll_configure(dev->core->pll_desc, pllbuf + 1, | ||
315 | params->frequency, | ||
316 | params->u.ofdm.bandwidth); | ||
317 | |||
318 | if ((err = i2c_transfer(&dev->core->i2c_adap, &msg, 1)) != 1) { | ||
319 | printk(KERN_WARNING "cx88-dvb: %s error " | ||
320 | "(addr %02x <- %02x, err = %i)\n", | ||
321 | __FUNCTION__, pllbuf[0], pllbuf[1], err); | ||
322 | if (err < 0) | ||
323 | return err; | ||
324 | else | ||
325 | return -EREMOTEIO; | ||
326 | } | ||
327 | |||
328 | return 0; | ||
329 | } | ||
330 | |||
331 | static struct zl10353_config dvico_fusionhdtv_hybrid = { | ||
332 | .demod_address = 0x0F, | ||
333 | .pll_set = dvico_hybrid_tune_pll, | ||
334 | }; | ||
335 | |||
336 | static struct zl10353_config dvico_fusionhdtv_plus_v1_1 = { | ||
337 | .demod_address = 0x0F, | ||
338 | .pll_set = zarlink_pll_set, | ||
339 | }; | ||
340 | #endif | ||
341 | |||
297 | #ifdef HAVE_CX22702 | 342 | #ifdef HAVE_CX22702 |
298 | static struct cx22702_config connexant_refboard_config = { | 343 | static struct cx22702_config connexant_refboard_config = { |
299 | .demod_address = 0x43, | 344 | .demod_address = 0x43, |
@@ -500,16 +545,27 @@ static int dvb_register(struct cx8802_dev *dev) | |||
500 | &dev->core->i2c_adap); | 545 | &dev->core->i2c_adap); |
501 | break; | 546 | break; |
502 | #endif | 547 | #endif |
548 | #if defined(HAVE_MT352) || defined(HAVE_ZL10353) | ||
549 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: | ||
550 | dev->core->pll_addr = 0x60; | ||
551 | dev->core->pll_desc = &dvb_pll_thomson_dtt7579; | ||
503 | #ifdef HAVE_MT352 | 552 | #ifdef HAVE_MT352 |
504 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: | ||
505 | dev->core->pll_addr = 0x61; | ||
506 | dev->core->pll_desc = &dvb_pll_lg_z201; | ||
507 | dev->dvb.frontend = mt352_attach(&dvico_fusionhdtv, | 553 | dev->dvb.frontend = mt352_attach(&dvico_fusionhdtv, |
508 | &dev->core->i2c_adap); | 554 | &dev->core->i2c_adap); |
555 | if (dev->dvb.frontend != NULL) | ||
556 | break; | ||
557 | #endif | ||
558 | #ifdef HAVE_ZL10353 | ||
559 | /* ZL10353 replaces MT352 on later cards */ | ||
560 | dev->dvb.frontend = zl10353_attach(&dvico_fusionhdtv_plus_v1_1, | ||
561 | &dev->core->i2c_adap); | ||
562 | #endif | ||
509 | break; | 563 | break; |
510 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: | 564 | #endif /* HAVE_MT352 || HAVE_ZL10353 */ |
511 | dev->core->pll_addr = 0x60; | 565 | #ifdef HAVE_MT352 |
512 | dev->core->pll_desc = &dvb_pll_thomson_dtt7579; | 566 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: |
567 | dev->core->pll_addr = 0x61; | ||
568 | dev->core->pll_desc = &dvb_pll_lg_z201; | ||
513 | dev->dvb.frontend = mt352_attach(&dvico_fusionhdtv, | 569 | dev->dvb.frontend = mt352_attach(&dvico_fusionhdtv, |
514 | &dev->core->i2c_adap); | 570 | &dev->core->i2c_adap); |
515 | break; | 571 | break; |
@@ -540,6 +596,14 @@ static int dvb_register(struct cx8802_dev *dev) | |||
540 | &dev->core->i2c_adap); | 596 | &dev->core->i2c_adap); |
541 | break; | 597 | break; |
542 | #endif | 598 | #endif |
599 | #ifdef HAVE_ZL10353 | ||
600 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID: | ||
601 | dev->core->pll_addr = 0x61; | ||
602 | dev->core->pll_desc = &dvb_pll_unknown_fe6600; | ||
603 | dev->dvb.frontend = zl10353_attach(&dvico_fusionhdtv_hybrid, | ||
604 | &dev->core->i2c_adap); | ||
605 | break; | ||
606 | #endif | ||
543 | #ifdef HAVE_OR51132 | 607 | #ifdef HAVE_OR51132 |
544 | case CX88_BOARD_PCHDTV_HD3000: | 608 | case CX88_BOARD_PCHDTV_HD3000: |
545 | dev->dvb.frontend = or51132_attach(&pchdtv_hd3000, | 609 | dev->dvb.frontend = or51132_attach(&pchdtv_hd3000, |
diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h index a4cf2473eacf..21738b664bc9 100644 --- a/drivers/media/video/cx88/cx88.h +++ b/drivers/media/video/cx88/cx88.h | |||
@@ -189,6 +189,7 @@ extern struct sram_channel cx88_sram_channels[]; | |||
189 | #define CX88_BOARD_KWORLD_DVB_T_CX22702 43 | 189 | #define CX88_BOARD_KWORLD_DVB_T_CX22702 43 |
190 | #define CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL 44 | 190 | #define CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL 44 |
191 | #define CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT 45 | 191 | #define CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT 45 |
192 | #define CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID 46 | ||
192 | 193 | ||
193 | enum cx88_itype { | 194 | enum cx88_itype { |
194 | CX88_VMUX_COMPOSITE1 = 1, | 195 | CX88_VMUX_COMPOSITE1 = 1, |
diff --git a/drivers/media/video/tuner-types.c b/drivers/media/video/tuner-types.c index 15761dd8607d..d10cfd400f2b 100644 --- a/drivers/media/video/tuner-types.c +++ b/drivers/media/video/tuner-types.c | |||
@@ -983,6 +983,22 @@ static struct tuner_params tuner_samsung_tcpn_2121p30a_params[] = { | |||
983 | }, | 983 | }, |
984 | }; | 984 | }; |
985 | 985 | ||
986 | /* ------------ TUNER_FE6600 - DViCO Hybrid PAL ------------ */ | ||
987 | |||
988 | static struct tuner_range tuner_fe6600_ranges[] = { | ||
989 | { 16 * 160.00 /*MHz*/, 0xfe, 0x11, }, | ||
990 | { 16 * 442.00 /*MHz*/, 0xf6, 0x12, }, | ||
991 | { 16 * 999.99 , 0xf6, 0x18, }, | ||
992 | }; | ||
993 | |||
994 | static struct tuner_params tuner_fe6600_params[] = { | ||
995 | { | ||
996 | .type = TUNER_PARAM_TYPE_PAL, | ||
997 | .ranges = tuner_fe6600_ranges, | ||
998 | .count = ARRAY_SIZE(tuner_fe6600_ranges), | ||
999 | }, | ||
1000 | }; | ||
1001 | |||
986 | /* --------------------------------------------------------------------- */ | 1002 | /* --------------------------------------------------------------------- */ |
987 | 1003 | ||
988 | struct tunertype tuners[] = { | 1004 | struct tunertype tuners[] = { |
@@ -1354,6 +1370,10 @@ struct tunertype tuners[] = { | |||
1354 | .name = "Xceive xc3028", | 1370 | .name = "Xceive xc3028", |
1355 | /* see xc3028.c for details */ | 1371 | /* see xc3028.c for details */ |
1356 | }, | 1372 | }, |
1373 | [TUNER_FE6600] = { /* */ | ||
1374 | .name = "FE6600", | ||
1375 | .params = tuner_fe6600_params, | ||
1376 | }, | ||
1357 | }; | 1377 | }; |
1358 | 1378 | ||
1359 | unsigned const int tuner_count = ARRAY_SIZE(tuners); | 1379 | unsigned const int tuner_count = ARRAY_SIZE(tuners); |