X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fmedia%2Fvideo%2Fsaa5249.c;h=e9846574e804a57fdeefbc5549d80a1d02c9c77f;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=d486fb7faf67ffcc445ee3e73d4fbe353a1fdce1;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/drivers/media/video/saa5249.c b/drivers/media/video/saa5249.c index d486fb7fa..e9846574e 100644 --- a/drivers/media/video/saa5249.c +++ b/drivers/media/video/saa5249.c @@ -1,4 +1,7 @@ /* + * Modified in order to keep it compatible both with new and old videotext IOCTLs by + * Michael Geng + * * Cleaned up to use existing videodev interface and allow the idea * of multiple teletext decoders on the video4linux iface. Changed i2c * to cover addressing clashes on device busses. It's also rebuilt so @@ -58,7 +61,7 @@ #include #define VTX_VER_MAJ 1 -#define VTX_VER_MIN 7 +#define VTX_VER_MIN 8 @@ -273,8 +276,7 @@ static void jdelay(unsigned long delay) sigfillset(¤t->blocked); recalc_sigpending(); spin_unlock_irq(¤t->sighand->siglock); - current->state = TASK_INTERRUPTIBLE; - schedule_timeout(delay); + msleep_interruptible(jiffies_to_msecs(delay)); spin_lock_irq(¤t->sighand->siglock); current->blocked = oldblocked; @@ -578,6 +580,54 @@ static int do_saa5249_ioctl(struct inode *inode, struct file *file, return -EINVAL; } +/* + * Translates old vtx IOCTLs to new ones + * + * This keeps new kernel versions compatible with old userspace programs. + */ +static inline unsigned int vtx_fix_command(unsigned int cmd) +{ + switch (cmd) { + case VTXIOCGETINFO_OLD: + cmd = VTXIOCGETINFO; + break; + case VTXIOCCLRPAGE_OLD: + cmd = VTXIOCCLRPAGE; + break; + case VTXIOCCLRFOUND_OLD: + cmd = VTXIOCCLRFOUND; + break; + case VTXIOCPAGEREQ_OLD: + cmd = VTXIOCPAGEREQ; + break; + case VTXIOCGETSTAT_OLD: + cmd = VTXIOCGETSTAT; + break; + case VTXIOCGETPAGE_OLD: + cmd = VTXIOCGETPAGE; + break; + case VTXIOCSTOPDAU_OLD: + cmd = VTXIOCSTOPDAU; + break; + case VTXIOCPUTPAGE_OLD: + cmd = VTXIOCPUTPAGE; + break; + case VTXIOCSETDISP_OLD: + cmd = VTXIOCSETDISP; + break; + case VTXIOCPUTSTAT_OLD: + cmd = VTXIOCPUTSTAT; + break; + case VTXIOCCLRCACHE_OLD: + cmd = VTXIOCCLRCACHE; + break; + case VTXIOCSETVIRT_OLD: + cmd = VTXIOCSETVIRT; + break; + } + return cmd; +} + /* * Handle the locking */ @@ -589,6 +639,7 @@ static int saa5249_ioctl(struct inode *inode, struct file *file, struct saa5249_device *t=vd->priv; int err; + cmd = vtx_fix_command(cmd); down(&t->lock); err = video_usercopy(inode,file,cmd,arg,do_saa5249_ioctl); up(&t->lock);