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;
}