Skip to contentSkip to conversation

v4l-09 saa7134 driver update

PATCH New Gerd Knorr 1 participant 1 message Jan 15, 2004 Media (V4L/DVB)

lore
Share & tools
lore

Gerd Knorr

author
#0 lore raw

PATCH 1/1 v4l-09 saa7134 driver update

Hi,

This is a saa7134 driver update. Changes:

* add infrared remote support.
* add support for more TV cards.
* misc minor fixes.

This patch depends on the ir-input patch.

Gerd

drivers/media/video/saa7134/Makefile +1 -1
diff -u linux-2.6.1/drivers/media/video/saa7134/Makefile linux/drivers/media/video/saa7134/Makefile
@@ -1,7 +1,7 @@
 
 saa7134-objs :=	saa7134-cards.o saa7134-core.o saa7134-i2c.o	\
 		saa7134-oss.o saa7134-ts.o saa7134-tvaudio.o	\
-		saa7134-vbi.o saa7134-video.o
+		saa7134-vbi.o saa7134-video.o saa7134-input.o
 
 obj-$(CONFIG_VIDEO_SAA7134) += saa7134.o
 
drivers/media/video/saa7134/saa6752hs.c +13 -8
diff -u linux-2.6.1/drivers/media/video/saa7134/saa6752hs.c linux/drivers/media/video/saa7134/saa6752hs.c
@@ -168,13 +168,13 @@
 		}
 	
 		// wait a bit
-		current->state = TASK_INTERRUPTIBLE;
-		schedule_timeout(1);
+		set_current_state(TASK_INTERRUPTIBLE);
+		schedule_timeout(HZ/100);
 	}
 
 	// delay a bit to let encoder settle
-	current->state = TASK_INTERRUPTIBLE;
-	schedule_timeout(5);
+	set_current_state(TASK_INTERRUPTIBLE);
+	schedule_timeout(HZ/20);
 	
 	// done
   	return status;
@@ -230,6 +230,7 @@
 static int saa6752hs_init(struct i2c_client* client, struct mpeg_params* params)
 {  
 	unsigned char buf[3];
+	void *data;
 
 	// check the bitrate parameters first
 	if (params != NULL) {
@@ -281,12 +282,13 @@
 	i2c_master_send(client,buf,3);
   
         // setup bitrate settings
+	data = i2c_get_clientdata(client);
 	if (params) {
 		saa6752hs_set_bitrate(client, params);
-		memcpy(client->data, params, sizeof(struct mpeg_params));
+		memcpy(data, params, sizeof(struct mpeg_params));
 	} else {
 		// parameters were not supplied. use the previous set
-   		saa6752hs_set_bitrate(client, (struct mpeg_params*) client->data);
+   		saa6752hs_set_bitrate(client, (struct mpeg_params*) data);
 	}
 	  
 	// Send SI tables
@@ -324,7 +326,7 @@
 	if (NULL == (params = kmalloc(sizeof(struct mpeg_params), GFP_KERNEL)))
 		return -ENOMEM;
 	memcpy(params,&mpeg_params_template,sizeof(struct mpeg_params));
-	client->data = params;
+	i2c_set_clientdata(client, params);
 
         i2c_attach_client(client);
   
@@ -341,8 +343,11 @@
 
 static int saa6752hs_detach(struct i2c_client *client)
 {
+	void *data;
+
+	data = i2c_get_clientdata(client);
 	i2c_detach_client(client);
-	kfree(client->data);
+	kfree(data);
 	kfree(client);
 	return 0;
 }
drivers/media/video/saa7134/saa7134-cards.c +382 -10

498 lines not on this page · raw message

drivers/media/video/saa7134/saa7134-core.c +10 -19
diff -u linux-2.6.1/drivers/media/video/saa7134/saa7134-core.c linux/drivers/media/video/saa7134/saa7134-core.c
@@ -599,12 +599,10 @@
 		if ((report & SAA7134_IRQ_REPORT_DONE_RA3))
 			saa7134_irq_oss_done(dev,status);
 
-#ifdef CONFIG_VIDEO_IR
 		if ((report & (SAA7134_IRQ_REPORT_GPIO16 |
 			       SAA7134_IRQ_REPORT_GPIO18)) &&
 		    dev->remote)
 			saa7134_input_irq(dev);
-#endif
 
 	};
 	if (10 == loop) {
@@ -636,9 +634,7 @@
 	saa7134_vbi_init1(dev);
 	if (card_has_ts(dev))
 		saa7134_ts_init1(dev);
-#ifdef CONFIG_VIDEO_IR
 	saa7134_input_init1(dev);
-#endif
 
 	switch (dev->pci->device) {
 	case PCI_DEVICE_ID_PHILIPS_SAA7134:
@@ -714,9 +710,7 @@
 	}
 	if (card_has_ts(dev))
 		saa7134_ts_fini(dev);
-#ifdef CONFIG_VIDEO_IR
 	saa7134_input_fini(dev);
-#endif
 	saa7134_vbi_fini(dev);
 	saa7134_video_fini(dev);
 	saa7134_tvaudio_fini(dev);
@@ -907,7 +901,7 @@
 	}
 
 	/* wait a bit, register i2c bus */
-	current->state = TASK_INTERRUPTIBLE;
+	set_current_state(TASK_INTERRUPTIBLE);
 	schedule_timeout(HZ/10);
 	saa7134_i2c_register(dev);
 
@@ -922,6 +916,10 @@
   	if (card_has_ts(dev))
 		request_module("saa6752hs");
 
+#ifdef VIDIOC_G_PRIORITY
+	v4l2_prio_init(&dev->prio);
+#endif
+
 	/* register v4l devices */
 	dev->video_dev = vdev_init(dev,&saa7134_video_template,"video");
 	err = video_register_device(dev->video_dev,VFL_TYPE_GRABBER,
@@ -1041,18 +1039,7 @@
 	saa_writel(SAA7134_MAIN_CTRL,0);
 
 	/* shutdown subsystems */
-	switch (dev->pci->device) {
-	case PCI_DEVICE_ID_PHILIPS_SAA7134:
-	case PCI_DEVICE_ID_PHILIPS_SAA7133:
-	case PCI_DEVICE_ID_PHILIPS_SAA7135:
-		saa7134_oss_fini(dev);
-		break;
-	}
-	if (card_has_ts(dev))
-		saa7134_ts_fini(dev);
-	saa7134_vbi_fini(dev);
-	saa7134_video_fini(dev);
-	saa7134_tvaudio_fini(dev);
+	saa7134_hwfini(dev);
 
 	/* unregister */
 	saa7134_i2c_unregister(dev);
@@ -1099,6 +1086,10 @@
 	       (SAA7134_VERSION_CODE >> 16) & 0xff,
 	       (SAA7134_VERSION_CODE >>  8) & 0xff,
 	       SAA7134_VERSION_CODE & 0xff);
+#ifdef SNAPSHOT
+	printk(KERN_INFO "saa7130/34: snapshot date %04d-%02d-%02d\n",
+	       SNAPSHOT/10000, (SNAPSHOT/100)%100, SNAPSHOT%100);
+#endif
 	return pci_module_init(&saa7134_pci_driver);
 }
 
drivers/media/video/saa7134/saa7134-input.c +218 -0

218 lines not on this page · raw message

drivers/media/video/saa7134/saa7134-oss.c +6 -5
diff -u linux-2.6.1/drivers/media/video/saa7134/saa7134-oss.c linux/drivers/media/video/saa7134/saa7134-oss.c
@@ -40,7 +40,7 @@
 MODULE_PARM_DESC(oss_rate,"sample rate (valid are: 32000,48000)");
 
 #define dprintk(fmt, arg...)	if (oss_debug) \
-	printk(KERN_DEBUG "%s/oss: " fmt, dev->name, ## arg)
+	printk(KERN_DEBUG "%s/oss: " fmt, dev->name , ## arg)
 
 /* ------------------------------------------------------------------ */
 
@@ -295,8 +295,10 @@
 				break;
 			}
 			up(&dev->oss.lock);
-			current->state = TASK_INTERRUPTIBLE;
-			schedule();
+			set_current_state(TASK_INTERRUPTIBLE);
+			if (0 == dev->oss.read_count)
+				schedule();
+			set_current_state(TASK_RUNNING);
 			down(&dev->oss.lock);
 			if (signal_pending(current)) {
 				if (0 == ret)
@@ -328,7 +330,6 @@
 	}
 	up(&dev->oss.lock);
 	remove_wait_queue(&dev->oss.wq, &wait);
-	current->state = TASK_RUNNING;
 	return ret;
 }
 
@@ -777,7 +778,7 @@
 
 	spin_lock(&dev->slock);
 	if (UNSET == dev->oss.dma_blk) {
-		dprintk("irq: recording stopped%s\n","");
+		dprintk("irq: recording stopped\n");
 		goto done;
 	}
 	if (0 != (status & 0x0f000000))
drivers/media/video/saa7134/saa7134-ts.c +3 -3
diff -u linux-2.6.1/drivers/media/video/saa7134/saa7134-ts.c linux/drivers/media/video/saa7134/saa7134-ts.c
@@ -45,7 +45,7 @@
 #define TS_NR_PACKETS 312
 
 #define dprintk(fmt, arg...)	if (ts_debug) \
-	printk(KERN_DEBUG "%s/ts: " fmt, dev->name, ## arg)
+	printk(KERN_DEBUG "%s/ts: " fmt, dev->name , ## arg)
 
 /* ------------------------------------------------------------------ */
 
@@ -173,7 +173,7 @@
 	saa_writeb(SAA7134_SPECIAL_MODE, 0x00);
 	mdelay(10);
    	saa_writeb(SAA7134_SPECIAL_MODE, 0x01);
-   	current->state = TASK_INTERRUPTIBLE;
+   	set_current_state(TASK_INTERRUPTIBLE);
 	schedule_timeout(HZ/10);
 }
 
@@ -196,7 +196,7 @@
 	
 	list_for_each(list,&saa7134_devlist) {
 		h = list_entry(list, struct saa7134_dev, devlist);
-		if (h->ts_dev->minor == minor)
+		if (h->ts_dev && h->ts_dev->minor == minor)
 			dev = h;
 	}
 	if (NULL == dev)
drivers/media/video/saa7134/saa7134-tvaudio.c +76 -40

214 lines not on this page · raw message

drivers/media/video/saa7134/saa7134-vbi.c +1 -1
diff -u linux-2.6.1/drivers/media/video/saa7134/saa7134-vbi.c linux/drivers/media/video/saa7134/saa7134-vbi.c
@@ -39,7 +39,7 @@
 MODULE_PARM_DESC(vbibufs,"number of vbi buffers, range 2-32");
 
 #define dprintk(fmt, arg...)	if (vbi_debug) \
-	printk(KERN_DEBUG "%s/vbi: " fmt, dev->name, ## arg)
+	printk(KERN_DEBUG "%s/vbi: " fmt, dev->name , ## arg)
 
 /* ------------------------------------------------------------------ */
 
drivers/media/video/saa7134/saa7134-video.c +61 -5

145 lines not on this page · raw message

drivers/media/video/saa7134/saa7134.h +22 -11
diff -u linux-2.6.1/drivers/media/video/saa7134/saa7134.h linux/drivers/media/video/saa7134/saa7134.h
@@ -29,14 +29,11 @@
 
 #include <asm/io.h>
 
-#ifdef CONFIG_VIDEO_IR
-#include "ir-common.h"
-#endif
-
 #include <media/video-buf.h>
 #include <media/tuner.h>
 #include <media/audiochip.h>
 #include <media/id.h>
+#include <media/ir-common.h>
 
 #ifndef TRUE
 # define TRUE (1==1)
@@ -116,6 +113,7 @@
 	unsigned int   wswap:1;
 	unsigned int   yuv:1;
 	unsigned int   planar:1;
+	unsigned int   uvswap:1;
 };
 
 /* ----------------------------------------------------------- */
@@ -143,6 +141,16 @@
 #define SAA7134_BOARD_BMK_MPEX_NOTUNER 18
 #define SAA7134_BOARD_VIDEOMATE_TV     19
 #define SAA7134_BOARD_CRONOS_PLUS      20
+#define SAA7134_BOARD_10MOONSTVMASTER  21
+#define SAA7134_BOARD_MD2819           22
+#define SAA7134_BOARD_BMK_MPEX_TUNER   23
+#define SAA7134_BOARD_TVSTATION_DVR    24
+#define SAA7134_BOARD_ASUSTEK_TVFM7133	25
+#define SAA7134_BOARD_PINNACLE_PCTV_STEREO 26
+#define SAA7134_BOARD_MANLI_MTV002     27
+#define SAA7134_BOARD_MANLI_MTV001     28
+#define SAA7134_BOARD_TG3000TV         29
+#define SAA7134_BOARD_ECS_TVP3XP       30
 
 #define SAA7134_INPUT_MAX 8
 
@@ -242,11 +250,15 @@
 	struct saa7134_dev         *dev;
 	unsigned int               radio;
 	enum v4l2_buf_type         type;
+	unsigned int               resources;
+#ifdef VIDIOC_G_PRIORITY 
+	enum v4l2_priority	   prio;
+#endif
 
+	/* video overlay */
 	struct v4l2_window         win;
 	struct v4l2_clip           clips[8];
 	unsigned int               nclips;
-	unsigned int               resources;
 
 	/* video capture */
 	struct saa7134_format      *fmt;
@@ -298,7 +310,6 @@
 	unsigned int               read_count;
 };
 
-#ifdef CONFIG_VIDEO_IR
 /* IR input */
 struct saa7134_ir {
 	struct input_dev           dev;
@@ -307,14 +318,17 @@
 	char                       phys[32];
 	u32                        mask_keycode;
 	u32                        mask_keydown;
+	u32                        mask_keyup;
 };
-#endif
 
 /* global device status */
 struct saa7134_dev {
 	struct list_head           devlist;
         struct semaphore           lock;
        	spinlock_t                 slock;
+#ifdef VIDIOC_G_PRIORITY 
+	struct v4l2_prio_state     prio;
+#endif
 
 	/* various device info */
 	unsigned int               resources;
@@ -327,9 +341,7 @@
 
 	/* infrared remote */
 	int                        has_remote;
-#ifdef CONFIG_VIDEO_IR
 	struct saa7134_ir          *remote;
-#endif
 
 	/* pci i/o */
 	char                       name[32];
@@ -358,6 +370,7 @@
 	struct saa7134_dmaqueue    video_q;
 	struct saa7134_dmaqueue    ts_q;
 	struct saa7134_dmaqueue    vbi_q;
+	unsigned int               video_fieldcount;
 	unsigned int               vbi_fieldcount;
 
 	/* various v4l controls */
@@ -403,9 +416,7 @@
 #define saa_setb(reg,bit)          saa_andorb((reg),(bit),(bit))
 #define saa_clearb(reg,bit)        saa_andorb((reg),(bit),0)
 
-//#define saa_wait(d) { if (need_resched()) schedule(); else udelay(d);}
 #define saa_wait(d) { udelay(d); }
-//#define saa_wait(d) { schedule_timeout(HZ*d/1000 ?:1); }
 
 /* ----------------------------------------------------------- */
 /* saa7134-core.c                                              */
Signature · 1 line
You have a new virus in /var/mail/kraxel