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

Commit 330a115a authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab Committed by Linus Torvalds
Browse files

[PATCH] v4l: SAA7134 Update



- Corrected all cards marked as 7135 cards to 7133.
- Add new card support for Compro VideoMate TV Gold+II.
- Add new card support for Kworld Xpert TV PVR7134
- Add new card support for Typhoon DVB-T Cardbus.
- Changes to comply with CodingStyle: // comments converted to /* */
- Remove irq2_mask field from saa7134_dev structure.
- Collect all the bits needed in saa7134_hwinit2() instead.
- Distinguish the different variants of the Medion MD7134 modules via eeprom
- moved Philips FMD1216 radio specific setup to saa7134-core.c
- Fix kernel compile error with CONFIG_MODULES=n
- Cleanup tuner private calls.
- Some Indent fixes.

Signed-off-by: default avatarMichael Tokarev <mjt@tls.msk.ru>
Signed-off-by: default avatarMichael Krufky <mkrufky@m1k.net>
Signed-off-by: default avatarHannibal <hannibal@megapolis.pl>
Signed-off-by: default avatarElshin Roman <roxmail@list.ru>
Signed-off-by: default avatarHermann Pitton <hermann.pitton@onlinehome.de>
Signed-off-by: default avatarJuergen Orschiedt <jorschiedt@web.de>
Signed-off-by: default avatarHartmut Hackmann <hartmut.hackmann@t-online.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 85369df3
Loading
Loading
Loading
Loading
+1298 −876

File changed.

Preview size limit exceeded, changes collapsed.

+17 −57
Original line number Diff line number Diff line
/*
 * $Id: saa7134-core.c,v 1.30 2005/05/22 19:23:39 nsh Exp $
 * $Id: saa7134-core.c,v 1.39 2005/07/05 17:37:35 nsh Exp $
 *
 * device driver for philips saa7134 based TV cards
 * driver core
@@ -183,46 +183,6 @@ void saa7134_track_gpio(struct saa7134_dev *dev, char *msg)

/* ------------------------------------------------------------------ */

#if 0
static char *dec1_bits[8] = {
	"DCSTD0", "DCSCT1", "WIPA", "GLIMB",
	"GLIMT", "SLTCA", "HLCK"
};
static char *dec2_bits[8] = {
	"RDCAP", "COPRO", "COLSTR", "TYPE3",
	NULL, "FIDT", "HLVLN", "INTL"
};
static char *scale1_bits[8] = {
	"VID_A", "VBI_A", NULL, NULL, "VID_B", "VBI_B"
};
static char *scale2_bits[8] = {
	"TRERR", "CFERR", "LDERR", "WASRST",
	"FIDSCI", "FIDSCO", "D6^D5", "TASK"
};

static void dump_statusreg(struct saa7134_dev *dev, int reg,
			   char *regname, char **bits)
{
	int value,i;

	value = saa_readb(reg);
	printk(KERN_DEBUG "%s: %s:", dev->name, regname);
	for (i = 7; i >= 0; i--) {
		if (NULL == bits[i])
			continue;
		printk(" %s=%d", bits[i], (value & (1 << i)) ? 1 : 0);
	}
	printk("\n");
}

static void dump_statusregs(struct saa7134_dev *dev)
{
	dump_statusreg(dev,SAA7134_STATUS_VIDEO1,"dec1",dec1_bits);
	dump_statusreg(dev,SAA7134_STATUS_VIDEO2,"dec2",dec2_bits);
	dump_statusreg(dev,SAA7134_SCALER_STATUS0,"scale0",scale1_bits);
	dump_statusreg(dev,SAA7134_SCALER_STATUS1,"scale1",scale2_bits);
}
#endif

/* ----------------------------------------------------------- */
/* delayed request_module                                      */
@@ -616,10 +576,6 @@ static irqreturn_t saa7134_irq(int irq, void *dev_id, struct pt_regs *regs)
		if (irq_debug)
			print_irqstatus(dev,loop,report,status);

#if 0
		if (report & SAA7134_IRQ_REPORT_CONF_ERR)
			dump_statusregs(dev);
#endif

		if (report & SAA7134_IRQ_REPORT_RDCAP /* _INTL */)
			saa7134_irq_video_intl(dev);
@@ -711,7 +667,6 @@ static int saa7134_hwinit1(struct saa7134_dev *dev)
		   SAA7134_MAIN_CTRL_EVFE1 |
		   SAA7134_MAIN_CTRL_EVFE2 |
		   SAA7134_MAIN_CTRL_ESFE  |
		   SAA7134_MAIN_CTRL_EBADC |
		   SAA7134_MAIN_CTRL_EBDAC);

	/* enable peripheral devices */
@@ -726,14 +681,28 @@ static int saa7134_hwinit1(struct saa7134_dev *dev)
/* late init (with i2c + irq) */
static int saa7134_hwinit2(struct saa7134_dev *dev)
{
	unsigned int irq2_mask;
	dprintk("hwinit2\n");

	saa7134_video_init2(dev);
	saa7134_tvaudio_init2(dev);

	/* enable IRQ's */
   	irq2_mask =
		SAA7134_IRQ2_INTE_DEC3    |
		SAA7134_IRQ2_INTE_DEC2    |
		SAA7134_IRQ2_INTE_DEC1    |
		SAA7134_IRQ2_INTE_DEC0    |
		SAA7134_IRQ2_INTE_PE      |
		SAA7134_IRQ2_INTE_AR;

	if (dev->has_remote)
		irq2_mask |= (SAA7134_IRQ2_INTE_GPIO18  |
			      SAA7134_IRQ2_INTE_GPIO18A |
			      SAA7134_IRQ2_INTE_GPIO16  );

	saa_writel(SAA7134_IRQ1, 0);
	saa_writel(SAA7134_IRQ2, dev->irq2_mask);
	saa_writel(SAA7134_IRQ2, irq2_mask);

	return 0;
}
@@ -954,13 +923,6 @@ static int __devinit saa7134_initdev(struct pci_dev *pci_dev,
	}

	/* initialize hardware #1 */
   	dev->irq2_mask =
		SAA7134_IRQ2_INTE_DEC3    |
		SAA7134_IRQ2_INTE_DEC2    |
		SAA7134_IRQ2_INTE_DEC1    |
		SAA7134_IRQ2_INTE_DEC0    |
		SAA7134_IRQ2_INTE_PE      |
		SAA7134_IRQ2_INTE_AR;
	saa7134_board_init1(dev);
	saa7134_hwinit1(dev);

@@ -990,6 +952,7 @@ static int __devinit saa7134_initdev(struct pci_dev *pci_dev,
		request_module("saa6752hs");
		request_module_depend("saa7134-empress",&need_empress);
	}

  	if (card_is_dvb(dev))
		request_module_depend("saa7134-dvb",&need_dvb);

@@ -1144,9 +1107,6 @@ static void __devexit saa7134_finidev(struct pci_dev *pci_dev)
	release_mem_region(pci_resource_start(pci_dev,0),
			   pci_resource_len(pci_dev,0));

#if 0  /* causes some trouble when reinserting the driver ... */
	pci_disable_device(pci_dev);
#endif
	pci_set_drvdata(pci_dev, NULL);

	/* free memory */
+36 −9
Original line number Diff line number Diff line
/*
 * $Id: saa7134-i2c.c,v 1.11 2005/06/12 01:36:14 mchehab Exp $
 * $Id: saa7134-i2c.c,v 1.19 2005/07/07 01:49:30 mkrufky Exp $
 *
 * device driver for philips saa7134 based TV cards
 * i2c interface support
@@ -197,10 +197,6 @@ static inline int i2c_send_byte(struct saa7134_dev *dev,
	enum i2c_status status;
	__u32 dword;

#if 0
	i2c_set_attr(dev,attr);
	saa_writeb(SAA7134_I2C_DATA, data);
#else
	/* have to write both attr + data in one 32bit word */
	dword  = saa_readl(SAA7134_I2C_ATTR_STATUS >> 2);
	dword &= 0x0f;
@@ -210,7 +206,6 @@ static inline int i2c_send_byte(struct saa7134_dev *dev,
//	dword |= 0x40 << 16;  /* 400 kHz */
	dword |= 0xf0 << 24;
	saa_writel(SAA7134_I2C_ATTR_STATUS >> 2, dword);
#endif
	d2printk(KERN_DEBUG "%s: i2c data => 0x%x\n",dev->name,data);

	if (!i2c_is_busy_wait(dev))
@@ -334,9 +329,41 @@ static int attach_inform(struct i2c_client *client)
	struct saa7134_dev *dev = client->adapter->algo_data;
	int tuner = dev->tuner_type;
	int conf  = dev->tda9887_conf;
	struct tuner_setup tun_setup;

	d1printk( "%s i2c attach [addr=0x%x,client=%s]\n",
		client->driver->name,client->addr,i2c_clientname(client));

	if (!client->driver->command)
		return 0;

	if (saa7134_boards[dev->board].radio_type != UNSET) {

		tun_setup.type = saa7134_boards[dev->board].radio_type;
		tun_setup.addr = saa7134_boards[dev->board].radio_addr;

		if ((tun_setup.addr == ADDR_UNSET) || (tun_setup.addr == client->addr)) {
			tun_setup.mode_mask = T_RADIO;

			client->driver->command(client, TUNER_SET_TYPE_ADDR, &tun_setup);
		}
        }

	if (tuner != UNSET) {

	        tun_setup.type = tuner;
	        tun_setup.addr = saa7134_boards[dev->board].tuner_addr;

		if ((tun_setup.addr == ADDR_UNSET)||(tun_setup.addr == client->addr)) {

			tun_setup.mode_mask = T_ANALOG_TV;

			client->driver->command(client,TUNER_SET_TYPE_ADDR, &tun_setup);
		}
        }

	client->driver->command(client, TDA9887_SET_CONFIG, &conf);

	saa7134_i2c_call_clients(dev,TUNER_SET_TYPE,&tuner);
	saa7134_i2c_call_clients(dev,TDA9887_SET_CONFIG,&conf);
        return 0;
}

+24 −24
Original line number Diff line number Diff line
/*
 * $Id: saa7134-input.c,v 1.19 2005/06/07 18:02:26 nsh Exp $
 * $Id: saa7134-input.c,v 1.21 2005/06/22 23:37:34 nsh Exp $
 *
 * handle saa7134 IR remotes via linux kernel input layer.
 *
@@ -68,10 +68,8 @@ static IR_KEYTAB_TYPE flyvideo_codes[IR_KEYTAB_SIZE] = {
	[    6 ] = KEY_AGAIN,        // Recal
	[   16 ] = KEY_KPENTER,      // Enter

#if 1 /* FIXME */
	[   26 ] = KEY_F22,          // Stereo
	[   24 ] = KEY_EDIT,         // AV Source
#endif
};

static IR_KEYTAB_TYPE cinergy_codes[IR_KEYTAB_SIZE] = {
@@ -206,11 +204,11 @@ static IR_KEYTAB_TYPE avacssmart_codes[IR_KEYTAB_SIZE] = {
	[ 14 ] = KEY_MENU,		// function
	[ 19 ] = KEY_AGAIN,		// recall
	[ 29 ] = KEY_RESTART,		// reset
	[ 26 ] = KEY_SHUFFLE,		// snapshot/shuffle

// FIXME
	[ 13 ] = KEY_F21,		// mts
	[ 15 ] = KEY_F22,		// min
	[ 26 ] = KEY_F23,		// freeze
};

/* Alex Hermann <gaaf@gmx.net> */
@@ -494,6 +492,7 @@ int saa7134_input_init1(struct saa7134_dev *dev)
		mask_keyup   = 0x000002;
		polling      = 50; // ms
		break;
	case SAA7134_BOARD_KWORLD_XPERT:
	case SAA7134_BOARD_AVACSSMARTTV:
		ir_codes     = avacssmart_codes;
		mask_keycode = 0x00001F;
@@ -524,6 +523,7 @@ int saa7134_input_init1(struct saa7134_dev *dev)
		polling      = 50; // ms
		break;
	case SAA7134_BOARD_VIDEOMATE_TV_PVR:
	case SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUSII:
		ir_codes     = videomate_tv_pvr_codes;
		mask_keycode = 0x00003F;
		mask_keyup   = 0x400000;
+13 −6
Original line number Diff line number Diff line
/*
 * $Id: saa7134-oss.c,v 1.14 2005/05/18 22:45:16 hhackmann Exp $
 * $Id: saa7134-oss.c,v 1.17 2005/06/28 23:41:47 mkrufky Exp $
 *
 * device driver for philips saa7134 based TV cards
 * oss dsp interface
@@ -556,21 +556,28 @@ mixer_recsrc_7134(struct saa7134_dev *dev)
static int
mixer_recsrc_7133(struct saa7134_dev *dev)
{
	u32 value = 0xbbbbbb;
	u32 anabar, xbarin;

	xbarin = 0x03; // adc
    anabar = 0;
	switch (dev->oss.input) {
	case TV:
		value = 0xbbbb10;  /* MAIN */
		xbarin = 0; // Demodulator
        anabar = 2; // DACs
		break;
	case LINE1:
		value = 0xbbbb32;  /* AUX1 */
		anabar = 0;  // aux1, aux1
		break;
	case LINE2:
	case LINE2_LEFT:
		value = 0xbbbb54;  /* AUX2 */
		anabar = 9;  // aux2, aux2
		break;
	}
	saa_dsp_writel(dev, 0x46c >> 2, value);
    /* output xbar always main channel */
	saa_dsp_writel(dev, 0x46c >> 2, 0xbbbb10);
	saa_dsp_writel(dev, 0x464 >> 2, xbarin);
	saa_writel(0x594 >> 2, anabar);

	return 0;
}

Loading