aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/video/saa7134/saa7134-cards.c46
-rw-r--r--drivers/media/video/saa7134/saa7134.h23
2 files changed, 49 insertions, 20 deletions
diff --git a/drivers/media/video/saa7134/saa7134-cards.c b/drivers/media/video/saa7134/saa7134-cards.c
index 0d50d7448fc..42684d16204 100644
--- a/drivers/media/video/saa7134/saa7134-cards.c
+++ b/drivers/media/video/saa7134/saa7134-cards.c
@@ -5896,6 +5896,32 @@ static void hauppauge_eeprom(struct saa7134_dev *dev, u8 *eeprom_data)
5896 5896
5897/* ----------------------------------------------------------- */ 5897/* ----------------------------------------------------------- */
5898 5898
5899static void nxt200x_gate_ctrl(struct saa7134_dev *dev, int open)
5900{
5901 /* enable tuner */
5902 int i;
5903 static const u8 buffer [][2] = {
5904 { 0x10, 0x12 },
5905 { 0x13, 0x04 },
5906 { 0x16, 0x00 },
5907 { 0x14, 0x04 },
5908 { 0x17, 0x00 },
5909 };
5910
5911 dev->i2c_client.addr = 0x0a;
5912
5913 /* FIXME: don't know how to close the i2c gate on NXT200x */
5914 if (!open)
5915 return;
5916
5917 for (i = 0; i < ARRAY_SIZE(buffer); i++)
5918 if (2 != i2c_master_send(&dev->i2c_client,
5919 &buffer[i][0], ARRAY_SIZE(buffer[0])))
5920 printk(KERN_WARNING
5921 "%s: Unable to enable tuner(%i).\n",
5922 dev->name, i);
5923}
5924
5899int saa7134_board_init1(struct saa7134_dev *dev) 5925int saa7134_board_init1(struct saa7134_dev *dev)
5900{ 5926{
5901 /* Always print gpio, often manufacturers encode tuner type and other info. */ 5927 /* Always print gpio, often manufacturers encode tuner type and other info. */
@@ -6089,6 +6115,10 @@ int saa7134_board_init1(struct saa7134_dev *dev)
6089 "are supported for now.\n", 6115 "are supported for now.\n",
6090 dev->name, card(dev).name, dev->name); 6116 dev->name, card(dev).name, dev->name);
6091 break; 6117 break;
6118 case SAA7134_BOARD_ADS_INSTANT_HDTV_PCI:
6119 case SAA7134_BOARD_KWORLD_ATSC110:
6120 dev->gate_ctrl = nxt200x_gate_ctrl;
6121 break;
6092 } 6122 }
6093 return 0; 6123 return 0;
6094} 6124}
@@ -6350,22 +6380,6 @@ int saa7134_board_init2(struct saa7134_dev *dev)
6350 i2c_transfer(&dev->i2c_adap, &msg, 1); 6380 i2c_transfer(&dev->i2c_adap, &msg, 1);
6351 break; 6381 break;
6352 } 6382 }
6353 case SAA7134_BOARD_ADS_INSTANT_HDTV_PCI:
6354 case SAA7134_BOARD_KWORLD_ATSC110:
6355 {
6356 /* enable tuner */
6357 int i;
6358 static const u8 buffer [] = { 0x10, 0x12, 0x13, 0x04, 0x16,
6359 0x00, 0x14, 0x04, 0x17, 0x00 };
6360 dev->i2c_client.addr = 0x0a;
6361 for (i = 0; i < 5; i++)
6362 if (2 != i2c_master_send(&dev->i2c_client,
6363 &buffer[i*2], 2))
6364 printk(KERN_WARNING
6365 "%s: Unable to enable tuner(%i).\n",
6366 dev->name, i);
6367 break;
6368 }
6369 case SAA7134_BOARD_VIDEOMATE_DVBT_200: 6383 case SAA7134_BOARD_VIDEOMATE_DVBT_200:
6370 case SAA7134_BOARD_VIDEOMATE_DVBT_200A: 6384 case SAA7134_BOARD_VIDEOMATE_DVBT_200A:
6371 /* The T200 and the T200A share the same pci id. Consequently, 6385 /* The T200 and the T200A share the same pci id. Consequently,
diff --git a/drivers/media/video/saa7134/saa7134.h b/drivers/media/video/saa7134/saa7134.h
index bb6952118d0..6fbf5088c97 100644
--- a/drivers/media/video/saa7134/saa7134.h
+++ b/drivers/media/video/saa7134/saa7134.h
@@ -589,6 +589,7 @@ struct saa7134_dev {
589 int (*original_set_voltage)(struct dvb_frontend *fe, fe_sec_voltage_t voltage); 589 int (*original_set_voltage)(struct dvb_frontend *fe, fe_sec_voltage_t voltage);
590 int (*original_set_high_voltage)(struct dvb_frontend *fe, long arg); 590 int (*original_set_high_voltage)(struct dvb_frontend *fe, long arg);
591#endif 591#endif
592 void (*gate_ctrl)(struct saa7134_dev *dev, int open);
592}; 593};
593 594
594/* ----------------------------------------------------------- */ 595/* ----------------------------------------------------------- */
@@ -618,10 +619,24 @@ struct saa7134_dev {
618 V4L2_STD_PAL_60) 619 V4L2_STD_PAL_60)
619 620
620#define GRP_EMPRESS (1) 621#define GRP_EMPRESS (1)
621#define saa_call_all(dev, o, f, args...) \ 622#define saa_call_all(dev, o, f, args...) do { \
622 v4l2_device_call_all(&(dev)->v4l2_dev, 0, o, f , ##args) 623 if (dev->gate_ctrl) \
623#define saa_call_empress(dev, o, f, args...) \ 624 dev->gate_ctrl(dev, 1); \
624 v4l2_device_call_until_err(&(dev)->v4l2_dev, GRP_EMPRESS, o, f , ##args) 625 v4l2_device_call_all(&(dev)->v4l2_dev, 0, o, f , ##args); \
626 if (dev->gate_ctrl) \
627 dev->gate_ctrl(dev, 0); \
628} while (0)
629
630#define saa_call_empress(dev, o, f, args...) ({ \
631 long _rc; \
632 if (dev->gate_ctrl) \
633 dev->gate_ctrl(dev, 1); \
634 _rc = v4l2_device_call_until_err(&(dev)->v4l2_dev, \
635 GRP_EMPRESS, o, f , ##args); \
636 if (dev->gate_ctrl) \
637 dev->gate_ctrl(dev, 0); \
638 _rc; \
639})
625 640
626/* ----------------------------------------------------------- */ 641/* ----------------------------------------------------------- */
627/* saa7134-core.c */ 642/* saa7134-core.c */