···740740741741config VIDEO_MEYE742742 tristate "Sony Vaio Picturebook Motion Eye Video For Linux"743743- depends on PCI && SONY_LAPTOP && VIDEO_V4L1743743+ depends on PCI && SONY_LAPTOP && VIDEO_V4L2744744 ---help---745745 This is the video4linux driver for the Motion Eye camera found746746 in the Vaio Picturebook laptops. Please read the material in
+41-37
drivers/media/video/meye.c
···3030#include <linux/pci.h>3131#include <linux/sched.h>3232#include <linux/init.h>3333-#include <linux/videodev.h>3433#include <linux/gfp.h>3434+#include <linux/videodev2.h>3535#include <media/v4l2-common.h>3636+#include <media/v4l2-device.h>3637#include <media/v4l2-ioctl.h>3738#include <asm/uaccess.h>3839#include <asm/io.h>···11691168 case V4L2_CID_BRIGHTNESS:11701169 sony_pic_camera_command(11711170 SONY_PIC_COMMAND_SETCAMERABRIGHTNESS, c->value);11721172- meye.picture.brightness = c->value << 10;11711171+ meye.brightness = c->value << 10;11731172 break;11741173 case V4L2_CID_HUE:11751174 sony_pic_camera_command(11761175 SONY_PIC_COMMAND_SETCAMERAHUE, c->value);11771177- meye.picture.hue = c->value << 10;11761176+ meye.hue = c->value << 10;11781177 break;11791178 case V4L2_CID_CONTRAST:11801179 sony_pic_camera_command(11811180 SONY_PIC_COMMAND_SETCAMERACONTRAST, c->value);11821182- meye.picture.contrast = c->value << 10;11811181+ meye.contrast = c->value << 10;11831182 break;11841183 case V4L2_CID_SATURATION:11851184 sony_pic_camera_command(11861185 SONY_PIC_COMMAND_SETCAMERACOLOR, c->value);11871187- meye.picture.colour = c->value << 10;11861186+ meye.colour = c->value << 10;11881187 break;11891188 case V4L2_CID_AGC:11901189 sony_pic_camera_command(···12221221 mutex_lock(&meye.lock);12231222 switch (c->id) {12241223 case V4L2_CID_BRIGHTNESS:12251225- c->value = meye.picture.brightness >> 10;12241224+ c->value = meye.brightness >> 10;12261225 break;12271226 case V4L2_CID_HUE:12281228- c->value = meye.picture.hue >> 10;12271227+ c->value = meye.hue >> 10;12291228 break;12301229 case V4L2_CID_CONTRAST:12311231- c->value = meye.picture.contrast >> 10;12301230+ c->value = meye.contrast >> 10;12321231 break;12331232 case V4L2_CID_SATURATION:12341234- c->value = meye.picture.colour >> 10;12331233+ c->value = meye.colour >> 10;12351234 break;12361235 case V4L2_CID_AGC:12371236 c->value = meye.params.agc;···17301729static int __devinit meye_probe(struct pci_dev *pcidev,17311730 const struct pci_device_id *ent)17321731{17321732+ struct v4l2_device *v4l2_dev = &meye.v4l2_dev;17331733 int ret = -EBUSY;17341734 unsigned long mchip_adr;17351735···17391737 goto outnotdev;17401738 }1741173917401740+ ret = v4l2_device_register(&pcidev->dev, v4l2_dev);17411741+ if (ret < 0) {17421742+ v4l2_err(v4l2_dev, "Could not register v4l2_device\n");17431743+ return ret;17441744+ }17421745 ret = -ENOMEM;17431746 meye.mchip_dev = pcidev;17441744- meye.video_dev = video_device_alloc();17451745- if (!meye.video_dev) {17461746- printk(KERN_ERR "meye: video_device_alloc() failed!\n");17471747+ meye.vdev = video_device_alloc();17481748+ if (!meye.vdev) {17491749+ v4l2_err(v4l2_dev, "video_device_alloc() failed!\n");17471750 goto outnotdev;17481751 }1749175217501753 meye.grab_temp = vmalloc(MCHIP_NB_PAGES_MJPEG * PAGE_SIZE);17511754 if (!meye.grab_temp) {17521752- printk(KERN_ERR "meye: grab buffer allocation failed\n");17551755+ v4l2_err(v4l2_dev, "grab buffer allocation failed\n");17531756 goto outvmalloc;17541757 }1755175817561759 spin_lock_init(&meye.grabq_lock);17571760 if (kfifo_alloc(&meye.grabq, sizeof(int) * MEYE_MAX_BUFNBRS,17581761 GFP_KERNEL)) {17591759- printk(KERN_ERR "meye: fifo allocation failed\n");17621762+ v4l2_err(v4l2_dev, "fifo allocation failed\n");17601763 goto outkfifoalloc1;17611764 }17621765 spin_lock_init(&meye.doneq_lock);17631766 if (kfifo_alloc(&meye.doneq, sizeof(int) * MEYE_MAX_BUFNBRS,17641767 GFP_KERNEL)) {17651765- printk(KERN_ERR "meye: fifo allocation failed\n");17681768+ v4l2_err(v4l2_dev, "fifo allocation failed\n");17661769 goto outkfifoalloc2;17671770 }1768177117691769- memcpy(meye.video_dev, &meye_template, sizeof(meye_template));17701770- meye.video_dev->parent = &meye.mchip_dev->dev;17721772+ memcpy(meye.vdev, &meye_template, sizeof(meye_template));17731773+ meye.vdev->v4l2_dev = &meye.v4l2_dev;1771177417721775 ret = -EIO;17731776 if ((ret = sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERA, 1))) {17741774- printk(KERN_ERR "meye: unable to power on the camera\n");17751775- printk(KERN_ERR "meye: did you enable the camera in "17771777+ v4l2_err(v4l2_dev, "meye: unable to power on the camera\n");17781778+ v4l2_err(v4l2_dev, "meye: did you enable the camera in "17761779 "sonypi using the module options ?\n");17771780 goto outsonypienable;17781781 }1779178217801783 if ((ret = pci_enable_device(meye.mchip_dev))) {17811781- printk(KERN_ERR "meye: pci_enable_device failed\n");17841784+ v4l2_err(v4l2_dev, "meye: pci_enable_device failed\n");17821785 goto outenabledev;17831786 }1784178717851788 mchip_adr = pci_resource_start(meye.mchip_dev,0);17861789 if (!mchip_adr) {17871787- printk(KERN_ERR "meye: mchip has no device base address\n");17901790+ v4l2_err(v4l2_dev, "meye: mchip has no device base address\n");17881791 goto outregions;17891792 }17901793 if (!request_mem_region(pci_resource_start(meye.mchip_dev, 0),17911794 pci_resource_len(meye.mchip_dev, 0),17921795 "meye")) {17931793- printk(KERN_ERR "meye: request_mem_region failed\n");17961796+ v4l2_err(v4l2_dev, "meye: request_mem_region failed\n");17941797 goto outregions;17951798 }17961799 meye.mchip_mmregs = ioremap(mchip_adr, MCHIP_MM_REGS);17971800 if (!meye.mchip_mmregs) {17981798- printk(KERN_ERR "meye: ioremap failed\n");18011801+ v4l2_err(v4l2_dev, "meye: ioremap failed\n");17991802 goto outremap;18001803 }1801180418021805 meye.mchip_irq = pcidev->irq;18031806 if (request_irq(meye.mchip_irq, meye_irq,18041807 IRQF_DISABLED | IRQF_SHARED, "meye", meye_irq)) {18051805- printk(KERN_ERR "meye: request_irq failed\n");18081808+ v4l2_err(v4l2_dev, "request_irq failed\n");18061809 goto outreqirq;18071810 }18081811···18311824 msleep(1);18321825 mchip_set(MCHIP_MM_INTA, MCHIP_MM_INTA_HIC_1_MASK);1833182618341834- if (video_register_device(meye.video_dev, VFL_TYPE_GRABBER,18271827+ if (video_register_device(meye.vdev, VFL_TYPE_GRABBER,18351828 video_nr) < 0) {18361836- printk(KERN_ERR "meye: video_register_device failed\n");18291829+ v4l2_err(v4l2_dev, "video_register_device failed\n");18371830 goto outvideoreg;18381831 }1839183218401833 mutex_init(&meye.lock);18411834 init_waitqueue_head(&meye.proc_list);18421842- meye.picture.depth = 16;18431843- meye.picture.palette = VIDEO_PALETTE_YUV422;18441844- meye.picture.brightness = 32 << 10;18451845- meye.picture.hue = 32 << 10;18461846- meye.picture.colour = 32 << 10;18471847- meye.picture.contrast = 32 << 10;18481848- meye.picture.whiteness = 0;18351835+ meye.brightness = 32 << 10;18361836+ meye.hue = 32 << 10;18371837+ meye.colour = 32 << 10;18381838+ meye.contrast = 32 << 10;18491839 meye.params.subsample = 0;18501840 meye.params.quality = 8;18511841 meye.params.sharpness = 32;···18581854 sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAPICTURE, 0);18591855 sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAAGC, 48);1860185618611861- printk(KERN_INFO "meye: Motion Eye Camera Driver v%s.\n",18571857+ v4l2_info(v4l2_dev, "Motion Eye Camera Driver v%s.\n",18621858 MEYE_DRIVER_VERSION);18631863- printk(KERN_INFO "meye: mchip KL5A72002 rev. %d, base %lx, irq %d\n",18591859+ v4l2_info(v4l2_dev, "mchip KL5A72002 rev. %d, base %lx, irq %d\n",18641860 meye.mchip_dev->revision, mchip_adr, meye.mchip_irq);1865186118661862 return 0;···18831879outkfifoalloc1:18841880 vfree(meye.grab_temp);18851881outvmalloc:18861886- video_device_release(meye.video_dev);18821882+ video_device_release(meye.vdev);18871883outnotdev:18881884 return ret;18891885}1890188618911887static void __devexit meye_remove(struct pci_dev *pcidev)18921888{18931893- video_unregister_device(meye.video_dev);18891889+ video_unregister_device(meye.vdev);1894189018951891 mchip_hic_stop();18961892
+7-3
drivers/media/video/meye.h
···3131#define _MEYE_PRIV_H_32323333#define MEYE_DRIVER_MAJORVERSION 13434-#define MEYE_DRIVER_MINORVERSION 133434+#define MEYE_DRIVER_MINORVERSION 1435353636#define MEYE_DRIVER_VERSION __stringify(MEYE_DRIVER_MAJORVERSION) "." \3737 __stringify(MEYE_DRIVER_MINORVERSION)···289289290290/* Motion Eye device structure */291291struct meye {292292+ struct v4l2_device v4l2_dev; /* Main v4l2_device struct */292293 struct pci_dev *mchip_dev; /* pci device */293294 u8 mchip_irq; /* irq */294295 u8 mchip_mode; /* actual mchip mode: HIC_MODE... */···309308 struct kfifo doneq; /* queue for grabbed buffers */310309 spinlock_t doneq_lock; /* lock protecting the queue */311310 wait_queue_head_t proc_list; /* wait queue */312312- struct video_device *video_dev; /* video device parameters */313313- struct video_picture picture; /* video picture parameters */311311+ struct video_device *vdev; /* video device parameters */312312+ u16 brightness;313313+ u16 hue;314314+ u16 contrast;315315+ u16 colour;314316 struct meye_params params; /* additional parameters */315317 unsigned long in_use; /* set to 1 if the device is in use */316318#ifdef CONFIG_PM
+6-6
include/linux/meye.h
···4444};45454646/* query the extended parameters */4747-#define MEYEIOC_G_PARAMS _IOR ('v', BASE_VIDIOCPRIVATE+0, struct meye_params)4747+#define MEYEIOC_G_PARAMS _IOR ('v', BASE_VIDIOC_PRIVATE+0, struct meye_params)4848/* set the extended parameters */4949-#define MEYEIOC_S_PARAMS _IOW ('v', BASE_VIDIOCPRIVATE+1, struct meye_params)4949+#define MEYEIOC_S_PARAMS _IOW ('v', BASE_VIDIOC_PRIVATE+1, struct meye_params)5050/* queue a buffer for mjpeg capture */5151-#define MEYEIOC_QBUF_CAPT _IOW ('v', BASE_VIDIOCPRIVATE+2, int)5151+#define MEYEIOC_QBUF_CAPT _IOW ('v', BASE_VIDIOC_PRIVATE+2, int)5252/* sync a previously queued mjpeg buffer */5353-#define MEYEIOC_SYNC _IOWR('v', BASE_VIDIOCPRIVATE+3, int)5353+#define MEYEIOC_SYNC _IOWR('v', BASE_VIDIOC_PRIVATE+3, int)5454/* get a still uncompressed snapshot */5555-#define MEYEIOC_STILLCAPT _IO ('v', BASE_VIDIOCPRIVATE+4)5555+#define MEYEIOC_STILLCAPT _IO ('v', BASE_VIDIOC_PRIVATE+4)5656/* get a jpeg compressed snapshot */5757-#define MEYEIOC_STILLJCAPT _IOR ('v', BASE_VIDIOCPRIVATE+5, int)5757+#define MEYEIOC_STILLJCAPT _IOR ('v', BASE_VIDIOC_PRIVATE+5, int)58585959/* V4L2 private controls */6060#define V4L2_CID_AGC V4L2_CID_PRIVATE_BASE