sonypi kernel driver -- volunteers needed

"Daniel K." <[email protected]>
Newsgroups gmane.linux.hardware.sony
Message-ID <[email protected]>
In my quest to have a more correct sonypi driver in the kernel, help is 
needed.

Attached is a patch for 2.4.21, it should apply to 2.5.7x as well, 
albeit with some fuzz/offsets.

If you are interested, please apply the patch to your local kernel tree,
rebuild your kernel, and load the sonypi driver with the 'verbose' 
option set to '1'.
bash# modprobe sonypi verbose=1
This will make sure any unknown events will be logged to syslog.

What is reported to syslog will look something like:
Jun 25 17:48:58 vaio kernel: sonypi: unknown event port1=0x1c,port2=0x11

The interesting part is the value of port2
Here the value is '0x11' which is a 'JOGGER' event, which is already 
taken care of in the patch.

In particluar I am interested in the correct values for the eventtypes 
in the table below.

0x38, SONYPI_LID_MASK
0x08, SONYPI_CAPTURE_MASK
0x08, SONYPI_PKEY_MASK
0x08, SONYPI_HELP_MASK
0x08, SONYPI_ZOOM_MASK
0x08, SONYPI_THUMBPHRASE_MASK
0x08, SONYPI_MEMORYSTICK_MASK

Please report your results to the list, or directly to me.
I will then prepare a patch and send it to the maintainer of the sonypi 
driver.

Regards

Daniel K.
sonypi-evtype.patch (text/plain, 2.7 KB)
--- linux-2.4.21/drivers/char/sonypi.h.orig	2003-06-11 10:07:28.000000000 +0000
+++ linux-2.4.21/drivers/char/sonypi.h	2003-06-20 17:00:11.000000000 +0000
@@ -56,12 +56,14 @@
 #define SONYPI_BASE			0x50
 #define SONYPI_G10A			(SONYPI_BASE+0x14)
 #define SONYPI_TYPE1_REGION_SIZE	0x08
+#define SONYPI_TYPE1_EVTYPE_OFFSET	0x04
 
 /* type2 series specifics */
 #define SONYPI_SIRQ			0x9b
 #define SONYPI_SLOB			0x9c
 #define SONYPI_SHIB			0x9d
 #define SONYPI_TYPE2_REGION_SIZE	0x20
+#define SONYPI_TYPE2_EVTYPE_OFFSET	0x12
 
 /* battery / brightness addresses */
 #define SONYPI_BAT_FLAGS	0x81
@@ -310,12 +312,12 @@
 
 	{ SONYPI_DEVICE_MODEL_TYPE2, 0, 0xffffffff, sonypi_releaseev },
 	{ SONYPI_DEVICE_MODEL_TYPE2, 0x38, SONYPI_LID_MASK, sonypi_lidev },
-	{ SONYPI_DEVICE_MODEL_TYPE2, 0x08, SONYPI_JOGGER_MASK, sonypi_joggerev },
+	{ SONYPI_DEVICE_MODEL_TYPE2, 0x11, SONYPI_JOGGER_MASK, sonypi_joggerev },
 	{ SONYPI_DEVICE_MODEL_TYPE2, 0x08, SONYPI_CAPTURE_MASK, sonypi_captureev },
-	{ SONYPI_DEVICE_MODEL_TYPE2, 0x08, SONYPI_FNKEY_MASK, sonypi_fnkeyev },
+	{ SONYPI_DEVICE_MODEL_TYPE2, 0x21, SONYPI_FNKEY_MASK, sonypi_fnkeyev },
-	{ SONYPI_DEVICE_MODEL_TYPE2, 0x08, SONYPI_BLUETOOTH_MASK, sonypi_blueev },
+	{ SONYPI_DEVICE_MODEL_TYPE2, 0x31, SONYPI_BLUETOOTH_MASK, sonypi_blueev },
 	{ SONYPI_DEVICE_MODEL_TYPE2, 0x08, SONYPI_PKEY_MASK, sonypi_pkeyev },
-	{ SONYPI_DEVICE_MODEL_TYPE2, 0x08, SONYPI_BACK_MASK, sonypi_backev },
+	{ SONYPI_DEVICE_MODEL_TYPE2, 0x11, SONYPI_BACK_MASK, sonypi_backev },
 	{ SONYPI_DEVICE_MODEL_TYPE2, 0x08, SONYPI_HELP_MASK, sonypi_helpev },
 	{ SONYPI_DEVICE_MODEL_TYPE2, 0x08, SONYPI_ZOOM_MASK, sonypi_zoomev },
 	{ SONYPI_DEVICE_MODEL_TYPE2, 0x08, SONYPI_THUMBPHRASE_MASK, sonypi_thumbphraseev },
@@ -345,6 +345,7 @@
 	u16 ioport1;
 	u16 ioport2;
 	u16 region_size;
+	u16 evtype_offset;
 	int camera_power;
 	int bluetooth_power;
 	struct semaphore lock;
--- linux-2.4.21/drivers/char/sonypi.c.orig	2003-06-10 16:14:53.000000000 +0000
+++ linux-2.4.21/drivers/char/sonypi.c	2003-06-20 18:42:25.000000000 +0000
@@ -310,7 +310,7 @@
 	int i, j;
 
 	v1 = inb_p(sonypi_device.ioport1);
-	v2 = inb_p(sonypi_device.ioport2);
+	v2 = inb_p(sonypi_device.ioport1 + sonypi_device.evtype_offset);
 
 	if (verbose > 1)
 		printk(KERN_INFO 
@@ -671,11 +671,13 @@
 	if (sonypi_device.model == SONYPI_DEVICE_MODEL_TYPE2) {
 		ioport_list = sonypi_type2_ioport_list;
 		sonypi_device.region_size = SONYPI_TYPE2_REGION_SIZE;
+		sonypi_device.evtype_offset = SONYPI_TYPE2_EVTYPE_OFFSET;
 		irq_list = sonypi_type2_irq_list;
 	}
 	else {
 		ioport_list = sonypi_type1_ioport_list;
 		sonypi_device.region_size = SONYPI_TYPE1_REGION_SIZE;
+		sonypi_device.evtype_offset = SONYPI_TYPE1_EVTYPE_OFFSET;
 		irq_list = sonypi_type1_irq_list;
 	}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.