Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 018ec544 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

V4L/DVB (5750): Remove obsoleted support for PROC_FS on vicam.c

Procfs support on V4L were converted to sysfs support by a pre-2.6 patch:

	http://www.ussg.iu.edu/hypermail/linux/kernel/0307.1/2356.html



There's no sense on keeping the dead code inside vicam.c. Also,it won't
work anyway, as part of proc_fs support were previously inside
videodev.c.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 890be2bb
Loading
Loading
Loading
Loading
+0 −181
Original line number Diff line number Diff line
@@ -42,7 +42,6 @@
#include <linux/usb.h>
#include <linux/vmalloc.h>
#include <linux/slab.h>
#include <linux/proc_fs.h>
#include <linux/mutex.h>
#include "usbvideo.h"

@@ -417,11 +416,6 @@ struct vicam_camera {
	u8 open_count;
	u8 bulkEndpoint;
	int needsDummyRead;

#if defined(CONFIG_VIDEO_PROC_FS)
	struct proc_dir_entry *proc_dir;
#endif

};

static int vicam_probe( struct usb_interface *intf, const struct usb_device_id *id);
@@ -1065,175 +1059,6 @@ vicam_mmap(struct file *file, struct vm_area_struct *vma)
	return 0;
}

#if defined(CONFIG_VIDEO_PROC_FS)

static struct proc_dir_entry *vicam_proc_root = NULL;

static int vicam_read_helper(char *page, char **start, off_t off,
				int count, int *eof, int value)
{
	char *out = page;
	int len;

	out += sprintf(out, "%d",value);

	len = out - page;
	len -= off;
	if (len < count) {
		*eof = 1;
		if (len <= 0)
			return 0;
	} else
		len = count;

	*start = page + off;
	return len;
}

static int vicam_read_proc_shutter(char *page, char **start, off_t off,
				int count, int *eof, void *data)
{
	return vicam_read_helper(page,start,off,count,eof,
				((struct vicam_camera *)data)->shutter_speed);
}

static int vicam_read_proc_gain(char *page, char **start, off_t off,
				int count, int *eof, void *data)
{
	return vicam_read_helper(page,start,off,count,eof,
				((struct vicam_camera *)data)->gain);
}

static int
vicam_write_proc_shutter(struct file *file, const char *buffer,
			 unsigned long count, void *data)
{
	u16 stmp;
	char kbuf[8];
	struct vicam_camera *cam = (struct vicam_camera *) data;

	if (count > 6)
		return -EINVAL;

	if (copy_from_user(kbuf, buffer, count))
		return -EFAULT;

	stmp = (u16) simple_strtoul(kbuf, NULL, 10);
	if (stmp < 4 || stmp > 32000)
		return -EINVAL;

	cam->shutter_speed = stmp;

	return count;
}

static int
vicam_write_proc_gain(struct file *file, const char *buffer,
		      unsigned long count, void *data)
{
	u16 gtmp;
	char kbuf[8];

	struct vicam_camera *cam = (struct vicam_camera *) data;

	if (count > 4)
		return -EINVAL;

	if (copy_from_user(kbuf, buffer, count))
		return -EFAULT;

	gtmp = (u16) simple_strtoul(kbuf, NULL, 10);
	if (gtmp > 255)
		return -EINVAL;
	cam->gain = gtmp;

	return count;
}

static void
vicam_create_proc_root(void)
{
	vicam_proc_root = proc_mkdir("video/vicam", NULL);

	if (vicam_proc_root)
		vicam_proc_root->owner = THIS_MODULE;
	else
		printk(KERN_ERR
		       "could not create /proc entry for vicam!");
}

static void
vicam_destroy_proc_root(void)
{
	if (vicam_proc_root)
		remove_proc_entry("video/vicam", 0);
}

static void
vicam_create_proc_entry(struct vicam_camera *cam)
{
	char name[64];
	struct proc_dir_entry *ent;

	DBG(KERN_INFO "vicam: creating proc entry\n");

	if (!vicam_proc_root || !cam) {
		printk(KERN_INFO
		       "vicam: could not create proc entry, %s pointer is null.\n",
		       (!cam ? "camera" : "root"));
		return;
	}

	sprintf(name, "video%d", cam->vdev.minor);

	cam->proc_dir = proc_mkdir(name, vicam_proc_root);

	if ( !cam->proc_dir )
		return; // FIXME: We should probably return an error here

	ent = create_proc_entry("shutter", S_IFREG | S_IRUGO | S_IWUSR,
				cam->proc_dir);
	if (ent) {
		ent->data = cam;
		ent->read_proc = vicam_read_proc_shutter;
		ent->write_proc = vicam_write_proc_shutter;
		ent->size = 64;
	}

	ent = create_proc_entry("gain", S_IFREG | S_IRUGO | S_IWUSR,
				cam->proc_dir);
	if (ent) {
		ent->data = cam;
		ent->read_proc = vicam_read_proc_gain;
		ent->write_proc = vicam_write_proc_gain;
		ent->size = 64;
	}
}

static void
vicam_destroy_proc_entry(void *ptr)
{
	struct vicam_camera *cam = (struct vicam_camera *) ptr;
	char name[16];

	if ( !cam->proc_dir )
		return;

	sprintf(name, "video%d", cam->vdev.minor);
	remove_proc_entry("shutter", cam->proc_dir);
	remove_proc_entry("gain", cam->proc_dir);
	remove_proc_entry(name,vicam_proc_root);
	cam->proc_dir = NULL;

}

#else
static inline void vicam_create_proc_root(void) { }
static inline void vicam_destroy_proc_root(void) { }
static inline void vicam_create_proc_entry(struct vicam_camera *cam) { }
static inline void vicam_destroy_proc_entry(void *ptr) { }
#endif

static const struct file_operations vicam_fops = {
	.owner		= THIS_MODULE,
	.open		= vicam_open,
@@ -1330,8 +1155,6 @@ vicam_probe( struct usb_interface *intf, const struct usb_device_id *id)
		return -EIO;
	}

	vicam_create_proc_entry(cam);

	printk(KERN_INFO "ViCam webcam driver now controlling video device %d\n",cam->vdev.minor);

	usb_set_intfdata (intf, cam);
@@ -1363,8 +1186,6 @@ vicam_disconnect(struct usb_interface *intf)

	cam->udev = NULL;

	vicam_destroy_proc_entry(cam);

	/* the only thing left to do is synchronize with
	 * our close/release function on who should release
	 * the camera memory. if there are any users using the
@@ -1390,7 +1211,6 @@ usb_vicam_init(void)
{
	int retval;
	DBG(KERN_INFO "ViCam-based WebCam driver startup\n");
	vicam_create_proc_root();
	retval = usb_register(&vicam_driver);
	if (retval)
		printk(KERN_WARNING "usb_register failed!\n");
@@ -1404,7 +1224,6 @@ usb_vicam_exit(void)
	       "ViCam-based WebCam driver shutdown\n");

	usb_deregister(&vicam_driver);
	vicam_destroy_proc_root();
}

module_init(usb_vicam_init);