summaryrefslogtreecommitdiff
path: root/linux/drivers/media/dvb
diff options
context:
space:
mode:
authorHolger Waechtler <devnull@localhost>2003-06-21 14:54:16 +0000
committerHolger Waechtler <devnull@localhost>2003-06-21 14:54:16 +0000
commit6cb7f752732bf161ea8a56f8531c21d37fd98fc0 (patch)
tree65109db0c67b73298436212e7fc0b92d3b1a99ed /linux/drivers/media/dvb
parente3fcc2f04b88285be9b9f480461348dee33cdd3c (diff)
downloadmediapointer-dvb-s2-6cb7f752732bf161ea8a56f8531c21d37fd98fc0.tar.gz
mediapointer-dvb-s2-6cb7f752732bf161ea8a56f8531c21d37fd98fc0.tar.bz2
- 2.5 API changes for bt878
- remove flush_workqueue(wq) from dvb_net.c -- don't we have to ensure that the handler has finished? all other drivers don't do this as well...?
Diffstat (limited to 'linux/drivers/media/dvb')
-rw-r--r--linux/drivers/media/dvb/bt8xx/bt878.c15
-rw-r--r--linux/drivers/media/dvb/dvb-core/dvb_compat.h13
-rw-r--r--linux/drivers/media/dvb/dvb-core/dvb_net.c1
3 files changed, 10 insertions, 19 deletions
diff --git a/linux/drivers/media/dvb/bt8xx/bt878.c b/linux/drivers/media/dvb/bt8xx/bt878.c
index 27f01bb73..f876332e0 100644
--- a/linux/drivers/media/dvb/bt8xx/bt878.c
+++ b/linux/drivers/media/dvb/bt8xx/bt878.c
@@ -36,13 +36,13 @@
#include <asm/pgtable.h>
#include <asm/page.h>
#include <linux/types.h>
-#include <linux/wrapper.h>
#include <linux/interrupt.h>
#include <linux/kmod.h>
#include <linux/vmalloc.h>
#include <linux/init.h>
#include "bt878.h"
+#include "dvb_functions.h"
/**************************************/
/* Miscellaneous utility definitions */
@@ -273,7 +273,8 @@ EXPORT_SYMBOL(bt878_stop);
/* Interrupt service routine */
/*****************************/
-static void bt878_irq(int irq, void *dev_id, struct pt_regs * regs)
+static
+irqreturn_t bt878_irq(int irq, void *dev_id, struct pt_regs * regs)
{
u32 stat,astat,mask;
int count;
@@ -285,7 +286,8 @@ static void bt878_irq(int irq, void *dev_id, struct pt_regs * regs)
while(1) {
stat=btread(BT878_AINT_STAT);
mask=btread(BT878_AINT_MASK);
- if(!(astat=(stat&mask))) return; /* this interrupt is not for me */
+ 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 */
@@ -324,8 +326,9 @@ static void bt878_irq(int irq, void *dev_id, struct pt_regs * regs)
bt->finished_block = (stat & BT878_ARISCS) >> 28;
spin_unlock(&bt->s_lock);
wake_up_interruptible(&bt->readq);
- if(bt->tasklet) tasklet_schedule(bt->tasklet);
- return;
+ if(bt->tasklet)
+ tasklet_schedule(bt->tasklet);
+ break;
}
count++;
if(count>20) {
@@ -335,6 +338,8 @@ static void bt878_irq(int irq, void *dev_id, struct pt_regs * regs)
break;
}
}
+
+ return IRQ_HANDLED;
}
/***********************/
diff --git a/linux/drivers/media/dvb/dvb-core/dvb_compat.h b/linux/drivers/media/dvb/dvb-core/dvb_compat.h
index b867f09ff..ae64b6632 100644
--- a/linux/drivers/media/dvb/dvb-core/dvb_compat.h
+++ b/linux/drivers/media/dvb/dvb-core/dvb_compat.h
@@ -98,19 +98,6 @@ extern struct page * vmalloc_to_page(void *addr);
#define work_struct tq_struct
#define INIT_WORK(wq,routine,data) INIT_TQUEUE(wq,routine,data)
#define schedule_work(wq) schedule_task(wq)
-static inline
-void flush_workqueue(struct tq_struct *wq)
-{
- unsigned long flags;
- /**
- * we take the simple approach and just remove wq from the list of
- * scheduled tasks -- should work for us
- */
- spin_lock_irqsave(&tqueue_lock, flags);
- if (test_bit(0, &wq->sync))
- list_del(&wq->list);
- spin_unlock_irqrestore(&tqueue_lock, flags);
-}
#else
#include <linux/workqueue.h>
#endif
diff --git a/linux/drivers/media/dvb/dvb-core/dvb_net.c b/linux/drivers/media/dvb/dvb-core/dvb_net.c
index cc07299f8..fc919f4aa 100644
--- a/linux/drivers/media/dvb/dvb-core/dvb_net.c
+++ b/linux/drivers/media/dvb/dvb-core/dvb_net.c
@@ -494,7 +494,6 @@ int dvb_net_remove_if(struct dvb_net *dvbnet, int num)
return -EINVAL;
dvb_net_stop(&dvbnet->device[num]);
- flush_workqueue(&priv->wq);
kfree(priv);
unregister_netdev(&dvbnet->device[num]);
dvbnet->state[num]=0;