Hi,

This patch updates the Sony Programmable I/O Controller driver
for the Vaio laptops by:
        - adding support for newer R505 series (credits go to
          Michael Ashley <[EMAIL PROTECTED]>)

        - adding two ioctl commands for getting/setting the
          brightness on those laptops

        - new module parameter for specifying if a camera should
          be initialized (to be used on PictureBook series)

        - small fix in the event processing logic

Alan, please apply.

Thanks,

Stelian.

diff -uNr --exclude-from=dontdiff linux-2.4.5-ac15.orig/Documentation/sonypi.txt 
linux-2.4.5-ac15/Documentation/sonypi.txt
--- linux-2.4.5-ac15.orig/Documentation/sonypi.txt      Fri Jun 15 14:17:12 2001
+++ linux-2.4.5-ac15/Documentation/sonypi.txt   Fri Jun 15 15:40:58 2001
@@ -1,6 +1,7 @@
 Sony Programmable I/O Control Device Driver Readme
 --------------------------------------------------
        Copyright (C) 2001 Stelian Pop <[EMAIL PROTECTED]>, Alcôve
+       Copyright (C) 2001 Michael Ashley <[EMAIL PROTECTED]>
        Copyright (C) 2001 Junichi Morita <[EMAIL PROTECTED]>
        Copyright (C) 2000 Takaya Kinjo <[EMAIL PROTECTED]>
        Copyright (C) 2000 Andrew Tridgell <[EMAIL PROTECTED]>
@@ -21,6 +22,9 @@
 A simple daemon which translates the jogdial movements into mouse wheel events
 can be downloaded at: <http://www.alcove-labs.org/en/software/sonypi/>
 
+This driver supports also some ioctl commands for setting the LCD screen
+brightness (some more commands may be added in the future).
+
 This driver can also be used to set the camera controls on Picturebook series
 (brightness, contrast etc), and is used by the video4linux driver for the 
 Motion Eye camera.
@@ -36,6 +40,10 @@
                        default is -1 (automatic allocation, see /proc/misc
                        or kernel logs)
 
+       camera:         if you have a PictureBook series Vaio (with the
+                       integrated MotionEye camera), set this parameter to 1
+                       in order to let the driver access to the camera
+
        fnkeyinit:      on some Vaios (C1VE, C1VR etc), the Fn key events don't
                        get enabled unless you set this parameter to 1
 
@@ -60,9 +68,3 @@
        - since all development was done by reverse engineering, there is
          _absolutely no guarantee_ that this driver will not crash your
          laptop. Permanently.
-
-       - newer Vaios (R505 series) have a different SPIC device, not yet
-         recognized by this driver.
-
-       - should this driver also take care of setting Vaio brightness ?
-         (it's a different set of ioports though).
diff -uNr --exclude-from=dontdiff linux-2.4.5-ac15.orig/drivers/char/sonypi.c 
linux-2.4.5-ac15/drivers/char/sonypi.c
--- linux-2.4.5-ac15.orig/drivers/char/sonypi.c Fri Jun 15 14:17:21 2001
+++ linux-2.4.5-ac15/drivers/char/sonypi.c      Mon Jun 18 10:25:18 2001
@@ -3,6 +3,8 @@
  *
  * Copyright (C) 2001 Stelian Pop <[EMAIL PROTECTED]>, Alcôve
  *
+ * Copyright (C) 2001 Michael Ashley <[EMAIL PROTECTED]>
+ *
  * Copyright (C) 2001 Junichi Morita <[EMAIL PROTECTED]>
  *
  * Copyright (C) 2000 Takaya Kinjo <[EMAIL PROTECTED]>
@@ -45,6 +47,7 @@
 static int minor = -1;
 static int verbose; /* = 0 */
 static int fnkeyinit; /* = 0 */
+static int camera; /* = 0 */
 
 /* Inits the queue */
 static inline void sonypi_initq(void) {
@@ -104,8 +107,38 @@
         return result;
 }
 
+static void sonypi_ecrset(u16 addr, u16 value) {
+       int n = 100;
+
+       while (n-- && (inw_p(SONYPI_CST_IOPORT) & 3))
+               udelay(1);
+       outw_p(0x81, SONYPI_CST_IOPORT);
+       while (inw_p(SONYPI_CST_IOPORT) & 2)
+               udelay(1);
+       outw_p(addr, SONYPI_DATA_IOPORT);
+       while (inw_p(SONYPI_CST_IOPORT) & 2)
+               udelay(1);
+       outw_p(value, SONYPI_DATA_IOPORT);
+       while (inw_p(SONYPI_CST_IOPORT) & 2)
+               udelay(1);
+}
+
+static u16 sonypi_ecrget(u16 addr) {
+       int n = 100;
+
+       while (n-- && (inw_p(SONYPI_CST_IOPORT) & 3))
+               udelay(1);
+       outw_p(0x80, SONYPI_CST_IOPORT);
+       while (inw_p(SONYPI_CST_IOPORT) & 2)
+               udelay(1);
+       outw_p(addr, SONYPI_DATA_IOPORT);
+       while (inw_p(SONYPI_CST_IOPORT) & 2)
+               udelay(1);
+       return inw_p(SONYPI_DATA_IOPORT);
+}
+
 /* Initializes the device - this comes from the AML code in the ACPI bios */
-static void __devinit sonypi_srs(void) {
+static void __devinit sonypi_normal_srs(void) {
        u32 v;
 
        pci_read_config_dword(sonypi_device.dev, SONYPI_G10A, &v);
@@ -127,8 +160,15 @@
        pci_write_config_dword(sonypi_device.dev, SONYPI_G10A, v);
 }
 
+static void __devinit sonypi_r505_srs(void) {
+       sonypi_ecrset(SONYPI_SHIB, (sonypi_device.ioport1 & 0xFF00) >> 8);
+       sonypi_ecrset(SONYPI_SLOB,  sonypi_device.ioport1 & 0x00FF);
+       sonypi_ecrset(SONYPI_SIRQ,  sonypi_device.bits);
+       udelay(10);
+}
+
 /* Disables the device - this comes from the AML code in the ACPI bios */
-static void __devexit sonypi_dis(void) {
+static void __devexit sonypi_normal_dis(void) {
        u32 v;
 
        pci_read_config_dword(sonypi_device.dev, SONYPI_G10A, &v);
@@ -140,6 +180,12 @@
        outl(v, SONYPI_IRQ_PORT);
 }
 
+static void __devexit sonypi_r505_dis(void) {
+       sonypi_ecrset(SONYPI_SHIB, 0);
+       sonypi_ecrset(SONYPI_SLOB, 0);
+       sonypi_ecrset(SONYPI_SIRQ, 0);
+}
+
 static u8 sonypi_call1(u8 dev) {
        u8 v1, v2;
 
@@ -218,6 +264,8 @@
 /* Turns the camera off */
 static void sonypi_camera_off(void) {
 
+       sonypi_set(SONYPI_CAMERA_PICTURE, SONYPI_CAMERA_MUTE_MASK);
+
        if (!sonypi_device.camera_power)
                return;
 
@@ -263,56 +311,64 @@
 void sonypi_irq(int irq, void *dev_id, struct pt_regs *regs) {
        u8 v1, v2, event = 0;
        int i;
+       u8 sonypi_jogger_ev, sonypi_fnkey_ev;
+
+       if (sonypi_device.model == SONYPI_DEVICE_MODEL_R505) {
+               sonypi_jogger_ev = SONYPI_R505_JOGGER_EV;
+               sonypi_fnkey_ev = SONYPI_R505_FNKEY_EV;
+       }
+       else {
+               sonypi_jogger_ev = SONYPI_NORMAL_JOGGER_EV;
+               sonypi_fnkey_ev = SONYPI_NORMAL_FNKEY_EV;
+       }
 
        v1 = inb_p(sonypi_device.ioport1);
-       v2 = inb_p(sonypi_device.ioport2) & 0xf0;
+       v2 = inb_p(sonypi_device.ioport2);
 
-       switch (v2) {
-               case SONYPI_JOGGER_EV:
-                       for (i = 0; sonypi_joggerev[i].event; i++)
-                               if (sonypi_joggerev[i].data == v1) {
-                                       event = sonypi_joggerev[i].event;
-                                       break;
-                               }
-                       break;
-               case SONYPI_CAPTURE_EV:
-                       for (i = 0; sonypi_captureev[i].event; i++)
-                               if (sonypi_captureev[i].data == v1) {
-                                       event = sonypi_captureev[i].event;
-                                       break;
-                               }
-                       break;
-               case SONYPI_FNKEY_EV:
-                       for (i = 0; sonypi_fnkeyev[i].event; i++)
-                               if (sonypi_fnkeyev[i].data == v1) {
-                                       event = sonypi_fnkeyev[i].event;
-                                       break;
-                               }
-                       break;
-               case SONYPI_BLUETOOTH_EV:
-                       for (i = 0; sonypi_blueev[i].event; i++)
-                               if (sonypi_blueev[i].data == v1) {
-                                       event = sonypi_blueev[i].event;
-                                       break;
-                               }
-                       break;
-               case 0x0c:
-               case 0x04:
-               case 0xff:
-                       /* the answer event from the write reqest to ioport? */
-                       return;
-       }
-       if (event)
-               sonypi_pushq(event);
-       else if (verbose)
+       if ((v2 & sonypi_jogger_ev) == sonypi_jogger_ev) {
+               for (i = 0; sonypi_joggerev[i].event; i++)
+                       if (sonypi_joggerev[i].data == v1) {
+                               event = sonypi_joggerev[i].event;
+                               goto found;
+                       }
+       }
+       if ((v2 & SONYPI_CAPTURE_EV) == SONYPI_CAPTURE_EV) {
+               for (i = 0; sonypi_captureev[i].event; i++)
+                       if (sonypi_captureev[i].data == v1) {
+                               event = sonypi_captureev[i].event;
+                               goto found;
+                       }
+       }
+       if ((v2 & sonypi_fnkey_ev) == sonypi_fnkey_ev) {
+               for (i = 0; sonypi_fnkeyev[i].event; i++)
+                       if (sonypi_fnkeyev[i].data == v1) {
+                               event = sonypi_fnkeyev[i].event;
+                               goto found;
+                       }
+       }
+       if ((v2 & SONYPI_BLUETOOTH_EV) == SONYPI_BLUETOOTH_EV) {
+               for (i = 0; sonypi_blueev[i].event; i++)
+                       if (sonypi_blueev[i].data == v1) {
+                               event = sonypi_blueev[i].event;
+                               goto found;
+                       }
+       }
+       if (verbose)
                printk(KERN_WARNING 
                       "sonypi: unknown event port1=0x%x,port2=0x%x\n",v1,v2);
+       return;
+
+found:
+       sonypi_pushq(event);
 }
 
-/* External camera command (exported to the motion eye v4l driver */
+/* External camera command (exported to the motion eye v4l driver) */
 u8 sonypi_camera_command(int command, u8 value) {
        u8 ret = 0;
 
+       if (!camera)
+               return 0;
+
        down(&sonypi_device.lock);
 
        switch(command) {
@@ -451,6 +507,35 @@
        return 0;
 }
 
+static int sonypi_misc_ioctl(struct inode *ip, struct file *fp, 
+                            unsigned int cmd, unsigned long arg) {
+       int ret = 0;
+       u8 val;
+
+       down(&sonypi_device.lock);
+       switch (cmd) {
+               case SONYPI_IOCGBRT:
+                       val = sonypi_ecrget(0x96) & 0xff;
+                       if (copy_to_user((u8 *)arg, &val, sizeof(val))) {
+                               ret = -EFAULT;
+                               goto out;
+                       }
+                       break;
+               case SONYPI_IOCSBRT:
+                       if (copy_from_user(&val, (u8 *)arg, sizeof(val))) {
+                               ret = -EFAULT;
+                               goto out;
+                       }
+                       sonypi_ecrset(0x96, val);
+                       break;
+       default:
+               ret = -EINVAL;
+       }
+out:
+       up(&sonypi_device.lock);
+       return ret;
+}
+
 static struct file_operations sonypi_misc_fops = {
        owner:          THIS_MODULE,
        read:           sonypi_misc_read,
@@ -458,6 +543,7 @@
        open:           sonypi_misc_open,
        release:        sonypi_misc_release,
        fasync:         sonypi_misc_fasync,
+       ioctl:          sonypi_misc_ioctl,
 };
 
 struct miscdevice sonypi_misc_device = {
@@ -467,6 +553,8 @@
 static int __devinit sonypi_probe(struct pci_dev *pcidev, 
                                  const struct pci_device_id *ent) {
        int i, ret;
+       struct sonypi_ioport_list *ioport_list;
+       struct sonypi_irq_list *irq_list;
 
        if (sonypi_device.dev) {
                printk(KERN_ERR "sonypi: only one device allowed!\n"),
@@ -474,6 +562,7 @@
                goto out1;
        }
        sonypi_device.dev = pcidev;
+       sonypi_device.model = (int)ent->driver_data;
        sonypi_initq();
        init_MUTEX(&sonypi_device.lock);
        
@@ -490,12 +579,24 @@
                goto out1;
        }
 
-       for (i = 0; sonypi_ioport_list[i].port1; i++) {
-               if (request_region(sonypi_ioport_list[i].port1, 8, 
+       if (sonypi_device.model == SONYPI_DEVICE_MODEL_R505) {
+               ioport_list = sonypi_r505_ioport_list;
+               sonypi_device.region_size = SONYPI_R505_REGION_SIZE;
+               irq_list = sonypi_r505_irq_list;
+       }
+       else {
+               ioport_list = sonypi_normal_ioport_list;
+               sonypi_device.region_size = SONYPI_NORMAL_REGION_SIZE;
+               irq_list = sonypi_normal_irq_list;
+       }
+
+       for (i = 0; ioport_list[i].port1; i++) {
+               if (request_region(ioport_list[i].port1, 
+                                  sonypi_device.region_size, 
                                   "Sony Programable I/O Device")) {
                        /* get the ioport */
-                       sonypi_device.ioport1 = sonypi_ioport_list[i].port1;
-                       sonypi_device.ioport2 = sonypi_ioport_list[i].port2;
+                       sonypi_device.ioport1 = ioport_list[i].port1;
+                       sonypi_device.ioport2 = ioport_list[i].port2;
                        break;
                }
        }
@@ -505,11 +606,11 @@
                goto out2;
        }
 
-       for (i = 0; sonypi_irq_list[i].irq; i++) {
-               if (!request_irq(sonypi_irq_list[i].irq, sonypi_irq, 
+       for (i = 0; irq_list[i].irq; i++) {
+               if (!request_irq(irq_list[i].irq, sonypi_irq, 
                                 SA_INTERRUPT, "sonypi", sonypi_irq)) {
-                       sonypi_device.irq = sonypi_irq_list[i].irq;
-                       sonypi_device.bits = sonypi_irq_list[i].bits;
+                       sonypi_device.irq = irq_list[i].irq;
+                       sonypi_device.bits = irq_list[i].bits;
                        break;
                }
        }
@@ -522,7 +623,11 @@
        if (fnkeyinit)
                outb(0xf0, 0xb2);
 
-       sonypi_srs();
+       if (sonypi_device.model == SONYPI_DEVICE_MODEL_R505)
+               sonypi_r505_srs();
+       else
+               sonypi_normal_srs();
+
        sonypi_call1(0x82);
        sonypi_call2(0x81, 0xff);
        sonypi_call1(0x92); 
@@ -530,6 +635,10 @@
        printk(KERN_INFO "sonypi: Sony Programmable I/O Controller Driver v%d.%d.\n",
               SONYPI_DRIVER_MAJORVERSION,
               SONYPI_DRIVER_MINORVERSION);
+       printk(KERN_INFO "sonypi: detected %s model, camera = %s\n",
+              (sonypi_device.model == SONYPI_DEVICE_MODEL_NORMAL) ?
+              "normal" : "R505",
+              camera ? "on" : "off");
        printk(KERN_INFO "sonypi: enabled at irq=%d, port1=0x%x, port2=0x%x\n",
               sonypi_device.irq, 
               sonypi_device.ioport1, sonypi_device.ioport2);
@@ -540,7 +649,7 @@
        return 0;
 
 out3:
-       release_region(sonypi_device.ioport1, 8);
+       release_region(sonypi_device.ioport1, sonypi_device.region_size);
 out2:
        misc_deregister(&sonypi_misc_device);
 out1:
@@ -548,19 +657,26 @@
 }
 
 static void __devexit sonypi_remove(struct pci_dev *pcidev) {
-       sonypi_set(SONYPI_CAMERA_PICTURE, SONYPI_CAMERA_MUTE_MASK);
        sonypi_call2(0x81, 0); /* make sure we don't get any more events */
-       sonypi_camera_off();
-       sonypi_dis();
+       if (camera)
+               sonypi_camera_off();
+       if (sonypi_device.model == SONYPI_DEVICE_MODEL_R505)
+               sonypi_r505_dis();
+       else
+               sonypi_normal_dis();
        free_irq(sonypi_device.irq, sonypi_irq);
-       release_region(sonypi_device.ioport1, 8);
+       release_region(sonypi_device.ioport1, sonypi_device.region_size);
        misc_deregister(&sonypi_misc_device);
        printk(KERN_INFO "sonypi: removed.\n");
 }
 
 static struct pci_device_id sonypi_id_tbl[] __devinitdata = {
        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, 
-         PCI_ANY_ID, PCI_ANY_ID, 0,0,0 },
+         PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
+         (unsigned long) SONYPI_DEVICE_MODEL_NORMAL },
+       { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_10,
+         PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
+         (unsigned long) SONYPI_DEVICE_MODEL_R505 },
        { }
 };
 
@@ -594,5 +710,7 @@
 MODULE_PARM_DESC(verbose, "be verbose, default is 0 (no)");
 MODULE_PARM(fnkeyinit,"i");
 MODULE_PARM_DESC(fnkeyinit, "set this if your Fn keys do not generate any event");
+MODULE_PARM(camera,"i");
+MODULE_PARM_DESC(camera, "set this if you have a MotionEye camera (PictureBook 
+series)");
 
 EXPORT_SYMBOL(sonypi_camera_command);
diff -uNr --exclude-from=dontdiff linux-2.4.5-ac15.orig/drivers/char/sonypi.h 
linux-2.4.5-ac15/drivers/char/sonypi.h
--- linux-2.4.5-ac15.orig/drivers/char/sonypi.h Fri Jun 15 14:17:21 2001
+++ linux-2.4.5-ac15/drivers/char/sonypi.h      Mon Jun 18 10:21:45 2001
@@ -3,6 +3,8 @@
  *
  * Copyright (C) 2001 Stelian Pop <[EMAIL PROTECTED]>, Alcôve
  *
+ * Copyright (C) 2001 Michael Ashley <[EMAIL PROTECTED]>
+ *
  * Copyright (C) 2001 Junichi Morita <[EMAIL PROTECTED]>
  *
  * Copyright (C) 2000 Takaya Kinjo <[EMAIL PROTECTED]>
@@ -33,24 +35,36 @@
 #ifdef __KERNEL__
 
 #define SONYPI_DRIVER_MAJORVERSION     1
-#define SONYPI_DRIVER_MINORVERSION     1
+#define SONYPI_DRIVER_MINORVERSION     2
 
 #include <linux/types.h>
 #include <linux/pci.h>
 #include "linux/sonypi.h"
 
-#define SONYPI_IRQ_PORT                0x8034
-#define SONYPI_IRQ_SHIFT       22
-
-#define SONYPI_BASE            0x50
-
-#define SONYPI_G10A            (SONYPI_BASE+0x14)
+/* Normal models use those */
+#define SONYPI_IRQ_PORT                        0x8034
+#define SONYPI_IRQ_SHIFT               22
+#define SONYPI_BASE                    0x50
+#define SONYPI_G10A                    (SONYPI_BASE+0x14)
+#define SONYPI_NORMAL_REGION_SIZE      0x08
+
+/* R505 series specifics */
+#define SONYPI_SIRQ            0x9b
+#define SONYPI_SLOB            0x9c
+#define SONYPI_SHIB            0x9d
+#define SONYPI_R505_REGION_SIZE        0x20
+
+/* ioports used for brightness and R505 events */
+#define SONYPI_DATA_IOPORT     0x62
+#define SONYPI_CST_IOPORT      0x66
 
 /* The set of possible ioports */
-static struct sonypi_ioport_list {
+struct sonypi_ioport_list {
        u16     port1;
        u16     port2;
-} sonypi_ioport_list[] = {
+};
+
+static struct sonypi_ioport_list sonypi_normal_ioport_list[] = {
        { 0x10c0, 0x10c4 },     /* looks like the default on C1Vx */
        { 0x1080, 0x1084 },
        { 0x1090, 0x1094 },
@@ -59,15 +73,33 @@
        { 0x0, 0x0 }
 };
 
+static struct sonypi_ioport_list sonypi_r505_ioport_list[] = {
+       { 0x1080, 0x1084 },
+       { 0x10a0, 0x10a4 },
+       { 0x10c0, 0x10c4 },
+       { 0x10e0, 0x10e4 },
+       { 0x0, 0x0 }
+};
+
 /* The set of possible interrupts */
-static struct sonypi_irq_list {
+struct sonypi_irq_list {
        u16     irq;
        u16     bits;
-} sonypi_irq_list[] = {
+};
+
+static struct sonypi_irq_list sonypi_normal_irq_list[] = {
        { 11, 0x2 },    /* IRQ 11, GO22=0,GO23=1 in AML */
        { 10, 0x1 },    /* IRQ 10, GO22=1,GO23=0 in AML */
-       { 05, 0x0 },    /* IRQ 05, GO22=0,GO23=0 in AML */
-       { 00, 0x3 }     /* no IRQ, GO22=1,GO23=1 in AML */
+       {  5, 0x0 },    /* IRQ  5, GO22=0,GO23=0 in AML */
+       {  0, 0x3 }     /* no IRQ, GO22=1,GO23=1 in AML */
+};
+
+static struct sonypi_irq_list sonypi_r505_irq_list[] = {
+       { 11, 0x80 },   /* IRQ 11, 0x80 in SIRQ in AML */
+       { 10, 0x40 },   /* IRQ 10, 0x40 in SIRQ in AML */
+       {  9, 0x20 },   /* IRQ  9, 0x20 in SIRQ in AML */
+       {  6, 0x10 },   /* IRQ  6, 0x10 in SIRQ in AML */
+       {  0, 0x00 }    /* no IRQ, 0x00 in SIRQ in AML */
 };
 
 #define SONYPI_CAMERA_BRIGHTNESS               0
@@ -100,9 +132,11 @@
 #define SONYPI_CAMERA_ROMVERSION               9
 
 /* key press event data (ioport2) */
-#define SONYPI_JOGGER_EV       0x10
+#define SONYPI_NORMAL_JOGGER_EV        0x10
+#define SONYPI_R505_JOGGER_EV  0x08
 #define SONYPI_CAPTURE_EV      0x60
-#define SONYPI_FNKEY_EV                0x20
+#define SONYPI_NORMAL_FNKEY_EV 0x20
+#define SONYPI_R505_FNKEY_EV   0x08
 #define SONYPI_BLUETOOTH_EV    0x30
 
 struct sonypi_event {
@@ -172,16 +206,21 @@
        unsigned char buf[SONYPI_BUF_SIZE];
 };
 
+#define SONYPI_DEVICE_MODEL_NORMAL     1
+#define SONYPI_DEVICE_MODEL_R505       2
+
 struct sonypi_device {
        struct pci_dev *dev;
        u16 irq;
        u16 bits;
        u16 ioport1;
        u16 ioport2;
+       u16 region_size;
        int camera_power;
        struct semaphore lock;
        struct sonypi_queue queue;
        int open_count;
+       int model;
 };
 
 #endif /* __KERNEL__ */
diff -uNr --exclude-from=dontdiff linux-2.4.5-ac15.orig/include/linux/sonypi.h 
linux-2.4.5-ac15/include/linux/sonypi.h
--- linux-2.4.5-ac15.orig/include/linux/sonypi.h        Fri Jun 15 14:17:51 2001
+++ linux-2.4.5-ac15/include/linux/sonypi.h     Fri Jun 15 15:40:46 2001
@@ -3,6 +3,8 @@
  *
  * Copyright (C) 2001 Stelian Pop <[EMAIL PROTECTED]>, Alcôve
  *
+ * Copyright (C) 2001 Michael Ashley <[EMAIL PROTECTED]>
+ *
  * Copyright (C) 2001 Junichi Morita <[EMAIL PROTECTED]>
  *
  * Copyright (C) 2000 Takaya Kinjo <[EMAIL PROTECTED]>
@@ -30,6 +32,8 @@
 #ifndef _SONYPI_H_ 
 #define _SONYPI_H_
 
+#include <linux/types.h>
+
 /* events the user application reading /dev/sonypi can use */
 
 #define SONYPI_EVENT_JOGDIAL_DOWN               1
@@ -64,9 +68,11 @@
 #define SONYPI_EVENT_FNKEY_B                   30
 #define SONYPI_EVENT_BLUETOOTH_PRESSED         31
 
-#ifdef __KERNEL__
+/* brightness etc. ioctls */
+#define SONYPI_IOCGBRT _IOR('v', 0, __u8)
+#define SONYPI_IOCSBRT _IOW('v', 0, __u8)
 
-#include <linux/types.h>
+#ifdef __KERNEL__
 
 /* used only for communication between v4l and sonypi */
 
          
-- 
Stelian Pop <[EMAIL PROTECTED]>
|---------------- Free Software Engineer -----------------|
| Alcôve - http://www.alcove.com - Tel: +33 1 49 22 68 00 |
|------------- Alcôve, liberating software ---------------|
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to