LinuxTV.org DVB driver update
Subsystems (2)
PATCH 1/14 LinuxTV.org DVB driver update
Hi Linus,
this is the periodical patchset bomb to keep the DVB subsystem and the various DVB drivers from the LinuxTV.org CVS in sync with 2.6.
There are 13 individual patches, all have detailed patch desriptions in the top of the file. There is some fuzziness, mainly due to the "video-buf" updates from Gerd Knorr yesterday.
Please apply.
Thanks
Michael.
PATCH 2/14 firmware update for av7110 dvb driver
... send to Linus only. (You don't want a 150kB bzip2 compressed firmware blob, don't you? In case you do, drop me a line.)
PATCH 3/14 add new DVB-T frontend driver
- [DVB] add new DVB-T frontend driver sp887x.c
drivers/media/dvb/frontends/Makefile +1 -0
@@ -15,3 +15,4 @@ obj-$(CONFIG_DVB_MT312) += mt312.o obj-$(CONFIG_DVB_VES1820) += ves1820.o obj-$(CONFIG_DVB_TDA1004X) += tda1004x.o +obj-$(CONFIG_DVB_SP887X) += sp887x.o
drivers/media/dvb/frontends/sp887x.c +610 -0
610 lines not on this page · raw message
PATCH 4/14 video capture updates for saa7146 core
- [DVB] some Kconfig simplifications
- [DVB] FIELD_ALTERNATE capture was broken, add a "wait for vbi" command before actually waiting for the field change
- [DVB] improvements regarding streaming capture to gfx card memory.
- [DVB] captured frames could only be page aligned. fixed.
- [DVB] fix pgtable_build_single, it should work for all kinds of buffers now (system memory (kernel/user) and gfx-memory)
- [DVB] Fix bytesperline-calculation for V4L2_FIELD_ALTERNATE vs. V4L2_FIELD_INTERLACED capture
drivers/media/common/Kconfig +4 -7
@@ -1,11 +1,8 @@ config VIDEO_SAA7146 - tristate - default y if DVB_AV7110=y || DVB_BUDGET=y || DVB_BUDGET_AV=y || VIDEO_MXB=y || VIDEO_DPC=y || VIDEO_HEXIUM_ORION=y || VIDEO_HEXIUM_GEMINI=y - default m if DVB_AV7110=m || DVB_BUDGET=m || DVB_BUDGET_AV=m || VIDEO_MXB=m || VIDEO_DPC=m || VIDEO_HEXIUM_ORION=m || VIDEO_HEXIUM_GEMINI=m + def_tristate DVB_AV7110 || DVB_BUDGET || DVB_BUDGET_AV || \ + VIDEO_MXB || VIDEO_DPC || VIDEO_HEXIUM_ORION || \ + VIDEO_HEXIUM_GEMINI depends on VIDEO_DEV && PCI && I2C - config VIDEO_VIDEOBUF - tristate - default y if VIDEO_SAA7134=y || VIDEO_BT848=y || VIDEO_SAA7146=y - default m if VIDEO_SAA7134=m || VIDEO_BT848=m || VIDEO_SAA7146=m + def_tristate VIDEO_SAA7134 || VIDEO_BT848 || VIDEO_SAA7146 depends on VIDEO_DEV
drivers/media/common/saa7146_core.c +15 -7
@@ -139,34 +139,42 @@return 0 ; } -void saa7146_pgtable_build_single (struct pci_dev *pci,struct saa7146_pgtable *pt,struct scatterlist *list,int length ) +void saa7146_pgtable_build_single (struct pci_dev *pci,struct saa7146_pgtable *pt, +struct scatterlist *list,int sglen ) {u32 *ptr, fill; +int nr_pages =0 ;int i,p; -//fm DEB_EE(("pci:%p, pt:%p, sl:%p, len:%d\n",pci,pt,list,length)); +BUG_ON (0 == sglen);/* if we have a user buffer, the first page may not be aligned to a page boundary. */ pt->offset = list->offset; ptr = pt->cpu; -for (i =0 ; i < length; i++, list++) { +for (i =0 ; i < sglen; i++, list++) { +/* +printk("i:%d, adr:0x%08x, len:%d, offset:%d\n", i,sg_dma_address(list), sg_dma_len(list), list->offset); +*/ for (p =0 ; p *4096 < list->length; p++, ptr++) { - *ptr =sg_dma_address (list) - list->offset; + *ptr =sg_dma_address (list) + p *4096 ; + nr_pages++; } }/* safety; fill the page table up with the last valid page */ fill = *(ptr-1 ); -for (;i<1024 ;i++) { +for (i=nr_pages;i<1024 ;i++) { *ptr++ = fill; } +/* ptr = pt->cpu; -for(j=0;j<60;j++) { -printk("ptr1 %d: 0x%08x\n",j,ptr[j]); +printk("offset: %d\n",pt->offset); +for(i=0;i<5;i++) { +printk("ptr1 %d: 0x%08x\n",i,ptr[i]); } */ }
drivers/media/common/saa7146_fops.c +4 -0
@@ -304,6 +304,7 @@return videobuf_poll_stream (file, &fh->vbi_q, wait); q = &fh->vbi_q; }else { +DEB_D (("using video queue.\n" )); q = &fh->video_q; }
@@ -311,14 +312,17 @@ buf = list_entry(q->stream.next, struct videobuf_buffer, stream);if (!buf) { +DEB_D (("buf == NULL!\n" ));return POLLERR ; }poll_wait (file, &buf->done, wait);if (buf->state ==STATE_DONE || buf->state ==STATE_ERROR ) { +DEB_D (("poll succeeded!\n" ));return POLLIN |POLLRDNORM ; } +DEB_D (("nothing to poll for, buf->state:%d\n" ,buf->state));return 0 ; }
drivers/media/common/saa7146_hlp.c +21 -10
@@ -742,6 +742,7 @@int width = buf->fmt->width;int height = buf->fmt->height; +int bytesperline = buf->fmt->bytesperline;enum v4l2_field field = buf->fmt->field;int depth = sfmt->depth;
@@ -749,7 +750,11 @@DEB_CAP (("[size=%dx%d,fields=%s]\n" , width,height,v4l2_field_names[field])); +if ( bytesperline !=0 ) { + vdma1.pitch = bytesperline*2 ; + }else { vdma1.pitch = (width*depth*2 )/8 ; + } vdma1.num_line_byte = ((vv->standard->v_field<<16 ) + vv->standard->h_pixels); vdma1.base_page = buf->pt[0 ].dma |ME1 ;
@@ -799,6 +804,8 @@ vdma2->pitch = width; vdma3->pitch = width; +/* fixme: look at bytesperline! */ +if (0 != vv->vflip ) { vdma2->prot_addr = buf->pt[1 ].offset; vdma2->base_even = ((vdma2->pitch/2 )*height)+buf->pt[1 ].offset;
@@ -871,6 +878,8 @@DEB_CAP (("[size=%dx%d,fields=%s]\n" , width,height,v4l2_field_names[field])); +/* fixme: look at bytesperline! */ +/* fixme: what happens for user space buffers here?. The offsets are most likely wrong, this version here only works for page-aligned buffers, modifications to the pagetable-functions are necessary...*/
@@ -997,8 +1006,10 @@WRITE_RPS0 (CMD_PAUSE | o_wait);WRITE_RPS0 (CMD_PAUSE | e_wait); }else if ( vv->last_field ==V4L2_FIELD_TOP ) { +WRITE_RPS0 (CMD_PAUSE | (vv->current_hps_sync ==SAA7146_HPS_SYNC_PORT_A ?MASK_10 :MASK_09 ));WRITE_RPS0 (CMD_PAUSE | o_wait); }else if ( vv->last_field ==V4L2_FIELD_BOTTOM ) { +WRITE_RPS0 (CMD_PAUSE | (vv->current_hps_sync ==SAA7146_HPS_SYNC_PORT_A ?MASK_10 :MASK_09 ));WRITE_RPS0 (CMD_PAUSE | e_wait); }
@@ -1033,16 +1044,6 @@DEB_CAP (("buf:%p, next:%p\n" ,buf,next)); -/* -printk("vdma%d.base_even: 0x%08x\n", 1,saa7146_read(dev,BASE_EVEN1)); -printk("vdma%d.base_odd: 0x%08x\n", 1,saa7146_read(dev,BASE_ODD1)); -printk("vdma%d.prot_addr: 0x%08x\n", 1,saa7146_read(dev,PROT_ADDR1)); -printk("vdma%d.base_page: 0x%08x\n", 1,saa7146_read(dev,BASE_PAGE1)); -printk("vdma%d.pitch: 0x%08x\n", 1,saa7146_read(dev,PITCH1)); -printk("vdma%d.num_line_byte: 0x%08x\n", 1,saa7146_read(dev,NUM_LINE_BYTE1)); -printk("vdma%d => vptr : 0x%08x\n", 1,saa7146_read(dev,PCI_VDP1)); -*/ - vdma1_prot_addr =saa7146_read (dev,PROT_ADDR1 );if (0 == vdma1_prot_addr ) {/* clear out beginning of streaming bit (rps register 0)*/
@@ -1069,6 +1070,16 @@program_capture_engine (dev,0 ); } +/* +printk("vdma%d.base_even: 0x%08x\n", 1,saa7146_read(dev,BASE_EVEN1)); +printk("vdma%d.base_odd: 0x%08x\n", 1,saa7146_read(dev,BASE_ODD1)); +printk("vdma%d.prot_addr: 0x%08x\n", 1,saa7146_read(dev,PROT_ADDR1)); +printk("vdma%d.base_page: 0x%08x\n", 1,saa7146_read(dev,BASE_PAGE1)); +printk("vdma%d.pitch: 0x%08x\n", 1,saa7146_read(dev,PITCH1)); +printk("vdma%d.num_line_byte: 0x%08x\n", 1,saa7146_read(dev,NUM_LINE_BYTE1)); +printk("vdma%d => vptr : 0x%08x\n", 1,saa7146_read(dev,PCI_VDP1)); +*/ +/* write the address of the rps-program */ saa7146_write (dev,RPS_ADDR0 , dev->d_rps0.dma_handle);
drivers/media/common/saa7146_video.c +170 -49
321 lines not on this page · raw message
PATCH 5/14 multiple device *read* opens support
- [DVB] allow multiple read device opens
drivers/media/dvb/dvb-core/dvbdev.h +7 -1
@@ -55,12 +58,18 @@struct dvb_device {struct list_head list_head;struct file_operations *fops; + + +struct dvb_adapter *adapter;int type;u32 id; -int users; +/* in theory, 'users' can vanish now, +but I don't want to change too much now... */ +int readers;int writers; +int users;/* don't really need those !? -- FIXME: use video_usercopy */ int (*kernel_ioctl)(struct inode *inode, struct file *file,
drivers/media/dvb/dvb-core/dvbdev.c +9 -2
@@ -112,7 +121,11 @@if (!dvbdev->users)return -EBUSY ; -if ((file->f_flags &O_ACCMODE ) !=O_RDONLY ) { +if ((file->f_flags &O_ACCMODE ) ==O_RDONLY ) { +if (!dvbdev->readers) +return -EBUSY ; + dvbdev->readers--; + }else {if (!dvbdev->writers)return -EBUSY ; dvbdev->writers--;
@@ -130,8 +143,11 @@if (!dvbdev)return -ENODEV ; -if ((file->f_flags &O_ACCMODE ) !=O_RDONLY ) +if ((file->f_flags &O_ACCMODE ) ==O_RDONLY ) { + dvbdev->readers++; + }else { dvbdev->writers++; + } dvbdev->users++;return 0 ;
drivers/media/dvb/dvb-core/dvb_frontend.c +1 -0
@@ -870,6 +886,7 @@static const struct dvb_device dvbdev_template = { .users = ~0 , .writers =1 , + .readers = (~0 )-1 , .fops = &dvb_frontend_fops, .kernel_ioctl = dvb_frontend_ioctl };
PATCH 6/14 update copyright and licensing
- [DVB] - fix copyright stuff in various files:
- remove e-mail addresses that don't exist anymore, but of course keep the names
- change license from GPL to LGPL in dvb_i2c.h (Convergence code)
- change license from GPL to LGPL in dvb_ringbuffer.h (ack by original author Oliver Endriss)
- add LGPL license to dvb_functions
drivers/media/dvb/dvb-core/demux.h +2 -1
@@ -1,4 +1,5 @@ -/* demux.h +/* +* demux.h * * Copyright (c) 2002 Convergence GmbH *
drivers/media/dvb/dvb-core/dmxdev.h +2 -3
@@ -1,9 +1,8 @@/* * dmxdev.h * -* Copyright (C) 2000 Ralph Metzler <[email protected]> -* & Marcus Metzler <[email protected]> -for convergence integrated media GmbH +* Copyright (C) 2000 Ralph Metzler & Marcus Metzler +* for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
drivers/media/dvb/dvb-core/dvbdev.h +2 -3
@@ -1,9 +1,8 @@/* * dvbdev.h * -* Copyright (C) 2000 Ralph Metzler <[email protected]> -* & Marcus Metzler <[email protected]> -for convergence integrated media GmbH +* Copyright (C) 2000 Ralph Metzler & Marcus Metzler +* for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Lesser Public License
drivers/media/dvb/dvb-core/dvb_ringbuffer.h +5 -11
@@ -5,28 +5,22 @@* Copyright (C) 2003 Oliver Endriss * * based on code originally found in av7110.c: -* Copyright (C) 1999-2002 Ralph Metzler -* & Marcus Metzler for convergence integrated media GmbH +* Copyright (C) 1999-2002 Ralph Metzler & Marcus Metzler +* for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 +* modify it under the terms of the GNU Lesser General Public License +* as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * -* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * -* -* You should have received a copy of the GNU General Public License +* You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -* Or, point your browser to http://www.gnu.org/copyleft/gpl.html -* -* -* the project's page is at http://www.linuxtv.org/dvb/ */ #ifndef _DVB_RINGBUFFER_H_
drivers/media/dvb/dvb-core/dvb_net.h +1 -2
@@ -1,8 +1,7 @@/* * dvb_net.h * -* Copyright (C) 2001 Convergence integrated media GmbH -* Ralph Metzler <[email protected]> +* Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
drivers/media/dvb/dvb-core/dvb_i2c.h +3 -4
@@ -4,8 +4,8 @@* Copyright (C) 2002 Holger Waechtler for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 +* modify it under the terms of the GNU Lesser General Public License +* as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful,
@@ -13,10 +13,9 @@* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * -* You should have received a copy of the GNU General Public License +* You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -* Or, point your browser to http://www.gnu.org/copyleft/gpl.html */ #ifndef _DVB_I2C_H_
drivers/media/dvb/dvb-core/dvb_functions.h +23 -0
@@ -1,3 +1,26 @@ +/* +* dvb_functions.h: isolate some Linux specific stuff from the dvb-core +* that can't be expressed as a one-liner +* in order to make porting to other environments easier +* +* Copyright (C) 2003 Convergence GmbH +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Lesser Public License +* as published by the Free Software Foundation; either version 2.1 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +*/ +#ifndef __DVB_FUNCTIONS_H__#define __DVB_FUNCTIONS_H__
drivers/media/dvb/dvb-core/dvb_demux.h +2 -3
@@ -1,8 +1,7 @@/* -* dvb_demux.h - DVB kernel demux API +* dvb_demux.h: DVB kernel demux API * -* Copyright (C) 2000-2001 Marcus Metzler <[email protected]> -* & Ralph Metzler <[email protected]> +* Copyright (C) 2000-2001 Marcus Metzler & Ralph Metzler * for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or
drivers/media/dvb/dvb-core/dvb_filter.h +20 -0
@@ -1,3 +1,23 @@ +/* +* dvb_filter.h +* +* Copyright (C) 2003 Convergence GmbH +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public License +* as published by the Free Software Foundation; either version 2.1 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ +#ifndef _DVB_FILTER_H_#define _DVB_FILTER_H_
drivers/media/dvb/dvb-core/dvb_frontend.h +4 -4
@@ -1,9 +1,9 @@/* -* dvb-core.h +* dvb_frontend.h +* +* Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH +* overhauled by Holger Waechtler for Convergence GmbH * -* Copyright (C) 2001 Ralph Metzler <[email protected]> -* overhauled by Holger Waechtler <[email protected]> -* for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
PATCH 7/14 usual c99 initializer fixes
- [DVB] the usual c99 initialization fixes all over the DVB place
drivers/media/dvb/ttpci/av7110.c +50 -9
@@ -2608,8 +2615,23 @@****************************************************************************/ static struct v4l2_input inputs[2 ] = { - {0 ,"DVB" ,V4L2_INPUT_TYPE_CAMERA ,1 ,0 ,V4L2_STD_PAL_BG |V4L2_STD_NTSC_M ,0 }, - {1 ,"ANALOG" ,V4L2_INPUT_TYPE_TUNER ,2 ,1 ,V4L2_STD_PAL_BG |V4L2_STD_NTSC_M ,0 }, + { + .index =0 , + .name ="DVB" , + .type =V4L2_INPUT_TYPE_CAMERA , + .audioset =1 , + .tuner =0 ,/* ignored */ + .std =V4L2_STD_PAL_BG |V4L2_STD_NTSC_M , + .status =0 , + }, { + .index =1 , + .name ="ANALOG" , + .type =V4L2_INPUT_TYPE_TUNER , + .audioset =2 , + .tuner =0 , + .std =V4L2_STD_PAL_BG |V4L2_STD_NTSC_M , + .status =0 , + } };/* taken from ves1820.c */
@@ -4629,19 +4673,45 @@/* FIXME: these values are experimental values that look better than the values from the latest "official" driver -- at least for me... (MiHu) */ static struct saa7146_standard standard[] = { - {"PAL" ,V4L2_STD_PAL ,0x15 ,288 ,576 ,0x4a ,708 ,709 ,576 ,768 }, -// { "PAL", V4L2_STD_PAL, 0x15, 288, 576, 0x3a, 720, 721, 576, 768 }, - {"NTSC" ,V4L2_STD_NTSC ,0x10 ,244 ,480 ,0x40 ,708 ,709 ,480 ,640 }, + { + .name ="PAL" , .id =V4L2_STD_PAL_BG , + .v_offset =0x15 , .v_field =288 , .v_calc =576 , + .h_offset =0x4a , .h_pixels =708 , .h_calc =709 , + .v_max_out =576 , .h_max_out =768 , + }, { + .name ="NTSC" , .id =V4L2_STD_NTSC , + .v_offset =0x10 , .v_field =244 , .v_calc =480 , + .h_offset =0x40 , .h_pixels =708 , .h_calc =709 , + .v_max_out =480 , .h_max_out =640 , + } };static struct saa7146_standard analog_standard[] = { - {"PAL" ,V4L2_STD_PAL ,0x18 ,288 ,576 ,0x08 ,708 ,709 ,576 ,768 }, - {"NTSC" ,V4L2_STD_NTSC ,0x10 ,244 ,480 ,0x40 ,708 ,709 ,480 ,640 }, + { + .name ="PAL" , .id =V4L2_STD_PAL_BG , + .v_offset =0x18 , .v_field =288 , .v_calc =576 , + .h_offset =0x08 , .h_pixels =708 , .h_calc =709 , + .v_max_out =576 , .h_max_out =768 , + }, { + .name ="NTSC" , .id =V4L2_STD_NTSC , + .v_offset =0x10 , .v_field =244 , .v_calc =480 , + .h_offset =0x40 , .h_pixels =708 , .h_calc =709 , + .v_max_out =480 , .h_max_out =640 , + } };static struct saa7146_standard dvb_standard[] = { - {"PAL" ,V4L2_STD_PAL ,0x14 ,288 ,576 ,0x4a ,708 ,709 ,576 ,768 }, - {"NTSC" ,V4L2_STD_NTSC ,0x10 ,244 ,480 ,0x40 ,708 ,709 ,480 ,640 }, + { + .name ="PAL" , .id =V4L2_STD_PAL_BG , + .v_offset =0x14 , .v_field =288 , .v_calc =576 , + .h_offset =0x4a , .h_pixels =708 , .h_calc =709 , + .v_max_out =576 , .h_max_out =768 , + }, { + .name ="NTSC" , .id =V4L2_STD_NTSC , + .v_offset =0x10 , .v_field =244 , .v_calc =480 , + .h_offset =0x40 , .h_pixels =708 , .h_calc =709 , + .v_max_out =480 , .h_max_out =640 , + } };static struct saa7146_extension av7110_extension;
PATCH 8/14 various patches for non-av7110 dvb-drivers
- [DVB] patch by Jon Burgess to fix DMA issues
- [DVB] reduce the number of dropped TS packets when an error is detected (Jon Burgess)
- [DVB] use budget-ci driver for new TT DVB-T cards with onboard MSP430.
drivers/media/dvb/ttpci/budget-ci.c +2 -0
@@ -357,10 +363,12 @@static struct saa7146_extension budget_extension;MAKE_BUDGET_INFO (ttbci,"TT-Budget/WinTV-NOVA-CI PCI" ,BUDGET_TT_HW_DISEQC ); +MAKE_BUDGET_INFO (ttbt2,"TT-Budget/WinTV-NOVA-T PCI" ,BUDGET_TT );static struct pci_device_id pci_tbl[] = {MAKE_EXTENSION_PCI (ttbci,0x13c2 ,0x100c ),MAKE_EXTENSION_PCI (ttbci,0x13c2 ,0x100f ), +MAKE_EXTENSION_PCI (ttbt2,0x13c2 ,0x1011 ), { .vendor =0 , }
drivers/media/dvb/ttpci/budget-core.c +2 -2
@@ -46,12 +46,12 @@mdelay (10 );saa7146_write (dev,BASE_ODD3 ,0 ); -saa7146_write (dev,BASE_EVEN3 ,TS_WIDTH *TS_HEIGHT /2 ); +saa7146_write (dev,BASE_EVEN3 ,0 );saa7146_write (dev,PROT_ADDR3 ,TS_WIDTH *TS_HEIGHT );saa7146_write (dev,BASE_PAGE3 , budget->pt.dma |ME1 |0x90 );saa7146_write (dev,PITCH3 ,TS_WIDTH ); -saa7146_write (dev,NUM_LINE_BYTE3 , ((TS_HEIGHT /2 )<<16 )|TS_WIDTH ); +saa7146_write (dev,NUM_LINE_BYTE3 , (TS_HEIGHT <<16 )|TS_WIDTH );saa7146_write (dev,MC2 , (MASK_04 |MASK_20 ));saa7146_write (dev,MC1 , (MASK_04 |MASK_20 ));// DMA3 on
drivers/media/dvb/ttpci/budget.c +0 -2
@@ -192,7 +192,6 @@MAKE_BUDGET_INFO (ttbs,"TT-Budget/WinTV-NOVA-S PCI" ,BUDGET_TT );MAKE_BUDGET_INFO (ttbc,"TT-Budget/WinTV-NOVA-C PCI" ,BUDGET_TT );MAKE_BUDGET_INFO (ttbt,"TT-Budget/WinTV-NOVA-T PCI" ,BUDGET_TT ); -MAKE_BUDGET_INFO (ttbt2,"TT-Budget/WinTV-NOVA-T PCI" ,BUDGET_TT );MAKE_BUDGET_INFO (satel,"SATELCO Multimedia PCI" ,BUDGET_TT_HW_DISEQC );/* Uncomment for Budget Patch */ /*MAKE_BUDGET_INFO(fs_1_3,"Siemens/Technotrend/Hauppauge PCI rev1.3+Budget_Patch", BUDGET_PATCH);*/
@@ -203,7 +202,6 @@MAKE_EXTENSION_PCI (ttbs,0x13c2 ,0x1003 ),MAKE_EXTENSION_PCI (ttbc,0x13c2 ,0x1004 ),MAKE_EXTENSION_PCI (ttbt,0x13c2 ,0x1005 ), -MAKE_EXTENSION_PCI (ttbt2,0x13c2 ,0x1011 ), MAKE_EXTENSION_PCI(satel, 0x13c2, 0x1013), { .vendor = 0,
PATCH 9/14 various av7110 dvb-driver updates
Sorry: have a look at patch 12 for details!
-[DVB] various av7110 updates
drivers/media/dvb/ttpci/av7110.c +47 -18
@@ -40,9 +40,9 @@#include <linux/delay.h> #include <linux/fs.h> #include <linux/timer.h> +#include <linux/poll.h> #include <linux/unistd.h> #include <linux/byteorder/swabb.h> -#include <linux/poll.h> #include <linux/slab.h> #include <linux/smp_lock.h> #include <stdarg.h>
@@ -196,17 +197,22 @@return result; } -/* DEBI during interrupt */ -/* fixme: val can be a pointer to a memory or an u32 value -- this -won't work on 64bit platforms! */ +/* DEBI during interrupt */ +/* single word writes */ static inline void iwdebi (struct av7110 *av7110,u32 config,int addr,u32 val,int count) { -if (count>4 && val) -memcpy (av7110->debi_virt, (char *) val, count);debiwrite (av7110, config, addr, val, count); } +/* buffer writes */ +static inline void mwdebi (struct av7110 *av7110,u32 config,int addr,char *val,int count) +{ +memcpy (av7110->debi_virt, val, count); +debiwrite (av7110, config, addr,0 , count); +} + +static inline u32 irdebi (struct av7110 *av7110,u32 config,int addr,u32 val,int count) {u32 res;
@@ -1915,8 +1922,8 @@if (waitdebi (av7110,BOOT_STATE ,BOOTSTATE_BUFFER_EMPTY ) <0 )return -1 ;DEB_D (("Writing DRAM block %d\n" ,i)); -iwdebi (av7110,DEBISWAB , bootblock, - i*(BOOT_MAX_SIZE )+(u32 )data, +mwdebi (av7110,DEBISWAB , bootblock, + ((char *)data) + i*(BOOT_MAX_SIZE ),BOOT_MAX_SIZE ); bootblock^=0x1400 ;iwdebi (av7110,DEBISWAB ,BOOT_BASE ,swab32 (base),4 );
@@ -1929,9 +1936,9 @@if (waitdebi (av7110,BOOT_STATE ,BOOTSTATE_BUFFER_EMPTY ) <0 )return -1 ;if (rest>4 ) -iwdebi (av7110,DEBISWAB , bootblock, i*(BOOT_MAX_SIZE )+(u32 )data, rest); +mwdebi (av7110,DEBISWAB , bootblock, ((char *)data) + i*(BOOT_MAX_SIZE ), rest);else -iwdebi (av7110,DEBISWAB , bootblock, i*(BOOT_MAX_SIZE )-4 +(u32 )data, rest+4 ); +mwdebi (av7110,DEBISWAB , bootblock, ((char *)data) + i*(BOOT_MAX_SIZE ) -4 , rest+4 );iwdebi (av7110,DEBISWAB ,BOOT_BASE ,swab32 (base),4 );iwdebi (av7110,DEBINOSWAP ,BOOT_SIZE , rest,2 );
@@ -2015,7 +2022,7 @@//saa7146_setgpio(dev, DEBI_DONE_LINE, SAA7146_GPIO_INPUT); //saa7146_setgpio(dev, 3, SAA7146_GPIO_INPUT); -iwdebi (av7110,DEBISWAB ,DPRAM_BASE , (u32 ) bootcode,sizeof (bootcode)); +mwdebi (av7110,DEBISWAB ,DPRAM_BASE , bootcode,sizeof (bootcode));iwdebi (av7110,DEBINOSWAP ,BOOT_STATE ,BOOTSTATE_BUFFER_FULL ,2 );wait_for_debi_done (av7110);
@@ -2033,7 +2040,7 @@DEB_D (("bootarm: load dpram code\n" )); -iwdebi (av7110,DEBISWAB ,DPRAM_BASE , (u32 ) Dpram,sizeof (Dpram)); +mwdebi (av7110,DEBISWAB ,DPRAM_BASE , Dpram,sizeof (Dpram));wait_for_debi_done (av7110);
@@ -2742,7 +2764,7 @@DEB_EE (("VIDIOC_G_TUNER: %d\n" , t->index)); -if (0 == av7110->has_analog_tuner || av7110->current_input !=1 ) { +if (0 == av7110->has_analog_tuner || t->index !=0 ) {return -EINVAL ; }
@@ -3257,7 +3279,7 @@DEB_EE (("av7110: fwstc = %04hx %04hx %04hx %04hx\n" , fwstc[0 ], fwstc[1 ], fwstc[2 ], fwstc[3 ])); - *stc = (((uint64_t )(~fwstc[2 ]) &1 ) <<32 ) | + *stc = (((uint64_t ) ((fwstc[3 ] &0x8000 ) >>15 )) <<32 ) | (((uint64_t )fwstc[1 ]) <<16 ) | ((uint64_t )fwstc[0 ]); *base =1 ;
@@ -3630,17 +3652,22 @@DEB_EE (("av7110: %p\n" ,av7110)); +if ((file->f_flags &O_ACCMODE ) !=O_RDONLY ) {poll_wait (file, &av7110->avout.queue, wait); + } +poll_wait (file, &av7110->video_events.wait_queue, wait);if (av7110->video_events.eventw != av7110->video_events.eventr) mask =POLLPRI ; +if ((file->f_flags &O_ACCMODE ) !=O_RDONLY ) {if (av7110->playing) {if (FREE_COND ) mask |= (POLLOUT |POLLWRNORM ); }else /* if not playing: may play if asked for */ mask |= (POLLOUT |POLLWRNORM ); + }return mask; }
@@ -3653,6 +3680,10 @@DEB_EE (("av7110: %p\n" ,av7110)); +if ((file->f_flags &O_ACCMODE ) ==O_RDONLY ) { +return -EPERM ; + } +if (av7110->videostate.stream_source!=VIDEO_SOURCE_MEMORY )return -EPERM ;
@@ -3690,6 +3721,10 @@ n=MIN_IFRAME /len+1 ; } +/* setting n always > 1, fixes problems when playing stillframes +consisting of I- and P-Frames */ + n=MIN_IFRAME /len+1 ; +/* FIXME: nonblock? */ dvb_play (av7110, iframe_header,sizeof (iframe_header),0 ,1 ,0 );
@@ -3711,9 +3746,12 @@DEB_EE (("av7110: %p\n" ,av7110)); -if (((file->f_flags&O_ACCMODE )==O_RDONLY ) && - (cmd!=VIDEO_GET_STATUS )) +if ((file->f_flags&O_ACCMODE )==O_RDONLY ) { +if ( cmd!=VIDEO_GET_STATUS && cmd!=VIDEO_GET_EVENT && + cmd!=VIDEO_GET_SIZE ) {return -EPERM ; + } + }switch (cmd) {case VIDEO_STOP :
@@ -4027,15 +4065,17 @@if ((err=dvb_generic_open (inode, file))<0 )return err; + +if ((file->f_flags &O_ACCMODE ) !=O_RDONLY ) {dvb_ringbuffer_flush_spinlock_wakeup (&av7110->aout);dvb_ringbuffer_flush_spinlock_wakeup (&av7110->avout); av7110->video_blank=1 ; av7110->audiostate.AV_sync_state=1 ; av7110->videostate.stream_source=VIDEO_SOURCE_DEMUX ; -if ((file->f_flags &O_ACCMODE ) !=O_RDONLY )/* empty event queue */ av7110->video_events.eventr = av7110->video_events.eventw =0 ; + }return 0 ; }
@@ -4047,7 +4087,10 @@DEB_EE (("av7110: %p\n" ,av7110)); +if ((file->f_flags &O_ACCMODE ) !=O_RDONLY ) {AV_Stop (av7110,RP_VIDEO ); + } +return dvb_generic_release (inode, file); }
@@ -4094,7 +4137,8 @@static struct dvb_device dvbdev_video = { .priv =0 , - .users =1 , + .users =6 , + .readers =5 ,/* arbitrary */ .writers =1 , .fops = &dvb_video_fops, .kernel_ioctl = dvb_video_ioctl,
@@ -4660,6 +4730,7 @@MAKE_AV7110_INFO (unkwn1,"Technotrend/Hauppauge PCI rev?(unknown1)?" );MAKE_AV7110_INFO (unkwn2,"Technotrend/Hauppauge PCI rev?(unknown2)?" );MAKE_AV7110_INFO (nexus,"Technotrend/Hauppauge Nexus PCI DVB-S" ); +MAKE_AV7110_INFO (dvboc11,"Octal/Technotrend DVB-C for iTV" );static struct pci_device_id pci_tbl[] = {MAKE_EXTENSION_PCI (fs_1_5,0x110a ,0xffff ),
@@ -4676,6 +4747,7 @@MAKE_EXTENSION_PCI (unkwn1,0xffc2 ,0x0000 ),MAKE_EXTENSION_PCI (unkwn2,0x00a1 ,0x00a1 ),MAKE_EXTENSION_PCI (nexus,0x00a1 ,0xa1a0 ), + MAKE_EXTENSION_PCI(dvboc11,0x13c2, 0x000a), { .vendor = 0, }
PATCH 10/14 update dvb frontend drivers
- [DVB] add budget driver as possible client of the ves1820 frontend driver
- [DVB] fix wrong include in sp887x.c frontend driver
- [DVB] fix wrong chip description in tda1004xh frontend driver
- [DVB] fixed detection of stv0299 if chip is in standby mode
- [DVB] change some #ifdef to #if, for easier debug enable/disable
- [DVB] ves1820: patch by Peter Bieringer: nicer log output
- [DVB] ves1820: allow PWM (tuner calibaration) value from EEPROM to be overridden on command line (based on patch by Peter Bieringer). New module paramters: "pwm" (max 4 ints, range -1..0xff) and "verbose" (to print AFC value aftger tuning).
drivers/media/dvb/frontends/ves1820.c +2 -1
@@ -173,7 +173,8 @@if (tuner_type ==0xff )/* PLL not reachable over i2c ... */ return 0 ; -if (strstr (fe->i2c->adapter->name,"Technotrend" )) +if (strstr (fe->i2c->adapter->name,"Technotrend" ) || +strstr (fe->i2c->adapter->name,"TT-Budget" )) ifreq =35937500 ;else ifreq =36125000 ;
drivers/media/dvb/frontends/sp887x.c +1 -1
@@ -4,7 +4,7 @@#include <linux/i2c.h> #include "dvb_frontend.h" -#include "dvb_compat.h" +#include "dvb_functions.h" #if 0
drivers/media/dvb/frontends/tda1004x.c +1 -1
@@ -1,5 +1,5 @@/* -Driver for Philips tda1004x OFDM Frontend +Driver for Philips tda1004xh OFDM Frontend This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
drivers/media/dvb/frontends/stv0299.c +4 -1
@@ -913,7 +913,10 @@static int uni0299_attach (struct dvb_i2c_bus *i2c) {long tuner_type; -u8 id =stv0299_readreg (i2c,0x00 ); +u8 id; + +stv0299_writereg (i2c,0x02 ,0x00 );/* standby off */ + id =stv0299_readreg (i2c,0x00 );dprintk ("%s: id == 0x%02x\n" , __FUNCTION__, id);
drivers/media/dvb/frontends/mt312.c +2 -2
@@ -85,7 +85,7 @@printk (KERN_ERR "%s: ret == %d\n" , __FUNCTION__, ret);return -EREMOTEIO ; } -#ifdef MT312_DEBUG +#if MT312_DEBUG {int i;printk (KERN_INFO "R(%d):" , reg &0x7f );
@@ -106,7 +106,7 @@u8 buf[count +1 ];struct i2c_msg msg; -#ifdef MT312_DEBUG +#if MT312_DEBUG {int i;printk (KERN_INFO "W(%d):" , reg &0x7f );
drivers/media/dvb/frontends/ves1820.c +33 -13
119 lines not on this page · raw message
PATCH 11/14 Kconfig and Makefile updates, inspired by Adrian Bunk and Roman Zippel
- [DVB] split up saa7146 compilation in core part (saa7146.o) and video+vbi part (saa7146_vv). some drivers need both (av7110.c), some drivers only need the core stuff (budget*.c)
- [DVB] add entry for sp887x DVB-T modulator to corresponding Kconfig
- [DVB] use new SELECT facility of Kconfig, first mentioned by Adrian Bunk and Roman Zippel in DVB subsystem
- [DVB] use SELECT in media/video/Kconfig, too.
drivers/media/common/Kconfig +10 -6
@@ -1,8 +1,12 @@ config VIDEO_SAA7146 - def_tristate DVB_AV7110 || DVB_BUDGET || DVB_BUDGET_AV || \ - VIDEO_MXB || VIDEO_DPC || VIDEO_HEXIUM_ORION || \ - VIDEO_HEXIUM_GEMINI - depends on VIDEO_DEV && PCI && I2C + tristate + select I2C + +config VIDEO_SAA7146_VV + tristate + select VIDEO_BUF + select VIDEO_VIDEOBUF + select VIDEO_SAA7146 + config VIDEO_VIDEOBUF - def_tristate VIDEO_SAA7134 || VIDEO_BT848 || VIDEO_SAA7146 - depends on VIDEO_DEV + tristate
drivers/media/common/Makefile +2 -1
@@ -1,5 +1,6 @@ saa7146-objs := saa7146_i2c.o saa7146_core.o saa7146_vv-objs := saa7146_vv_ksyms.o saa7146_fops.o saa7146_video.o saa7146_hlp.o saa7146_vbi.o -obj-$(CONFIG_VIDEO_SAA7146) += saa7146.o saa7146_vv.o +obj-$(CONFIG_VIDEO_SAA7146) += saa7146.o +obj-$(CONFIG_VIDEO_SAA7146_VV) += saa7146_vv.o
drivers/media/dvb/Kconfig +5 -7
@@ -3,16 +3,16 @@ # menu "Digital Video Broadcasting Devices" - depends on NET && INET config DVB bool "DVB For Linux" + depends on NET && INET ---help--- Support Digital Video Broadcasting hardware. Enable this if you own a DVB adapter and want to use it or if you compile Linux for a digital SetTopBox. - API specs and user tools and are available for example from + API specs and user tools are available from <http://www.linuxtv.org/>. Please report problems regarding this driver to the LinuxDVB
@@ -33,18 +33,16 @@ source "drivers/media/dvb/frontends/Kconfig" comment "Supported SAA7146 based PCI Adapters" - depends on DVB && PCI - + depends on DVB_CORE && PCI source "drivers/media/dvb/ttpci/Kconfig" comment "Supported USB Adapters" - depends on DVB && USB - + depends on DVB_CORE && USB source "drivers/media/dvb/ttusb-budget/Kconfig" source "drivers/media/dvb/ttusb-dec/Kconfig" comment "Supported FlexCopII (B2C2) Adapters" - depends on DVB && PCI + depends on DVB_CORE && PCI source "drivers/media/dvb/b2c2/Kconfig" endmenu
drivers/media/dvb/dvb-core/Kconfig +4 -1
@@ -4,5 +4,8 @@ select CRC32 help DVB core utility functions for device handling, software fallbacks etc. + Say Y when you have a DVB card and want to use it. Say Y if your want + to build your drivers outside the kernel, but need the DVB core. All + in-kernel drivers will select this automatically if needed. + If unsure say N. - Say Y when you have a DVB card and want to use it. If unsure say N.
drivers/media/dvb/dvb-core/Makefile.lib +1 -0
@@ -0,0 +1 @@ +obj-$(CONFIG_DVB_CORE) += crc32.o
drivers/media/dvb/ttpci/Kconfig +12 -4
@@ -1,6 +1,8 @@ config DVB_AV7110 tristate "AV7110 cards" - depends on VIDEO_DEV && DVB_CORE + depends on DVB_CORE + select VIDEO_DEV + select VIDEO_SAA7146_VV help Support for SAA7146 and AV7110 based DVB cards as produced by Fujitsu-Siemens, Technotrend, Hauppauge and others.
@@ -26,6 +28,7 @@ config DVB_BUDGET tristate "Budget cards" depends on DVB_CORE + select VIDEO_SAA7146 help Support for simple SAA7146 based DVB cards (so called Budget- or Nova-PCI cards) without onboard
@@ -38,7 +41,8 @@ config DVB_BUDGET_CI tristate "Budget cards with onboard CI connector" - depends on VIDEO_DEV && DVB_CORE && DVB_BUDGET + depends on DVB_CORE + select VIDEO_SAA7146 help Support for simple SAA7146 based DVB cards (so called Budget- or Nova-PCI cards) without onboard
@@ -51,7 +55,9 @@ config DVB_BUDGET_AV tristate "Budget cards with analog video inputs" - depends on VIDEO_DEV && DVB_CORE && DVB_BUDGET + depends on DVB_CORE + select VIDEO_DEV + select VIDEO_SAA7146_VV help Support for simple SAA7146 based DVB cards (so called Budget- or Nova-PCI cards) without onboard
@@ -64,7 +70,9 @@ config DVB_BUDGET_PATCH tristate "AV7110 cards with Budget Patch" - depends on DVB_CORE && DVB_BUDGET + depends on DVB_BUDGET + select VIDEO_DEV + select VIDEO_SAA7146_VV help Support for Budget Patch (full TS) modification on SAA7146+AV7110 based cards (DVB-S cards). This
drivers/media/dvb/ttusb-budget/Kconfig +1 -1
@@ -1,6 +1,6 @@ config DVB_TTUSB_BUDGET tristate "Technotrend/Hauppauge Nova-USB devices" - depends on DVB_CORE && USB + depends on DVB_CORE help Support for external USB adapters designed by Technotrend and produced by Hauppauge, shipped under the brand name 'Nova-USB'.
drivers/media/dvb/frontends/Kconfig +10 -0
@@ -26,6 +26,16 @@ DVB adapter simply enable all supported frontends, the right one will get autodetected. +config DVB_SP887X + tristate "Frontends with sp887x demodulators, e.g. Microtune DTF7072" + depends on DVB_CORE + help + A DVB-T demodulator driver. Say Y when you want to support the sp887x. + + If you don't know what tuner module is soldered on your + DVB adapter simply enable all supported frontends, the + right one will get autodetected. + config DVB_ALPS_TDLB7 tristate "Alps TDLB7 (OFDM)" depends on DVB_CORE
drivers/media/video/Kconfig +9 -5
@@ -3,7 +3,7 @@ # menu "Video For Linux" - depends on VIDEO_DEV!=n + depends on VIDEO_DEV comment "Video Adapters"
@@ -228,7 +228,8 @@ config VIDEO_MXB tristate "Siemens-Nixdorf 'Multimedia eXtension Board'" - depends on VIDEO_DEV && PCI && I2C + depends on VIDEO_DEV && PCI + select VIDEO_SAA7146_VV ---help--- This is a video4linux driver for the 'Multimedia eXtension Board' TV card by Siemens-Nixdorf.
@@ -238,7 +239,8 @@ config VIDEO_DPC tristate "Philips-Semiconductors 'dpc7146 demonstration board'" - depends on VIDEO_DEV && PCI && I2C + depends on VIDEO_DEV && PCI + select VIDEO_SAA7146_VV ---help--- This is a video4linux driver for the 'dpc7146 demonstration board' by Philips-Semiconductors. It's the reference design
@@ -251,7 +253,8 @@ config VIDEO_HEXIUM_ORION tristate "Hexium HV-PCI6 and Orion frame grabber" - depends on VIDEO_DEV && PCI && I2C + depends on VIDEO_DEV && PCI + select VIDEO_SAA7146_VV ---help--- This is a video4linux driver for the Hexium HV-PCI6 and Orion frame grabber cards by Hexium.
@@ -261,7 +264,8 @@ config VIDEO_HEXIUM_GEMINI tristate "Hexium Gemini frame grabber" - depends on VIDEO_DEV && PCI && I2C + depends on VIDEO_DEV && PCI + select VIDEO_SAA7146_VV ---help--- This is a video4linux driver for the Hexium Gemini frame grabber card by Hexium. Please note that the Gemini Dual
PATCH 12/14 some more av7110 dvb-driver updates
- [DVB] some progress on DVB-C analog module: experimentally fix frequency offset, initialize msp3400 for analog TV sound
- [DVB] Reduce the number of dropped TS packets when an error is detected (Jon Burgess)
- [DVB] If somebody calls G_TUNER for a DVB-C card w/ analog module, then check for the selected tuner, not if the currently selected channel has a tuner.
- [DVB] play_iframe may be used to play stillpicture frames, that can either by complete i-frames or partial p-frames. In any case, the av7110 needs about 400kB of video data, before the internal video decoder starts displaying anything. for stillframes, this is bad, so we *always* loop writing the frame until the magic amount is reached. stupid, but works...
- [DVB] applied 64bit fixes by Pedro Miguel Teixeira <[email protected]
drivers/media/dvb/dvb-core/dvb_demux.c +2 -0
@@ -391,7 +393,9 @@spin_lock (&demux->lock);while (count--) { +if (buf[0 ] ==0x47 ) {dvb_dmx_swfilter_packet (demux, buf); + } buf +=188 ; }
drivers/media/dvb/ttpci/av7110.h +2 -2
@@ -399,14 +399,14 @@struct dvb_device dvb_dev;struct dvb_net dvb_net; -struct video_device vd; +struct video_device v4l_dev;struct saa7146_dev *dev;struct dvb_i2c_bus *i2c_bus;char *card_name; -/* support for analog module of dvb-c */ +/* support for analog module of dvb-c */ int has_analog_tuner;int current_input;u32 current_freq;
drivers/media/dvb/ttpci/budget-core.c +0 -3
@@ -80,14 +80,11 @@return ;if (newdma > olddma) {/* no wraparound, dump olddma..newdma */ -if (mem[olddma] ==0x47 )dvb_dmx_swfilter_packets (&budget->demux, mem+olddma, (newdma-olddma) /188 ); }else {/* wraparound, dump olddma..buflen and 0..newdma */ -if (mem[olddma] ==0x47 )dvb_dmx_swfilter_packets (&budget->demux, mem+olddma, (TS_BUFLEN -olddma) /188 ); -if (mem[0 ] ==0x47 )dvb_dmx_swfilter_packets (&budget->demux, mem, newdma /188 ); }
drivers/media/dvb/ttpci/av7110.c +223 -61
467 lines not on this page · raw message
PATCH 13/14 fix v4l1 backward compatibility in saa7146 driver
- [DVB] fix VIDIOC_S_FBUF for v4l1 backward compatility with xfree86 / v4l_drv
drivers/media/common/saa7146_video.c +17 -4
@@ -904,6 +904,8 @@ {struct v4l2_framebuffer *fb = arg;struct saa7146_format *fmt; +struct saa7146_fh *ov_fh =NULL ; +int restart_overlay =0 ;DEB_EE (("VIDIOC_S_FBUF\n" ));
@@ -913,10 +915,6 @@return -EPERM; } */ -if (0 != vv->ov_data ) { -DEB_D (("VIDIOC_S_FBUF: overlay is active.\n" )); -return -EPERM ; - }/* check args */ fmt =format_by_fourcc (dev,fb->fmt.pixelformat);
@@ -924,12 +922,27 @@return -EINVAL ; } +down (&dev->lock); + +if ( vv->ov_data !=NULL ) { + ov_fh = vv->ov_data->fh; +saa7146_stop_preview (ov_fh); + restart_overlay =1 ; + } +/* ok, accept it */ vv->ov_fb = *fb; vv->ov_fmt = fmt;if (0 == vv->ov_fb.fmt.bytesperline) vv->ov_fb.fmt.bytesperline = vv->ov_fb.fmt.width*fmt->depth/8 ; + +if (0 != restart_overlay ) { +saa7146_start_preview (ov_fh); + } + +up (&dev->lock); +return 0 ; }case VIDIOC_ENUM_FMT :
PATCH 14/14 firmware blob for new DVB-T frontend driver
... send to Linus only.
Re: [PATCH 2/14] firmware update for av7110 dvb driver
In reply to Michael Hunold (LinuxTV.org CVS maintainer)Hi Michael,
Quoted 1 line
... send to Linus only. (You don't want a 150kB bzip2 compressed firmware blob, don't you? In case you do, drop me a line.)
the request_firmware() framework is part of Linux 2.4 and 2.6 and so for most drivers the firmware file can be loaded from userspace through proc or sysfs. Please take a look at it.
Regards
Marcel
Re: [PATCH 2/14] firmware update for av7110 dvb driver
Hello Marcel,
Quoted 5 lines
Quoted 1 line
... send to Linus only. (You don't want a 150kB bzip2 compressed firmware blob, don't you? In case you do, drop me a line.)
the
request_firmware()framework is part of Linux 2.4 and 2.6 and so for most drivers the firmware file can be loaded from userspace through proc or sysfs. Please take a look at it.
Yes, we know. When I looked at it the last time, there were some problems that kept us from actually finishing the work.
(If you did not use a hotplug agent, then the system was frozen, because the firmware foo did not use it's own workqueue)
I gave some feedback, but I don't know if the fixes made it into the kernel yet.
I have once patched our drivers to use request_firmware() and I have these patches still lying around, so I'll try and see if they work when I have some spare time.
Quoted 2 lines
Regards
Marcel
CU
Michael.
Re: [PATCH 2/14] firmware update for av7110 dvb driver
Hello Marcel,
Quoted 10 lines
Quoted 6 lines
Quoted 1 line
... send to Linus only. (You don't want a 150kB bzip2 compressed firmware blob, don't you? In case you do, drop me a line.)
the
request_firmware()framework is part of Linux 2.4 and 2.6 and so for most drivers the firmware file can be loaded from userspace through proc or sysfs. Please take a look at it.Yes, we know. When I looked at it the last time, there were some problems that kept us from actually finishing the work.
(If you did not use a hotplug agent, then the system was frozen, because the firmware foo did not use it's own workqueue)
As a follow-up to my post: I just checked what already got in and what's still missing. I attached the stuff from request_firmwar() that didn't make it into the kernel yet.
Please note that I did not check if the problem has been solved otherwise. Perhaps Manuel Estrada Sainz <[email protected]> can tell us what the current state is?
CU
Michael.
drivers/base/firmware_class.c +11 -1
@@ -22,6 +22,8 @@MODULE_LICENSE ("GPL" );static int loading_timeout =10 ;/* In seconds */ +static struct workqueue_struct *firmware_wq; +struct firmware_priv {char fw_id[FIRMWARE_NAME_MAX ];
@@ -467,7 +469,7 @@ };INIT_WORK (&fw_work->work, request_firmware_work_func, fw_work); -schedule_work (&fw_work->work); +queue_work (firmware_wq, &fw_work->work);return 0 ; }
@@ -485,12 +487,20 @@ __FUNCTION__);class_unregister (&firmware_class); } + firmware_wq =create_workqueue ("firmware" ); +if (!firmware_wq) { +printk (KERN_ERR "%s: create_workqueue failed\n" , __FUNCTION__); +class_remove_file (&firmware_class, &class_attr_timeout); +class_unregister (&firmware_class); + error = -EIO ; + }return error; } static void __exitfirmware_class_exit (void ) { +destroy_workqueue (firmware_wq);class_remove_file (&firmware_class, &class_attr_timeout);class_unregister (&firmware_class); }
Re: [PATCH 2/14] firmware update for av7110 dvb driver
Quoted 15 lines · Michael Hunold
Hello Marcel,
Quoted 8 lines
Quoted 7 lines
Quoted 2 lines
... send to Linus only. (You don't want a 150kB bzip2 compressed firmware blob, don't you? In case you do, drop me a line.)
the
request_firmware()framework is part of Linux 2.4 and 2.6 and so for most drivers the firmware file can be loaded from userspace through proc or sysfs. Please take a look at it.Quoted 5 lines
Yes, we know. When I looked at it the last time, there were some problems that kept us from actually finishing the work.
(If you did not use a hotplug agent, then the system was frozen, because the firmware foo did not use it's own workqueue)
Quoted 7 lines
As a follow-up to my post: I just checked what already got in and what's still missing. I attached the stuff from
request_firmwar()that didn't make it into the kernel yet.Please note that I did not check if the problem has been solved otherwise. Perhaps Manuel Estrada Sainz <[email protected]> can tell us what the current state is?
The patch should work but Andrew Morton didn't like the fact that in practice the kernel end's up having some threads around full time for the sole purpose of loading firmware once in a while.
I should make a new patch to spawn a thread for each firmware load and have them die when the job is done. And stop using workqueues at all.
- Performance should not be an issue since firmware should seldom be needed.
- Code complexity shouldn't change much either.
Comments are welcomed.
If the issue seams urgent, the current "private workqueue" patch could be applied and replaced later with a cleaner solution.
Just for the record I should get the job done within a couple of weeks. A proposal patch would of course help :)
Have a nice day
Manuel
Signature · 6 lines
--- Manuel Estrada Sainz <[email protected]> <[email protected]> <[email protected]> ------------------------ <[email protected]> ------------------- Let us have the serenity to accept the things we cannot change, courage to change the things we can, and wisdom to know the difference.
Re: [PATCH 2/14] firmware update for av7110 dvb driver
In reply to Marcel HoltmannHi Marcel,
Quoted 3 lines
the
request_firmware()framework is part of Linux 2.4 and 2.6 and so for most drivers the firmware file can be loaded from userspace through proc or sysfs. Please take a look at it.
Is there a way to use this for ISA devices? I'd like to convert my tms380tr request_firmware() as i want to get rid of hardcoded, binary only firmware. However, there is no struct device for ISA devices (and in particular, no bus id) and unlike the old style PCI DMA mapping, which accepts NULL as pci_dev and assumes ISA in this case, request_firmware() absolutely needs the parameter...
--jochen
This update broke the dvb network device changes to make it work with the new rules about dynamic allocation for 2.6. It reverts the code to getting the network device out of an array, so it will break if:
rmmod dvb_net </sys/class/net/dvb0_0/mtu
See:
Documentation/net/netdevices.txt
Hello Stephen,
Quoted 6 lines
This update broke the dvb network device changes to make it work with the new rules about dynamic allocation for 2.6. It reverts the code to getting the network device out of an array, so it will break if:
rmmoddvb_net</sys/class/net/dvb0_0/mtu
See:
Documentation/net/netdevices.txt
Thanks for spotting this, although I don't know what has gone wrong here yet. (I don't know the DVB net code very well).
I'll review this, have a talk with the original author and then send an update patch.
Unfortunately, I don't notice every patch that goes directly into 2.6 without getting postet on the linux-dvb mailinglist. Now if someone changes stuff in our CVS in the same file, it can happen that the stuff from the kernel is wiped out.
CU
Michael.
Quoted 4 lines · On Sat, 11 Oct 2003 10:41:43 +0200 Michael Hunold <[email protected]> wrote:
Unfortunately, I don't notice every patch that goes directly into 2.6 without getting postet on the linux-dvb mailinglist. Now if someone changes stuff in our CVS in the same file, it can happen that the stuff from the kernel is wiped out.
It is your responsibility to resolve such things though. It is inevitable and unavoidable that others outside of your development group will make many changes to your files, as we fix bugs that are tree-wide.
Quoted 8 lines · David S. Miller
Quoted 4 lines · On Sat, 11 Oct 2003 10:41:43 +0200 Michael Hunold <[email protected]> wrote:
Unfortunately, I don't notice every patch that goes directly into 2.6 without getting postet on the linux-dvb mailinglist. Now if someone changes stuff in our CVS in the same file, it can happen that the stuff from the kernel is wiped out.
Quoted 4 lines
It is your responsibility to resolve such things though. It is inevitable and unavoidable that others outside of your development group will make many changes to your files, as we fix bugs that are tree-wide.
So you best subscribe to bk-commits-head and monitor every patch that affects drivers/media/dvb/.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Quoted 9 lines · Geert Uytterhoeven
Quoted 8 lines · David S. Miller
Quoted 4 lines · On Sat, 11 Oct 2003 10:41:43 +0200 Michael Hunold <[email protected]> wrote:
Unfortunately, I don't notice every patch that goes directly into 2.6 without getting postet on the linux-dvb mailinglist. Now if someone changes stuff in our CVS in the same file, it can happen that the stuff from the kernel is wiped out.
Quoted 7 lines
Quoted 4 lines
It is your responsibility to resolve such things though. It is inevitable and unavoidable that others outside of your development group will make many changes to your files, as we fix bugs that are tree-wide.
So you best subscribe to bk-commits-head and monitor every patch that affects
drivers/media/dvb/.
Or more simple - keep a copy of the kernel where your patches got applied, and make a diff between that kernel and latest.
Apply that diff to your local tree, and you are up-to-date.
This gives a good opportunity to review what has been applied without passing the maintainer.
And finally it also resolve potential conflicts.
And as always - the more frequent you get patches applied, the less burden it is to update to latest kernel.
Sam
Hello Sam,
Quoted 9 lines
Quoted 7 lines
Quoted 4 lines
It is your responsibility to resolve such things though. It is inevitable and unavoidable that others outside of your development group will make many changes to your files, as we fix bugs that are tree-wide.
So you best subscribe to bk-commits-head and monitor every patch that affects
drivers/media/dvb/.
Quoted 6 lines
Or more simple - keep a copy of the kernel where your patches got applied, and make a diff between that kernel and latest.
Apply that diff to your local tree, and you are up-to-date.This gives a good opportunity to review what has been applied without passing the maintainer.
Yes, another good hint. Thanks!
Quoted 1 line
Sam
CU
Michael.
I think root cause of the problem is that dvb was only just been added to the MAINTAINERS file so the patch got lost when I sent to closet match was the video lists. It was kind of orphan thing since it crossed both networking and DVB.
Do you need any help in reinserting it?
Hello Stephen,
Quoted 4 lines
I think root cause of the problem is that dvb was only just been added to the
MAINTAINERSfile so the patch got lost when I sent to closet match was the video lists. It was kind of orphan thing since it crossed both networking and DVB.
I just browsed thorugh the changelogs at
http://linus.bkbits.net:8080/linux-2.5/src/drivers/media/dvb?nav=index.html|src/.|src/drivers|src/drivers/media
and back-feeded the changes that did not make it into our local CVS yet.
Quoted 1 line
Do you need any help in reinserting it?
Thanks for your offer. But I have just cut out your patch, "reversed it", compile tested it and sent it to lkml.
CU
Michael.
Hello Geert,
Quoted 2 lines
So you best subscribe to bk-commits-head and monitor every patch that affects
drivers/media/dvb/.
Thanks for that hint -- I should have thought about that before. 8-) I just subscribed to that list.
Quoted 2 lines
Gr{oetje,eeting}s,
Geert
CU
Michael.