V4L/DVB (8470): cx23885: Add DViCO HDTV7 Dual Express tuner callback support.

Ensure the correct tuner gets reset on demand.

Signed-off-by: Steven Toth <stoth@hauppauge.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
Steven Toth 2008-06-30 22:17:05 -03:00 коммит произвёл Mauro Carvalho Chehab
Родитель 1ecc5aed1e
Коммит 6df516905b
1 изменённых файлов: 28 добавлений и 12 удалений

Просмотреть файл

@ -326,25 +326,41 @@ int cx23885_tuner_callback(void *priv, int command, int arg)
{
struct cx23885_i2c *bus = priv;
struct cx23885_dev *dev = bus->dev;
u32 bitmask = 0;
if (command != 0) {
printk(KERN_ERR "%s(): Unknown command 0x%x.\n",
__func__, command);
return -EINVAL;
}
switch(dev->board) {
case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
if(command == 0) { /* Tuner Reset Command from xc5000 */
/* Drive the tuner into reset and out */
cx_clear(GP0_IO, 0x00000004);
mdelay(200);
cx_set(GP0_IO, 0x00000004);
return 0;
}
else {
printk(KERN_ERR
"%s(): Unknow command.\n", __func__);
return -EINVAL;
/* Tuner Reset Command from xc5000 */
if (command == 0)
bitmask = 0x04;
break;
case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP:
if (command == 0) {
/* Two identical tuners on two different i2c buses,
* we need to reset the correct gpio. */
if (bus->nr == 0)
bitmask = 0x01;
else if (bus->nr == 1)
bitmask = 0x04;
}
break;
}
return 0; /* Should never be here */
if (bitmask) {
/* Drive the tuner into reset and back out */
cx_clear(GP0_IO, bitmask);
mdelay(200);
cx_set(GP0_IO, bitmask);
}
return 0;
}
void cx23885_gpio_setup(struct cx23885_dev *dev)