Commit 873ecd8f authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

V4L/DVB: cpia2: remove V4L1 support from this driver

V4L1 is deprecated and will be removed completely soon.
Signed-off-by: default avatarHans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 401e5f8d
config VIDEO_CPIA2 config VIDEO_CPIA2
tristate "CPiA2 Video For Linux" tristate "CPiA2 Video For Linux"
depends on VIDEO_DEV && USB && VIDEO_V4L1 depends on VIDEO_DEV && USB && VIDEO_V4L2
---help--- ---help---
This is the video4linux driver for cameras based on Vision's CPiA2 This is the video4linux driver for cameras based on Vision's CPiA2
(Colour Processor Interface ASIC), such as the Digital Blue QX5 (Colour Processor Interface ASIC), such as the Digital Blue QX5
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#define __CPIA2_H__ #define __CPIA2_H__
#include <linux/version.h> #include <linux/version.h>
#include <linux/videodev.h> #include <linux/videodev2.h>
#include <media/v4l2-common.h> #include <media/v4l2-common.h>
#include <linux/usb.h> #include <linux/usb.h>
#include <linux/poll.h> #include <linux/poll.h>
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
/* define for verbose debug output */ /* define for verbose debug output */
//#define _CPIA2_DEBUG_ //#define _CPIA2_DEBUG_
#define CPIA2_MAJ_VER 2 #define CPIA2_MAJ_VER 3
#define CPIA2_MIN_VER 0 #define CPIA2_MIN_VER 0
#define CPIA2_PATCH_VER 0 #define CPIA2_PATCH_VER 0
...@@ -396,8 +396,8 @@ struct camera_data { ...@@ -396,8 +396,8 @@ struct camera_data {
/* v4l */ /* v4l */
int video_size; /* VIDEO_SIZE_ */ int video_size; /* VIDEO_SIZE_ */
struct video_device *vdev; /* v4l videodev */ struct video_device *vdev; /* v4l videodev */
struct video_picture vp; /* v4l camera settings */ u32 width;
struct video_window vw; /* v4l capture area */ u32 height; /* Its size */
__u32 pixelformat; /* Format fourcc */ __u32 pixelformat; /* Format fourcc */
/* USB */ /* USB */
......
...@@ -1058,44 +1058,44 @@ static int set_vw_size(struct camera_data *cam, int size) ...@@ -1058,44 +1058,44 @@ static int set_vw_size(struct camera_data *cam, int size)
DBG("Setting size to VGA\n"); DBG("Setting size to VGA\n");
cam->params.roi.width = STV_IMAGE_VGA_COLS; cam->params.roi.width = STV_IMAGE_VGA_COLS;
cam->params.roi.height = STV_IMAGE_VGA_ROWS; cam->params.roi.height = STV_IMAGE_VGA_ROWS;
cam->vw.width = STV_IMAGE_VGA_COLS; cam->width = STV_IMAGE_VGA_COLS;
cam->vw.height = STV_IMAGE_VGA_ROWS; cam->height = STV_IMAGE_VGA_ROWS;
break; break;
case VIDEOSIZE_CIF: case VIDEOSIZE_CIF:
DBG("Setting size to CIF\n"); DBG("Setting size to CIF\n");
cam->params.roi.width = STV_IMAGE_CIF_COLS; cam->params.roi.width = STV_IMAGE_CIF_COLS;
cam->params.roi.height = STV_IMAGE_CIF_ROWS; cam->params.roi.height = STV_IMAGE_CIF_ROWS;
cam->vw.width = STV_IMAGE_CIF_COLS; cam->width = STV_IMAGE_CIF_COLS;
cam->vw.height = STV_IMAGE_CIF_ROWS; cam->height = STV_IMAGE_CIF_ROWS;
break; break;
case VIDEOSIZE_QVGA: case VIDEOSIZE_QVGA:
DBG("Setting size to QVGA\n"); DBG("Setting size to QVGA\n");
cam->params.roi.width = STV_IMAGE_QVGA_COLS; cam->params.roi.width = STV_IMAGE_QVGA_COLS;
cam->params.roi.height = STV_IMAGE_QVGA_ROWS; cam->params.roi.height = STV_IMAGE_QVGA_ROWS;
cam->vw.width = STV_IMAGE_QVGA_COLS; cam->width = STV_IMAGE_QVGA_COLS;
cam->vw.height = STV_IMAGE_QVGA_ROWS; cam->height = STV_IMAGE_QVGA_ROWS;
break; break;
case VIDEOSIZE_288_216: case VIDEOSIZE_288_216:
cam->params.roi.width = 288; cam->params.roi.width = 288;
cam->params.roi.height = 216; cam->params.roi.height = 216;
cam->vw.width = 288; cam->width = 288;
cam->vw.height = 216; cam->height = 216;
break; break;
case VIDEOSIZE_256_192: case VIDEOSIZE_256_192:
cam->vw.width = 256; cam->width = 256;
cam->vw.height = 192; cam->height = 192;
cam->params.roi.width = 256; cam->params.roi.width = 256;
cam->params.roi.height = 192; cam->params.roi.height = 192;
break; break;
case VIDEOSIZE_224_168: case VIDEOSIZE_224_168:
cam->vw.width = 224; cam->width = 224;
cam->vw.height = 168; cam->height = 168;
cam->params.roi.width = 224; cam->params.roi.width = 224;
cam->params.roi.height = 168; cam->params.roi.height = 168;
break; break;
case VIDEOSIZE_192_144: case VIDEOSIZE_192_144:
cam->vw.width = 192; cam->width = 192;
cam->vw.height = 144; cam->height = 144;
cam->params.roi.width = 192; cam->params.roi.width = 192;
cam->params.roi.height = 144; cam->params.roi.height = 144;
break; break;
...@@ -1103,8 +1103,8 @@ static int set_vw_size(struct camera_data *cam, int size) ...@@ -1103,8 +1103,8 @@ static int set_vw_size(struct camera_data *cam, int size)
DBG("Setting size to QCIF\n"); DBG("Setting size to QCIF\n");
cam->params.roi.width = STV_IMAGE_QCIF_COLS; cam->params.roi.width = STV_IMAGE_QCIF_COLS;
cam->params.roi.height = STV_IMAGE_QCIF_ROWS; cam->params.roi.height = STV_IMAGE_QCIF_ROWS;
cam->vw.width = STV_IMAGE_QCIF_COLS; cam->width = STV_IMAGE_QCIF_COLS;
cam->vw.height = STV_IMAGE_QCIF_ROWS; cam->height = STV_IMAGE_QCIF_ROWS;
break; break;
default: default:
retval = -EINVAL; retval = -EINVAL;
...@@ -2224,23 +2224,8 @@ static void reset_camera_struct(struct camera_data *cam) ...@@ -2224,23 +2224,8 @@ static void reset_camera_struct(struct camera_data *cam)
cam->params.roi.height = STV_IMAGE_CIF_ROWS; cam->params.roi.height = STV_IMAGE_CIF_ROWS;
} }
/*** cam->width = cam->params.roi.width;
* Fill in the v4l structures. video_cap is filled in inside the VIDIOCCAP cam->height = cam->params.roi.height;
* Ioctl. Here, just do the window and picture stucts.
***/
cam->vp.palette = (u16) VIDEO_PALETTE_RGB24; /* Is this right? */
cam->vp.brightness = (u16) cam->params.color_params.brightness * 256;
cam->vp.colour = (u16) cam->params.color_params.saturation * 256;
cam->vp.contrast = (u16) cam->params.color_params.contrast * 256;
cam->vw.x = 0;
cam->vw.y = 0;
cam->vw.width = cam->params.roi.width;
cam->vw.height = cam->params.roi.height;
cam->vw.flags = 0;
cam->vw.clipcount = 0;
return;
} }
/****************************************************************************** /******************************************************************************
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/videodev.h> #include <linux/videodev2.h>
#include <linux/stringify.h> #include <linux/stringify.h>
#include <media/v4l2-ioctl.h> #include <media/v4l2-ioctl.h>
...@@ -391,113 +391,6 @@ static unsigned int cpia2_v4l_poll(struct file *filp, struct poll_table_struct * ...@@ -391,113 +391,6 @@ static unsigned int cpia2_v4l_poll(struct file *filp, struct poll_table_struct *
} }
/******************************************************************************
*
* ioctl_cap_query
*
*****************************************************************************/
static int ioctl_cap_query(void *arg, struct camera_data *cam)
{
struct video_capability *vc;
int retval = 0;
vc = arg;
if (cam->params.pnp_id.product == 0x151)
strcpy(vc->name, "QX5 Microscope");
else
strcpy(vc->name, "CPiA2 Camera");
vc->type = VID_TYPE_CAPTURE | VID_TYPE_MJPEG_ENCODER;
vc->channels = 1;
vc->audios = 0;
vc->minwidth = 176; /* VIDEOSIZE_QCIF */
vc->minheight = 144;
switch (cam->params.version.sensor_flags) {
case CPIA2_VP_SENSOR_FLAGS_500:
vc->maxwidth = STV_IMAGE_VGA_COLS;
vc->maxheight = STV_IMAGE_VGA_ROWS;
break;
case CPIA2_VP_SENSOR_FLAGS_410:
vc->maxwidth = STV_IMAGE_CIF_COLS;
vc->maxheight = STV_IMAGE_CIF_ROWS;
break;
default:
return -EINVAL;
}
return retval;
}
/******************************************************************************
*
* ioctl_get_channel
*
*****************************************************************************/
static int ioctl_get_channel(void *arg)
{
int retval = 0;
struct video_channel *v;
v = arg;
if (v->channel != 0)
return -EINVAL;
v->channel = 0;
strcpy(v->name, "Camera");
v->tuners = 0;
v->flags = 0;
v->type = VIDEO_TYPE_CAMERA;
v->norm = 0;
return retval;
}
/******************************************************************************
*
* ioctl_set_channel
*
*****************************************************************************/
static int ioctl_set_channel(void *arg)
{
struct video_channel *v;
int retval = 0;
v = arg;
if (retval == 0 && v->channel != 0)
retval = -EINVAL;
return retval;
}
/******************************************************************************
*
* ioctl_set_image_prop
*
*****************************************************************************/
static int ioctl_set_image_prop(void *arg, struct camera_data *cam)
{
struct video_picture *vp;
int retval = 0;
vp = arg;
/* brightness, color, contrast need no check 0-65535 */
memcpy(&cam->vp, vp, sizeof(*vp));
/* update cam->params.colorParams */
cam->params.color_params.brightness = vp->brightness / 256;
cam->params.color_params.saturation = vp->colour / 256;
cam->params.color_params.contrast = vp->contrast / 256;
DBG("Requested params: bright 0x%X, sat 0x%X, contrast 0x%X\n",
cam->params.color_params.brightness,
cam->params.color_params.saturation,
cam->params.color_params.contrast);
cpia2_set_color_params(cam);
return retval;
}
static int sync(struct camera_data *cam, int frame_nr) static int sync(struct camera_data *cam, int frame_nr)
{ {
struct framebuf *frame = &cam->buffers[frame_nr]; struct framebuf *frame = &cam->buffers[frame_nr];
...@@ -524,63 +417,12 @@ static int sync(struct camera_data *cam, int frame_nr) ...@@ -524,63 +417,12 @@ static int sync(struct camera_data *cam, int frame_nr)
} }
} }
/******************************************************************************
*
* ioctl_set_window_size
*
*****************************************************************************/
static int ioctl_set_window_size(void *arg, struct camera_data *cam,
struct cpia2_fh *fh)
{
/* copy_from_user, check validity, copy to internal structure */
struct video_window *vw;
int frame, err;
vw = arg;
if (vw->clipcount != 0) /* clipping not supported */
return -EINVAL;
if (vw->clips != NULL) /* clipping not supported */
return -EINVAL;
/* Ensure that only this process can change the format. */
err = v4l2_prio_change(&cam->prio, &fh->prio, V4L2_PRIORITY_RECORD);
if(err != 0)
return err;
cam->pixelformat = V4L2_PIX_FMT_JPEG;
/* Be sure to supply the Huffman tables, this isn't MJPEG */
cam->params.compression.inhibit_htables = 0;
/* we set the video window to something smaller or equal to what
* is requested by the user???
*/
DBG("Requested width = %d, height = %d\n", vw->width, vw->height);
if (vw->width != cam->vw.width || vw->height != cam->vw.height) {
cam->vw.width = vw->width;
cam->vw.height = vw->height;
cam->params.roi.width = vw->width;
cam->params.roi.height = vw->height;
cpia2_set_format(cam);
}
for (frame = 0; frame < cam->num_frames; ++frame) {
if (cam->buffers[frame].status == FRAME_READING)
if ((err = sync(cam, frame)) < 0)
return err;
cam->buffers[frame].status = FRAME_EMPTY;
}
return 0;
}
/****************************************************************************** /******************************************************************************
* *
* ioctl_get_mbuf * ioctl_get_mbuf
* *
*****************************************************************************/ *****************************************************************************/
#ifdef CONFIG_VIDEO_V4L1_COMPAT
static int ioctl_get_mbuf(void *arg, struct camera_data *cam) static int ioctl_get_mbuf(void *arg, struct camera_data *cam)
{ {
struct video_mbuf *vm; struct video_mbuf *vm;
...@@ -595,66 +437,7 @@ static int ioctl_get_mbuf(void *arg, struct camera_data *cam) ...@@ -595,66 +437,7 @@ static int ioctl_get_mbuf(void *arg, struct camera_data *cam)
return 0; return 0;
} }
#endif
/******************************************************************************
*
* ioctl_mcapture
*
*****************************************************************************/
static int ioctl_mcapture(void *arg, struct camera_data *cam,
struct cpia2_fh *fh)
{
struct video_mmap *vm;
int video_size, err;
vm = arg;
if (vm->frame < 0 || vm->frame >= cam->num_frames)
return -EINVAL;
/* set video size */
video_size = cpia2_match_video_size(vm->width, vm->height);
if (cam->video_size < 0) {
return -EINVAL;
}
/* Ensure that only this process can change the format. */
err = v4l2_prio_change(&cam->prio, &fh->prio, V4L2_PRIORITY_RECORD);
if(err != 0)
return err;
if (video_size != cam->video_size) {
cam->video_size = video_size;
cam->params.roi.width = vm->width;
cam->params.roi.height = vm->height;
cpia2_set_format(cam);
}
if (cam->buffers[vm->frame].status == FRAME_READING)
if ((err=sync(cam, vm->frame)) < 0)
return err;
cam->buffers[vm->frame].status = FRAME_EMPTY;
return cpia2_usb_stream_start(cam,cam->params.camera_state.stream_mode);
}
/******************************************************************************
*
* ioctl_sync
*
*****************************************************************************/
static int ioctl_sync(void *arg, struct camera_data *cam)
{
int frame;
frame = *(int*)arg;
if (frame < 0 || frame >= cam->num_frames)
return -EINVAL;
return sync(cam, frame);
}
/****************************************************************************** /******************************************************************************
* *
...@@ -897,10 +680,10 @@ static int ioctl_set_fmt(void *arg,struct camera_data *cam, struct cpia2_fh *fh) ...@@ -897,10 +680,10 @@ static int ioctl_set_fmt(void *arg,struct camera_data *cam, struct cpia2_fh *fh)
*/ */
DBG("Requested width = %d, height = %d\n", DBG("Requested width = %d, height = %d\n",
f->fmt.pix.width, f->fmt.pix.height); f->fmt.pix.width, f->fmt.pix.height);
if (f->fmt.pix.width != cam->vw.width || if (f->fmt.pix.width != cam->width ||
f->fmt.pix.height != cam->vw.height) { f->fmt.pix.height != cam->height) {
cam->vw.width = f->fmt.pix.width; cam->width = f->fmt.pix.width;
cam->vw.height = f->fmt.pix.height; cam->height = f->fmt.pix.height;
cam->params.roi.width = f->fmt.pix.width; cam->params.roi.width = f->fmt.pix.width;
cam->params.roi.height = f->fmt.pix.height; cam->params.roi.height = f->fmt.pix.height;
cpia2_set_format(cam); cpia2_set_format(cam);
...@@ -932,8 +715,8 @@ static int ioctl_get_fmt(void *arg,struct camera_data *cam) ...@@ -932,8 +715,8 @@ static int ioctl_get_fmt(void *arg,struct camera_data *cam)
if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
return -EINVAL; return -EINVAL;
f->fmt.pix.width = cam->vw.width; f->fmt.pix.width = cam->width;
f->fmt.pix.height = cam->vw.height; f->fmt.pix.height = cam->height;
f->fmt.pix.pixelformat = cam->pixelformat; f->fmt.pix.pixelformat = cam->pixelformat;
f->fmt.pix.field = V4L2_FIELD_NONE; f->fmt.pix.field = V4L2_FIELD_NONE;
f->fmt.pix.bytesperline = 0; f->fmt.pix.bytesperline = 0;
...@@ -962,12 +745,12 @@ static int ioctl_cropcap(void *arg,struct camera_data *cam) ...@@ -962,12 +745,12 @@ static int ioctl_cropcap(void *arg,struct camera_data *cam)
c->bounds.left = 0; c->bounds.left = 0;
c->bounds.top = 0; c->bounds.top = 0;
c->bounds.width = cam->vw.width; c->bounds.width = cam->width;
c->bounds.height = cam->vw.height; c->bounds.height = cam->height;
c->defrect.left = 0; c->defrect.left = 0;
c->defrect.top = 0; c->defrect.top = 0;
c->defrect.width = cam->vw.width; c->defrect.width = cam->width;
c->defrect.height = cam->vw.height; c->defrect.height = cam->height;
c->pixelaspect.numerator = 1; c->pixelaspect.numerator = 1;
c->pixelaspect.denominator = 1; c->pixelaspect.denominator = 1;
...@@ -1587,8 +1370,6 @@ static long cpia2_do_ioctl(struct file *file, unsigned int cmd, void *arg) ...@@ -1587,8 +1370,6 @@ static long cpia2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
/* Priority check */ /* Priority check */
switch (cmd) { switch (cmd) {
case VIDIOCSWIN:
case VIDIOCMCAPTURE:
case VIDIOC_S_FMT: case VIDIOC_S_FMT:
{ {
struct cpia2_fh *fh = file->private_data; struct cpia2_fh *fh = file->private_data;
...@@ -1599,8 +1380,8 @@ static long cpia2_do_ioctl(struct file *file, unsigned int cmd, void *arg) ...@@ -1599,8 +1380,8 @@ static long cpia2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
} }
break; break;
} }
#ifdef CONFIG_VIDEO_V4L1_COMPAT
case VIDIOCGMBUF: case VIDIOCGMBUF:
case VIDIOCSYNC:
{ {
struct cpia2_fh *fh = file->private_data; struct cpia2_fh *fh = file->private_data;
if(fh->prio != V4L2_PRIORITY_RECORD) { if(fh->prio != V4L2_PRIORITY_RECORD) {
...@@ -1609,68 +1390,21 @@ static long cpia2_do_ioctl(struct file *file, unsigned int cmd, void *arg) ...@@ -1609,68 +1390,21 @@ static long cpia2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
} }
break; break;
} }
#endif
default: default:
break; break;
} }
switch (cmd) { switch (cmd) {
case VIDIOCGCAP: /* query capabilities */
retval = ioctl_cap_query(arg, cam);
break;
case VIDIOCGCHAN: /* get video source - we are a camera, nothing else */
retval = ioctl_get_channel(arg);
break;
case VIDIOCSCHAN: /* set video source - we are a camera, nothing else */
retval = ioctl_set_channel(arg);
break;
case VIDIOCGPICT: /* image properties */
memcpy(arg, &cam->vp, sizeof(struct video_picture));
break;
case VIDIOCSPICT:
retval = ioctl_set_image_prop(arg, cam);
break;
case VIDIOCGWIN: /* get/set capture window */
memcpy(arg, &cam->vw, sizeof(struct video_window));
break;
case VIDIOCSWIN:
retval = ioctl_set_window_size(arg, cam, file->private_data);
break;
case VIDIOCGMBUF: /* mmap interface */
retval = ioctl_get_mbuf(arg, cam);
break;
case VIDIOCMCAPTURE:
retval = ioctl_mcapture(arg, cam, file->private_data);
break;
case VIDIOCSYNC:
retval = ioctl_sync(arg, cam);
break;
/* pointless to implement overlay with this camera */
case VIDIOCCAPTURE:
case VIDIOCGFBUF:
case VIDIOCSFBUF:
case VIDIOCKEY:
retval = -EINVAL;
break;
/* tuner interface - we have none */
case VIDIOCGTUNER:
case VIDIOCSTUNER:
case VIDIOCGFREQ:
case VIDIOCSFREQ:
retval = -EINVAL;
break;
/* audio interface - we have none */
case VIDIOCGAUDIO:
case VIDIOCSAUDIO:
retval = -EINVAL;
break;
/* CPIA2 extension to Video4Linux API */ /* CPIA2 extension to Video4Linux API */
case CPIA2_IOC_SET_GPIO: case CPIA2_IOC_SET_GPIO:
retval = ioctl_set_gpio(arg, cam); retval = ioctl_set_gpio(arg, cam);
break; break;
#ifdef CONFIG_VIDEO_V4L1_COMPAT
case VIDIOCGMBUF: /* mmap interface */
retval = ioctl_get_mbuf(arg, cam);
break;
#endif
case VIDIOC_QUERYCAP: case VIDIOC_QUERYCAP:
retval = ioctl_querycap(arg,cam); retval = ioctl_querycap(arg,cam);
break; break;
...@@ -1874,21 +1608,8 @@ static int cpia2_mmap(struct file *file, struct vm_area_struct *area) ...@@ -1874,21 +1608,8 @@ static int cpia2_mmap(struct file *file, struct vm_area_struct *area)
*****************************************************************************/ *****************************************************************************/
static void reset_camera_struct_v4l(struct camera_data *cam) static void reset_camera_struct_v4l(struct camera_data *cam)
{ {
/*** cam->width = cam->params.roi.width;
* Fill in the v4l structures. video_cap is filled in inside the VIDIOCCAP cam->height = cam->params.roi.height;
* Ioctl. Here, just do the window and picture stucts.
***/
cam->vp.palette = (u16) VIDEO_PALETTE_RGB24; /* Is this right? */
cam->vp.brightness = (u16) cam->params.color_params.brightness * 256;
cam->vp.colour = (u16) cam->params.color_params.saturation * 256;
cam->vp.contrast = (u16) cam->params.color_params.contrast * 256;
cam->vw.x = 0;
cam->vw.y = 0;
cam->vw.width = cam->params.roi.width;
cam->vw.height = cam->params.roi.height;
cam->vw.flags = 0;
cam->vw.clipcount = 0;
cam->frame_size = buffer_size; cam->frame_size = buffer_size;
cam->num_frames = num_buffers; cam->num_frames = num_buffers;
...@@ -1902,13 +1623,12 @@ static void reset_camera_struct_v4l(struct camera_data *cam) ...@@ -1902,13 +1623,12 @@ static void reset_camera_struct_v4l(struct camera_data *cam)
cam->pixelformat = V4L2_PIX_FMT_JPEG; cam->pixelformat = V4L2_PIX_FMT_JPEG;
v4l2_prio_init(&cam->prio); v4l2_prio_init(&cam->prio);
return;
} }
/*** /***
* The v4l video device structure initialized for this device * The v4l video device structure initialized for this device
***/ ***/
static const struct v4l2_file_operations fops_template = { static const struct v4l2_file_operations cpia2_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = cpia2_open, .open = cpia2_open,
.release = cpia2_close, .release = cpia2_close,
...@@ -1920,9 +1640,9 @@ static const struct v4l2_file_operations fops_template = { ...@@ -1920,9 +1640,9 @@ static const struct v4l2_file_operations fops_template = {
static struct video_device cpia2_template = { static struct video_device cpia2_template = {
/* I could not find any place for the old .initialize initializer?? */ /* I could not find any place for the old .initialize initializer?? */
.name= "CPiA2 Camera", .name = "CPiA2 Camera",
.fops= &fops_template, .fops = &cpia2_fops,
.release= video_device_release, .release = video_device_release,
}; };
/****************************************************************************** /******************************************************************************
......
...@@ -29,14 +29,14 @@ ...@@ -29,14 +29,14 @@
#ifndef CPIA2_DEV_HEADER #ifndef CPIA2_DEV_HEADER
#define CPIA2_DEV_HEADER #define CPIA2_DEV_HEADER
#include <linux/videodev.h> #include <linux/videodev2.h>
/*** /***
* The following defines are ioctl numbers based on video4linux private ioctls, * The following defines are ioctl numbers based on video4linux private ioctls,
* which can range from 192 (BASE_VIDIOCPRIVATE) to 255. All of these take int * which can range from 192 (BASE_VIDIOCPRIVATE) to 255. All of these take int
* args * args
*/ */
#define CPIA2_IOC_SET_GPIO _IOW('v', BASE_VIDIOCPRIVATE + 17, __u32) #define CPIA2_IOC_SET_GPIO _IOW('v', BASE_VIDIOC_PRIVATE + 17, __u32)
/* V4L2 driver specific controls */ /* V4L2 driver specific controls */
#define CPIA2_CID_TARGET_KB (V4L2_CID_PRIVATE_BASE+0) #define CPIA2_CID_TARGET_KB (V4L2_CID_PRIVATE_BASE+0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment