LinuxTV.org DVB update
Subsystems (2)
cover LinuxTV.org DVB update
Hello Linus, Andrew,
I'm about to send you a set of 5 patches that sync the LinuxTV.org CVS with latest linux-2.6.1/linux-2.6.1-mm4.
As usual, detailed informations about what changed can be found at the top of each file.
The patch "04-DVB-av7110-driver-splitup.diff" is bzip2'ed, because it removes the av7110 DVB driver source and replaces it with a modularized version. Sorry for the inconvenience!
Please apply!
CU
Michael.
PATCH 1/5 Update DVB documentation
- [DVB] update contributors
- [DVB] documentation update for recent DVB TTUSB driver changes
Documentation/dvb/contributors.txt +5 -1
@@ -8,7 +8,7 @@ Marcus Metzler <[email protected]> Ralph Metzler <[email protected]> - for their contining work on the DVB driver + for their continuing work on the DVB driver Michael Holzt <[email protected]> for his contributions to the dvb-net driver
@@ -58,5 +58,9 @@ for his work on the budget drivers, the demux code, the module unloading problems, ... +Hans-Frieder Vogt <[email protected]> + for his work on calculating and checking the crc's for the + TechnoTrend/Hauppauge DEC driver firmware + (If you think you should be in this list, but you are not, drop a line to the DVB mailing list)
Documentation/dvb/ttusb-dec.txt +25 -10
@@ -14,6 +14,7 @@ Hotplug firmware loader under 2.6 kernels In Progress: + DEC2540-t DEC3000-s To Do:
@@ -23,21 +24,34 @@ Getting the Firmware -------------------- -Currently, the driver only works with v2.15a of the firmware. The firmwares -can be obtained in this way: +The firmware can be found in the software update zip files on this page: +http://www.hauppauge.de/sw_dec.htm -wget http://hauppauge.lightpath.net/de/dec215a.exe -unzip -j dec215a.exe Software/Oem/STB/App/Boot/STB_PC_T.bin -unzip -j dec215a.exe Software/Oem/STB/App/Boot/STB_PC_S.bin +The firmwares are named as follows: +DEC2000-t: STB_PC_T.bin +DEC2540-t: STB_PC_X.bin +DEC3000-s: STB_PC_S.bin + +Note that firmwares since version 2.16 beta2 for the DEC2000-t give the device +the USB ID of the DEC3000-s. The driver copes with this. + +Instructions follow for retrieving version 2.16 of the firmware: + +wget http://hauppauge.lightpath.net/de/dec216.exe +unzip -j dec216.exe software/OEM/STB/App/Boot/STB_PC_T.bin +unzip -j dec216.exe software/OEM/STB/App/Boot/STB_PC_X.bin +unzip -j dec216.exe software/OEM/STB/App/Boot/STB_PC_S.bin Compilation Notes for 2.4 kernels --------------------------------- For 2.4 kernels the firmware for the DECs is compiled into the driver itself. -The firmwares are expected to be in /etc/dvb at compilation time. +The firmwares are expected to be in the build-2.4 directory at compilation +time. -mv STB_PC_T.bin /etc/dvb/dec2000t.bin -mv STB_PC_S.bin /etc/dvb/dec3000s.bin +mv STB_PC_T.bin build-2.4/dvb-ttusb-dec-2000t.fw +mv STB_PC_X.bin build-2.4/dvb-ttusb-dec-2540t.fw +mv STB_PC_S.bin build-2.4/dvb-ttusb-dec-3000s.fw Hotplug Firmware Loading for 2.6 kernels
@@ -45,5 +59,6 @@ For 2.6 kernels the firmware is loaded at the point that the driver module is loaded. See linux/Documentation/dvb/firmware.txt for more information. -mv STB_PC_T.bin /usr/lib/hotplug/firmware/dvb-ttusb-dec-2000t-2.15a.fw -mv STB_PC_S.bin /usr/lib/hotplug/firmware/dvb-ttusb-dec-3000s-2.15a.fw +mv STB_PC_T.bin /usr/lib/hotplug/firmware/dvb-ttusb-dec-2000t.fw +mv STB_PC_X.bin /usr/lib/hotplug/firmware/dvb-ttusb-dec-2540t.fw +mv STB_PC_S.bin /usr/lib/hotplug/firmware/dvb-ttusb-dec-3000s.fw
PATCH 2/5 Update saa7146 driver
- [DVB] fix memory leak in page table handling
- [DVB] minor coding style changes
- [DVB] add simple resource management for video dmas (borrowed from saa7134)
- [DVB] use resource management to lock video and vbi access which sometimes share the same video dmas
- [DVB] honour return codes of extension functions in various places, when resources could not be locked
- [DVB] remove remains of dead code which were commented out anyway
- [DVB] add new flag FORMAT_IS_PLANAR to indicate planar capture formats, needed for resource allocation
include/media/saa7146.h +2 -0
@@ -67,6 +67,8 @@dma_addr_t dma;/* used for offsets for u,v planes for planar capture modes */ unsigned long offset; +/* used for custom pagetables (used for example by budget dvb cards) */ +struct scatterlist *slist; };struct saa7146_pci_extension_data {
drivers/media/common/saa7146_core.c +9 -12
@@ -137,7 +137,6 @@char *saa7146_vmalloc_build_pgtable (struct pci_dev *pci,long length,struct saa7146_pgtable *pt) { -struct scatterlist *slist =NULL ;int pages = (length+PAGE_SIZE -1 )/PAGE_SIZE ;char *mem =vmalloc_32 (length);int slen =0 ;
@@ -146,35 +145,36 @@return NULL ; } -if (!(slist =vmalloc_to_sg (mem, pages))) { +if (!(pt->slist =vmalloc_to_sg (mem, pages))) {vfree (mem);return NULL ; }if (saa7146_pgtable_alloc (pci, pt)) { -kfree (slist); +kfree (pt->slist); + pt->slist =NULL ;vfree (mem);return NULL ; } - slen =pci_map_sg (pci,slist,pages,PCI_DMA_FROMDEVICE ); -if (0 !=saa7146_pgtable_build_single (pci, pt, slist, slen)) { + slen =pci_map_sg (pci,pt->slist,pages,PCI_DMA_FROMDEVICE ); +if (0 !=saa7146_pgtable_build_single (pci, pt, pt->slist, slen)) {return NULL ; } -/* fixme: here's a memory leak: slist never gets freed by any other -function ...*/ return mem; }void saa7146_pgtable_free (struct pci_dev *pci,struct saa7146_pgtable *pt) { -//fm DEB_EE(("pci:%p, pt:%p\n",pci,pt)); -if (NULL == pt->cpu)return ;pci_free_consistent (pci, pt->size, pt->cpu, pt->dma); pt->cpu =NULL ; +if (NULL != pt->slist) { +kfree (pt->slist); + pt->slist =NULL ; + } }int saa7146_pgtable_alloc (struct pci_dev *pci,struct saa7146_pgtable *pt)
@@ -182,11 +182,8 @@u32 *cpu;dma_addr_t dma_addr; -//fm DEB_EE(("pci:%p, pt:%p\n",pci,pt)); - cpu =pci_alloc_consistent (pci,SAA7146_PGTABLE_SIZE , &dma_addr);if (NULL == cpu) { -//fm ERR(("pci_alloc_consistent() failed.")); return -ENOMEM ; } pt->size =SAA7146_PGTABLE_SIZE ;
drivers/media/common/saa7146_fops.c +71 -9
106 lines not on this page · raw message
drivers/media/common/saa7146_hlp.c +27 -44
151 lines not on this page · raw message
drivers/media/common/saa7146_vbi.c +9 -1
@@ -366,7 +367,7 @@init_waitqueue_head (&vv->vbi_wq); } -static void vbi_open (struct saa7146_dev *dev,struct file *file) +static int vbi_open (struct saa7146_dev *dev,struct file *file) {struct saa7146_fh *fh = (struct saa7146_fh *)file->private_data;
@@ -375,6 +376,12 @@DEB_VBI (("dev:%p, fh:%p\n" ,dev,fh)); + ret =saa7146_res_get (fh,RESOURCE_DMA3_BRS ); +if (0 == ret) { +DEB_S (("cannot get vbi RESOURCE_DMA3_BRS resource\n" )); +return -EBUSY ; + } +/* adjust arbitrition control for video dma 3 */ arbtr_ctrl &= ~0x1f0000 ; arbtr_ctrl |=0x1d0000 ;
@@ -419,6 +426,7 @@/* upload brs register */ saa7146_write (dev,MC2 , (MASK_08 |MASK_24 )); +return 0 ; }static void vbi_close (struct saa7146_dev *dev,struct file *file)
@@ -430,6 +438,7 @@if ( fh == vv->vbi_streaming ) {vbi_stop (fh, file); } +saa7146_res_free (fh,RESOURCE_DMA3_BRS ); }static void vbi_irq_done (struct saa7146_dev *dev,unsigned long status)
drivers/media/common/saa7146_video.c +109 -27
330 lines not on this page · raw message
include/media/saa7146_vv.h +23 -6
@@ -26,12 +26,15 @@u32 num_line_byte; }; +#define FORMAT_BYTE_SWAP 0x1 +#define FORMAT_IS_PLANAR 0x2 +struct saa7146_format {char *name; -int pixelformat; +u32 pixelformat;u32 trans;u8 depth; -int swap; +u8 flags; };struct saa7146_standard
@@ -97,6 +100,8 @@struct videobuf_queue vbi_q;struct v4l2_vbi_format vbi_fmt;struct timer_list vbi_read_timeout; + +unsigned int resources;/* resource management for device open */ };struct saa7146_vv
@@ -136,6 +141,8 @@int current_hps_sync;struct saa7146_dma d_clipping;/* pointer to clipping memory */ + +unsigned int resources;/* resource management for device */ };#define SAA7146_EXCLUSIVE 0x1
@@ -149,7 +156,6 @@ };/* flags */ -// #define SAA7146_EXT_SWAP_ODD_EVEN 0x1 /* needs odd/even fields swapped */ #define SAA7146_USE_PORT_B_FOR_VBI 0x2/* use input port b for vbi hardware bug workaround */ struct saa7146_ext_vv
@@ -171,7 +177,7 @@struct saa7146_use_ops {void (*init)(struct saa7146_dev *,struct saa7146_vv *); -void (*open)(struct saa7146_dev *,struct file *); +int (*open)(struct saa7146_dev *,struct file *);void (*release)(struct saa7146_dev *,struct file *);void (*irq_done)(struct saa7146_dev *,unsigned long status);ssize_t (*read)(struct file *,char *,size_t ,loff_t *);
@@ -189,9 +195,10 @@int saa7146_vv_init (struct saa7146_dev * dev,struct saa7146_ext_vv *ext_vv);int saa7146_vv_release (struct saa7146_dev * dev); -/* from saa7146_hlp.c */ -void saa7146_set_overlay (struct saa7146_dev *dev,struct saa7146_fh *fh,int v); +int saa7146_enable_overlay (struct saa7146_fh *fh); +void saa7146_disable_overlay (struct saa7146_fh *fh); +void saa7146_set_capture (struct saa7146_dev *dev,struct saa7146_buf *buf,struct saa7146_buf *next);void saa7146_write_out_dma (struct saa7146_dev * dev,int which,struct saa7146_video_dma * vdma) ;void saa7146_set_hps_source_and_sync (struct saa7146_dev *saa,int source,int sync);
@@ -205,6 +212,16 @@/* from saa7146_vbi.c */ extern struct saa7146_use_ops saa7146_vbi_uops; +/* resource management functions */ +int saa7146_res_get (struct saa7146_fh *fh,unsigned int bit); +int saa7146_res_check (struct saa7146_fh *fh,unsigned int bit); +int saa7146_res_locked (struct saa7146_dev *dev,unsigned int bit); +void saa7146_res_free (struct saa7146_fh *fh,unsigned int bits); + +#define RESOURCE_DMA1_HPS 0x1 +#define RESOURCE_DMA2_CLP 0x2 +#define RESOURCE_DMA3_BRS 0x4 +/* saa7146 source inputs */ #define SAA7146_HPS_SOURCE_PORT_A 0x00#define SAA7146_HPS_SOURCE_PORT_B 0x01
PATCH 4/5 av7110 DVB driver splitup
In reply to Michael Hunold- [DVB] after the firmware removal, split av7110.c into separate modules:
- av7110.c: initialization and demux stuff
- av7110_hw.c: lowlevel hardware access and firmware interface
- av7110_ca.c: CI and ECD
- av7110_av.c: audio/video MPEG decoder and remuxing stuff
- av7110_v4l.c: v4l interface
- [DVB] av7110 fixes that were notcies during splitup
- rename some non-static functions to enhance readability
- lots of coding style & whitespace fixes
- return -ERESTARTSYS from ci_ll_read/write() if interrupted
- use time_after() for timeouts
- added some comments about firmware interface
- removed some unused fields from struct av7110, retabbing
- [DVB] follow driver splitup in Makefile
PATCH 3/5 Update DVB core
In reply to Michael Hunold- [DVB] demux: fix nasty bug where setting multiple filters resulted in ts packet duplication
- [DVB] frontend: merge frontend improvements from 2.4 DVB tree:
- schedule_timeout(1) in dvb_frontend.c after setting frontend and before waking up frontend thread
- do FE_RESET in each iteration of frontend thread if !FE_HAS_LOCK
- use aquire_signal flag to call FE_RESET only after tuning until FE_HAS_LOCK has been signalled, and not when FE_HAS_LOCK drops out for short periods of time later
- [DVB] - follow frontend changes in ves1x93 driver
drivers/media/dvb/dvb-core/dvb_demux.c +19 -1
@@ -395,17 +397,35 @@ } } +#define DVR_FEED (f) \ + (((f)->type == DMX_TYPE_TS) && \ + ((f)->feed.ts.is_filtering) && \ + (((f)->ts_type & (TS_PACKET|TS_PAYLOAD_ONLY)) == TS_PACKET))void dvb_dmx_swfilter_packet (struct dvb_demux *demux,const u8 *buf) {struct dvb_demux_feed *feed;struct list_head *pos, *head=&demux->feed_list;u16 pid =ts_pid (buf); +int dvr_done =0 ;list_for_each (pos, head) { feed = list_entry(pos, struct dvb_demux_feed, list_head); -if (feed->pid == pid) + +if ((feed->pid != pid) && (feed->pid !=0x2000 )) +continue ; + +/* copy each packet only once to the dvr device, even +* if a PID is in multiple filters (e.g. video + PCR) */ +if ((DVR_FEED (feed)) && (dvr_done++)) +continue ; + +if (feed->pid == pid) {dvb_dmx_swfilter_packet_type (feed, buf); +if (DVR_FEED (feed)) +continue ; + } +if (feed->pid ==0x2000 ) feed->cb.ts (buf,188 ,0 ,0 , &feed->feed.ts,DMX_OK ); }
drivers/media/dvb/dvb-core/dvb_frontend.c +15 -6
@@ -67,6 +67,7 @@pid_t thread_pid;unsigned long release_jiffies;unsigned long lost_sync_jiffies; +int aquire_signal;int bending;int lnb_drift;int timeout_count;
@@ -305,6 +306,7 @@ fe->lost_sync_count =0 ; fe->lost_sync_jiffies = jiffies; fe->lnb_drift =0 ; + fe->aquire_signal =1 ;if (fe->status & ~FE_TIMEDOUT )dvb_frontend_add_event (fe,0 ); memcpy (&fe->parameters, param,
@@ -364,6 +366,9 @@*/ static void dvb_frontend_recover (struct dvb_frontend_data *fe) { +int j = fe->lost_sync_count; +int stepsize; +dprintk ("%s\n" , __FUNCTION__);#if 0
@@ -383,10 +388,6 @@/** * let's start a zigzag scan to compensate LNB drift... */ - { -int j = fe->lost_sync_count; -int stepsize; -if (fe->info->type ==FE_QPSK ) stepsize = fe->parameters.u.qpsk.symbol_rate /16000 ;else if (fe->info->type ==FE_QAM )
@@ -403,7 +404,6 @@ }dvb_frontend_set_parameters (fe, &fe->parameters,0 ); - }dvb_frontend_internal_ioctl (&fe->frontend,FE_RESET ,NULL ); }
@@ -467,13 +467,19 @@if (s &FE_HAS_LOCK ) { fe->timeout_count =0 ; fe->lost_sync_count =0 ; + fe->aquire_signal =0 ; }else { fe->lost_sync_count++;if (!(fe->info->caps &FE_CAN_RECOVER )) {if (!(fe->info->caps &FE_CAN_CLEAN_SETUP )) { -if (fe->lost_sync_count <10 ) +if (fe->lost_sync_count <10 ) { +if (fe->aquire_signal) +dvb_frontend_internal_ioctl ( + &fe->frontend, +FE_RESET ,NULL );continue ; } + }dvb_frontend_recover (fe); delay =HZ /5 ; }
@@ -589,6 +611,9 @@break ;case FE_SET_FRONTEND : err =dvb_frontend_set_parameters (fe, parg,1 ); +set_current_state (TASK_INTERRUPTIBLE ); +schedule_timeout (1 ); +wake_up_interruptible (&fe->wait_queue);break ;case FE_GET_EVENT : err =dvb_frontend_get_event (fe, parg, file->f_flags);
drivers/media/dvb/frontends/ves1x93.c +0 -3
@@ -395,9 +395,6 @@else ves1x93_writereg (i2c,0x05 , init_1x93_tab[0x05 ] &0x7f ); -ves1x93_writereg (i2c,0x00 ,0x00 ); -ves1x93_writereg (i2c,0x00 ,0x01 ); -/* ves1993 hates this, will lose lock */ if (demod_type !=DEMOD_VES1993 )ves1x93_clr_bit (i2c);
PATCH 5/5 TTUSB DVB driver update
In reply to Michael Hunold- [DVB] TTUSB-DEC update by Alex Woods:
- fix USB timeout bug under 2.6
- change some variable names to make it clearer what we are dealing with (PVA).
- support DEC2540-t and add info on it to the ttusb-dec docs.
- add model number returned from DEC2540-t firmware.
- add a module option to get the raw AVPES packets from the dvr device.
- send audio packets to their filter rather than the videos.
- handle the new empty packets that appear with the 2.16 firmware.
- extra error checks.
- handle the new firmwares that change the devices' USB IDs.
- tidy up the STB initialisation process a little.
- apply Hans-Frieder Vogt's patch for calculating firmware CRCs.
- [DVB] make TTUSB budget card depend on USB subsystem
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 + depends on DVB_CORE && USB help Support for external USB adapters designed by Technotrend and produced by Hauppauge, shipped under the brand name 'Nova-USB'.
drivers/media/dvb/ttusb-dec/ttusb_dec.c +321 -107
765 lines not on this page · raw message