aboutsummaryrefslogtreecommitdiff
path: root/arch/arm/mach-s3c2440/camera/videodev.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-s3c2440/camera/videodev.c')
-rw-r--r--arch/arm/mach-s3c2440/camera/videodev.c332
1 files changed, 0 insertions, 332 deletions
diff --git a/arch/arm/mach-s3c2440/camera/videodev.c b/arch/arm/mach-s3c2440/camera/videodev.c
deleted file mode 100644
index 6f862e495a7..00000000000
--- a/arch/arm/mach-s3c2440/camera/videodev.c
+++ /dev/null
@@ -1,332 +0,0 @@
-/*
- * Video capture interface for Linux Character Device Driver.
- * based on
- * Alan Cox, <alan@redhat.com> video4linux
- *
- * Author: SW.LEE <hitchcar@samsung.com>
- * 2004 (C) Samsung Electronics
- * Modified for S3C2440/S3C24A0 Interface
- *
- * This file is released under the GPLv2
- */
-
-
-#include <linux/module.h>
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/smp_lock.h>
-#include <linux/mm.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-#include <linux/init.h>
-#include <linux/kmod.h>
-#include <linux/slab.h>
-/* #include <linux/devfs_fs_kernel.h> */
-#include <linux/miscdevice.h>
-#include <asm/uaccess.h>
-#include <asm/system.h>
-#include <asm/semaphore.h>
-
-
-
-#define CONFIG_VIDEO_V4L1_COMPAT
-#include <linux/videodev.h>
-#include "camif.h"
-#include "miscdevice.h"
-
-
-static DECLARE_MUTEX(videodev_lock);
-
-const char *fimc_version = "$Id: videodev.c,v 1.1.1.1 2004/04/27 03:52:50 swlee Exp $";
-
-#define VIDEO_NAME "video4linux"
-
-
-#define VIDEO_NUM_DEVICES 2
-static struct video_device *video_device[VIDEO_NUM_DEVICES];
-
-static inline struct video_device * get_vd(int nr)
-{
- if ( nr == CODEC_MINOR)
- return video_device[0];
- else {
- assert ( nr & PREVIEW_MINOR);
- return video_device[1];
- }
-}
-
-static inline void set_vd ( struct video_device * vd, int nr)
-{
- if ( nr == CODEC_MINOR)
- video_device[0] = vd;
- else {
- assert ( nr & PREVIEW_MINOR);
- video_device[1] = vd;
- }
-}
-
-static inline int video_release(struct inode *inode, struct file *f)
-{
- int minor = MINOR(inode->i_rdev);
- struct video_device *vfd;
-
- vfd = get_vd(minor);
-#if 1 /* needed until all drivers are fixed */
- if (!vfd->release)
- return 0;
-#endif
- vfd->release(vfd);
- return 0;
-}
-
-struct video_device* video_devdata(struct file *file)
-{
- return video_device[iminor(file->f_dentry->d_inode)];
-}
-
-
-/*
- * Open a video device.
- */
-static int video_open(struct inode *inode, struct file *file)
-{
- int minor = MINOR(inode->i_rdev);
- int err = 0;
- struct video_device *vfl;
- struct file_operations const *old_fops;
-
- down(&videodev_lock);
-
- vfl = get_vd(minor);
-
- old_fops = file->f_op;
- file->f_op = fops_get(vfl->fops);
- if(file->f_op->open)
- err = file->f_op->open(inode,file);
- if (err) {
- fops_put(file->f_op);
- file->f_op = fops_get(old_fops);
- }
- fops_put(old_fops);
- up(&videodev_lock);
- return err;
-}
-
-/*
- * open/release helper functions -- handle exclusive opens
- */
-extern int video_exclusive_open(struct inode *inode, struct file *file)
-{
- struct video_device *vfl = get_vd(MINOR(inode->i_rdev));
- int retval = 0;
-
- mutex_lock(&vfl->lock);
- if (vfl->users) {
- retval = -EBUSY;
- } else {
- vfl->users++;
- }
- mutex_unlock(&vfl->lock);
- return retval;
-}
-
-extern int video_exclusive_release(struct inode *inode, struct file *file)
-{
- struct video_device *vfl = get_vd(MINOR(inode->i_rdev));
- vfl->users--;
- return 0;
-}
-
-int
-video_usercopy(struct inode *inode, struct file *file,
- unsigned int cmd, unsigned long arg,
- int (*func)(struct inode *inode, struct file *file,
- unsigned int cmd, void *arg))
-{
- char sbuf[128];
- void *mbuf = NULL;
- void *parg = NULL;
- int err = -EINVAL;
-
- // cmd = video_fix_command(cmd);
-
- /* Copy arguments into temp kernel buffer */
- switch (_IOC_DIR(cmd)) {
- case _IOC_NONE:
- parg = (void *)arg;
- break;
- case _IOC_READ:
- case _IOC_WRITE:
- case (_IOC_WRITE | _IOC_READ):
- if (_IOC_SIZE(cmd) <= sizeof(sbuf)) {
- parg = sbuf;
- } else {
- /* too big to allocate from stack */
- mbuf = kmalloc(_IOC_SIZE(cmd),GFP_KERNEL);
- if (NULL == mbuf)
- return -ENOMEM;
- parg = mbuf;
- }
-
- err = -EFAULT;
- if (_IOC_DIR(cmd) & _IOC_WRITE)
- if (copy_from_user(parg, (void *)arg, _IOC_SIZE(cmd)))
- goto out;
- break;
- }
-
- /* call driver */
- err = func(inode, file, cmd, parg);
- if (err == -ENOIOCTLCMD)
- err = -EINVAL;
- if (err < 0)
- goto out;
-
- /* Copy results into user buffer */
- switch (_IOC_DIR(cmd))
- {
- case _IOC_READ:
- case (_IOC_WRITE | _IOC_READ):
- if (copy_to_user((void *)arg, parg, _IOC_SIZE(cmd)))
- err = -EFAULT;
- break;
- }
-
-out:
- if (mbuf)
- kfree(mbuf);
- return err;
-}
-
-
-static struct file_operations video_fops=
-{
- .owner = THIS_MODULE,
- .llseek = no_llseek,
- .open = video_open,
- .release = video_release,
-};
-
-static struct miscdevice codec_dev = {
- minor: CODEC_MINOR,
- name : "codec",
- fops : &video_fops
-};
-
-static struct miscdevice preview_dev = {
- minor: PREVIEW_MINOR,
- name : "preview",
- fops : &video_fops
-};
-
-
-/**
- * video_register_device - register video4linux devices
- * @vfd: video device structure we want to register
- * @type: type of device to register
- * @nr: minor number
- *
- * Zero is returned on success.
- * type : ignored.
- * nr :
- * 0 Codec index
- * 1 Preview index
- */
-int video_register_device(struct video_device *vfd, int type, int nr)
-{
- int ret=0;
-
- /* pick a minor number */
- down(&videodev_lock);
- set_vd (vfd, nr);
- vfd->minor=nr;
- up(&videodev_lock);
-
- switch (vfd->minor) {
- case CODEC_MINOR:
- ret = misc_register(&codec_dev);
- if (ret) {
- printk(KERN_ERR
- "can't misc_register : codec on minor=%d\n", CODEC_MINOR);
- panic(" Give me misc codec \n");
- }
- break;
- case PREVIEW_MINOR:
- ret = misc_register(&preview_dev);
- if (ret) {
- printk(KERN_ERR
- "can't misc_register (preview) on minor=%d\n", PREVIEW_MINOR);
- panic(" Give me misc codec \n");
- }
- break;
- }
-
-#if 0 /* needed until all drivers are fixed */
- if (!vfd->release)
- printk(KERN_WARNING "videodev: \"%s\" has no release callback. "
- "Please fix your driver for proper sysfs support, see "
- "http://lwn.net/Articles/36850/\n", vfd->name);
-#endif
- return 0;
-}
-
-/**
- * video_unregister_device - unregister a video4linux device
- * @vfd: the device to unregister
- *
- * This unregisters the passed device and deassigns the minor
- * number. Future open calls will be met with errors.
- */
-
-void video_unregister_device(struct video_device *vfd)
-{
- down(&videodev_lock);
-
- if(get_vd(vfd->minor)!=vfd)
- panic("videodev: bad unregister");
-
- if (vfd->minor== CODEC_MINOR)
- misc_deregister(&codec_dev);
- else
- misc_deregister(&preview_dev);
- set_vd (NULL, vfd->minor);
- up(&videodev_lock);
-}
-
-
-/*
- * Initialise video for linux
- */
-
-static int __init videodev_init(void)
-{
-// printk(KERN_INFO "FIMC2.0 Built:"__DATE__" "__TIME__"\n%s\n",fimc_version);
- return 0;
-}
-
-static void __exit videodev_exit(void)
-{
-}
-
-module_init(videodev_init)
-module_exit(videodev_exit)
-
-EXPORT_SYMBOL(video_register_device);
-EXPORT_SYMBOL(fimc_version);
-EXPORT_SYMBOL(video_unregister_device);
-EXPORT_SYMBOL(video_usercopy);
-EXPORT_SYMBOL(video_exclusive_open);
-EXPORT_SYMBOL(video_exclusive_release);
-
-
-MODULE_AUTHOR("SW.LEE <hitchcar@sec.samsung.com>");
-MODULE_DESCRIPTION("VideoDev For FIMC2.0 MISC Drivers");
-MODULE_LICENSE("GPL");
-
-
-/*
- * Local variables:
- * c-basic-offset: 8
- * End:
- */