diff options
Diffstat (limited to 'drivers/media/video/cx88')
-rw-r--r-- | drivers/media/video/cx88/Kconfig | 2 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-cards.c | 19 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-dvb.c | 58 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-input.c | 47 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-video.c | 2 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88.h | 1 |
6 files changed, 117 insertions, 12 deletions
diff --git a/drivers/media/video/cx88/Kconfig b/drivers/media/video/cx88/Kconfig index 49952980dab3..c7e5851d3486 100644 --- a/drivers/media/video/cx88/Kconfig +++ b/drivers/media/video/cx88/Kconfig | |||
@@ -61,6 +61,8 @@ config VIDEO_CX88_DVB | |||
61 | select DVB_STV0299 if !DVB_FE_CUSTOMISE | 61 | select DVB_STV0299 if !DVB_FE_CUSTOMISE |
62 | select DVB_STV0288 if !DVB_FE_CUSTOMISE | 62 | select DVB_STV0288 if !DVB_FE_CUSTOMISE |
63 | select DVB_STB6000 if !DVB_FE_CUSTOMISE | 63 | select DVB_STB6000 if !DVB_FE_CUSTOMISE |
64 | select DVB_STV0900 if !DVB_FE_CUSTOMISE | ||
65 | select DVB_STB6100 if !DVB_FE_CUSTOMISE | ||
64 | select MEDIA_TUNER_SIMPLE if !MEDIA_TUNER_CUSTOMISE | 66 | select MEDIA_TUNER_SIMPLE if !MEDIA_TUNER_CUSTOMISE |
65 | ---help--- | 67 | ---help--- |
66 | This adds support for DVB/ATSC cards based on the | 68 | This adds support for DVB/ATSC cards based on the |
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c index 33be6369871a..d844f2aaa01d 100644 --- a/drivers/media/video/cx88/cx88-cards.c +++ b/drivers/media/video/cx88/cx88-cards.c | |||
@@ -2075,6 +2075,18 @@ static const struct cx88_board cx88_boards[] = { | |||
2075 | }, | 2075 | }, |
2076 | .mpeg = CX88_MPEG_DVB, | 2076 | .mpeg = CX88_MPEG_DVB, |
2077 | }, | 2077 | }, |
2078 | [CX88_BOARD_PROF_7301] = { | ||
2079 | .name = "Prof 7301 DVB-S/S2", | ||
2080 | .tuner_type = UNSET, | ||
2081 | .radio_type = UNSET, | ||
2082 | .tuner_addr = ADDR_UNSET, | ||
2083 | .radio_addr = ADDR_UNSET, | ||
2084 | .input = { { | ||
2085 | .type = CX88_VMUX_DVB, | ||
2086 | .vmux = 0, | ||
2087 | } }, | ||
2088 | .mpeg = CX88_MPEG_DVB, | ||
2089 | }, | ||
2078 | }; | 2090 | }; |
2079 | 2091 | ||
2080 | /* ------------------------------------------------------------------ */ | 2092 | /* ------------------------------------------------------------------ */ |
@@ -2535,6 +2547,10 @@ static const struct cx88_subid cx88_subids[] = { | |||
2535 | .subvendor = 0x107d, | 2547 | .subvendor = 0x107d, |
2536 | .subdevice = 0x6618, | 2548 | .subdevice = 0x6618, |
2537 | .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL, | 2549 | .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL, |
2550 | }, { | ||
2551 | .subvendor = 0xb034, | ||
2552 | .subdevice = 0x3034, | ||
2553 | .card = CX88_BOARD_PROF_7301, | ||
2538 | }, | 2554 | }, |
2539 | }; | 2555 | }; |
2540 | 2556 | ||
@@ -3211,6 +3227,7 @@ static void cx88_card_setup(struct cx88_core *core) | |||
3211 | case CX88_BOARD_TBS_8920: | 3227 | case CX88_BOARD_TBS_8920: |
3212 | case CX88_BOARD_PROF_6200: | 3228 | case CX88_BOARD_PROF_6200: |
3213 | case CX88_BOARD_PROF_7300: | 3229 | case CX88_BOARD_PROF_7300: |
3230 | case CX88_BOARD_PROF_7301: | ||
3214 | case CX88_BOARD_SATTRADE_ST4200: | 3231 | case CX88_BOARD_SATTRADE_ST4200: |
3215 | cx_write(MO_GP0_IO, 0x8000); | 3232 | cx_write(MO_GP0_IO, 0x8000); |
3216 | msleep(100); | 3233 | msleep(100); |
@@ -3267,7 +3284,7 @@ static void cx88_card_setup(struct cx88_core *core) | |||
3267 | ctl.fname); | 3284 | ctl.fname); |
3268 | call_all(core, tuner, s_config, &xc2028_cfg); | 3285 | call_all(core, tuner, s_config, &xc2028_cfg); |
3269 | } | 3286 | } |
3270 | call_all(core, tuner, s_standby); | 3287 | call_all(core, core, s_power, 0); |
3271 | } | 3288 | } |
3272 | 3289 | ||
3273 | /* ------------------------------------------------------------------ */ | 3290 | /* ------------------------------------------------------------------ */ |
diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c index 518bcfe18bcb..b14296923250 100644 --- a/drivers/media/video/cx88/cx88-dvb.c +++ b/drivers/media/video/cx88/cx88-dvb.c | |||
@@ -53,6 +53,9 @@ | |||
53 | #include "stv0288.h" | 53 | #include "stv0288.h" |
54 | #include "stb6000.h" | 54 | #include "stb6000.h" |
55 | #include "cx24116.h" | 55 | #include "cx24116.h" |
56 | #include "stv0900.h" | ||
57 | #include "stb6100.h" | ||
58 | #include "stb6100_proc.h" | ||
56 | 59 | ||
57 | MODULE_DESCRIPTION("driver for cx2388x based DVB cards"); | 60 | MODULE_DESCRIPTION("driver for cx2388x based DVB cards"); |
58 | MODULE_AUTHOR("Chris Pascoe <c.pascoe@itee.uq.edu.au>"); | 61 | MODULE_AUTHOR("Chris Pascoe <c.pascoe@itee.uq.edu.au>"); |
@@ -573,6 +576,15 @@ static int cx24116_set_ts_param(struct dvb_frontend *fe, | |||
573 | return 0; | 576 | return 0; |
574 | } | 577 | } |
575 | 578 | ||
579 | static int stv0900_set_ts_param(struct dvb_frontend *fe, | ||
580 | int is_punctured) | ||
581 | { | ||
582 | struct cx8802_dev *dev = fe->dvb->priv; | ||
583 | dev->ts_gen_cntrl = 0; | ||
584 | |||
585 | return 0; | ||
586 | } | ||
587 | |||
576 | static int cx24116_reset_device(struct dvb_frontend *fe) | 588 | static int cx24116_reset_device(struct dvb_frontend *fe) |
577 | { | 589 | { |
578 | struct cx8802_dev *dev = fe->dvb->priv; | 590 | struct cx8802_dev *dev = fe->dvb->priv; |
@@ -601,6 +613,23 @@ static struct cx24116_config tevii_s460_config = { | |||
601 | .reset_device = cx24116_reset_device, | 613 | .reset_device = cx24116_reset_device, |
602 | }; | 614 | }; |
603 | 615 | ||
616 | static struct stv0900_config prof_7301_stv0900_config = { | ||
617 | .demod_address = 0x6a, | ||
618 | /* demod_mode = 0,*/ | ||
619 | .xtal = 27000000, | ||
620 | .clkmode = 3,/* 0-CLKI, 2-XTALI, else AUTO */ | ||
621 | .diseqc_mode = 2,/* 2/3 PWM */ | ||
622 | .tun1_maddress = 0,/* 0x60 */ | ||
623 | .tun1_adc = 0,/* 2 Vpp */ | ||
624 | .path1_mode = 3, | ||
625 | .set_ts_params = stv0900_set_ts_param, | ||
626 | }; | ||
627 | |||
628 | static struct stb6100_config prof_7301_stb6100_config = { | ||
629 | .tuner_address = 0x60, | ||
630 | .refclock = 27000000, | ||
631 | }; | ||
632 | |||
604 | static struct stv0299_config tevii_tuner_sharp_config = { | 633 | static struct stv0299_config tevii_tuner_sharp_config = { |
605 | .demod_address = 0x68, | 634 | .demod_address = 0x68, |
606 | .inittab = sharp_z0194a_inittab, | 635 | .inittab = sharp_z0194a_inittab, |
@@ -1149,6 +1178,31 @@ static int dvb_register(struct cx8802_dev *dev) | |||
1149 | goto frontend_detach; | 1178 | goto frontend_detach; |
1150 | } | 1179 | } |
1151 | break; | 1180 | break; |
1181 | case CX88_BOARD_PROF_7301:{ | ||
1182 | struct dvb_tuner_ops *tuner_ops = NULL; | ||
1183 | |||
1184 | fe0->dvb.frontend = dvb_attach(stv0900_attach, | ||
1185 | &prof_7301_stv0900_config, | ||
1186 | &core->i2c_adap, 0); | ||
1187 | if (fe0->dvb.frontend != NULL) { | ||
1188 | if (!dvb_attach(stb6100_attach, fe0->dvb.frontend, | ||
1189 | &prof_7301_stb6100_config, | ||
1190 | &core->i2c_adap)) | ||
1191 | goto frontend_detach; | ||
1192 | |||
1193 | tuner_ops = &fe0->dvb.frontend->ops.tuner_ops; | ||
1194 | tuner_ops->set_frequency = stb6100_set_freq; | ||
1195 | tuner_ops->get_frequency = stb6100_get_freq; | ||
1196 | tuner_ops->set_bandwidth = stb6100_set_bandw; | ||
1197 | tuner_ops->get_bandwidth = stb6100_get_bandw; | ||
1198 | |||
1199 | core->prev_set_voltage = | ||
1200 | fe0->dvb.frontend->ops.set_voltage; | ||
1201 | fe0->dvb.frontend->ops.set_voltage = | ||
1202 | tevii_dvbs_set_voltage; | ||
1203 | } | ||
1204 | break; | ||
1205 | } | ||
1152 | default: | 1206 | default: |
1153 | printk(KERN_ERR "%s/2: The frontend of your DVB/ATSC card isn't supported yet\n", | 1207 | printk(KERN_ERR "%s/2: The frontend of your DVB/ATSC card isn't supported yet\n", |
1154 | core->name); | 1208 | core->name); |
@@ -1170,11 +1224,11 @@ static int dvb_register(struct cx8802_dev *dev) | |||
1170 | fe1->dvb.frontend->ops.ts_bus_ctrl = cx88_dvb_bus_ctrl; | 1224 | fe1->dvb.frontend->ops.ts_bus_ctrl = cx88_dvb_bus_ctrl; |
1171 | 1225 | ||
1172 | /* Put the analog decoder in standby to keep it quiet */ | 1226 | /* Put the analog decoder in standby to keep it quiet */ |
1173 | call_all(core, tuner, s_standby); | 1227 | call_all(core, core, s_power, 0); |
1174 | 1228 | ||
1175 | /* register everything */ | 1229 | /* register everything */ |
1176 | return videobuf_dvb_register_bus(&dev->frontends, THIS_MODULE, dev, | 1230 | return videobuf_dvb_register_bus(&dev->frontends, THIS_MODULE, dev, |
1177 | &dev->pci->dev, adapter_nr, mfe_shared); | 1231 | &dev->pci->dev, adapter_nr, mfe_shared, NULL); |
1178 | 1232 | ||
1179 | frontend_detach: | 1233 | frontend_detach: |
1180 | core->gate_ctrl = NULL; | 1234 | core->gate_ctrl = NULL; |
diff --git a/drivers/media/video/cx88/cx88-input.c b/drivers/media/video/cx88/cx88-input.c index 78b3635178af..92b8cdf9fb81 100644 --- a/drivers/media/video/cx88/cx88-input.c +++ b/drivers/media/video/cx88/cx88-input.c | |||
@@ -118,13 +118,13 @@ static void cx88_ir_handle_key(struct cx88_IR *ir) | |||
118 | 118 | ||
119 | data = (data << 4) | ((gpio_key & 0xf0) >> 4); | 119 | data = (data << 4) | ((gpio_key & 0xf0) >> 4); |
120 | 120 | ||
121 | ir_input_keydown(ir->input, &ir->ir, data, data); | 121 | ir_input_keydown(ir->input, &ir->ir, data); |
122 | ir_input_nokey(ir->input, &ir->ir); | 122 | ir_input_nokey(ir->input, &ir->ir); |
123 | 123 | ||
124 | } else if (ir->mask_keydown) { | 124 | } else if (ir->mask_keydown) { |
125 | /* bit set on keydown */ | 125 | /* bit set on keydown */ |
126 | if (gpio & ir->mask_keydown) { | 126 | if (gpio & ir->mask_keydown) { |
127 | ir_input_keydown(ir->input, &ir->ir, data, data); | 127 | ir_input_keydown(ir->input, &ir->ir, data); |
128 | } else { | 128 | } else { |
129 | ir_input_nokey(ir->input, &ir->ir); | 129 | ir_input_nokey(ir->input, &ir->ir); |
130 | } | 130 | } |
@@ -132,14 +132,14 @@ static void cx88_ir_handle_key(struct cx88_IR *ir) | |||
132 | } else if (ir->mask_keyup) { | 132 | } else if (ir->mask_keyup) { |
133 | /* bit cleared on keydown */ | 133 | /* bit cleared on keydown */ |
134 | if (0 == (gpio & ir->mask_keyup)) { | 134 | if (0 == (gpio & ir->mask_keyup)) { |
135 | ir_input_keydown(ir->input, &ir->ir, data, data); | 135 | ir_input_keydown(ir->input, &ir->ir, data); |
136 | } else { | 136 | } else { |
137 | ir_input_nokey(ir->input, &ir->ir); | 137 | ir_input_nokey(ir->input, &ir->ir); |
138 | } | 138 | } |
139 | 139 | ||
140 | } else { | 140 | } else { |
141 | /* can't distinguish keydown/up :-/ */ | 141 | /* can't distinguish keydown/up :-/ */ |
142 | ir_input_keydown(ir->input, &ir->ir, data, data); | 142 | ir_input_keydown(ir->input, &ir->ir, data); |
143 | ir_input_nokey(ir->input, &ir->ir); | 143 | ir_input_nokey(ir->input, &ir->ir); |
144 | } | 144 | } |
145 | } | 145 | } |
@@ -303,6 +303,23 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci) | |||
303 | ir->mask_keydown = 0x02; | 303 | ir->mask_keydown = 0x02; |
304 | ir->polling = 50; /* ms */ | 304 | ir->polling = 50; /* ms */ |
305 | break; | 305 | break; |
306 | case CX88_BOARD_OMICOM_SS4_PCI: | ||
307 | case CX88_BOARD_SATTRADE_ST4200: | ||
308 | case CX88_BOARD_TBS_8920: | ||
309 | case CX88_BOARD_TBS_8910: | ||
310 | case CX88_BOARD_PROF_7300: | ||
311 | case CX88_BOARD_PROF_7301: | ||
312 | case CX88_BOARD_PROF_6200: | ||
313 | ir_codes = &ir_codes_tbs_nec_table; | ||
314 | ir_type = IR_TYPE_PD; | ||
315 | ir->sampling = 0xff00; /* address */ | ||
316 | break; | ||
317 | case CX88_BOARD_TEVII_S460: | ||
318 | case CX88_BOARD_TEVII_S420: | ||
319 | ir_codes = &ir_codes_tevii_nec_table; | ||
320 | ir_type = IR_TYPE_PD; | ||
321 | ir->sampling = 0xff00; /* address */ | ||
322 | break; | ||
306 | case CX88_BOARD_DNTV_LIVE_DVB_T_PRO: | 323 | case CX88_BOARD_DNTV_LIVE_DVB_T_PRO: |
307 | ir_codes = &ir_codes_dntv_live_dvbt_pro_table; | 324 | ir_codes = &ir_codes_dntv_live_dvbt_pro_table; |
308 | ir_type = IR_TYPE_PD; | 325 | ir_type = IR_TYPE_PD; |
@@ -343,7 +360,10 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci) | |||
343 | snprintf(ir->name, sizeof(ir->name), "cx88 IR (%s)", core->board.name); | 360 | snprintf(ir->name, sizeof(ir->name), "cx88 IR (%s)", core->board.name); |
344 | snprintf(ir->phys, sizeof(ir->phys), "pci-%s/ir0", pci_name(pci)); | 361 | snprintf(ir->phys, sizeof(ir->phys), "pci-%s/ir0", pci_name(pci)); |
345 | 362 | ||
346 | ir_input_init(input_dev, &ir->ir, ir_type, ir_codes); | 363 | err = ir_input_init(input_dev, &ir->ir, ir_type, ir_codes); |
364 | if (err < 0) | ||
365 | goto err_out_free; | ||
366 | |||
347 | input_dev->name = ir->name; | 367 | input_dev->name = ir->name; |
348 | input_dev->phys = ir->phys; | 368 | input_dev->phys = ir->phys; |
349 | input_dev->id.bustype = BUS_PCI; | 369 | input_dev->id.bustype = BUS_PCI; |
@@ -373,6 +393,7 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci) | |||
373 | cx88_ir_stop(core, ir); | 393 | cx88_ir_stop(core, ir); |
374 | core->ir = NULL; | 394 | core->ir = NULL; |
375 | err_out_free: | 395 | err_out_free: |
396 | ir_input_free(input_dev); | ||
376 | input_free_device(input_dev); | 397 | input_free_device(input_dev); |
377 | kfree(ir); | 398 | kfree(ir); |
378 | return err; | 399 | return err; |
@@ -387,6 +408,7 @@ int cx88_ir_fini(struct cx88_core *core) | |||
387 | return 0; | 408 | return 0; |
388 | 409 | ||
389 | cx88_ir_stop(core, ir); | 410 | cx88_ir_stop(core, ir); |
411 | ir_input_free(ir->input); | ||
390 | input_unregister_device(ir->input); | 412 | input_unregister_device(ir->input); |
391 | kfree(ir); | 413 | kfree(ir); |
392 | 414 | ||
@@ -432,8 +454,17 @@ void cx88_ir_irq(struct cx88_core *core) | |||
432 | 454 | ||
433 | /* decode it */ | 455 | /* decode it */ |
434 | switch (core->boardnr) { | 456 | switch (core->boardnr) { |
457 | case CX88_BOARD_TEVII_S460: | ||
458 | case CX88_BOARD_TEVII_S420: | ||
435 | case CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1: | 459 | case CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1: |
436 | case CX88_BOARD_DNTV_LIVE_DVB_T_PRO: | 460 | case CX88_BOARD_DNTV_LIVE_DVB_T_PRO: |
461 | case CX88_BOARD_OMICOM_SS4_PCI: | ||
462 | case CX88_BOARD_SATTRADE_ST4200: | ||
463 | case CX88_BOARD_TBS_8920: | ||
464 | case CX88_BOARD_TBS_8910: | ||
465 | case CX88_BOARD_PROF_7300: | ||
466 | case CX88_BOARD_PROF_7301: | ||
467 | case CX88_BOARD_PROF_6200: | ||
437 | ircode = ir_decode_pulsedistance(ir->samples, ir->scount, 1, 4); | 468 | ircode = ir_decode_pulsedistance(ir->samples, ir->scount, 1, 4); |
438 | 469 | ||
439 | if (ircode == 0xffffffff) { /* decoding error */ | 470 | if (ircode == 0xffffffff) { /* decoding error */ |
@@ -461,7 +492,7 @@ void cx88_ir_irq(struct cx88_core *core) | |||
461 | 492 | ||
462 | ir_dprintk("Key Code: %x\n", (ircode >> 16) & 0x7f); | 493 | ir_dprintk("Key Code: %x\n", (ircode >> 16) & 0x7f); |
463 | 494 | ||
464 | ir_input_keydown(ir->input, &ir->ir, (ircode >> 16) & 0x7f, (ircode >> 16) & 0xff); | 495 | ir_input_keydown(ir->input, &ir->ir, (ircode >> 16) & 0x7f); |
465 | ir->release = jiffies + msecs_to_jiffies(120); | 496 | ir->release = jiffies + msecs_to_jiffies(120); |
466 | break; | 497 | break; |
467 | case CX88_BOARD_HAUPPAUGE: | 498 | case CX88_BOARD_HAUPPAUGE: |
@@ -498,7 +529,7 @@ void cx88_ir_irq(struct cx88_core *core) | |||
498 | if ( dev != 0x1e && dev != 0x1f ) | 529 | if ( dev != 0x1e && dev != 0x1f ) |
499 | /* not a hauppauge remote */ | 530 | /* not a hauppauge remote */ |
500 | break; | 531 | break; |
501 | ir_input_keydown(ir->input, &ir->ir, code, ircode); | 532 | ir_input_keydown(ir->input, &ir->ir, code); |
502 | ir->release = jiffies + msecs_to_jiffies(120); | 533 | ir->release = jiffies + msecs_to_jiffies(120); |
503 | break; | 534 | break; |
504 | case CX88_BOARD_PINNACLE_PCTV_HD_800i: | 535 | case CX88_BOARD_PINNACLE_PCTV_HD_800i: |
@@ -506,7 +537,7 @@ void cx88_ir_irq(struct cx88_core *core) | |||
506 | ir_dprintk("biphase decoded: %x\n", ircode); | 537 | ir_dprintk("biphase decoded: %x\n", ircode); |
507 | if ((ircode & 0xfffff000) != 0x3000) | 538 | if ((ircode & 0xfffff000) != 0x3000) |
508 | break; | 539 | break; |
509 | ir_input_keydown(ir->input, &ir->ir, ircode & 0x3f, ircode); | 540 | ir_input_keydown(ir->input, &ir->ir, ircode & 0x3f); |
510 | ir->release = jiffies + msecs_to_jiffies(120); | 541 | ir->release = jiffies + msecs_to_jiffies(120); |
511 | break; | 542 | break; |
512 | } | 543 | } |
diff --git a/drivers/media/video/cx88/cx88-video.c b/drivers/media/video/cx88/cx88-video.c index 57e6b1241090..d7e8fcee559c 100644 --- a/drivers/media/video/cx88/cx88-video.c +++ b/drivers/media/video/cx88/cx88-video.c | |||
@@ -935,7 +935,7 @@ static int video_release(struct file *file) | |||
935 | 935 | ||
936 | mutex_lock(&dev->core->lock); | 936 | mutex_lock(&dev->core->lock); |
937 | if(atomic_dec_and_test(&dev->core->users)) | 937 | if(atomic_dec_and_test(&dev->core->users)) |
938 | call_all(dev->core, tuner, s_standby); | 938 | call_all(dev->core, core, s_power, 0); |
939 | mutex_unlock(&dev->core->lock); | 939 | mutex_unlock(&dev->core->lock); |
940 | 940 | ||
941 | return 0; | 941 | return 0; |
diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h index d5cea41f4207..e1c521710103 100644 --- a/drivers/media/video/cx88/cx88.h +++ b/drivers/media/video/cx88/cx88.h | |||
@@ -238,6 +238,7 @@ extern struct sram_channel cx88_sram_channels[]; | |||
238 | #define CX88_BOARD_HAUPPAUGE_IRONLY 80 | 238 | #define CX88_BOARD_HAUPPAUGE_IRONLY 80 |
239 | #define CX88_BOARD_WINFAST_DTV1800H 81 | 239 | #define CX88_BOARD_WINFAST_DTV1800H 81 |
240 | #define CX88_BOARD_WINFAST_DTV2000H_J 82 | 240 | #define CX88_BOARD_WINFAST_DTV2000H_J 82 |
241 | #define CX88_BOARD_PROF_7301 83 | ||
241 | 242 | ||
242 | enum cx88_itype { | 243 | enum cx88_itype { |
243 | CX88_VMUX_COMPOSITE1 = 1, | 244 | CX88_VMUX_COMPOSITE1 = 1, |