Re: [PATCH] sonypi, kernel 2.6.12.3

2005-08-01 Thread Erik Waling
On Mon, Aug 01, 2005 at 10:45:03AM +0200, Stelian Pop wrote:
> Le lundi 01 août 2005 à 02:59 +0200, Erik Waling a écrit :
> > Newer Sony VAIO models (VGN-S480, VGN-S460, VGN-S3XP etc) use a new method 
> > to
> > initialize the SPIC device. The new way to initialize (and disable) the 
> > device
> > comes directly from the AML code in the _CRS, _SRS and _DIS methods from the
> > DSDT table. This patch against 2.6.12.3 adds support for the new models.
> > 
> > -- Erik Waling  <[EMAIL PROTECTED]>
> > 
> > 
> > 
> > --- linux-2.6.12.3/drivers/char/sonypi.c2005-07-15 16:18:57.0 
> > -0500
> > +++ linux/drivers/char/sonypi.c 2005-07-31 16:55:41.0 -0500
> 
> [...]
> 
> > +   - some models with the nvidia card (geforce go 6200 tc) uses a 
> > + different way to adjust the backlighting of the screen. There
> > + is a userspace utility to adjust the brightness on those models.
> 
> Don't be shy, put the URL pointing to your SmartDimmer here :)
> 
> Otherwise you have my:
>   Signed-off-by: Stelian Pop <[EMAIL PROTECTED]>
> 
> Thanks Erik.
> 
> Stelian.
> -- 
> Stelian Pop <[EMAIL PROTECTED]>

Added URL to the smartdimmer tool (to adjust backlight levels on newer
models) in the docs. Also forgot to sign my last post with the patch... So:
 
Signed-off-by: Erik Waling <[EMAIL PROTECTED]>



--- linux-2.6.12.3/drivers/char/sonypi.c2005-07-15 16:18:57.0 
-0500
+++ linux/drivers/char/sonypi.c 2005-07-31 16:55:41.0 -0500
@@ -98,12 +98,13 @@
 
 #define SONYPI_DEVICE_MODEL_TYPE1  1
 #define SONYPI_DEVICE_MODEL_TYPE2  2
+#define SONYPI_DEVICE_MODEL_TYPE3  3
 
 /* type1 models use those */
 #define SONYPI_IRQ_PORT0x8034
 #define SONYPI_IRQ_SHIFT   22
-#define SONYPI_BASE0x50
-#define SONYPI_G10A(SONYPI_BASE+0x14)
+#define SONYPI_TYPE1_BASE  0x50
+#define SONYPI_G10A(SONYPI_TYPE1_BASE+0x14)
 #define SONYPI_TYPE1_REGION_SIZE   0x08
 #define SONYPI_TYPE1_EVTYPE_OFFSET 0x04
 
@@ -114,6 +115,13 @@
 #define SONYPI_TYPE2_REGION_SIZE   0x20
 #define SONYPI_TYPE2_EVTYPE_OFFSET 0x12
 
+/* type3 series specifics */
+#define SONYPI_TYPE3_BASE  0x40
+#define SONYPI_TYPE3_GID2  (SONYPI_TYPE3_BASE+0x48) /* 16 bits */
+#define SONYPI_TYPE3_MISC  (SONYPI_TYPE3_BASE+0x6d) /* 8 bits  */
+#define SONYPI_TYPE3_REGION_SIZE   0x20
+#define SONYPI_TYPE3_EVTYPE_OFFSET 0x12
+
 /* battery / brightness addresses */
 #define SONYPI_BAT_FLAGS   0x81
 #define SONYPI_LCD_LIGHT   0x96
@@ -159,6 +167,10 @@
{ 0x0, 0x0 }
 };
 
+/* same as in type 2 models */
+static struct sonypi_ioport_list *sonypi_type3_ioport_list = 
+   sonypi_type2_ioport_list;
+
 /* The set of possible interrupts */
 struct sonypi_irq_list {
u16 irq;
@@ -180,6 +192,9 @@
{  0, 0x00 }/* no IRQ, 0x00 in SIRQ in AML */
 };
 
+/* same as in type2 models */
+static struct sonypi_irq_list *sonypi_type3_irq_list = sonypi_type2_irq_list;
+
 #define SONYPI_CAMERA_BRIGHTNESS   0
 #define SONYPI_CAMERA_CONTRAST 1
 #define SONYPI_CAMERA_HUE  2
@@ -223,6 +238,7 @@
 #define SONYPI_MEYE_MASK   0x0400
 #define SONYPI_MEMORYSTICK_MASK0x0800
 #define SONYPI_BATTERY_MASK0x1000
+#define SONYPI_WIRELESS_MASK   0x2000
 
 struct sonypi_event {
u8  data;
@@ -305,6 +321,13 @@
{ 0, 0 }
 };
 
+/* The set of possible wireless events */
+static struct sonypi_event sonypi_wlessev[] = {
+   { 0x59, SONYPI_EVENT_WIRELESS_ON },
+   { 0x5a, SONYPI_EVENT_WIRELESS_OFF },
+   { 0, 0 }
+};
+
 /* The set of possible back button events */
 static struct sonypi_event sonypi_backev[] = {
{ 0x20, SONYPI_EVENT_BACK_PRESSED },
@@ -391,6 +414,12 @@
{ SONYPI_DEVICE_MODEL_TYPE2, 0x41, SONYPI_BATTERY_MASK, 
sonypi_batteryev },
{ SONYPI_DEVICE_MODEL_TYPE2, 0x31, SONYPI_PKEY_MASK, sonypi_pkeyev },
 
+   { SONYPI_DEVICE_MODEL_TYPE3, 0, 0x, sonypi_releaseev },
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x21, SONYPI_FNKEY_MASK, sonypi_fnkeyev },
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x31, SONYPI_WIRELESS_MASK, sonypi_wlessev 
},
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x31, SONYPI_MEMORYSTICK_MASK, 
sonypi_memorystickev },
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x41, SONYPI_BATTERY_MASK, 
sonypi_batteryev },
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x31, SONYPI_PKEY_MASK, sonypi_pkeyev },
{ 0 }
 };
 
@@ -558,6 +587,23 @@
udelay(10);
 }
 
+static void sonypi_type3_srs(void)
+{
+   u16 v16;
+   u8  v8;
+
+   /* This model type uses the same initialiazation of 
+* the embedded controller as the type2 models. */
+   sonypi_type2_srs();
+
+   /* Initialization of PCI config space of the LPC interface bridge. */
+   v16 = 

Re: [PATCH] sonypi, kernel 2.6.12.3

2005-08-01 Thread Stelian Pop
Le lundi 01 août 2005 à 02:59 +0200, Erik Waling a écrit :
> Newer Sony VAIO models (VGN-S480, VGN-S460, VGN-S3XP etc) use a new method to
> initialize the SPIC device. The new way to initialize (and disable) the device
> comes directly from the AML code in the _CRS, _SRS and _DIS methods from the
> DSDT table. This patch against 2.6.12.3 adds support for the new models.
> 
> -- Erik Waling  <[EMAIL PROTECTED]>
> 
> 
> 
> --- linux-2.6.12.3/drivers/char/sonypi.c  2005-07-15 16:18:57.0 
> -0500
> +++ linux/drivers/char/sonypi.c   2005-07-31 16:55:41.0 -0500

[...]

> + - some models with the nvidia card (geforce go 6200 tc) uses a 
> +   different way to adjust the backlighting of the screen. There
> +   is a userspace utility to adjust the brightness on those models.

Don't be shy, put the URL pointing to your SmartDimmer here :)

Otherwise you have my:
Signed-off-by: Stelian Pop <[EMAIL PROTECTED]>

Thanks Erik.

Stelian.
-- 
Stelian Pop <[EMAIL PROTECTED]>

-
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/


Re: [PATCH] sonypi, kernel 2.6.12.3

2005-08-01 Thread Stelian Pop
Le lundi 01 août 2005 à 02:59 +0200, Erik Waling a écrit :
 Newer Sony VAIO models (VGN-S480, VGN-S460, VGN-S3XP etc) use a new method to
 initialize the SPIC device. The new way to initialize (and disable) the device
 comes directly from the AML code in the _CRS, _SRS and _DIS methods from the
 DSDT table. This patch against 2.6.12.3 adds support for the new models.
 
 -- Erik Waling  [EMAIL PROTECTED]
 
 
 
 --- linux-2.6.12.3/drivers/char/sonypi.c  2005-07-15 16:18:57.0 
 -0500
 +++ linux/drivers/char/sonypi.c   2005-07-31 16:55:41.0 -0500

[...]

 + - some models with the nvidia card (geforce go 6200 tc) uses a 
 +   different way to adjust the backlighting of the screen. There
 +   is a userspace utility to adjust the brightness on those models.

Don't be shy, put the URL pointing to your SmartDimmer here :)

Otherwise you have my:
Signed-off-by: Stelian Pop [EMAIL PROTECTED]

Thanks Erik.

Stelian.
-- 
Stelian Pop [EMAIL PROTECTED]

-
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/


Re: [PATCH] sonypi, kernel 2.6.12.3

2005-08-01 Thread Erik Waling
On Mon, Aug 01, 2005 at 10:45:03AM +0200, Stelian Pop wrote:
 Le lundi 01 août 2005 à 02:59 +0200, Erik Waling a écrit :
  Newer Sony VAIO models (VGN-S480, VGN-S460, VGN-S3XP etc) use a new method 
  to
  initialize the SPIC device. The new way to initialize (and disable) the 
  device
  comes directly from the AML code in the _CRS, _SRS and _DIS methods from the
  DSDT table. This patch against 2.6.12.3 adds support for the new models.
  
  -- Erik Waling  [EMAIL PROTECTED]
  
  
  
  --- linux-2.6.12.3/drivers/char/sonypi.c2005-07-15 16:18:57.0 
  -0500
  +++ linux/drivers/char/sonypi.c 2005-07-31 16:55:41.0 -0500
 
 [...]
 
  +   - some models with the nvidia card (geforce go 6200 tc) uses a 
  + different way to adjust the backlighting of the screen. There
  + is a userspace utility to adjust the brightness on those models.
 
 Don't be shy, put the URL pointing to your SmartDimmer here :)
 
 Otherwise you have my:
   Signed-off-by: Stelian Pop [EMAIL PROTECTED]
 
 Thanks Erik.
 
 Stelian.
 -- 
 Stelian Pop [EMAIL PROTECTED]

Added URL to the smartdimmer tool (to adjust backlight levels on newer
models) in the docs. Also forgot to sign my last post with the patch... So:
 
Signed-off-by: Erik Waling [EMAIL PROTECTED]



--- linux-2.6.12.3/drivers/char/sonypi.c2005-07-15 16:18:57.0 
-0500
+++ linux/drivers/char/sonypi.c 2005-07-31 16:55:41.0 -0500
@@ -98,12 +98,13 @@
 
 #define SONYPI_DEVICE_MODEL_TYPE1  1
 #define SONYPI_DEVICE_MODEL_TYPE2  2
+#define SONYPI_DEVICE_MODEL_TYPE3  3
 
 /* type1 models use those */
 #define SONYPI_IRQ_PORT0x8034
 #define SONYPI_IRQ_SHIFT   22
-#define SONYPI_BASE0x50
-#define SONYPI_G10A(SONYPI_BASE+0x14)
+#define SONYPI_TYPE1_BASE  0x50
+#define SONYPI_G10A(SONYPI_TYPE1_BASE+0x14)
 #define SONYPI_TYPE1_REGION_SIZE   0x08
 #define SONYPI_TYPE1_EVTYPE_OFFSET 0x04
 
@@ -114,6 +115,13 @@
 #define SONYPI_TYPE2_REGION_SIZE   0x20
 #define SONYPI_TYPE2_EVTYPE_OFFSET 0x12
 
+/* type3 series specifics */
+#define SONYPI_TYPE3_BASE  0x40
+#define SONYPI_TYPE3_GID2  (SONYPI_TYPE3_BASE+0x48) /* 16 bits */
+#define SONYPI_TYPE3_MISC  (SONYPI_TYPE3_BASE+0x6d) /* 8 bits  */
+#define SONYPI_TYPE3_REGION_SIZE   0x20
+#define SONYPI_TYPE3_EVTYPE_OFFSET 0x12
+
 /* battery / brightness addresses */
 #define SONYPI_BAT_FLAGS   0x81
 #define SONYPI_LCD_LIGHT   0x96
@@ -159,6 +167,10 @@
{ 0x0, 0x0 }
 };
 
+/* same as in type 2 models */
+static struct sonypi_ioport_list *sonypi_type3_ioport_list = 
+   sonypi_type2_ioport_list;
+
 /* The set of possible interrupts */
 struct sonypi_irq_list {
u16 irq;
@@ -180,6 +192,9 @@
{  0, 0x00 }/* no IRQ, 0x00 in SIRQ in AML */
 };
 
+/* same as in type2 models */
+static struct sonypi_irq_list *sonypi_type3_irq_list = sonypi_type2_irq_list;
+
 #define SONYPI_CAMERA_BRIGHTNESS   0
 #define SONYPI_CAMERA_CONTRAST 1
 #define SONYPI_CAMERA_HUE  2
@@ -223,6 +238,7 @@
 #define SONYPI_MEYE_MASK   0x0400
 #define SONYPI_MEMORYSTICK_MASK0x0800
 #define SONYPI_BATTERY_MASK0x1000
+#define SONYPI_WIRELESS_MASK   0x2000
 
 struct sonypi_event {
u8  data;
@@ -305,6 +321,13 @@
{ 0, 0 }
 };
 
+/* The set of possible wireless events */
+static struct sonypi_event sonypi_wlessev[] = {
+   { 0x59, SONYPI_EVENT_WIRELESS_ON },
+   { 0x5a, SONYPI_EVENT_WIRELESS_OFF },
+   { 0, 0 }
+};
+
 /* The set of possible back button events */
 static struct sonypi_event sonypi_backev[] = {
{ 0x20, SONYPI_EVENT_BACK_PRESSED },
@@ -391,6 +414,12 @@
{ SONYPI_DEVICE_MODEL_TYPE2, 0x41, SONYPI_BATTERY_MASK, 
sonypi_batteryev },
{ SONYPI_DEVICE_MODEL_TYPE2, 0x31, SONYPI_PKEY_MASK, sonypi_pkeyev },
 
+   { SONYPI_DEVICE_MODEL_TYPE3, 0, 0x, sonypi_releaseev },
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x21, SONYPI_FNKEY_MASK, sonypi_fnkeyev },
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x31, SONYPI_WIRELESS_MASK, sonypi_wlessev 
},
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x31, SONYPI_MEMORYSTICK_MASK, 
sonypi_memorystickev },
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x41, SONYPI_BATTERY_MASK, 
sonypi_batteryev },
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x31, SONYPI_PKEY_MASK, sonypi_pkeyev },
{ 0 }
 };
 
@@ -558,6 +587,23 @@
udelay(10);
 }
 
+static void sonypi_type3_srs(void)
+{
+   u16 v16;
+   u8  v8;
+
+   /* This model type uses the same initialiazation of 
+* the embedded controller as the type2 models. */
+   sonypi_type2_srs();
+
+   /* Initialization of PCI config space of the LPC interface bridge. */
+   v16 = (sonypi_device.ioport1  0xFFF0) | 0x01;
+   

[PATCH] sonypi, kernel 2.6.12.3

2005-07-31 Thread Erik Waling
Newer Sony VAIO models (VGN-S480, VGN-S460, VGN-S3XP etc) use a new method to
initialize the SPIC device. The new way to initialize (and disable) the device
comes directly from the AML code in the _CRS, _SRS and _DIS methods from the
DSDT table. This patch against 2.6.12.3 adds support for the new models.

-- Erik Waling  <[EMAIL PROTECTED]>



--- linux-2.6.12.3/drivers/char/sonypi.c2005-07-15 16:18:57.0 
-0500
+++ linux/drivers/char/sonypi.c 2005-07-31 16:55:41.0 -0500
@@ -98,12 +98,13 @@
 
 #define SONYPI_DEVICE_MODEL_TYPE1  1
 #define SONYPI_DEVICE_MODEL_TYPE2  2
+#define SONYPI_DEVICE_MODEL_TYPE3  3
 
 /* type1 models use those */
 #define SONYPI_IRQ_PORT0x8034
 #define SONYPI_IRQ_SHIFT   22
-#define SONYPI_BASE0x50
-#define SONYPI_G10A(SONYPI_BASE+0x14)
+#define SONYPI_TYPE1_BASE  0x50
+#define SONYPI_G10A(SONYPI_TYPE1_BASE+0x14)
 #define SONYPI_TYPE1_REGION_SIZE   0x08
 #define SONYPI_TYPE1_EVTYPE_OFFSET 0x04
 
@@ -114,6 +115,13 @@
 #define SONYPI_TYPE2_REGION_SIZE   0x20
 #define SONYPI_TYPE2_EVTYPE_OFFSET 0x12
 
+/* type3 series specifics */
+#define SONYPI_TYPE3_BASE  0x40
+#define SONYPI_TYPE3_GID2  (SONYPI_TYPE3_BASE+0x48) /* 16 bits */
+#define SONYPI_TYPE3_MISC  (SONYPI_TYPE3_BASE+0x6d) /* 8 bits  */
+#define SONYPI_TYPE3_REGION_SIZE   0x20
+#define SONYPI_TYPE3_EVTYPE_OFFSET 0x12
+
 /* battery / brightness addresses */
 #define SONYPI_BAT_FLAGS   0x81
 #define SONYPI_LCD_LIGHT   0x96
@@ -159,6 +167,10 @@
{ 0x0, 0x0 }
 };
 
+/* same as in type 2 models */
+static struct sonypi_ioport_list *sonypi_type3_ioport_list = 
+   sonypi_type2_ioport_list;
+
 /* The set of possible interrupts */
 struct sonypi_irq_list {
u16 irq;
@@ -180,6 +192,9 @@
{  0, 0x00 }/* no IRQ, 0x00 in SIRQ in AML */
 };
 
+/* same as in type2 models */
+static struct sonypi_irq_list *sonypi_type3_irq_list = sonypi_type2_irq_list;
+
 #define SONYPI_CAMERA_BRIGHTNESS   0
 #define SONYPI_CAMERA_CONTRAST 1
 #define SONYPI_CAMERA_HUE  2
@@ -223,6 +238,7 @@
 #define SONYPI_MEYE_MASK   0x0400
 #define SONYPI_MEMORYSTICK_MASK0x0800
 #define SONYPI_BATTERY_MASK0x1000
+#define SONYPI_WIRELESS_MASK   0x2000
 
 struct sonypi_event {
u8  data;
@@ -305,6 +321,13 @@
{ 0, 0 }
 };
 
+/* The set of possible wireless events */
+static struct sonypi_event sonypi_wlessev[] = {
+   { 0x59, SONYPI_EVENT_WIRELESS_ON },
+   { 0x5a, SONYPI_EVENT_WIRELESS_OFF },
+   { 0, 0 }
+};
+
 /* The set of possible back button events */
 static struct sonypi_event sonypi_backev[] = {
{ 0x20, SONYPI_EVENT_BACK_PRESSED },
@@ -391,6 +414,12 @@
{ SONYPI_DEVICE_MODEL_TYPE2, 0x41, SONYPI_BATTERY_MASK, 
sonypi_batteryev },
{ SONYPI_DEVICE_MODEL_TYPE2, 0x31, SONYPI_PKEY_MASK, sonypi_pkeyev },
 
+   { SONYPI_DEVICE_MODEL_TYPE3, 0, 0x, sonypi_releaseev },
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x21, SONYPI_FNKEY_MASK, sonypi_fnkeyev },
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x31, SONYPI_WIRELESS_MASK, sonypi_wlessev 
},
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x31, SONYPI_MEMORYSTICK_MASK, 
sonypi_memorystickev },
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x41, SONYPI_BATTERY_MASK, 
sonypi_batteryev },
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x31, SONYPI_PKEY_MASK, sonypi_pkeyev },
{ 0 }
 };
 
@@ -558,6 +587,23 @@
udelay(10);
 }
 
+static void sonypi_type3_srs(void)
+{
+   u16 v16;
+   u8  v8;
+
+   /* This model type uses the same initialiazation of 
+* the embedded controller as the type2 models. */
+   sonypi_type2_srs();
+
+   /* Initialization of PCI config space of the LPC interface bridge. */
+   v16 = (sonypi_device.ioport1 & 0xFFF0) | 0x01;
+   pci_write_config_word(sonypi_device.dev, SONYPI_TYPE3_GID2, v16);
+   pci_read_config_byte(sonypi_device.dev, SONYPI_TYPE3_MISC, );
+   v8 = (v8 & 0xCF) | 0x10;
+   pci_write_config_byte(sonypi_device.dev, SONYPI_TYPE3_MISC, v8);
+}
+
 /* Disables the device - this comes from the AML code in the ACPI bios */
 static void sonypi_type1_dis(void)
 {
@@ -582,6 +628,13 @@
printk(KERN_WARNING "ec_write failed\n");
 }
 
+static void sonypi_type3_dis(void)
+{
+   sonypi_type2_dis();
+   udelay(10);
+   pci_write_config_word(sonypi_device.dev, SONYPI_TYPE3_GID2, 0);
+}
+
 static u8 sonypi_call1(u8 dev)
 {
u8 v1, v2;
@@ -1066,10 +1119,17 @@
 
 static void sonypi_enable(unsigned int camera_on)
 {
-   if (sonypi_device.model == SONYPI_DEVICE_MODEL_TYPE2)
-   sonypi_type2_srs();
-   else
+   switch (sonypi_device.model) {
+   case SONYPI_DEVICE_MODEL_TYPE1:
   

[PATCH] sonypi, kernel 2.6.12.3

2005-07-31 Thread Erik Waling
Newer Sony VAIO models (VGN-S480, VGN-S460, VGN-S3XP etc) use a new method to
initialize the SPIC device. The new way to initialize (and disable) the device
comes directly from the AML code in the _CRS, _SRS and _DIS methods from the
DSDT table. This patch against 2.6.12.3 adds support for the new models.

-- Erik Waling  [EMAIL PROTECTED]



--- linux-2.6.12.3/drivers/char/sonypi.c2005-07-15 16:18:57.0 
-0500
+++ linux/drivers/char/sonypi.c 2005-07-31 16:55:41.0 -0500
@@ -98,12 +98,13 @@
 
 #define SONYPI_DEVICE_MODEL_TYPE1  1
 #define SONYPI_DEVICE_MODEL_TYPE2  2
+#define SONYPI_DEVICE_MODEL_TYPE3  3
 
 /* type1 models use those */
 #define SONYPI_IRQ_PORT0x8034
 #define SONYPI_IRQ_SHIFT   22
-#define SONYPI_BASE0x50
-#define SONYPI_G10A(SONYPI_BASE+0x14)
+#define SONYPI_TYPE1_BASE  0x50
+#define SONYPI_G10A(SONYPI_TYPE1_BASE+0x14)
 #define SONYPI_TYPE1_REGION_SIZE   0x08
 #define SONYPI_TYPE1_EVTYPE_OFFSET 0x04
 
@@ -114,6 +115,13 @@
 #define SONYPI_TYPE2_REGION_SIZE   0x20
 #define SONYPI_TYPE2_EVTYPE_OFFSET 0x12
 
+/* type3 series specifics */
+#define SONYPI_TYPE3_BASE  0x40
+#define SONYPI_TYPE3_GID2  (SONYPI_TYPE3_BASE+0x48) /* 16 bits */
+#define SONYPI_TYPE3_MISC  (SONYPI_TYPE3_BASE+0x6d) /* 8 bits  */
+#define SONYPI_TYPE3_REGION_SIZE   0x20
+#define SONYPI_TYPE3_EVTYPE_OFFSET 0x12
+
 /* battery / brightness addresses */
 #define SONYPI_BAT_FLAGS   0x81
 #define SONYPI_LCD_LIGHT   0x96
@@ -159,6 +167,10 @@
{ 0x0, 0x0 }
 };
 
+/* same as in type 2 models */
+static struct sonypi_ioport_list *sonypi_type3_ioport_list = 
+   sonypi_type2_ioport_list;
+
 /* The set of possible interrupts */
 struct sonypi_irq_list {
u16 irq;
@@ -180,6 +192,9 @@
{  0, 0x00 }/* no IRQ, 0x00 in SIRQ in AML */
 };
 
+/* same as in type2 models */
+static struct sonypi_irq_list *sonypi_type3_irq_list = sonypi_type2_irq_list;
+
 #define SONYPI_CAMERA_BRIGHTNESS   0
 #define SONYPI_CAMERA_CONTRAST 1
 #define SONYPI_CAMERA_HUE  2
@@ -223,6 +238,7 @@
 #define SONYPI_MEYE_MASK   0x0400
 #define SONYPI_MEMORYSTICK_MASK0x0800
 #define SONYPI_BATTERY_MASK0x1000
+#define SONYPI_WIRELESS_MASK   0x2000
 
 struct sonypi_event {
u8  data;
@@ -305,6 +321,13 @@
{ 0, 0 }
 };
 
+/* The set of possible wireless events */
+static struct sonypi_event sonypi_wlessev[] = {
+   { 0x59, SONYPI_EVENT_WIRELESS_ON },
+   { 0x5a, SONYPI_EVENT_WIRELESS_OFF },
+   { 0, 0 }
+};
+
 /* The set of possible back button events */
 static struct sonypi_event sonypi_backev[] = {
{ 0x20, SONYPI_EVENT_BACK_PRESSED },
@@ -391,6 +414,12 @@
{ SONYPI_DEVICE_MODEL_TYPE2, 0x41, SONYPI_BATTERY_MASK, 
sonypi_batteryev },
{ SONYPI_DEVICE_MODEL_TYPE2, 0x31, SONYPI_PKEY_MASK, sonypi_pkeyev },
 
+   { SONYPI_DEVICE_MODEL_TYPE3, 0, 0x, sonypi_releaseev },
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x21, SONYPI_FNKEY_MASK, sonypi_fnkeyev },
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x31, SONYPI_WIRELESS_MASK, sonypi_wlessev 
},
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x31, SONYPI_MEMORYSTICK_MASK, 
sonypi_memorystickev },
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x41, SONYPI_BATTERY_MASK, 
sonypi_batteryev },
+   { SONYPI_DEVICE_MODEL_TYPE3, 0x31, SONYPI_PKEY_MASK, sonypi_pkeyev },
{ 0 }
 };
 
@@ -558,6 +587,23 @@
udelay(10);
 }
 
+static void sonypi_type3_srs(void)
+{
+   u16 v16;
+   u8  v8;
+
+   /* This model type uses the same initialiazation of 
+* the embedded controller as the type2 models. */
+   sonypi_type2_srs();
+
+   /* Initialization of PCI config space of the LPC interface bridge. */
+   v16 = (sonypi_device.ioport1  0xFFF0) | 0x01;
+   pci_write_config_word(sonypi_device.dev, SONYPI_TYPE3_GID2, v16);
+   pci_read_config_byte(sonypi_device.dev, SONYPI_TYPE3_MISC, v8);
+   v8 = (v8  0xCF) | 0x10;
+   pci_write_config_byte(sonypi_device.dev, SONYPI_TYPE3_MISC, v8);
+}
+
 /* Disables the device - this comes from the AML code in the ACPI bios */
 static void sonypi_type1_dis(void)
 {
@@ -582,6 +628,13 @@
printk(KERN_WARNING ec_write failed\n);
 }
 
+static void sonypi_type3_dis(void)
+{
+   sonypi_type2_dis();
+   udelay(10);
+   pci_write_config_word(sonypi_device.dev, SONYPI_TYPE3_GID2, 0);
+}
+
 static u8 sonypi_call1(u8 dev)
 {
u8 v1, v2;
@@ -1066,10 +1119,17 @@
 
 static void sonypi_enable(unsigned int camera_on)
 {
-   if (sonypi_device.model == SONYPI_DEVICE_MODEL_TYPE2)
-   sonypi_type2_srs();
-   else
+   switch (sonypi_device.model) {
+   case SONYPI_DEVICE_MODEL_TYPE1: