static int io_port = 0x250;
static int data_port = 0x251;
static int mem_base = 0xC8000;
+static void __iomem *mem;
static int video_nr = -1;
{
int y;
int dw = 2*dev->width;
- u32 src = mem_base;
char tmp[dw+32]; /* using a temp buffer is faster than direct */
int cnt = 0;
for (y = 0; y < dev->height; y++ )
{
- isa_writeb(0, src); /* synchronisiert neue Zeile */
+ writeb(0, mem); /* synchronisiert neue Zeile */
/*
* This is in truth a fifo, be very careful as if you
* forgot this odd things will occur 8)
*/
- isa_memcpy_fromio(tmp, src, dw+32); /* discard 16 word */
+ memcpy_fromio(tmp, mem, dw+32); /* discard 16 word */
cnt -= dev->height;
while (cnt <= 0)
{
return video_usercopy(inode, file, cmd, arg, pms_do_ioctl);
}
-static int pms_read(struct file *file, char __user *buf,
+static ssize_t pms_read(struct file *file, char __user *buf,
size_t count, loff_t *ppos)
{
struct video_device *v = video_devdata(file);
.fops = &pms_fops,
};
-struct pms_device pms_device;
+static struct pms_device pms_device;
/*
0x34,0x0A,0xF4,0xCE,
0xE4
};
+
+ mem = ioremap(mem_base, 0x800);
+ if (!mem)
+ return -ENOMEM;
if (!request_region(0x9A01, 1, "Mediavision PMS config"))
{
printk(KERN_WARNING "mediavision: unable to detect: 0x9A01 in use.\n");
+ iounmap(mem);
return -EBUSY;
}
if (!request_region(io_port, 3, "Mediavision PMS"))
{
printk(KERN_WARNING "mediavision: I/O port %d in use.\n", io_port);
release_region(0x9A01, 1);
+ iounmap(mem);
return -EBUSY;
}
outb(0xB8, 0x9A01); /* Unlock */
if(idec == 0) {
release_region(io_port, 3);
release_region(0x9A01, 1);
+ iounmap(mem);
return -ENODEV;
}
return video_register_device((struct video_device *)&pms_device, VFL_TYPE_GRABBER, video_nr);
}
-MODULE_PARM(io_port,"i");
-MODULE_PARM(mem_base,"i");
-MODULE_PARM(video_nr,"i");
+module_param(io_port, int, 0);
+module_param(mem_base, int, 0);
+module_param(video_nr, int, 0);
MODULE_LICENSE("GPL");
{
shutdown_mediavision();
video_unregister_device((struct video_device *)&pms_device);
+ iounmap(mem);
}
module_init(init_pms_cards);