FW: [linux-dvb] Another Twinhan VP20310 problem: me too!: SUCCES!!!

Bas Neggers Dr_bazz at gmx.net
Mon Jan 9 22:30:43 CET 2006


Hi Mark, List,

sorry for the confusion, just noticed myself that I did not unload all
modules interfacing with the new ones (which caused the errors), then read
your email. You hit the nail on the head!

Anyway, for the record, might help others: the development tarball that Manu
sent us (Joel and me) today, works for me, scanning, tuning and finally
watching DVB-C CI using Xine now seems to work, pretty brilliantly I might
add. First time I see anything on my FC4 box with my new TwinHan card. 
Now I will try if I can see not only FTA but also encrypted channels. 

Keep up the good work, your help catapulted me into the digital TV age once
and for all.

Cheers,

Bas

> --- Ursprüngliche Nachricht ---
> Von: "Neggers, S.F.W.  \(Bas\)" <S.F.W.Neggers at fss.uu.nl>
> An: <dr_bazz at gmx.net>
> Betreff: FW: [linux-dvb] Another Twinhan VP20310 problem: me too!
> Datum: Mon, 9 Jan 2006 22:23:26 +0100
> 
> 
> 
> -----Original Message-----
> From: Mark Buechler [mailto:mark.buechler at gmail.com]
> Sent: Mon 9-1-2006 22:16
> To: Bas Neggers
> Cc: linux-dvb at linuxtv.org
> Subject: Re: [linux-dvb] Another Twinhan VP20310 problem: me too!
>  
> The problem you're having with modules relates to where the different
> linuxtv trees install drivers. Manu's drivers I believe install into the
> "extras" kernel modules tree (/lib/modules/???/extras) whereas newer
> linuxtv
> DVB drivers install into the normal kernel module tree
> (/lib/modules/???/kernel/drivers/media/dvb). Either you're trying to load
> dependant modules from different tree version or you haven't removed all
> necessary modules before you modprobed new ones. Make sure you delete all
> your old DVB drivers and just to be sure, reboot your system to load the
> new
> ones.
> 
> - Mark.
> 
> On 1/9/06, Bas Neggers <Dr_bazz at gmx.net> wrote:
> >
> > Hi Manu, Joel,
> >
> > I have exactly the same problem with my TwinHan VP2031 as Joel (Fedora
> > Core
> > 4, kernel 2.6.14). Tuning and zapping now work, I find all channels
> > (thanks
> > for the czap -r switch info!), but signal is garbled (loads of green
> > squares, very occasionally a second or so with some recognizable images
> in
> > between the green). I use dvb-kernel modules compiled from fresh cvs
> > source
> > code.
> >
> > Have been struggling with this for weeks now, and am happy to find a few
> > shoulders to cry on ;-) Just kidding, this email list is great and you
> all
> > are very helpful.
> >
> > I mailed Joel directly yesterday, and he forwarded me the TarBall that
> > Manu
> > Abrahams sended him today
> > (cgi-bin-hgwebdir-cgi-v4l-algo-test-675755d11eb2.tar.bz2). I am also
> > living
> > in the Netherlands, and even use the same cable provider as Joel
> (Casema).
> >
> > I compiled the tarbal, which works fine, but when first removing and
> then
> > modprobing the modules I get loads of error messages (see below, also
> > dmesg). Joel just emailed me he got the same (lack of) results. Do we
> > compile against the wrong kernel? Any ideas? I'd love to start using
> this
> > card, and hate having to capitulate and install Windoze...
> >
> > Thanks for looking into this!
> >
> > Cheers,
> >
> > Bas
> >
> > --- error messages when inserting modules:
> > [root at mediapc cgi-bin-hgwebdir-cgi-v4l-algo-test-675755d11eb2]# rmmod
> bttv
> > ERROR: Module bttv is in use by bt878
> > [root at mediapc cgi-bin-hgwebdir-cgi-v4l-algo-test-675755d11eb2]# rmmod
> > bt878
> > ERROR: Module bt878 is in use by dst
> > [root at mediapc cgi-bin-hgwebdir-cgi-v4l-algo-test-675755d11eb2]# rmmod
> dst
> > ERROR: Module dst is in use by dst_ca
> > [root at mediapc cgi-bin-hgwebdir-cgi-v4l-algo-test-675755d11eb2]# rmmod
> > dst_ca
> > [root at mediapc cgi-bin-hgwebdir-cgi-v4l-algo-test-675755d11eb2]# rmmod
> dst
> > [root at mediapc cgi-bin-hgwebdir-cgi-v4l-algo-test-675755d11eb2]# rmmod
> > bt878
> > [root at mediapc cgi-bin-hgwebdir-cgi-v4l-algo-test-675755d11eb2]# rmmod
> bttv
> > [root at mediapc cgi-bin-hgwebdir-cgi-v4l-algo-test-675755d11eb2]# modprobe
> > bttv
> > FATAL: Error inserting bttv
> > (/lib/modules/2.6.14-
> > 1.1656_FC4.netdev.7/kernel/drivers/media/video/bttv.ko):
> > Unknown symbol in module, or unknown parameter (see dmesg)
> > FATAL: Error running install command for bttv
> > [root at mediapc cgi-bin-hgwebdir-cgi-v4l-algo-test-675755d11eb2]# modprobe
> > bt878
> > FATAL: Error inserting bttv
> > (/lib/modules/2.6.14-
> > 1.1656_FC4.netdev.7/kernel/drivers/media/video/bttv.ko):
> > Unknown symbol in module, or unknown parameter (see dmesg)
> > WARNING: Error running install command for bttv
> > FATAL: Error inserting bt878
> > (/lib/modules/2.6.14-
> > 1.1656_FC4.netdev.7/kernel/drivers/media/dvb/bt8xx/bt878.ko):
> > Unknown symbol in module, or unknown parameter (see dmesg)
> > [root at mediapc cgi-bin-hgwebdir-cgi-v4l-algo-test-675755d11eb2]# modprobe
> > dst
> > FATAL: Error inserting bttv
> > (/lib/modules/2.6.14-
> > 1.1656_FC4.netdev.7/kernel/drivers/media/video/bttv.ko):
> > Unknown symbol in module, or unknown parameter (see dmesg)
> > WARNING: Error running install command for bttv
> > WARNING: Error inserting bt878
> > (/lib/modules/2.6.14-
> > 1.1656_FC4.netdev.7/kernel/drivers/media/dvb/bt8xx/bt878.ko):
> > Unknown symbol in module, or unknown parameter (see dmesg)
> > FATAL: Error inserting dst
> > (/lib/modules/2.6.14-
> > 1.1656_FC4.netdev.7/kernel/drivers/media/dvb/bt8xx/dst.ko):
> > Unknown symbol in module, or unknown parameter (see dmesg)
> > [root at mediapc cgi-bin-hgwebdir-cgi-v4l-algo-test-675755d11eb2]# modprobe
> > bt878
> > FATAL: Error inserting bttv
> > (/lib/modules/2.6.14-
> > 1.1656_FC4.netdev.7/kernel/drivers/media/video/bttv.ko):
> > Unknown symbol in module, or unknown parameter (see dmesg)
> > WARNING: Error running install command for bttv
> > FATAL: Error inserting bt878
> > (/lib/modules/2.6.14-
> > 1.1656_FC4.netdev.7/kernel/drivers/media/dvb/bt8xx/bt878.ko):
> > Unknown symbol in module, or unknown parameter (see dmesg)
> > [root at mediapc cgi-bin-hgwebdir-cgi-v4l-algo-test-675755d11eb2]# rmmod
> > dvb_bt8xx
> > ERROR: Module dvb_bt8xx does not exist in /proc/modules
> > [root at mediapc cgi-bin-hgwebdir-cgi-v4l-algo-test-675755d11eb2]# modprobe
> > dvb_bt8xx
> > FATAL: Error inserting bttv
> > (/lib/modules/2.6.14-
> > 1.1656_FC4.netdev.7/kernel/drivers/media/video/bttv.ko):
> > Unknown symbol in module, or unknown parameter (see dmesg)
> > WARNING: Error running install command for bttv
> > WARNING: Error inserting bt878
> > (/lib/modules/2.6.14-
> > 1.1656_FC4.netdev.7/kernel/drivers/media/dvb/bt8xx/bt878.ko):
> > Unknown symbol in module, or unknown parameter (see dmesg)
> > WARNING: Error inserting dst
> > (/lib/modules/2.6.14-
> > 1.1656_FC4.netdev.7/kernel/drivers/media/dvb/bt8xx/dst.ko):
> > Unknown symbol in module, or unknown parameter (see dmesg)
> > WARNING: Error inserting dst_ca
> > (/lib/modules/2.6.14-
> > 1.1656_FC4.netdev.7/kernel/drivers/media/dvb/bt8xx/dst_ca.ko):
> > Unknown symbol in module, or unknown parameter (see dmesg)
> > FATAL: Error inserting dvb_bt8xx
> > (/lib/modules/2.6.14-
> > 1.1656_FC4.netdev.7/kernel/drivers/media/dvb/bt8xx/dvb-bt8xx.ko):
> > Unknown symbol in module, or unknown parameter (see dmesg)
> > [root at mediapc cgi-bin-hgwebdir-cgi-v4l-algo-test-675755d11eb2]#
> >
> > The relevant parts of my dmesg (before modules loaded fine, card was
> > detected):
> >
> > bttv: disagrees about version of symbol btcx_riscmem_alloc
> > bttv: Unknown symbol btcx_riscmem_alloc
> > bttv: disagrees about version of symbol btcx_riscmem_free
> > bttv: Unknown symbol btcx_riscmem_free
> > bttv: disagrees about version of symbol tveeprom_hauppauge_analog
> > bttv: Unknown symbol tveeprom_hauppauge_analog
> > bttv: disagrees about version of symbol btcx_riscmem_alloc
> > bttv: Unknown symbol btcx_riscmem_alloc
> > bttv: disagrees about version of symbol btcx_riscmem_free
> > bttv: Unknown symbol btcx_riscmem_free
> > bttv: disagrees about version of symbol tveeprom_hauppauge_analog
> > bttv: Unknown symbol tveeprom_hauppauge_analog
> > bt878: Unknown symbol bttv_read_gpio
> > bt878: Unknown symbol bttv_write_gpio
> > bt878: Unknown symbol bttv_gpio_enable
> > bttv: disagrees about version of symbol btcx_riscmem_alloc
> > bttv: Unknown symbol btcx_riscmem_alloc
> > bttv: disagrees about version of symbol btcx_riscmem_free
> > bttv: Unknown symbol btcx_riscmem_free
> > bttv: disagrees about version of symbol tveeprom_hauppauge_analog
> > bttv: Unknown symbol tveeprom_hauppauge_analog
> > bt878: Unknown symbol bttv_read_gpio
> > bt878: Unknown symbol bttv_write_gpio
> > bt878: Unknown symbol bttv_gpio_enable
> > dst: Unknown symbol bt878_device_control
> > bttv: disagrees about version of symbol btcx_riscmem_alloc
> > bttv: Unknown symbol btcx_riscmem_alloc
> > bttv: disagrees about version of symbol btcx_riscmem_free
> > bttv: Unknown symbol btcx_riscmem_free
> > bttv: disagrees about version of symbol tveeprom_hauppauge_analog
> > bttv: Unknown symbol tveeprom_hauppauge_analog
> > bt878: Unknown symbol bttv_read_gpio
> > bt878: Unknown symbol bttv_write_gpio
> > bt878: Unknown symbol bttv_gpio_enable
> > bttv: disagrees about version of symbol btcx_riscmem_alloc
> > bttv: Unknown symbol btcx_riscmem_alloc
> > bttv: disagrees about version of symbol btcx_riscmem_free
> > bttv: Unknown symbol btcx_riscmem_free
> > bttv: disagrees about version of symbol tveeprom_hauppauge_analog
> > bttv: Unknown symbol tveeprom_hauppauge_analog
> > bt878: Unknown symbol bttv_read_gpio
> > bt878: Unknown symbol bttv_write_gpio
> > bt878: Unknown symbol bttv_gpio_enable
> > dst: Unknown symbol bt878_device_control
> > dst_ca: Unknown symbol write_dst
> > dst_ca: Unknown symbol dst_pio_disable
> > dst_ca: Unknown symbol dst_comm_init
> > dst_ca: Unknown symbol read_dst
> > dst_ca: Unknown symbol dst_check_sum
> > dst_ca: Unknown symbol dst_error_bailout
> > dst_ca: Unknown symbol dst_wait_dst_ready
> > dst_ca: Unknown symbol rdc_reset_state
> > dst_ca: Unknown symbol dst_error_recovery
> > dvb_bt8xx: disagrees about version of symbol dvb_dmxdev_init
> > dvb_bt8xx: Unknown symbol dvb_dmxdev_init
> > dvb_bt8xx: disagrees about version of symbol nxt6000_attach
> > dvb_bt8xx: Unknown symbol nxt6000_attach
> > dvb_bt8xx: disagrees about version of symbol mt352_attach
> > dvb_bt8xx: Unknown symbol mt352_attach
> > dvb_bt8xx: Unknown symbol bt878_num
> > dvb_bt8xx: Unknown symbol bttv_sub_unregister
> > dvb_bt8xx: Unknown symbol dst_attach
> > dvb_bt8xx: Unknown symbol bttv_write_gpio
> > dvb_bt8xx: disagrees about version of symbol dvb_dmx_swfilter_204
> > dvb_bt8xx: Unknown symbol dvb_dmx_swfilter_204
> > dvb_bt8xx: Unknown symbol bttv_sub_register
> > dvb_bt8xx: disagrees about version of symbol dvb_dmx_release
> > dvb_bt8xx: Unknown symbol dvb_dmx_release
> > dvb_bt8xx: disagrees about version of symbol sp887x_attach
> > dvb_bt8xx: Unknown symbol sp887x_attach
> > dvb_bt8xx: Unknown symbol bttv_get_pcidev
> > dvb_bt8xx: disagrees about version of symbol dvb_net_init
> > dvb_bt8xx: Unknown symbol dvb_net_init
> > dvb_bt8xx: disagrees about version of symbol dvb_dmx_swfilter
> > dvb_bt8xx: Unknown symbol dvb_dmx_swfilter
> > dvb_bt8xx: disagrees about version of symbol dvb_dmxdev_release
> > dvb_bt8xx: Unknown symbol dvb_dmxdev_release
> > dvb_bt8xx: Unknown symbol dst_ca_attach
> > dvb_bt8xx: Unknown symbol bt878_start
> > dvb_bt8xx: disagrees about version of symbol dvb_net_release
> > dvb_bt8xx: Unknown symbol dvb_net_release
> > dvb_bt8xx: Unknown symbol bttv_gpio_enable
> > dvb_bt8xx: disagrees about version of symbol cx24110_pll_write
> > dvb_bt8xx: Unknown symbol cx24110_pll_write
> > dvb_bt8xx: disagrees about version of symbol or51211_attach
> > dvb_bt8xx: Unknown symbol or51211_attach
> > dvb_bt8xx: disagrees about version of symbol dvb_unregister_frontend
> > dvb_bt8xx: Unknown symbol dvb_unregister_frontend
> > dvb_bt8xx: Unknown symbol bt878_stop
> > dvb_bt8xx: disagrees about version of symbol dvb_register_frontend
> > dvb_bt8xx: Unknown symbol dvb_register_frontend
> > dvb_bt8xx: disagrees about version of symbol mt352_write
> > dvb_bt8xx: Unknown symbol mt352_write
> > dvb_bt8xx: disagrees about version of symbol dvb_dmx_init
> > dvb_bt8xx: Unknown symbol dvb_dmx_init
> > dvb_bt8xx: Unknown symbol bt878
> > dvb_bt8xx: disagrees about version of symbol cx24110_attach
> > dvb_bt8xx: Unknown symbol cx24110_attach
> >
> >
> >
> >
> >
> > Message: 4
> > Date: Mon, 09 Jan 2006 14:04:25 +0400
> > From: Manu Abraham <abraham.manu at gmail.com>
> > Subject: Re: [linux-dvb] Another Twinhan VP20310 problem
> > To: "J. van Amerongen" <joel at jovana.nl>
> > Cc: linux-dvb at linuxtv.org
> > Message-ID: <43C23529.7020700 at gmail.com>
> > Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> >
> > J. van Amerongen wrote:
> >
> > >I have already going through:
> > >http://www.linuxtv.org/pipermail/linux-dvb/2005-September/004871.html
> > >
> > >The card can tune and scan. But no picture.
> > >I have try:
> > >
> > >
> > >
> > >
> > >There is one thing I didn't try, because I can't find:
> > >
> > >
> > >>try changing the dst_tlist[]  (for DCT-CI )
> > >>.type_flags = DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_2
> > >>only and see what happens.
> > >>
> > >>
> >
> > You would require this one.
> >
> > This is probably fixed in the v4l-algo test tree.. But unfortunately my
> > link is down (on dialup right now) and hence will not be able to access
> > the repo. (It's holidays here and the ISP does not have tech. people to
> > fix it) I will send you a tarball of the tree, in case you can test it
> > out.
> >
> >
> > Manu
> >
> >
> >
> >
> > ------------------------------
> >
> > Message: 5
> > Date: Mon, 09 Jan 2006 14:09:16 +0400
> > From: Manu Abraham <abraham.manu at gmail.com>
> > Subject: Re: [linux-dvb] [PATCH 3/6] DVB-PinnSat: Remove op_sync_orin
> >         and     irq_err_ignore
> > To: Edgar Toernig <froese at gmx.de>
> > Cc: linux-dvb at linuxtv.org
> > Message-ID: <43C2364C.1060201 at gmail.com>
> > Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> >
> > Edgar Toernig wrote:
> >
> > >The op_sync_orin and irq_err_ignore code is not really card
> > >specific.  Some cards set op_sync_orin but any card would
> > >benefit from setting it.  And irq_err_ignore just shuts up
> > >some error printks in the irq handler.
> > >
> > >This patch activates resyncing for all cards thus making
> > >op_sync_orin superfluous.
> > >
> > >irq_err_ignore is removed.  The error printks are only
> > >activated then debugging is turned on.
> > >
> > >
> > >
> > To make this work you need not move the card specific application of
> > these parameters globally to all cards. The reason being that
> > individual modules loose the capability of changing this option as all
> > cards will be affected in the very same manner.
> >
> > As i said earlier, i am against this patch.
> >
> > The same feature can be achieved, without touching all modules .. You
> > can see how the very same can be achieved without stirring up so much.
> >
> >
> > Manu
> >
> >
> > Signed-off-by: Manu Abraham <manu at linuxtv.org>
> >
> > # HG changeset patch
> > # User root at manu.kromtek.com
> > # Date Sat Dec 24 17:01:34 2005
> > # Node ID 1b4ffaea140aaff910e5d2b26451c57d2a88caa5
> > # parent: f515634631e7165ebcc6c995be92661f70587862
> > Do a RISC_SYNC also
> >
> >
> >
> > --- a/linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c    Sat Dec 24 16:54:12
> > 2005
> > +++ b/linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c    Sat Dec 24 17:01:34
> > 2005
> > @@ -801,13 +801,13 @@
> >          card->gpio_mode = 0x0400c060;
> >          /* should be:
> > BT878_A_GAIN=0,BT878_A_PWRDN,BT878_DA_DPM,BT878_DA_SBR,
> >                    BT878_DA_IOM=1,BT878_DA_APP to enable serial
> > highspeed mode. */
> > -        card->op_sync_orin = 0;
> > +        card->op_sync_orin = BT878_RISC_SYNC_MASK;
> >          card->irq_err_ignore = BT878_AFBUS | BT878_AFDSR;
> >          break;
> >
> >      case BTTV_BOARD_DVICO_DVBT_LITE:
> >          card->gpio_mode = 0x0400C060;
> > -        card->op_sync_orin = 0;
> > +        card->op_sync_orin = BT878_RISC_SYNC_MASK;
> >          card->irq_err_ignore = BT878_AFBUS | BT878_AFDSR;
> >          /* 26, 15, 14, 6, 5
> >           * A_PWRDN  DA_DPM DA_SBR DA_IOM_DA
> > @@ -823,7 +823,7 @@
> >      case BTTV_BOARD_NEBULA_DIGITV:
> >      case BTTV_BOARD_AVDVBT_761:
> >          card->gpio_mode = (1 << 26) | (1 << 14) | (1 << 5);
> > -        card->op_sync_orin = 0;
> > +        card->op_sync_orin = BT878_RISC_SYNC_MASK;
> >          card->irq_err_ignore = BT878_AFBUS | BT878_AFDSR;
> >          /* A_PWRDN DA_SBR DA_APP (high speed serial) */
> >          break;
> > @@ -855,7 +855,7 @@
> >
> >      case BTTV_BOARD_PC_HDTV:
> >          card->gpio_mode = 0x0100EC7B;
> > -        card->op_sync_orin = 0;
> > +        card->op_sync_orin = BT878_RISC_SYNC_MASK;
> >          card->irq_err_ignore = BT878_AFBUS | BT878_AFDSR;
> >          break;
> >
> >
> > # HG changeset patch
> > # User root at manu.kromtek.com
> > # Date Sat Dec 24 16:54:12 2005
> > # Node ID f515634631e7165ebcc6c995be92661f70587862
> > # parent: 70e9c12d0066a13eb2902f5a5cf0610e92a7457f
> > Ignore FBUS and FDSR errors
> >
> >
> >
> > --- a/linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c    Wed Dec 21 13:24:21
> > 2005
> > +++ b/linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c    Sat Dec 24 16:54:12
> > 2005
> > @@ -802,13 +802,13 @@
> >          /* should be:
> > BT878_A_GAIN=0,BT878_A_PWRDN,BT878_DA_DPM,BT878_DA_SBR,
> >                    BT878_DA_IOM=1,BT878_DA_APP to enable serial
> > highspeed mode. */
> >          card->op_sync_orin = 0;
> > -        card->irq_err_ignore = 0;
> > +        card->irq_err_ignore = BT878_AFBUS | BT878_AFDSR;
> >          break;
> >
> >      case BTTV_BOARD_DVICO_DVBT_LITE:
> >          card->gpio_mode = 0x0400C060;
> >          card->op_sync_orin = 0;
> > -        card->irq_err_ignore = 0;
> > +        card->irq_err_ignore = BT878_AFBUS | BT878_AFDSR;
> >          /* 26, 15, 14, 6, 5
> >           * A_PWRDN  DA_DPM DA_SBR DA_IOM_DA
> >           * DA_APP(parallel) */
> > @@ -824,14 +824,14 @@
> >      case BTTV_BOARD_AVDVBT_761:
> >          card->gpio_mode = (1 << 26) | (1 << 14) | (1 << 5);
> >          card->op_sync_orin = 0;
> > -        card->irq_err_ignore = 0;
> > +        card->irq_err_ignore = BT878_AFBUS | BT878_AFDSR;
> >          /* A_PWRDN DA_SBR DA_APP (high speed serial) */
> >          break;
> >
> >      case BTTV_BOARD_AVDVBT_771: //case 0x07711461:
> >          card->gpio_mode = 0x0400402B;
> >          card->op_sync_orin = BT878_RISC_SYNC_MASK;
> > -        card->irq_err_ignore = 0;
> > +        card->irq_err_ignore = BT878_AFBUS | BT878_AFDSR;
> >          /* A_PWRDN DA_SBR  DA_APP[0] PKTP=10 RISC_ENABLE FIFO_ENABLE*/
> >          break;
> >
> > @@ -856,7 +856,7 @@
> >      case BTTV_BOARD_PC_HDTV:
> >          card->gpio_mode = 0x0100EC7B;
> >          card->op_sync_orin = 0;
> > -        card->irq_err_ignore = 0;
> > +        card->irq_err_ignore = BT878_AFBUS | BT878_AFDSR;
> >          break;
> >
> >      default:
> >
> >
> >
> > ------------------------------
> >
> > Message: 6
> > Date: Mon, 09 Jan 2006 14:10:13 +0400
> > From: Manu Abraham <abraham.manu at gmail.com>
> > Subject: Re: [linux-dvb] [PATCH 6/6] DVB-PinnSat: Misc cleanup and
> >         robustness      tweaks
> > To: Edgar Toernig <froese at gmx.de>
> > Cc: linux-dvb at linuxtv.org
> > Message-ID: <43C23685.7060407 at gmail.com>
> > Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> >
> > Edgar Toernig wrote:
> >
> > >General cleanups and some tweaks to make the code more
> > >robust, especially against fifo overrun errors.
> > >
> > >I still don't know what causes the audio fifo to overflow
> > >on some chipsets - the video fifo seems to never show
> > >this problem (yeah, it's two time as big but the data
> > >rate is much more then twice of that comming via DVB).
> > >
> > >
> >
> > The overflow does happen on certain chipset's (chipset quirks ) or due
> > to PCI bus saturation. Where i have seen this issue is when using
> > multiple cards in the order of cards > 3. But even then the PCI bus
> > should be able to handle this bandwidth. since a transponder is only
> > approx 27.5 Mbps. Even with three such cards, data rate does not even go
> > near the actual PCI b/w.
> >
> > The reason why it overflows is data is not read from the FIFO as it
> > should be and the PCI bus expects larger chunks. Another way of handling
> > this is to reduce the latency, such that even smaller chunks can be
> > handled. But even then for example having a motherboard with all
> > peripherals on the same bus can create problems, as data bursts from
> > other peripherals can create a substantial delay, if latency is set too
> > high.
> >
> > >Maybe some PCI-bridges honour the (ro) MAX_LAT register
> > >nowadays - it's much too high for DVB data rates.
> > >
> > >---
> > >
> > > bt878.c |  105
> ++++++++++++++++++++++++++++++--------------------------
> > > bt878.h |   14 ++-----
> > > 2 files changed, 61 insertions(+), 58 deletions(-)
> > >
> > >--- 0.6/drivers/media/dvb/bt8xx/bt878.h Sat, 07 Jan 2006 02:03:06 +0100
> > froese (kernel-dvb/h/15_bt878.h 1.2 644)
> > >+++ 0.7/drivers/media/dvb/bt8xx/bt878.h Sun, 08 Jan 2006 01:45:15 +0100
> > froese (kernel-dvb/h/15_bt878.h 1.3 644)
> > >@@ -28,7 +28,7 @@
> > > #include "bt848.h"
> > > #include "bttv.h"
> > >
> > >-#define BT878_VERSION_CODE 0x000000
> > >+#define BT878_VERSION_CODE 0x000001
> > >
> > > #define BT878_AINT_STAT               0x100
> > > #define BT878_ARISCS          (0xf<<28)
> > >@@ -75,15 +75,6 @@
> > >
> > > #define BT878_ARISC_PC                0x120
> > >
> > >-/* BT878 FUNCTION 0 REGISTERS */
> > >-#define BT878_GPIO_DMA_CTL    0x10c
> > >-
> > >-/* Interrupt register */
> > >-#define BT878_INT_STAT                0x100
> > >-#define BT878_INT_MASK                0x104
> > >-#define BT878_I2CRACK         (1<<25)
> > >-#define BT878_I2CDONE         (1<<8)
> > >-
> > > #define BT878_MAX 4
> > >
> > > extern int bt878_num;
> > >@@ -117,6 +108,9 @@
> > >       dma_addr_t risc_dma;
> > >       u32 risc_pos;
> > >
> > >+      unsigned int errors;
> > >+      unsigned long error_expire;
> > >+
> > >       struct tasklet_struct tasklet;
> > >       int shutdown;
> > > };
> > >--- 0.6/drivers/media/dvb/bt8xx/bt878.c Sat, 07 Jan 2006 02:03:06 +0100
> > froese (kernel-dvb/h/16_bt878.c 1.3 644)
> > >+++ 0.7/drivers/media/dvb/bt8xx/bt878.c Sun, 08 Jan 2006 01:45:15 +0100
> > froese (kernel-dvb/h/16_bt878.c 1.4 644)
> > >@@ -143,9 +143,9 @@
> > > #define RISC_SYNC_VRO         0x0C
> > >
> > > #define RISC_FLUSH()          bt->risc_pos = 0
> > >-#define RISC_INSTR(instr)     bt->risc_cpu[bt->risc_pos++] =
> > cpu_to_le32(instr)
> > >+#define RISC_INSTR(instr)     bt->risc_cpu[bt->risc_pos++] =
> > cpu_to_le32((instr))
> > >
> > >-static int bt878_make_risc(struct bt878 *bt)
> > >+static int bt878_calc_line_size(struct bt878 *bt)
> > >
> > >
> >
> > calc_line_size would be misleading, since it is in fact creating the
> > RISC program itself.
> > IIRC, there is another function calculating the line size too. So you
> > have merged those two functions .. ?
> > Any specific reason why those two functions should be merged into one
> > function ?
> >
> > > {
> > >       bt->block_bytes = bt->buf_size >> 4;
> > >       bt->block_count = 1 << 4;
> > >@@ -177,16 +177,15 @@
> > >       dprintk("bt878: risc len lines %u, bytes per line %u\n",
> > >                       bt->line_count, bt->line_bytes);
> > >       for (line = 0; line < bt->line_count; line++) {
> > >-              // At the beginning of every block we issue an IRQ with
> > previous (finished) block number set
> > >+              // At the beginning of every block we issue an IRQ with
> > >+              // previous (finished) block number set
> > >               if (!(buf_pos % bt->block_bytes))
> > >                       RISC_INSTR(RISC_WRITE | RISC_WR_SOL |
> RISC_WR_EOL
> > |
> > >                                  RISC_IRQ |
> > >-                                 RISC_STATUS(((buf_pos /
> > >-                                               bt->block_bytes) +
> > >-                                              (bt->block_count -
> > >-                                               1)) %
> > >-                                             bt->block_count) | bt->
> > >-                                 line_bytes);
> > >+                                 RISC_STATUS(((buf_pos /
> > bt->block_bytes)
> > +
> > >+                                              bt->block_count - 1) %
> > >+                                             bt->block_count) |
> > >+                                 bt->line_bytes);
> > >               else
> > >                       RISC_INSTR(RISC_WRITE | RISC_WR_SOL |
> RISC_WR_EOL
> > |
> > >                                  bt->line_bytes);
> > >@@ -212,23 +211,26 @@
> > >       u32 int_mask;
> > >
> > >       dprintk("bt878 debug: bt878_start (ctl=%8.8x)\n", controlreg);
> > >-      /* complete the writing of the risc dma program now we have
> > >-       * the card specifics
> > >-       */
> > >-      bt878_risc_program(bt);
> > >+
> > >       controlreg &= ~0x1f;
> > >-      controlreg |= 0x1b;
> > >+      btwrite(controlreg, BT878_AGPIO_DMA_CTL);
> > >
> > >
> > >
> >
> >
> > >       btwrite(bt->risc_dma, BT878_ARISC_START);
> > >+      bt->last_block = bt->block_count - 1;
> > >+
> > >+      bt->errors = 0;
> > >
> > >       int_mask = BT878_ARISCI;
> > >       if (bt878_debug)
> > >               int_mask |= BT878_ASCERR | BT878_AOCERR |
> > >                           BT878_APABORT | BT878_ARIPERR | BT878_APPERR
> |
> > >                           BT878_AFDSR | BT878_AFTRGT | BT878_AFBUS;
> > >-
> > >+      btwrite(int_mask, BT878_AINT_STAT);
> > >       btwrite(int_mask, BT878_AINT_MASK);
> > >-      btwrite(controlreg, BT878_AGPIO_DMA_CTL);
> > >+
> > >+      /* start dma (with fifo threshold at minimum) */
> > >+      /* just in case with a read-modify-write to flush prior writes
> */
> > >+      btor(0x13, BT878_AGPIO_DMA_CTL);
> > > }
> > >
> > > void bt878_stop(struct bt878 *bt)
> > >@@ -261,7 +263,7 @@
> > >
> > > static irqreturn_t bt878_irq(int irq, void *dev_id, struct pt_regs
> > *regs)
> > > {
> > >-      u32 stat, astat, mask;
> > >+      u32 stat, astat;
> > >       int count;
> > >       struct bt878 *bt;
> > >
> > >@@ -270,13 +272,16 @@
> > >       count = 0;
> > >       while (1) {
> > >               stat = btread(BT878_AINT_STAT);
> > >-              mask = btread(BT878_AINT_MASK);
> > >-              if (!(astat = (stat & mask)))
> > >-                      return IRQ_NONE;        /* this interrupt is not
> > for
> > me */
> > >-/*            dprintk("bt878(%d) debug: irq count %d, stat 0x%8.8x,
> mask
> > 0x%8.8x\n",bt->nr,count,stat,mask); */
> > >-              btwrite(astat, BT878_AINT_STAT);        /* try to clear
> > interupt condition */
> > >+              astat = stat & btread(BT878_AINT_MASK);
> > >+              if (!astat)
> > >+                      break;  /* not for us */
> > >
> > >+              btwrite(astat, BT878_AINT_STAT);  /* ack interrupt */
> > >
> > >+              if (astat & BT878_ARISCI) {
> > >+                      bt->finished_block = (stat & BT878_ARISCS) >>
> 28;
> > >+                      tasklet_schedule(&bt->tasklet);
> > >+              }
> > >               if (astat & (BT878_ASCERR | BT878_AOCERR)) {
> > >                       if (bt878_verbose) {
> > >                               printk(KERN_ERR
> > >@@ -309,21 +314,33 @@
> > >                                     btread(BT878_ARISC_PC));
> > >                       }
> > >               }
> > >-              if (astat & BT878_ARISCI) {
> > >-                      bt->finished_block = (stat & BT878_ARISCS) >>
> 28;
> > >-                      tasklet_schedule(&bt->tasklet);
> > >-                      break;
> > >+              if (astat & ~BT878_ARISCI) {
> > >+                      if (time_after(jiffies, bt->error_expire))
> > >+                              bt->errors = 0;
> > >+                      bt->error_expire = jiffies + 5*HZ;
> > >+                      bt->errors++;
> > >
> > >
> >
> > IMHO, You shouldn't be sleeping inside an interrupt handler. Use the
> > tasklet itself, if you need to sleep, for a predefined period, sleep
> > within the tasklet. But i wouldn't advise sleeping there either, since
> > this will cause other *working* modules which depend on this also to
> > sleep.
> >
> > Such changes would require all 878 cards to be tested quite thoroughly.
> > Right now i can't test this part ( for the dst, since it is a bit broken
> > at present )
> >
> > >+                      if (bt->errors == 10 || bt->errors == 15) {
> > >+                              printk(KERN_ERR "bt878(%d): too many
> > errors,
> > "
> > >+                                              "resetting dma\n",
> > bt->nr);
> > >+                              /* reset dma and set fifo-trigger to
> > minimum
> > */
> > >+                              btand(~0x1f, BT878_AGPIO_DMA_CTL);
> > >+                              btor(0x13, BT878_AGPIO_DMA_CTL);
> > >+                      }
> > >+                      if (bt->errors == 20) {
> > >+                              printk(KERN_ERR "bt878(%d): too many
> > errors,
> > "
> > >+                                              "shutting up\n",
> bt->nr);
> > >+                              btwrite(BT878_ARISCI, BT878_AINT_MASK);
> > >+                      }
> > >
> > >
> >
> > I would say that just,
> >
> > errors > error_count,
> > do_operations would be sufficient ..
> >
> > But anyway what's the idea behind reducing the fifo size if in case of
> > errors ? normally when we have communication errors , we generally
> > increase the buffer size, not reduce it...
> >
> > >               }
> > >               count++;
> > >-              if (count > 20) {
> > >+              if (count > 30) {
> > >                       btwrite(0, BT878_AINT_MASK);
> > >-                      printk(KERN_ERR
> > >-                             "bt878(%d): IRQ lockup, cleared int
> > mask\n",
> > >-                             bt->nr);
> > >+                      printk(KERN_ERR "bt878(%d): IRQ lockup,"
> > >+                                              " device disabled\n",
> > bt->nr);
> > >                       break;
> > >               }
> > >       }
> > >-      return IRQ_HANDLED;
> > >+      return IRQ_RETVAL(count);
> > > }
> > >
> > > int
> > >@@ -424,42 +441,35 @@
> > >       bt->bt878_mem = ioremap(bt->bt878_adr, 0x1000);
> > > #endif
> > >
> > >-      /* clear interrupt mask */
> > >-      btwrite(0, BT848_INT_MASK);
> > >+      /* disable interrupts and dma */
> > >+      btwrite(0, BT878_AINT_MASK);
> > >+      btwrite(0, BT878_AGPIO_DMA_CTL);
> > >
> > >       result = request_irq(bt->irq, bt878_irq,
> > >                            SA_SHIRQ | SA_INTERRUPT, "bt878",
> > >                            (void *) bt);
> > >-      if (result == -EINVAL) {
> > >-              printk(KERN_ERR "bt878(%d): Bad irq number or
> handler\n",
> > >-                     bt878_num);
> > >-              goto fail1;
> > >-      }
> > >       if (result == -EBUSY) {
> > >               printk(KERN_ERR
> > >                      "bt878(%d): IRQ %d busy, change your PnP config
> in
> > BIOS\n",
> > >                      bt878_num, bt->irq);
> > >               goto fail1;
> > >       }
> > >-      if (result < 0)
> > >+      if (result < 0) {
> > >+              printk(KERN_ERR "bt878(%d): Bad irq number or handler
> > (%d)\n",
> > >+                               bt878_num, result);
> > >               goto fail1;
> > >+      }
> > >
> > >       pci_set_master(dev);
> > >       pci_set_drvdata(dev, bt);
> > >
> > >-/*        if(init_bt878(btv) < 0) {
> > >-              bt878_remove(dev);
> > >-              return -EIO;
> > >-      }
> > >-*/
> > >-
> > >       if ((result = bt878_mem_alloc(bt))) {
> > >               printk(KERN_ERR "bt878: failed to allocate memory!\n");
> > >               goto fail2;
> > >       }
> > >
> > >-      bt878_make_risc(bt);
> > >-      btwrite(0, BT878_AINT_MASK);
> > >+      bt878_calc_line_size(bt);
> > >+      bt878_risc_program(bt);
> > >       bt878_num++;
> > >
> > >       return 0;
> > >@@ -491,7 +501,6 @@
> > >
> > >       /* disable PCI bus-mastering */
> > >       pci_read_config_byte(bt->dev, PCI_COMMAND, &command);
> > >-      /* Should this be &=~ ?? */
> > >       command &= ~PCI_COMMAND_MASTER;
> > >       pci_write_config_byte(bt->dev, PCI_COMMAND, command);
> > >
> > >
> > >
> > >
> >
> >
> > Manu
> >
> >
> >
> >
> > ------------------------------
> >
> > _______________________________________________
> > linux-dvb mailing list
> > linux-dvb at linuxtv.org
> > http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb
> >
> > End of linux-dvb Digest, Vol 12, Issue 31
> > *****************************************
> >
> >
> > --
> > 10 GB Mailbox, 100 FreeSMS/Monat http://www.gmx.net/de/go/topmail
> > +++ GMX - die erste Adresse f?r Mail, Message, More +++
> >
> > _______________________________________________
> > linux-dvb mailing list
> > linux-dvb at linuxtv.org
> > http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb
> >
> 
> 

-- 
------------------------------------------------------------
»Dr. S.F.W. Neggers
»Helmholtz Institute, dept. of Psychonomics
»Utrecht University
»Heidelberglaan 2, 3584 CS, Utrecht, the Netherlands
»Tel: (+32) 30 2534582  Fax: (+31) 30-2534511
»E-mail: B.neggers at fss.uu.nl
»WWW: http://www.fss.uu.nl/psn/pionier
------------------------------------------------------------

DSL-Aktion wegen großer Nachfrage bis 28.2.2006 verlängert:
GMX DSL-Flatrate 1 Jahr kostenlos* http://www.gmx.net/de/go/dsl

-- 
------------------------------------------------------------
»Dr. S.F.W. Neggers
»Helmholtz Institute, dept. of Psychonomics
»Utrecht University
»Heidelberglaan 2, 3584 CS, Utrecht, the Netherlands
»Tel: (+32) 30 2534582  Fax: (+31) 30-2534511
»E-mail: B.neggers at fss.uu.nl
»WWW: http://www.fss.uu.nl/psn/pionier
------------------------------------------------------------

Lust, ein paar Euro nebenbei zu verdienen? Ohne Kosten, ohne Risiko!
Satte Provisionen für GMX Partner: http://www.gmx.net/de/go/partner



More information about the linux-dvb mailing list