Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6df51690 authored by Steven Toth's avatar Steven Toth Committed by Mauro Carvalho Chehab
Browse files

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



Ensure the correct tuner gets reset on demand.

Signed-off-by: default avatarSteven Toth <stoth@hauppauge.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 1ecc5aed
Loading
Loading
Loading
Loading
+28 −12
Original line number Diff line number Diff line
@@ -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)