mirror of https://gitee.com/openkylin/linux.git
V4L/DVB (10394): KWorld ATSC 115 all static
saa7134: Fix tuner access on Kworld ATSC110 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
9a909447d3
commit
aaf50d7d0e
|
@ -5896,6 +5896,32 @@ static void hauppauge_eeprom(struct saa7134_dev *dev, u8 *eeprom_data)
|
||||||
|
|
||||||
/* ----------------------------------------------------------- */
|
/* ----------------------------------------------------------- */
|
||||||
|
|
||||||
|
static void nxt200x_gate_ctrl(struct saa7134_dev *dev, int open)
|
||||||
|
{
|
||||||
|
/* enable tuner */
|
||||||
|
int i;
|
||||||
|
static const u8 buffer [][2] = {
|
||||||
|
{ 0x10, 0x12 },
|
||||||
|
{ 0x13, 0x04 },
|
||||||
|
{ 0x16, 0x00 },
|
||||||
|
{ 0x14, 0x04 },
|
||||||
|
{ 0x17, 0x00 },
|
||||||
|
};
|
||||||
|
|
||||||
|
dev->i2c_client.addr = 0x0a;
|
||||||
|
|
||||||
|
/* FIXME: don't know how to close the i2c gate on NXT200x */
|
||||||
|
if (!open)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(buffer); i++)
|
||||||
|
if (2 != i2c_master_send(&dev->i2c_client,
|
||||||
|
&buffer[i][0], ARRAY_SIZE(buffer[0])))
|
||||||
|
printk(KERN_WARNING
|
||||||
|
"%s: Unable to enable tuner(%i).\n",
|
||||||
|
dev->name, i);
|
||||||
|
}
|
||||||
|
|
||||||
int saa7134_board_init1(struct saa7134_dev *dev)
|
int saa7134_board_init1(struct saa7134_dev *dev)
|
||||||
{
|
{
|
||||||
/* Always print gpio, often manufacturers encode tuner type and other info. */
|
/* Always print gpio, often manufacturers encode tuner type and other info. */
|
||||||
|
@ -6089,6 +6115,10 @@ int saa7134_board_init1(struct saa7134_dev *dev)
|
||||||
"are supported for now.\n",
|
"are supported for now.\n",
|
||||||
dev->name, card(dev).name, dev->name);
|
dev->name, card(dev).name, dev->name);
|
||||||
break;
|
break;
|
||||||
|
case SAA7134_BOARD_ADS_INSTANT_HDTV_PCI:
|
||||||
|
case SAA7134_BOARD_KWORLD_ATSC110:
|
||||||
|
dev->gate_ctrl = nxt200x_gate_ctrl;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -6350,22 +6380,6 @@ int saa7134_board_init2(struct saa7134_dev *dev)
|
||||||
i2c_transfer(&dev->i2c_adap, &msg, 1);
|
i2c_transfer(&dev->i2c_adap, &msg, 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAA7134_BOARD_ADS_INSTANT_HDTV_PCI:
|
|
||||||
case SAA7134_BOARD_KWORLD_ATSC110:
|
|
||||||
{
|
|
||||||
/* enable tuner */
|
|
||||||
int i;
|
|
||||||
static const u8 buffer [] = { 0x10, 0x12, 0x13, 0x04, 0x16,
|
|
||||||
0x00, 0x14, 0x04, 0x17, 0x00 };
|
|
||||||
dev->i2c_client.addr = 0x0a;
|
|
||||||
for (i = 0; i < 5; i++)
|
|
||||||
if (2 != i2c_master_send(&dev->i2c_client,
|
|
||||||
&buffer[i*2], 2))
|
|
||||||
printk(KERN_WARNING
|
|
||||||
"%s: Unable to enable tuner(%i).\n",
|
|
||||||
dev->name, i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case SAA7134_BOARD_VIDEOMATE_DVBT_200:
|
case SAA7134_BOARD_VIDEOMATE_DVBT_200:
|
||||||
case SAA7134_BOARD_VIDEOMATE_DVBT_200A:
|
case SAA7134_BOARD_VIDEOMATE_DVBT_200A:
|
||||||
/* The T200 and the T200A share the same pci id. Consequently,
|
/* The T200 and the T200A share the same pci id. Consequently,
|
||||||
|
|
|
@ -589,6 +589,7 @@ struct saa7134_dev {
|
||||||
int (*original_set_voltage)(struct dvb_frontend *fe, fe_sec_voltage_t voltage);
|
int (*original_set_voltage)(struct dvb_frontend *fe, fe_sec_voltage_t voltage);
|
||||||
int (*original_set_high_voltage)(struct dvb_frontend *fe, long arg);
|
int (*original_set_high_voltage)(struct dvb_frontend *fe, long arg);
|
||||||
#endif
|
#endif
|
||||||
|
void (*gate_ctrl)(struct saa7134_dev *dev, int open);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ----------------------------------------------------------- */
|
/* ----------------------------------------------------------- */
|
||||||
|
@ -618,10 +619,24 @@ struct saa7134_dev {
|
||||||
V4L2_STD_PAL_60)
|
V4L2_STD_PAL_60)
|
||||||
|
|
||||||
#define GRP_EMPRESS (1)
|
#define GRP_EMPRESS (1)
|
||||||
#define saa_call_all(dev, o, f, args...) \
|
#define saa_call_all(dev, o, f, args...) do { \
|
||||||
v4l2_device_call_all(&(dev)->v4l2_dev, 0, o, f , ##args)
|
if (dev->gate_ctrl) \
|
||||||
#define saa_call_empress(dev, o, f, args...) \
|
dev->gate_ctrl(dev, 1); \
|
||||||
v4l2_device_call_until_err(&(dev)->v4l2_dev, GRP_EMPRESS, o, f , ##args)
|
v4l2_device_call_all(&(dev)->v4l2_dev, 0, o, f , ##args); \
|
||||||
|
if (dev->gate_ctrl) \
|
||||||
|
dev->gate_ctrl(dev, 0); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define saa_call_empress(dev, o, f, args...) ({ \
|
||||||
|
long _rc; \
|
||||||
|
if (dev->gate_ctrl) \
|
||||||
|
dev->gate_ctrl(dev, 1); \
|
||||||
|
_rc = v4l2_device_call_until_err(&(dev)->v4l2_dev, \
|
||||||
|
GRP_EMPRESS, o, f , ##args); \
|
||||||
|
if (dev->gate_ctrl) \
|
||||||
|
dev->gate_ctrl(dev, 0); \
|
||||||
|
_rc; \
|
||||||
|
})
|
||||||
|
|
||||||
/* ----------------------------------------------------------- */
|
/* ----------------------------------------------------------- */
|
||||||
/* saa7134-core.c */
|
/* saa7134-core.c */
|
||||||
|
|
Loading…
Reference in New Issue