Loading Documentation/sony-laptop.txt +18 −7 Original line number Diff line number Diff line Loading @@ -3,12 +3,18 @@ Sony Notebook Control Driver (SNC) Readme Copyright (C) 2004- 2005 Stelian Pop <stelian@popies.net> Copyright (C) 2007 Mattia Dongili <malattia@linux.it> This mini-driver drives the SNC device present in the ACPI BIOS of the Sony Vaio laptops. This mini-driver drives the SNC and SPIC device present in the ACPI BIOS of the Sony Vaio laptops. This driver mixes both devices functions under the same (hopefully consistent) interface. This also means that the sonypi driver is obsoleted by sony-laptop now. It gives access to some extra laptop functionalities. In its current form, this driver let the user set or query the screen brightness through the backlight subsystem and remove/apply power to some devices. Fn keys (hotkeys): ------------------ Some models report hotkeys through the SNC or SPIC devices, such events are reported both through the ACPI subsystem as acpi events and through the INPUT subsystem. See the logs of acpid or /proc/acpi/event and /proc/bus/input/devices to find out what those events are and which input devices are created by the driver. Backlight control: ------------------ Loading Loading @@ -39,6 +45,8 @@ The files are: audiopower power on/off the internal sound card lanpower power on/off the internal ethernet card (only in debug mode) bluetoothpower power on/off the internal bluetooth device fanspeed get/set the fan speed Note that some files may be missing if they are not supported by your particular laptop model. Loading Loading @@ -76,9 +84,9 @@ The sony-laptop driver creates, for some of those methods (the most current ones found on several Vaio models), an entry under /sys/devices/platform/sony-laptop, just like the 'cdpower' one. You can create other entries corresponding to your own laptop methods by further editing the source (see the 'sony_acpi_values' table, and add a new further editing the source (see the 'sony_nc_values' table, and add a new entry to this table with your get/set method names using the HANDLE_NAMES macro). SNC_HANDLE_NAMES macro). Your mission, should you accept it, is to try finding out what those entries are for, by reading/writing random values from/to those Loading @@ -87,6 +95,9 @@ files and find out what is the impact on your laptop. Should you find anything interesting, please report it back to me, I will not disavow all knowledge of your actions :) See also http://www.linux.it/~malattia/wiki/index.php/Sony_drivers for other useful info. Bugs/Limitations: ----------------- Loading Documentation/video4linux/meye.txt +3 −4 Original line number Diff line number Diff line Loading @@ -5,10 +5,9 @@ Vaio Picturebook Motion Eye Camera Driver Readme Copyright (C) 2000 Andrew Tridgell <tridge@samba.org> This driver enable the use of video4linux compatible applications with the Motion Eye camera. This driver requires the "Sony Vaio Programmable I/O Control Device" driver (which can be found in the "Character drivers" section of the kernel configuration utility) to be compiled and installed (using its "camera=1" parameter). Motion Eye camera. This driver requires the "Sony Laptop Extras" driver (which can be found in the "Misc devices" section of the kernel configuration utility) to be compiled and installed (using its "camera=1" parameter). It can do at maximum 30 fps @ 320x240 or 15 fps @ 640x480. Loading drivers/char/sonypi.c +43 −10 Original line number Diff line number Diff line /* * Sony Programmable I/O Control Device driver for VAIO * * Copyright (C) 2007 Mattia Dongili <malattia@linux.it> * * Copyright (C) 2001-2005 Stelian Pop <stelian@popies.net> * * Copyright (C) 2005 Narayanan R S <nars@kadamba.org> Loading Loading @@ -95,6 +97,11 @@ module_param(useinput, int, 0444); MODULE_PARM_DESC(useinput, "set this if you would like sonypi to feed events to the input subsystem"); static int check_ioport = 1; module_param(check_ioport, int, 0444); MODULE_PARM_DESC(check_ioport, "set this to 0 if you think the automatic ioport check for sony-laptop is wrong"); #define SONYPI_DEVICE_MODEL_TYPE1 1 #define SONYPI_DEVICE_MODEL_TYPE2 2 #define SONYPI_DEVICE_MODEL_TYPE3 3 Loading Loading @@ -477,7 +484,7 @@ static struct sonypi_device { u16 evtype_offset; int camera_power; int bluetooth_power; struct semaphore lock; struct mutex lock; struct kfifo *fifo; spinlock_t fifo_lock; wait_queue_head_t fifo_proc_list; Loading Loading @@ -884,7 +891,7 @@ int sonypi_camera_command(int command, u8 value) if (!camera) return -EIO; down(&sonypi_device.lock); mutex_lock(&sonypi_device.lock); switch (command) { case SONYPI_COMMAND_SETCAMERA: Loading Loading @@ -919,7 +926,7 @@ int sonypi_camera_command(int command, u8 value) command); break; } up(&sonypi_device.lock); mutex_unlock(&sonypi_device.lock); return 0; } Loading @@ -938,20 +945,20 @@ static int sonypi_misc_fasync(int fd, struct file *filp, int on) static int sonypi_misc_release(struct inode *inode, struct file *file) { sonypi_misc_fasync(-1, file, 0); down(&sonypi_device.lock); mutex_lock(&sonypi_device.lock); sonypi_device.open_count--; up(&sonypi_device.lock); mutex_unlock(&sonypi_device.lock); return 0; } static int sonypi_misc_open(struct inode *inode, struct file *file) { down(&sonypi_device.lock); mutex_lock(&sonypi_device.lock); /* Flush input queue on first open */ if (!sonypi_device.open_count) kfifo_reset(sonypi_device.fifo); sonypi_device.open_count++; up(&sonypi_device.lock); mutex_unlock(&sonypi_device.lock); return 0; } Loading Loading @@ -1001,7 +1008,7 @@ static int sonypi_misc_ioctl(struct inode *ip, struct file *fp, u8 val8; u16 val16; down(&sonypi_device.lock); mutex_lock(&sonypi_device.lock); switch (cmd) { case SONYPI_IOCGBRT: if (sonypi_ec_read(SONYPI_LCD_LIGHT, &val8)) { Loading Loading @@ -1101,7 +1108,7 @@ static int sonypi_misc_ioctl(struct inode *ip, struct file *fp, default: ret = -EINVAL; } up(&sonypi_device.lock); mutex_unlock(&sonypi_device.lock); return ret; } Loading Loading @@ -1260,6 +1267,28 @@ static int __devinit sonypi_create_input_devices(void) static int __devinit sonypi_setup_ioports(struct sonypi_device *dev, const struct sonypi_ioport_list *ioport_list) { /* try to detect if sony-laptop is being used and thus * has already requested one of the known ioports. * As in the deprecated check_region this is racy has we have * multiple ioports available and one of them can be requested * between this check and the subsequent request. Anyway, as an * attempt to be some more user-friendly as we currently are, * this is enough. */ const struct sonypi_ioport_list *check = ioport_list; while (check_ioport && check->port1) { if (!request_region(check->port1, sonypi_device.region_size, "Sony Programable I/O Device Check")) { printk(KERN_ERR "sonypi: ioport 0x%.4x busy, using sony-laptop? " "if not use check_ioport=0\n", check->port1); return -EBUSY; } release_region(check->port1, sonypi_device.region_size); check++; } while (ioport_list->port1) { if (request_region(ioport_list->port1, Loading Loading @@ -1321,6 +1350,10 @@ static int __devinit sonypi_probe(struct platform_device *dev) struct pci_dev *pcidev; int error; printk(KERN_WARNING "sonypi: please try the sony-laptop module instead " "and report failures, see also " "http://www.linux.it/~malattia/wiki/index.php/Sony_drivers\n"); spin_lock_init(&sonypi_device.fifo_lock); sonypi_device.fifo = kfifo_alloc(SONYPI_BUF_SIZE, GFP_KERNEL, &sonypi_device.fifo_lock); Loading @@ -1330,7 +1363,7 @@ static int __devinit sonypi_probe(struct platform_device *dev) } init_waitqueue_head(&sonypi_device.fifo_proc_list); init_MUTEX(&sonypi_device.lock); mutex_init(&sonypi_device.lock); sonypi_device.bluetooth_power = -1; if ((pcidev = pci_get_device(PCI_VENDOR_ID_INTEL, Loading drivers/media/video/Kconfig +3 −3 Original line number Diff line number Diff line Loading @@ -577,14 +577,14 @@ config VIDEO_ZORAN_AVS6EYES config VIDEO_MEYE tristate "Sony Vaio Picturebook Motion Eye Video For Linux" depends on PCI && SONYPI && VIDEO_V4L1 depends on PCI && SONY_LAPTOP && VIDEO_V4L1 ---help--- This is the video4linux driver for the Motion Eye camera found in the Vaio Picturebook laptops. Please read the material in <file:Documentation/video4linux/meye.txt> for more information. If you say Y or M here, you need to say Y or M to "Sony Programmable I/O Control Device" in the character device section. If you say Y or M here, you need to say Y or M to "Sony Laptop Extras" in the misc device section. To compile this driver as a module, choose M here: the module will be called meye. Loading drivers/media/video/meye.c +31 −31 Original line number Diff line number Diff line Loading @@ -925,13 +925,13 @@ static int meye_do_ioctl(struct inode *inode, struct file *file, if (p->palette != VIDEO_PALETTE_YUV422 && p->palette != VIDEO_PALETTE_YUYV) return -EINVAL; mutex_lock(&meye.lock); sonypi_camera_command(SONYPI_COMMAND_SETCAMERABRIGHTNESS, sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERABRIGHTNESS, p->brightness >> 10); sonypi_camera_command(SONYPI_COMMAND_SETCAMERAHUE, sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAHUE, p->hue >> 10); sonypi_camera_command(SONYPI_COMMAND_SETCAMERACOLOR, sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERACOLOR, p->colour >> 10); sonypi_camera_command(SONYPI_COMMAND_SETCAMERACONTRAST, sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERACONTRAST, p->contrast >> 10); meye.picture = *p; mutex_unlock(&meye.lock); Loading Loading @@ -1043,11 +1043,11 @@ static int meye_do_ioctl(struct inode *inode, struct file *file, meye.params.quality != jp->quality) mchip_hic_stop(); /* need restart */ meye.params = *jp; sonypi_camera_command(SONYPI_COMMAND_SETCAMERASHARPNESS, sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERASHARPNESS, meye.params.sharpness); sonypi_camera_command(SONYPI_COMMAND_SETCAMERAAGC, sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAAGC, meye.params.agc); sonypi_camera_command(SONYPI_COMMAND_SETCAMERAPICTURE, sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAPICTURE, meye.params.picture); mutex_unlock(&meye.lock); break; Loading Loading @@ -1287,38 +1287,38 @@ static int meye_do_ioctl(struct inode *inode, struct file *file, mutex_lock(&meye.lock); switch (c->id) { case V4L2_CID_BRIGHTNESS: sonypi_camera_command( SONYPI_COMMAND_SETCAMERABRIGHTNESS, c->value); sony_pic_camera_command( SONY_PIC_COMMAND_SETCAMERABRIGHTNESS, c->value); meye.picture.brightness = c->value << 10; break; case V4L2_CID_HUE: sonypi_camera_command( SONYPI_COMMAND_SETCAMERAHUE, c->value); sony_pic_camera_command( SONY_PIC_COMMAND_SETCAMERAHUE, c->value); meye.picture.hue = c->value << 10; break; case V4L2_CID_CONTRAST: sonypi_camera_command( SONYPI_COMMAND_SETCAMERACONTRAST, c->value); sony_pic_camera_command( SONY_PIC_COMMAND_SETCAMERACONTRAST, c->value); meye.picture.contrast = c->value << 10; break; case V4L2_CID_SATURATION: sonypi_camera_command( SONYPI_COMMAND_SETCAMERACOLOR, c->value); sony_pic_camera_command( SONY_PIC_COMMAND_SETCAMERACOLOR, c->value); meye.picture.colour = c->value << 10; break; case V4L2_CID_AGC: sonypi_camera_command( SONYPI_COMMAND_SETCAMERAAGC, c->value); sony_pic_camera_command( SONY_PIC_COMMAND_SETCAMERAAGC, c->value); meye.params.agc = c->value; break; case V4L2_CID_SHARPNESS: sonypi_camera_command( SONYPI_COMMAND_SETCAMERASHARPNESS, c->value); sony_pic_camera_command( SONY_PIC_COMMAND_SETCAMERASHARPNESS, c->value); meye.params.sharpness = c->value; break; case V4L2_CID_PICTURE: sonypi_camera_command( SONYPI_COMMAND_SETCAMERAPICTURE, c->value); sony_pic_camera_command( SONY_PIC_COMMAND_SETCAMERAPICTURE, c->value); meye.params.picture = c->value; break; case V4L2_CID_JPEGQUAL: Loading Loading @@ -1848,7 +1848,7 @@ static int __devinit meye_probe(struct pci_dev *pcidev, memcpy(meye.video_dev, &meye_template, sizeof(meye_template)); meye.video_dev->dev = &meye.mchip_dev->dev; if ((ret = sonypi_camera_command(SONYPI_COMMAND_SETCAMERA, 1))) { if ((ret = sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERA, 1))) { printk(KERN_ERR "meye: unable to power on the camera\n"); printk(KERN_ERR "meye: did you enable the camera in " "sonypi using the module options ?\n"); Loading Loading @@ -1928,13 +1928,13 @@ static int __devinit meye_probe(struct pci_dev *pcidev, meye.params.picture = 0; meye.params.framerate = 0; sonypi_camera_command(SONYPI_COMMAND_SETCAMERABRIGHTNESS, 32); sonypi_camera_command(SONYPI_COMMAND_SETCAMERAHUE, 32); sonypi_camera_command(SONYPI_COMMAND_SETCAMERACOLOR, 32); sonypi_camera_command(SONYPI_COMMAND_SETCAMERACONTRAST, 32); sonypi_camera_command(SONYPI_COMMAND_SETCAMERASHARPNESS, 32); sonypi_camera_command(SONYPI_COMMAND_SETCAMERAPICTURE, 0); sonypi_camera_command(SONYPI_COMMAND_SETCAMERAAGC, 48); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERABRIGHTNESS, 32); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAHUE, 32); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERACOLOR, 32); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERACONTRAST, 32); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERASHARPNESS, 32); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAPICTURE, 0); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAAGC, 48); printk(KERN_INFO "meye: Motion Eye Camera Driver v%s.\n", MEYE_DRIVER_VERSION); Loading @@ -1953,7 +1953,7 @@ static int __devinit meye_probe(struct pci_dev *pcidev, outregions: pci_disable_device(meye.mchip_dev); outenabledev: sonypi_camera_command(SONYPI_COMMAND_SETCAMERA, 0); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERA, 0); outsonypienable: kfifo_free(meye.doneq); outkfifoalloc2: Loading Loading @@ -1986,7 +1986,7 @@ static void __devexit meye_remove(struct pci_dev *pcidev) pci_disable_device(meye.mchip_dev); sonypi_camera_command(SONYPI_COMMAND_SETCAMERA, 0); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERA, 0); kfifo_free(meye.doneq); kfifo_free(meye.grabq); Loading Loading
Documentation/sony-laptop.txt +18 −7 Original line number Diff line number Diff line Loading @@ -3,12 +3,18 @@ Sony Notebook Control Driver (SNC) Readme Copyright (C) 2004- 2005 Stelian Pop <stelian@popies.net> Copyright (C) 2007 Mattia Dongili <malattia@linux.it> This mini-driver drives the SNC device present in the ACPI BIOS of the Sony Vaio laptops. This mini-driver drives the SNC and SPIC device present in the ACPI BIOS of the Sony Vaio laptops. This driver mixes both devices functions under the same (hopefully consistent) interface. This also means that the sonypi driver is obsoleted by sony-laptop now. It gives access to some extra laptop functionalities. In its current form, this driver let the user set or query the screen brightness through the backlight subsystem and remove/apply power to some devices. Fn keys (hotkeys): ------------------ Some models report hotkeys through the SNC or SPIC devices, such events are reported both through the ACPI subsystem as acpi events and through the INPUT subsystem. See the logs of acpid or /proc/acpi/event and /proc/bus/input/devices to find out what those events are and which input devices are created by the driver. Backlight control: ------------------ Loading Loading @@ -39,6 +45,8 @@ The files are: audiopower power on/off the internal sound card lanpower power on/off the internal ethernet card (only in debug mode) bluetoothpower power on/off the internal bluetooth device fanspeed get/set the fan speed Note that some files may be missing if they are not supported by your particular laptop model. Loading Loading @@ -76,9 +84,9 @@ The sony-laptop driver creates, for some of those methods (the most current ones found on several Vaio models), an entry under /sys/devices/platform/sony-laptop, just like the 'cdpower' one. You can create other entries corresponding to your own laptop methods by further editing the source (see the 'sony_acpi_values' table, and add a new further editing the source (see the 'sony_nc_values' table, and add a new entry to this table with your get/set method names using the HANDLE_NAMES macro). SNC_HANDLE_NAMES macro). Your mission, should you accept it, is to try finding out what those entries are for, by reading/writing random values from/to those Loading @@ -87,6 +95,9 @@ files and find out what is the impact on your laptop. Should you find anything interesting, please report it back to me, I will not disavow all knowledge of your actions :) See also http://www.linux.it/~malattia/wiki/index.php/Sony_drivers for other useful info. Bugs/Limitations: ----------------- Loading
Documentation/video4linux/meye.txt +3 −4 Original line number Diff line number Diff line Loading @@ -5,10 +5,9 @@ Vaio Picturebook Motion Eye Camera Driver Readme Copyright (C) 2000 Andrew Tridgell <tridge@samba.org> This driver enable the use of video4linux compatible applications with the Motion Eye camera. This driver requires the "Sony Vaio Programmable I/O Control Device" driver (which can be found in the "Character drivers" section of the kernel configuration utility) to be compiled and installed (using its "camera=1" parameter). Motion Eye camera. This driver requires the "Sony Laptop Extras" driver (which can be found in the "Misc devices" section of the kernel configuration utility) to be compiled and installed (using its "camera=1" parameter). It can do at maximum 30 fps @ 320x240 or 15 fps @ 640x480. Loading
drivers/char/sonypi.c +43 −10 Original line number Diff line number Diff line /* * Sony Programmable I/O Control Device driver for VAIO * * Copyright (C) 2007 Mattia Dongili <malattia@linux.it> * * Copyright (C) 2001-2005 Stelian Pop <stelian@popies.net> * * Copyright (C) 2005 Narayanan R S <nars@kadamba.org> Loading Loading @@ -95,6 +97,11 @@ module_param(useinput, int, 0444); MODULE_PARM_DESC(useinput, "set this if you would like sonypi to feed events to the input subsystem"); static int check_ioport = 1; module_param(check_ioport, int, 0444); MODULE_PARM_DESC(check_ioport, "set this to 0 if you think the automatic ioport check for sony-laptop is wrong"); #define SONYPI_DEVICE_MODEL_TYPE1 1 #define SONYPI_DEVICE_MODEL_TYPE2 2 #define SONYPI_DEVICE_MODEL_TYPE3 3 Loading Loading @@ -477,7 +484,7 @@ static struct sonypi_device { u16 evtype_offset; int camera_power; int bluetooth_power; struct semaphore lock; struct mutex lock; struct kfifo *fifo; spinlock_t fifo_lock; wait_queue_head_t fifo_proc_list; Loading Loading @@ -884,7 +891,7 @@ int sonypi_camera_command(int command, u8 value) if (!camera) return -EIO; down(&sonypi_device.lock); mutex_lock(&sonypi_device.lock); switch (command) { case SONYPI_COMMAND_SETCAMERA: Loading Loading @@ -919,7 +926,7 @@ int sonypi_camera_command(int command, u8 value) command); break; } up(&sonypi_device.lock); mutex_unlock(&sonypi_device.lock); return 0; } Loading @@ -938,20 +945,20 @@ static int sonypi_misc_fasync(int fd, struct file *filp, int on) static int sonypi_misc_release(struct inode *inode, struct file *file) { sonypi_misc_fasync(-1, file, 0); down(&sonypi_device.lock); mutex_lock(&sonypi_device.lock); sonypi_device.open_count--; up(&sonypi_device.lock); mutex_unlock(&sonypi_device.lock); return 0; } static int sonypi_misc_open(struct inode *inode, struct file *file) { down(&sonypi_device.lock); mutex_lock(&sonypi_device.lock); /* Flush input queue on first open */ if (!sonypi_device.open_count) kfifo_reset(sonypi_device.fifo); sonypi_device.open_count++; up(&sonypi_device.lock); mutex_unlock(&sonypi_device.lock); return 0; } Loading Loading @@ -1001,7 +1008,7 @@ static int sonypi_misc_ioctl(struct inode *ip, struct file *fp, u8 val8; u16 val16; down(&sonypi_device.lock); mutex_lock(&sonypi_device.lock); switch (cmd) { case SONYPI_IOCGBRT: if (sonypi_ec_read(SONYPI_LCD_LIGHT, &val8)) { Loading Loading @@ -1101,7 +1108,7 @@ static int sonypi_misc_ioctl(struct inode *ip, struct file *fp, default: ret = -EINVAL; } up(&sonypi_device.lock); mutex_unlock(&sonypi_device.lock); return ret; } Loading Loading @@ -1260,6 +1267,28 @@ static int __devinit sonypi_create_input_devices(void) static int __devinit sonypi_setup_ioports(struct sonypi_device *dev, const struct sonypi_ioport_list *ioport_list) { /* try to detect if sony-laptop is being used and thus * has already requested one of the known ioports. * As in the deprecated check_region this is racy has we have * multiple ioports available and one of them can be requested * between this check and the subsequent request. Anyway, as an * attempt to be some more user-friendly as we currently are, * this is enough. */ const struct sonypi_ioport_list *check = ioport_list; while (check_ioport && check->port1) { if (!request_region(check->port1, sonypi_device.region_size, "Sony Programable I/O Device Check")) { printk(KERN_ERR "sonypi: ioport 0x%.4x busy, using sony-laptop? " "if not use check_ioport=0\n", check->port1); return -EBUSY; } release_region(check->port1, sonypi_device.region_size); check++; } while (ioport_list->port1) { if (request_region(ioport_list->port1, Loading Loading @@ -1321,6 +1350,10 @@ static int __devinit sonypi_probe(struct platform_device *dev) struct pci_dev *pcidev; int error; printk(KERN_WARNING "sonypi: please try the sony-laptop module instead " "and report failures, see also " "http://www.linux.it/~malattia/wiki/index.php/Sony_drivers\n"); spin_lock_init(&sonypi_device.fifo_lock); sonypi_device.fifo = kfifo_alloc(SONYPI_BUF_SIZE, GFP_KERNEL, &sonypi_device.fifo_lock); Loading @@ -1330,7 +1363,7 @@ static int __devinit sonypi_probe(struct platform_device *dev) } init_waitqueue_head(&sonypi_device.fifo_proc_list); init_MUTEX(&sonypi_device.lock); mutex_init(&sonypi_device.lock); sonypi_device.bluetooth_power = -1; if ((pcidev = pci_get_device(PCI_VENDOR_ID_INTEL, Loading
drivers/media/video/Kconfig +3 −3 Original line number Diff line number Diff line Loading @@ -577,14 +577,14 @@ config VIDEO_ZORAN_AVS6EYES config VIDEO_MEYE tristate "Sony Vaio Picturebook Motion Eye Video For Linux" depends on PCI && SONYPI && VIDEO_V4L1 depends on PCI && SONY_LAPTOP && VIDEO_V4L1 ---help--- This is the video4linux driver for the Motion Eye camera found in the Vaio Picturebook laptops. Please read the material in <file:Documentation/video4linux/meye.txt> for more information. If you say Y or M here, you need to say Y or M to "Sony Programmable I/O Control Device" in the character device section. If you say Y or M here, you need to say Y or M to "Sony Laptop Extras" in the misc device section. To compile this driver as a module, choose M here: the module will be called meye. Loading
drivers/media/video/meye.c +31 −31 Original line number Diff line number Diff line Loading @@ -925,13 +925,13 @@ static int meye_do_ioctl(struct inode *inode, struct file *file, if (p->palette != VIDEO_PALETTE_YUV422 && p->palette != VIDEO_PALETTE_YUYV) return -EINVAL; mutex_lock(&meye.lock); sonypi_camera_command(SONYPI_COMMAND_SETCAMERABRIGHTNESS, sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERABRIGHTNESS, p->brightness >> 10); sonypi_camera_command(SONYPI_COMMAND_SETCAMERAHUE, sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAHUE, p->hue >> 10); sonypi_camera_command(SONYPI_COMMAND_SETCAMERACOLOR, sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERACOLOR, p->colour >> 10); sonypi_camera_command(SONYPI_COMMAND_SETCAMERACONTRAST, sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERACONTRAST, p->contrast >> 10); meye.picture = *p; mutex_unlock(&meye.lock); Loading Loading @@ -1043,11 +1043,11 @@ static int meye_do_ioctl(struct inode *inode, struct file *file, meye.params.quality != jp->quality) mchip_hic_stop(); /* need restart */ meye.params = *jp; sonypi_camera_command(SONYPI_COMMAND_SETCAMERASHARPNESS, sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERASHARPNESS, meye.params.sharpness); sonypi_camera_command(SONYPI_COMMAND_SETCAMERAAGC, sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAAGC, meye.params.agc); sonypi_camera_command(SONYPI_COMMAND_SETCAMERAPICTURE, sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAPICTURE, meye.params.picture); mutex_unlock(&meye.lock); break; Loading Loading @@ -1287,38 +1287,38 @@ static int meye_do_ioctl(struct inode *inode, struct file *file, mutex_lock(&meye.lock); switch (c->id) { case V4L2_CID_BRIGHTNESS: sonypi_camera_command( SONYPI_COMMAND_SETCAMERABRIGHTNESS, c->value); sony_pic_camera_command( SONY_PIC_COMMAND_SETCAMERABRIGHTNESS, c->value); meye.picture.brightness = c->value << 10; break; case V4L2_CID_HUE: sonypi_camera_command( SONYPI_COMMAND_SETCAMERAHUE, c->value); sony_pic_camera_command( SONY_PIC_COMMAND_SETCAMERAHUE, c->value); meye.picture.hue = c->value << 10; break; case V4L2_CID_CONTRAST: sonypi_camera_command( SONYPI_COMMAND_SETCAMERACONTRAST, c->value); sony_pic_camera_command( SONY_PIC_COMMAND_SETCAMERACONTRAST, c->value); meye.picture.contrast = c->value << 10; break; case V4L2_CID_SATURATION: sonypi_camera_command( SONYPI_COMMAND_SETCAMERACOLOR, c->value); sony_pic_camera_command( SONY_PIC_COMMAND_SETCAMERACOLOR, c->value); meye.picture.colour = c->value << 10; break; case V4L2_CID_AGC: sonypi_camera_command( SONYPI_COMMAND_SETCAMERAAGC, c->value); sony_pic_camera_command( SONY_PIC_COMMAND_SETCAMERAAGC, c->value); meye.params.agc = c->value; break; case V4L2_CID_SHARPNESS: sonypi_camera_command( SONYPI_COMMAND_SETCAMERASHARPNESS, c->value); sony_pic_camera_command( SONY_PIC_COMMAND_SETCAMERASHARPNESS, c->value); meye.params.sharpness = c->value; break; case V4L2_CID_PICTURE: sonypi_camera_command( SONYPI_COMMAND_SETCAMERAPICTURE, c->value); sony_pic_camera_command( SONY_PIC_COMMAND_SETCAMERAPICTURE, c->value); meye.params.picture = c->value; break; case V4L2_CID_JPEGQUAL: Loading Loading @@ -1848,7 +1848,7 @@ static int __devinit meye_probe(struct pci_dev *pcidev, memcpy(meye.video_dev, &meye_template, sizeof(meye_template)); meye.video_dev->dev = &meye.mchip_dev->dev; if ((ret = sonypi_camera_command(SONYPI_COMMAND_SETCAMERA, 1))) { if ((ret = sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERA, 1))) { printk(KERN_ERR "meye: unable to power on the camera\n"); printk(KERN_ERR "meye: did you enable the camera in " "sonypi using the module options ?\n"); Loading Loading @@ -1928,13 +1928,13 @@ static int __devinit meye_probe(struct pci_dev *pcidev, meye.params.picture = 0; meye.params.framerate = 0; sonypi_camera_command(SONYPI_COMMAND_SETCAMERABRIGHTNESS, 32); sonypi_camera_command(SONYPI_COMMAND_SETCAMERAHUE, 32); sonypi_camera_command(SONYPI_COMMAND_SETCAMERACOLOR, 32); sonypi_camera_command(SONYPI_COMMAND_SETCAMERACONTRAST, 32); sonypi_camera_command(SONYPI_COMMAND_SETCAMERASHARPNESS, 32); sonypi_camera_command(SONYPI_COMMAND_SETCAMERAPICTURE, 0); sonypi_camera_command(SONYPI_COMMAND_SETCAMERAAGC, 48); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERABRIGHTNESS, 32); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAHUE, 32); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERACOLOR, 32); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERACONTRAST, 32); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERASHARPNESS, 32); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAPICTURE, 0); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAAGC, 48); printk(KERN_INFO "meye: Motion Eye Camera Driver v%s.\n", MEYE_DRIVER_VERSION); Loading @@ -1953,7 +1953,7 @@ static int __devinit meye_probe(struct pci_dev *pcidev, outregions: pci_disable_device(meye.mchip_dev); outenabledev: sonypi_camera_command(SONYPI_COMMAND_SETCAMERA, 0); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERA, 0); outsonypienable: kfifo_free(meye.doneq); outkfifoalloc2: Loading Loading @@ -1986,7 +1986,7 @@ static void __devexit meye_remove(struct pci_dev *pcidev) pci_disable_device(meye.mchip_dev); sonypi_camera_command(SONYPI_COMMAND_SETCAMERA, 0); sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERA, 0); kfifo_free(meye.doneq); kfifo_free(meye.grabq); Loading