aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/saa7134
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/saa7134')
-rw-r--r--drivers/media/video/saa7134/saa7134-cards.c52
-rw-r--r--drivers/media/video/saa7134/saa7134-dvb.c24
-rw-r--r--drivers/media/video/saa7134/saa7134-input.c14
-rw-r--r--drivers/media/video/saa7134/saa7134-tvaudio.c2
-rw-r--r--drivers/media/video/saa7134/saa7134.h3
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
4611const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards); 4648const 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
1413dettach_frontend: 1407dettach_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
1421static int dvb_fini(struct saa7134_dev *dev) 1412static 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/* ----------------------------------------------------------- */