All pastes #767158 Raw Edit

Anonym

public text v1 · immutable
·published 2007-11-09 14:31 UTC
rendered paste body
diff -r 071fb4e338da Makefile
--- a/Makefile	Mon Nov 05 00:28:22 2007 +0100
+++ b/Makefile	Fri Nov 09 15:29:52 2007 +0100
@@ -13,9 +13,14 @@ obj-$(CONFIG_VIDEO_EM28XX_AUDIO) += em28
 obj-$(CONFIG_VIDEO_EM28XX_AUDIO) += em28xx-audio.o
 obj-$(CONFIG_DVB_EM2880) += em28xx-dvb.o
 
-EXTRA_CFLAGS += -Idrivers/media/video -Idrivers/media/dvb/frontends -Idrivers/media/dvb/dvb-core -Idrivers/media/tuners/ -Iinclude/linux -DCONFIG_DVB_TUNER_STUB -DCONFIG_DVB_DEMOD_STUB  -Wall
+SDIR    := /lib/modules/$(shell uname -r)/source
+
+
+EXTRA_CFLAGS += -I$(SDIR)/drivers/media/video -I$(SDIR)/drivers/media/dvb/frontends -I$(SDIR)/drivers/media/dvb/dvb-core -I$(SDIR)/drivers/media/tuners/ -Iinclude/linux -Idrivers/media/video -Idrivers/media/dvb/frontends -Idrivers/media/dvb/dvb-core -Idrivers/media/tuners/ -Iinclude/linux -DCONFIG_DVB_TUNER_STUB -DCONFIG_DVB_DEMOD_STUB  -Wall
 
 KDIR    := /lib/modules/$(shell uname -r)/build
+
+
 PWD     := $(shell pwd)
 
 default:
diff -r 071fb4e338da em28xx-audio.c
--- a/em28xx-audio.c	Mon Nov 05 00:28:22 2007 +0100
+++ b/em28xx-audio.c	Mon Nov 05 05:26:53 2007 +0100
@@ -75,18 +75,22 @@ static snd_pcm_hardware_t snd_em28xx_hw_
 #else
 static struct snd_pcm_hardware snd_em28xx_hw_capture = {
 #endif
-	.info = SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED  | SNDRV_PCM_INFO_MMAP_VALID,
+	.info = SNDRV_PCM_INFO_BLOCK_TRANSFER | 
+		SNDRV_PCM_INFO_MMAP | 
+		SNDRV_PCM_INFO_BATCH |
+		SNDRV_PCM_INFO_INTERLEAVED  | 
+		SNDRV_PCM_INFO_MMAP_VALID,
 	.formats = SNDRV_PCM_FMTBIT_S16_LE,
 	.rates = SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_KNOT,
 	.rate_min = 48000,
 	.rate_max = 48000,
 	.channels_min = 2,
 	.channels_max = 2,
-	.buffer_bytes_max = 62720*8, /* just about the value in usbaudio.c */
-	.period_bytes_min = 64, //12544/2,
-	.period_bytes_max = 12544,
+	.buffer_bytes_max = 1024*1024, //62720*8, /* just about the value in usbaudio.c */
+	.period_bytes_min = 64, //64, //12544/2,
+	.period_bytes_max = 512*1024, //6272, //12544,
 	.periods_min = 2,
-	.periods_max = 98, //12544,
+	.periods_max = 1024, //12544,
 };
 
 #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,16)
@@ -109,6 +113,7 @@ static int snd_em28xx_capture_open(struc
                 case TUNER_STUB_DVBT_TV:
                 case TUNER_STUB_ATSC_TV:
 			/* digital has no support for analog audio */
+			ret = dev->em28xx_acquire(dev, EM28XX_RADIO, 1); 
 			if (ret != 0 ) {
 				printk("device is already in use by DVB-T\n");
 				return -EINVAL;
@@ -122,7 +127,7 @@ static int snd_em28xx_capture_open(struc
 				tuner.type = V4L2_TUNER_RADIO;
 
 				/* enable GPIO for analog TV */
-				dev->em28xx_gpio_control(dev,  EM28XX_MODE, (void*)mode);
+				dev->em28xx_gpio_control(dev,  EM28XX_MODE, &mode);
 				dev->mode = mode;
 				/* upload firmware */
 				vtype = mode;
@@ -136,7 +141,6 @@ static int snd_em28xx_capture_open(struc
 				em28xx_i2c_call_clients(dev, VIDIOC_S_TUNER, &tuner);
 
 				dev->em28xx_write_regs(dev, 0x0f, "\x87", 1); 
-				ret = dev->em28xx_acquire(dev, EM28XX_RADIO, 1); 
 				em28xx_i2c_call_clients(dev, VIDIOC_INT_RESET, 0);
 				/* TODO switch to FM mode */
 
@@ -149,16 +153,19 @@ static int snd_em28xx_capture_open(struc
                 case TUNER_STUB_ANALOG_TV:
 			printk("em28xx-audio: device is currently in analog TV mode\n");
 			/* unmute by default */
+			ret = dev->em28xx_acquire(dev, EM28XX_VIDEO, 1); 
+			if (ret!=0)
+				return -EBUSY;
 			dev->em28xx_write_regs(dev, 0x0f, "\x87", 1); 
 			break;
                 case TUNER_STUB_RADIO:
 			/* check current mode and put a hard lock onto it */
 			printk("em28xx-audio: device is currently in analogue FM mode\n");
 			/* unmute by default here */
-			dev->em28xx_write_regs(dev, 0x0f, "\x87", 1); 
 			ret = dev->em28xx_acquire(dev, EM28XX_RADIO, 1); 
 			if ( ret == 0 ) 
 				printk("device is locked in fmradio mode now\n");
+			dev->em28xx_write_regs(dev, 0x0f, "\x87", 1); 
 			break;
 		default:
 			printk("em28xx-audio: unhandled mode %d\n", dev->mode);
@@ -298,10 +305,15 @@ static void em28xx_audio_isocirq(struct 
 
 		stride = runtime->frame_bits >> 3;
 		for(i=0;i<urb->number_of_packets;i++){
+
 			int length=urb->iso_frame_desc[i].actual_length/stride;
 			cp=(unsigned char *) urb->transfer_buffer + urb->iso_frame_desc[i].offset;
 
 			if(!length)
+				continue;
+
+
+			if (urb->iso_frame_desc[i].status) 
 				continue;
 
 			spin_lock_irqsave(&dev->adev->slock, flags);
@@ -317,8 +329,8 @@ static void em28xx_audio_isocirq(struct 
 			}
 			spin_unlock_irqrestore(&dev->adev->slock, flags);
 
-			if(oldptr + length >= runtime->buffer_size){
-				unsigned int cnt = runtime->buffer_size-oldptr-1;
+			if(oldptr + length > runtime->buffer_size){
+				unsigned int cnt = runtime->buffer_size-oldptr;
 				memcpy(runtime->dma_area+oldptr*stride, cp , cnt*stride);
 				memcpy(runtime->dma_area, cp + cnt, length*stride - cnt*stride);
 			} else {
diff -r 071fb4e338da em28xx-video.c
--- a/em28xx-video.c	Mon Nov 05 00:28:22 2007 +0100
+++ b/em28xx-video.c	Fri Nov 09 15:19:52 2007 +0100
@@ -271,8 +271,6 @@ static void request_modules(struct em28x
  */
 int em28xx_config(struct em28xx *dev)
 {
-
-#if 0
 	em28xx_audio_usb_mute(dev, EM28XX_MUTED);
 	dev->mute = 1;		/* maybe not the right place... */
 	dev->volume = 0x1f;
@@ -282,7 +280,6 @@ int em28xx_config(struct em28xx *dev)
 	em28xx_colorlevels_set_default(dev);
 	em28xx_compression_disable(dev);
 
-#endif
 	return 0;
 }
 
@@ -409,8 +406,6 @@ static void video_mux(struct em28xx *dev
 
 static int em28xx_acquire(struct em28xx *dev, int mode, int lock) {
 	int ret = 0;
-	printk("LOCK REQUEST: %d\n",lock);
-	printk("LOCK DBG:\nRADIO: %d\nVIDEO: %d\nVBI: %d\nDVBT: %d\n",dev->radio_user, dev->video_user, dev->vbi_user, dev->fe_user);
 	switch(mode) {
 	/* radio is allowed if TV and DVB is not in use */
 	case EM28XX_RADIO:
@@ -426,9 +421,7 @@ static int em28xx_acquire(struct em28xx 
 		break;
 	/* video, vbi and analogue audio are allowed at the same time */
 	case EM28XX_VIDEO:
-		printk("trying to acquire videolock\n");
 		if (lock) { 
-			printk("LOCK == 1\n");
 			if (dev->fe_user>0 || dev->radio_user>0) {
 				printk("ret will be ebusy!\n");
 				ret = -EBUSY;
@@ -451,7 +444,6 @@ static int em28xx_acquire(struct em28xx 
 		}	
 		break;
 	case EM28XX_DVBT:
-	/* dvb only works in single mode */
 		if (lock)  {
 			if (dev->radio_user || dev->video_user || dev->vbi_user) {
 				ret = -EBUSY;
@@ -466,7 +458,6 @@ static int em28xx_acquire(struct em28xx 
 		ret = -EINVAL;
 	}
 
-	printk("lock attempt: %d\n",ret);
 	return ret;
 }
 
@@ -539,7 +530,7 @@ static int em28xx_v4l2_open(struct inode
 			em28xx_config_i2c(dev);
 
 			/* this is moreover to switch the decoder to FM */
-//			em28xx_i2c_call_clients(dev, VIDIOC_S_TUNER, &config_tuner);
+			em28xx_i2c_call_clients(dev, VIDIOC_S_TUNER, &config_tuner);
 		}
 	}
 
@@ -601,7 +592,6 @@ static int em28xx_v4l2_open(struct inode
 		dev->state |= DEV_INITIALIZED;
 		dev->state &= ~DEV_MISCONFIGURED;
 	}
-	printk("em28xx-video.c: opened\n");
 err:
 	up_read(&em28xx_disconnect);
 	return errCode;
@@ -667,10 +657,7 @@ static int em28xx_v4l2_close(struct inod
 		dev->vbi_reader=0;
 	}
 
-	printk("releasing lock for video\n");
 	dev->em28xx_acquire(dev, fh->type, 0);
-
-	printk("released lock for video\n");
 
 	/* assume that all handles are closed */
 	if(dev->users==1){
@@ -1330,7 +1317,6 @@ static int em28xx_set_fmt(struct em28xx 
 	if (format->type == V4L2_BUF_TYPE_SLICED_VBI_CAPTURE) {
 		em28xx_i2c_call_clients(dev,VIDIOC_G_FMT,format);
 
-		printk("sliced vbi capture!!!\n");
 		if (format->fmt.sliced.service_set==0)
 			return -EINVAL;
 
@@ -1351,7 +1337,6 @@ static int em28xx_set_fmt(struct em28xx 
 	}
 
 	if (format->type != V4L2_BUF_TYPE_VIDEO_CAPTURE){
-		printk("em28xx-video.c: %s !V4L_BUF_TYPE_VIDEO_CAPTURE\n",__FUNCTION__);
 		return -EINVAL;
 	}
 
@@ -1420,7 +1405,6 @@ static int em28xx_set_fmt(struct em28xx 
 
 	for (i = 0; i < dev->num_frames; i++)
 		if (dev->frame[i].vma_use_count) {
-			printk("numframes !! EINVAL!!!\n");
 			em28xx_videodbg("VIDIOC_S_FMT failed. "
 				"Unmap the buffers first.\n");
 			return -EINVAL;
@@ -1787,25 +1771,20 @@ static int em28xx_do_ioctl(struct inode 
 		struct v4l2_frequency *f = arg;
 
 		if (0 != f->tuner){
-			printk("VIDIOC_S_FREQUENCY: (arg)->tuner != 0\n");
 			return -EINVAL;
 		}
 		switch(fh->type) {
 		case EM28XX_RADIO:
-			printk("radio is trying to tune\n");
 			break;
 		case EM28XX_VIDEO:
-			printk("video is trying to tune\n");
 			break;
 		}
 		if ((fh->type == EM28XX_RADIO && f->type != V4L2_TUNER_RADIO) ||
 			(fh->type == EM28XX_VIDEO && f->type != V4L2_TUNER_ANALOG_TV)) {
-			printk("VIDIOC_S_FREQUENCY: (arg)->type != V4L2_TUNER_ANALOG_TV\n");
 			return -EINVAL;
 		}
 
 		dev->ctl_freq = f->frequency;
-		printk("setting frequency(em28xx): %d\n",f->frequency);
 		em28xx_i2c_call_clients(dev, VIDIOC_S_FREQUENCY, f);
 
 		return 0;
@@ -2325,9 +2304,7 @@ static int em28xx_init_dev(struct em28xx
 	request_module("media-stub");
 
 	/* Do board specific init and eeprom reading */
-	printk("card setup %04x!\n",(unsigned int)dev->udev);
 	em28xx_card_setup(dev);
-	printk("card setup done!\n");
 
 	memset(&config, 0x0, sizeof(struct media_config));
 	config.module_id = tuner_translateid(dev->tuner_type);
@@ -2360,7 +2337,6 @@ static int em28xx_init_dev(struct em28xx
 		config.config = 0;
 		config.addr = 0x88>>1;
 		config.mode = TUNER_STUB_ANALOG_TV;
-		printk("trying to attach cx25843\n");
 //		dev->em28xx_gpio_control(dev, EM28XX_RESET2, NULL);
 		tuner_bridge_attach(&dev->i2c_adap, em28xx_gpio_control, dev, &config, &dev->vobj);
 		break;
diff -r 071fb4e338da em28xx.h
--- a/em28xx.h	Mon Nov 05 00:28:22 2007 +0100
+++ b/em28xx.h	Mon Nov 05 05:19:13 2007 +0100
@@ -177,7 +177,7 @@
 /* number of buffers for isoc transfers */
 #define EM28XX_NUM_BUFS 5
 #define EM2880_DVB_NUM_BUFS 5
-#define EM28XX_AUDIO_BUFS 5
+#define EM28XX_AUDIO_BUFS 3 
 #define EM28XX_NUM_AUDIO_PACKETS 64
 #define EM28XX_AUDIO_MAX_PACKET_SIZE 196 /* static value */