hc
2024-08-16 a24a44ff9ca902811b99aa9663d697cf452e08ef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
==================================================
Sony Programmable I/O Control Device Driver Readme
==================================================
 
   - Copyright (C) 2001-2004 Stelian Pop <stelian@popies.net>
   - Copyright (C) 2001-2002 AlcĂ´ve <www.alcove.com>
   - Copyright (C) 2001 Michael Ashley <m.ashley@unsw.edu.au>
   - Copyright (C) 2001 Junichi Morita <jun1m@mars.dti.ne.jp>
   - Copyright (C) 2000 Takaya Kinjo <t-kinjo@tc4.so-net.ne.jp>
   - Copyright (C) 2000 Andrew Tridgell <tridge@samba.org>
 
This driver enables access to the Sony Programmable I/O Control Device which
can be found in many Sony Vaio laptops. Some newer Sony laptops (seems to be
limited to new FX series laptops, at least the FX501 and the FX702) lack a
sonypi device and are not supported at all by this driver.
 
It will give access (through a user space utility) to some events those laptops
generate, like:
 
   - jogdial events (the small wheel on the side of Vaios)
   - capture button events (only on Vaio Picturebook series)
   - Fn keys
   - bluetooth button (only on C1VR model)
   - programmable keys, back, help, zoom, thumbphrase buttons, etc.
     (when available)
 
Those events (see linux/sonypi.h) can be polled using the character device node
/dev/sonypi (major 10, minor auto allocated or specified as a option).
A simple daemon which translates the jogdial movements into mouse wheel events
can be downloaded at: <http://popies.net/sonypi/>
 
Another option to intercept the events is to get them directly through the
input layer.
 
This driver supports also some ioctl commands for setting the LCD screen
brightness and querying the batteries charge information (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.
 
Please note that this driver was created by reverse engineering the Windows
driver and the ACPI BIOS, because Sony doesn't agree to release any programming
specs for its laptops. If someone convinces them to do so, drop me a note.
 
Driver options:
---------------
 
Several options can be passed to the sonypi driver using the standard
module argument syntax (<param>=<value> when passing the option to the
module or sonypi.<param>=<value> on the kernel boot line when sonypi is
statically linked into the kernel). Those options are:
 
   =============== =======================================================
   minor:        minor number of the misc device /dev/sonypi,
           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.
           Do not use this option unless it's actually necessary,
           some Vaio models don't deal well with this option.
           This option is available only if the kernel is
           compiled without ACPI support (since it conflicts
           with it and it shouldn't be required anyway if
           ACPI is already enabled).
 
   verbose:    set to 1 to print unknown events received from the
           sonypi device.
           set to 2 to print all events received from the
           sonypi device.
 
   compat:        uses some compatibility code for enabling the sonypi
           events. If the driver worked for you in the past
           (prior to version 1.5) and does not work anymore,
           add this option and report to the author.
 
   mask:        event mask telling the driver what events will be
           reported to the user. This parameter is required for
           some Vaio models where the hardware reuses values
           used in other Vaio models (like the FX series who does
           not have a jogdial but reuses the jogdial events for
           programmable keys events). The default event mask is
           set to 0xffffffff, meaning that all possible events
           will be tried. You can use the following bits to
           construct your own event mask (from
           drivers/char/sonypi.h)::
 
               SONYPI_JOGGER_MASK        0x0001
               SONYPI_CAPTURE_MASK        0x0002
               SONYPI_FNKEY_MASK        0x0004
               SONYPI_BLUETOOTH_MASK        0x0008
               SONYPI_PKEY_MASK        0x0010
               SONYPI_BACK_MASK        0x0020
               SONYPI_HELP_MASK        0x0040
               SONYPI_LID_MASK            0x0080
               SONYPI_ZOOM_MASK        0x0100
               SONYPI_THUMBPHRASE_MASK        0x0200
               SONYPI_MEYE_MASK        0x0400
               SONYPI_MEMORYSTICK_MASK        0x0800
               SONYPI_BATTERY_MASK        0x1000
               SONYPI_WIRELESS_MASK        0x2000
 
   useinput:    if set (which is the default) two input devices are
           created, one which interprets the jogdial events as
           mouse events, the other one which acts like a
           keyboard reporting the pressing of the special keys.
   =============== =======================================================
 
Module use:
-----------
 
In order to automatically load the sonypi module on use, you can put those
lines a configuration file in /etc/modprobe.d/::
 
   alias char-major-10-250 sonypi
   options sonypi minor=250
 
This supposes the use of minor 250 for the sonypi device::
 
   # mknod /dev/sonypi c 10 250
 
Bugs:
-----
 
   - several users reported that this driver disables the BIOS-managed
     Fn-keys which put the laptop in sleeping state, or switch the
     external monitor on/off. There is no workaround yet, since this
     driver disables all APM management for those keys, by enabling the
     ACPI management (and the ACPI core stuff is not complete yet). If
     you have one of those laptops with working Fn keys and want to
     continue to use them, don't use this driver.
 
   - some users reported that the laptop speed is lower (dhrystone
     tested) when using the driver with the fnkeyinit parameter. I cannot
     reproduce it on my laptop and not all users have this problem.
     This happens because the fnkeyinit parameter enables the ACPI
     mode (but without additional ACPI control, like processor
     speed handling etc). Use ACPI instead of APM if it works on your
     laptop.
 
   - sonypi lacks the ability to distinguish between certain key
     events on some models.
 
   - 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,
     which can be downloaded from
     https://www.acc.umu.se/~erikw/program/smartdimmer-0.1.tar.bz2
 
   - since all development was done by reverse engineering, there is
     *absolutely no guarantee* that this driver will not crash your
     laptop. Permanently.