diff options
Diffstat (limited to 'drivers/media/video/saa7134')
-rw-r--r-- | drivers/media/video/saa7134/saa7134-cards.c | 52 | ||||
-rw-r--r-- | drivers/media/video/saa7134/saa7134-dvb.c | 24 | ||||
-rw-r--r-- | drivers/media/video/saa7134/saa7134-input.c | 14 | ||||
-rw-r--r-- | drivers/media/video/saa7134/saa7134-tvaudio.c | 2 | ||||
-rw-r--r-- | drivers/media/video/saa7134/saa7134.h | 3 |
5 files changed, 75 insertions, 20 deletions
diff --git a/drivers/media/video/saa7134/saa7134-cards.c b/drivers/media/video/saa7134/saa7134-cards.c index ddc5402c5fb0..a2e3f6729c5b 100644 --- a/drivers/media/video/saa7134/saa7134-cards.c +++ b/drivers/media/video/saa7134/saa7134-cards.c | |||
@@ -4606,6 +4606,43 @@ struct saa7134_board saa7134_boards[] = { | |||
4606 | .gpio = 0x0200000, | 4606 | .gpio = 0x0200000, |
4607 | }, | 4607 | }, |
4608 | }, | 4608 | }, |
4609 | [SAA7134_BOARD_KWORLD_PLUS_TV_ANALOG] = { | ||
4610 | .name = "Kworld Plus TV Analog Lite PCI", | ||
4611 | .audio_clock = 0x00187de7, | ||
4612 | .tuner_type = TUNER_YMEC_TVF_5533MF, | ||
4613 | .radio_type = TUNER_TEA5767, | ||
4614 | .tuner_addr = ADDR_UNSET, | ||
4615 | .radio_addr = ADDR_UNSET, | ||
4616 | .gpiomask = 0x80000700, | ||
4617 | .inputs = { { | ||
4618 | .name = name_tv, | ||
4619 | .vmux = 1, | ||
4620 | .amux = LINE2, | ||
4621 | .tv = 1, | ||
4622 | .gpio = 0x100, | ||
4623 | }, { | ||
4624 | .name = name_comp1, | ||
4625 | .vmux = 3, | ||
4626 | .amux = LINE1, | ||
4627 | .gpio = 0x200, | ||
4628 | }, { | ||
4629 | .name = name_svideo, | ||
4630 | .vmux = 8, | ||
4631 | .amux = LINE1, | ||
4632 | .gpio = 0x200, | ||
4633 | } }, | ||
4634 | .radio = { | ||
4635 | .name = name_radio, | ||
4636 | .vmux = 1, | ||
4637 | .amux = LINE1, | ||
4638 | .gpio = 0x100, | ||
4639 | }, | ||
4640 | .mute = { | ||
4641 | .name = name_mute, | ||
4642 | .vmux = 8, | ||
4643 | .amux = 2, | ||
4644 | }, | ||
4645 | }, | ||
4609 | }; | 4646 | }; |
4610 | 4647 | ||
4611 | const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards); | 4648 | const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards); |
@@ -4736,6 +4773,12 @@ struct pci_device_id saa7134_pci_tbl[] = { | |||
4736 | .driver_data = SAA7134_BOARD_MD7134, | 4773 | .driver_data = SAA7134_BOARD_MD7134, |
4737 | },{ | 4774 | },{ |
4738 | .vendor = PCI_VENDOR_ID_PHILIPS, | 4775 | .vendor = PCI_VENDOR_ID_PHILIPS, |
4776 | .device = PCI_DEVICE_ID_PHILIPS_SAA7134, | ||
4777 | .subvendor = 0x16be, /* CTX946 analog TV, HW mpeg, DVB-T */ | ||
4778 | .subdevice = 0x5000, /* only analog TV and DVB-T for now */ | ||
4779 | .driver_data = SAA7134_BOARD_MD7134, | ||
4780 | }, { | ||
4781 | .vendor = PCI_VENDOR_ID_PHILIPS, | ||
4739 | .device = PCI_DEVICE_ID_PHILIPS_SAA7130, | 4782 | .device = PCI_DEVICE_ID_PHILIPS_SAA7130, |
4740 | .subvendor = 0x1048, | 4783 | .subvendor = 0x1048, |
4741 | .subdevice = 0x226b, | 4784 | .subdevice = 0x226b, |
@@ -5653,6 +5696,12 @@ struct pci_device_id saa7134_pci_tbl[] = { | |||
5653 | .subdevice = 0x4878, /* REV:1.02G */ | 5696 | .subdevice = 0x4878, /* REV:1.02G */ |
5654 | .driver_data = SAA7134_BOARD_ASUSTeK_TIGER_3IN1, | 5697 | .driver_data = SAA7134_BOARD_ASUSTeK_TIGER_3IN1, |
5655 | }, { | 5698 | }, { |
5699 | .vendor = PCI_VENDOR_ID_PHILIPS, | ||
5700 | .device = PCI_DEVICE_ID_PHILIPS_SAA7134, | ||
5701 | .subvendor = 0x17de, | ||
5702 | .subdevice = 0x7128, | ||
5703 | .driver_data = SAA7134_BOARD_KWORLD_PLUS_TV_ANALOG, | ||
5704 | }, { | ||
5656 | /* --- boards without eeprom + subsystem ID --- */ | 5705 | /* --- boards without eeprom + subsystem ID --- */ |
5657 | .vendor = PCI_VENDOR_ID_PHILIPS, | 5706 | .vendor = PCI_VENDOR_ID_PHILIPS, |
5658 | .device = PCI_DEVICE_ID_PHILIPS_SAA7134, | 5707 | .device = PCI_DEVICE_ID_PHILIPS_SAA7134, |
@@ -5880,6 +5929,7 @@ int saa7134_board_init1(struct saa7134_dev *dev) | |||
5880 | case SAA7134_BOARD_BEHOLD_507_9FM: | 5929 | case SAA7134_BOARD_BEHOLD_507_9FM: |
5881 | case SAA7134_BOARD_GENIUS_TVGO_A11MCE: | 5930 | case SAA7134_BOARD_GENIUS_TVGO_A11MCE: |
5882 | case SAA7134_BOARD_REAL_ANGEL_220: | 5931 | case SAA7134_BOARD_REAL_ANGEL_220: |
5932 | case SAA7134_BOARD_KWORLD_PLUS_TV_ANALOG: | ||
5883 | dev->has_remote = SAA7134_REMOTE_GPIO; | 5933 | dev->has_remote = SAA7134_REMOTE_GPIO; |
5884 | break; | 5934 | break; |
5885 | case SAA7134_BOARD_FLYDVBS_LR300: | 5935 | case SAA7134_BOARD_FLYDVBS_LR300: |
@@ -6048,7 +6098,7 @@ static void saa7134_tuner_setup(struct saa7134_dev *dev) | |||
6048 | struct v4l2_priv_tun_config xc2028_cfg; | 6098 | struct v4l2_priv_tun_config xc2028_cfg; |
6049 | struct xc2028_ctrl ctl; | 6099 | struct xc2028_ctrl ctl; |
6050 | 6100 | ||
6051 | memset(&xc2028_cfg, 0, sizeof(ctl)); | 6101 | memset(&xc2028_cfg, 0, sizeof(xc2028_cfg)); |
6052 | memset(&ctl, 0, sizeof(ctl)); | 6102 | memset(&ctl, 0, sizeof(ctl)); |
6053 | 6103 | ||
6054 | ctl.fname = XC2028_DEFAULT_FIRMWARE; | 6104 | ctl.fname = XC2028_DEFAULT_FIRMWARE; |
diff --git a/drivers/media/video/saa7134/saa7134-dvb.c b/drivers/media/video/saa7134/saa7134-dvb.c index 8c46115d4c79..d9a5652595b5 100644 --- a/drivers/media/video/saa7134/saa7134-dvb.c +++ b/drivers/media/video/saa7134/saa7134-dvb.c | |||
@@ -954,20 +954,14 @@ static int dvb_init(struct saa7134_dev *dev) | |||
954 | /* FIXME: add support for multi-frontend */ | 954 | /* FIXME: add support for multi-frontend */ |
955 | mutex_init(&dev->frontends.lock); | 955 | mutex_init(&dev->frontends.lock); |
956 | INIT_LIST_HEAD(&dev->frontends.felist); | 956 | INIT_LIST_HEAD(&dev->frontends.felist); |
957 | dev->frontends.active_fe_id = 0; | ||
958 | 957 | ||
959 | printk(KERN_INFO "%s() allocating 1 frontend\n", __func__); | 958 | printk(KERN_INFO "%s() allocating 1 frontend\n", __func__); |
960 | 959 | fe0 = videobuf_dvb_alloc_frontend(&dev->frontends, 1); | |
961 | if (videobuf_dvb_alloc_frontend(&dev->frontends, 1) == NULL) { | 960 | if (!fe0) { |
962 | printk(KERN_ERR "%s() failed to alloc\n", __func__); | 961 | printk(KERN_ERR "%s() failed to alloc\n", __func__); |
963 | return -ENOMEM; | 962 | return -ENOMEM; |
964 | } | 963 | } |
965 | 964 | ||
966 | /* Get the first frontend */ | ||
967 | fe0 = videobuf_dvb_get_frontend(&dev->frontends, 1); | ||
968 | if (!fe0) | ||
969 | return -EINVAL; | ||
970 | |||
971 | /* init struct videobuf_dvb */ | 965 | /* init struct videobuf_dvb */ |
972 | dev->ts.nr_bufs = 32; | 966 | dev->ts.nr_bufs = 32; |
973 | dev->ts.nr_packets = 32*4; | 967 | dev->ts.nr_packets = 32*4; |
@@ -1376,7 +1370,7 @@ static int dvb_init(struct saa7134_dev *dev) | |||
1376 | }; | 1370 | }; |
1377 | 1371 | ||
1378 | if (!fe0->dvb.frontend) | 1372 | if (!fe0->dvb.frontend) |
1379 | return -1; | 1373 | goto dettach_frontend; |
1380 | 1374 | ||
1381 | fe = dvb_attach(xc2028_attach, fe0->dvb.frontend, &cfg); | 1375 | fe = dvb_attach(xc2028_attach, fe0->dvb.frontend, &cfg); |
1382 | if (!fe) { | 1376 | if (!fe) { |
@@ -1388,7 +1382,7 @@ static int dvb_init(struct saa7134_dev *dev) | |||
1388 | 1382 | ||
1389 | if (NULL == fe0->dvb.frontend) { | 1383 | if (NULL == fe0->dvb.frontend) { |
1390 | printk(KERN_ERR "%s/dvb: frontend initialization failed\n", dev->name); | 1384 | printk(KERN_ERR "%s/dvb: frontend initialization failed\n", dev->name); |
1391 | return -1; | 1385 | goto dettach_frontend; |
1392 | } | 1386 | } |
1393 | /* define general-purpose callback pointer */ | 1387 | /* define general-purpose callback pointer */ |
1394 | fe0->dvb.frontend->callback = saa7134_tuner_callback; | 1388 | fe0->dvb.frontend->callback = saa7134_tuner_callback; |
@@ -1411,11 +1405,8 @@ static int dvb_init(struct saa7134_dev *dev) | |||
1411 | return ret; | 1405 | return ret; |
1412 | 1406 | ||
1413 | dettach_frontend: | 1407 | dettach_frontend: |
1414 | if (fe0->dvb.frontend) | 1408 | videobuf_dvb_dealloc_frontends(&dev->frontends); |
1415 | dvb_frontend_detach(fe0->dvb.frontend); | 1409 | return -EINVAL; |
1416 | fe0->dvb.frontend = NULL; | ||
1417 | |||
1418 | return -1; | ||
1419 | } | 1410 | } |
1420 | 1411 | ||
1421 | static int dvb_fini(struct saa7134_dev *dev) | 1412 | static int dvb_fini(struct saa7134_dev *dev) |
@@ -1454,8 +1445,7 @@ static int dvb_fini(struct saa7134_dev *dev) | |||
1454 | } | 1445 | } |
1455 | } | 1446 | } |
1456 | } | 1447 | } |
1457 | if (fe0->dvb.frontend) | 1448 | videobuf_dvb_unregister_bus(&dev->frontends); |
1458 | videobuf_dvb_unregister_bus(&dev->frontends); | ||
1459 | return 0; | 1449 | return 0; |
1460 | } | 1450 | } |
1461 | 1451 | ||
diff --git a/drivers/media/video/saa7134/saa7134-input.c b/drivers/media/video/saa7134/saa7134-input.c index c53fd5f9f6b5..d2124f64e4e2 100644 --- a/drivers/media/video/saa7134/saa7134-input.c +++ b/drivers/media/video/saa7134/saa7134-input.c | |||
@@ -97,6 +97,15 @@ static int build_key(struct saa7134_dev *dev) | |||
97 | dprintk("build_key gpio=0x%x mask=0x%x data=%d\n", | 97 | dprintk("build_key gpio=0x%x mask=0x%x data=%d\n", |
98 | gpio, ir->mask_keycode, data); | 98 | gpio, ir->mask_keycode, data); |
99 | 99 | ||
100 | switch (dev->board) { | ||
101 | case SAA7134_BOARD_KWORLD_PLUS_TV_ANALOG: | ||
102 | if (data == ir->mask_keycode) | ||
103 | ir_input_nokey(ir->dev, &ir->ir); | ||
104 | else | ||
105 | ir_input_keydown(ir->dev, &ir->ir, data, data); | ||
106 | return 0; | ||
107 | } | ||
108 | |||
100 | if (ir->polling) { | 109 | if (ir->polling) { |
101 | if ((ir->mask_keydown && (0 != (gpio & ir->mask_keydown))) || | 110 | if ((ir->mask_keydown && (0 != (gpio & ir->mask_keydown))) || |
102 | (ir->mask_keyup && (0 == (gpio & ir->mask_keyup)))) { | 111 | (ir->mask_keyup && (0 == (gpio & ir->mask_keyup)))) { |
@@ -586,6 +595,11 @@ int saa7134_input_init1(struct saa7134_dev *dev) | |||
586 | mask_keyup = 0x4000; | 595 | mask_keyup = 0x4000; |
587 | polling = 50; /* ms */ | 596 | polling = 50; /* ms */ |
588 | break; | 597 | break; |
598 | case SAA7134_BOARD_KWORLD_PLUS_TV_ANALOG: | ||
599 | ir_codes = ir_codes_kworld_plus_tv_analog; | ||
600 | mask_keycode = 0x7f; | ||
601 | polling = 40; /* ms */ | ||
602 | break; | ||
589 | } | 603 | } |
590 | if (NULL == ir_codes) { | 604 | if (NULL == ir_codes) { |
591 | printk("%s: Oops: IR config error [card=%d]\n", | 605 | printk("%s: Oops: IR config error [card=%d]\n", |
diff --git a/drivers/media/video/saa7134/saa7134-tvaudio.c b/drivers/media/video/saa7134/saa7134-tvaudio.c index c5d0b44c179e..76b16407b01e 100644 --- a/drivers/media/video/saa7134/saa7134-tvaudio.c +++ b/drivers/media/video/saa7134/saa7134-tvaudio.c | |||
@@ -159,7 +159,7 @@ static struct saa7134_tvaudio tvaudio[] = { | |||
159 | .mode = TVAUDIO_FM_MONO, | 159 | .mode = TVAUDIO_FM_MONO, |
160 | } | 160 | } |
161 | }; | 161 | }; |
162 | #define TVAUDIO (sizeof(tvaudio)/sizeof(struct saa7134_tvaudio)) | 162 | #define TVAUDIO ARRAY_SIZE(tvaudio) |
163 | 163 | ||
164 | /* ------------------------------------------------------------------ */ | 164 | /* ------------------------------------------------------------------ */ |
165 | 165 | ||
diff --git a/drivers/media/video/saa7134/saa7134.h b/drivers/media/video/saa7134/saa7134.h index 24096d6e1ef8..f6c1fcc72070 100644 --- a/drivers/media/video/saa7134/saa7134.h +++ b/drivers/media/video/saa7134/saa7134.h | |||
@@ -275,8 +275,9 @@ struct saa7134_format { | |||
275 | #define SAA7134_BOARD_REAL_ANGEL_220 150 | 275 | #define SAA7134_BOARD_REAL_ANGEL_220 150 |
276 | #define SAA7134_BOARD_ADS_INSTANT_HDTV_PCI 151 | 276 | #define SAA7134_BOARD_ADS_INSTANT_HDTV_PCI 151 |
277 | #define SAA7134_BOARD_ASUSTeK_TIGER 152 | 277 | #define SAA7134_BOARD_ASUSTeK_TIGER 152 |
278 | #define SAA7134_BOARD_KWORLD_PLUS_TV_ANALOG 153 | ||
278 | 279 | ||
279 | #define SAA7134_MAXBOARDS 8 | 280 | #define SAA7134_MAXBOARDS 32 |
280 | #define SAA7134_INPUT_MAX 8 | 281 | #define SAA7134_INPUT_MAX 8 |
281 | 282 | ||
282 | /* ----------------------------------------------------------- */ | 283 | /* ----------------------------------------------------------- */ |