Imported Upstream version 2.20070211+git20110911.4e1e3fc
[debian/omnibook.git] / hardware.h
1 /*
2  * hardware.h -- low level definitions to access Embedded Controller and co.
3  * 
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License as published by the
6  * Free Software Foundation; either version 2, or (at your option) any
7  * later version.
8  * 
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * General Public License for more details.
13  *
14  * Written by Soós Péter <sp@osb.hu>, 2002-2004
15  * Modified by Mathieu Bérard <mathieu.berard@crans.org>, 2006-2007
16  */
17
18 #include <linux/acpi.h>
19 #include "compat.h"
20
21 /*
22  * Quite ugly:
23  * on_mask and off_maks are also used to store the i8042 data for kbc backend.
24  * an union seemed overkilled
25  */
26
27 struct omnibook_backend;
28
29 struct omnibook_operation {
30                 struct omnibook_backend *backend;
31                 unsigned long read_addr; /* address for data reading */
32                 unsigned long write_addr; /* address for data writing */
33                 u8 read_mask; /* read mask */
34                 int on_mask; /* mask to set (pos value) or unset (neg value) to put feature in on state */
35                 int off_mask; /* mask to set (pos value) or unset (neg value) to put feature in off state */
36 };
37
38 #define COMMAND(backend,data_on,data_off) { backend, 0, 0, 0, data_on, data_off }
39 #define SIMPLE_BYTE(backend,addr,mask) { backend, addr, addr, mask, 0, 0 }
40
41 struct omnibook_tbl {
42         enum omnibook_ectype_t ectypes;
43         struct omnibook_operation io_op;
44 };
45
46 /*
47  * Backend interface definition
48  */
49
50 struct omnibook_backend {
51         const char *name;       /* backend name */
52         struct mutex mutex;     /* serializes all access to backend functions */
53         const unsigned int hotkeys_read_cap; /* hotkey probing mask */
54         const unsigned int hotkeys_write_cap; /* hotkey setting mask */
55
56         /* Public data fields, access with mutex held */
57         unsigned int hotkeys_state;     /* saved hotkeys state */
58         unsigned int touchpad_state;    /* saved touchpad state */
59         unsigned int muteled_state;     /* saved muteled state */
60         unsigned int cooling_state;     /* saved cooling method state */
61
62         /* Public function pointers */
63         int (*init) (const struct omnibook_operation *); 
64         void (*exit) (const struct omnibook_operation *);
65         int (*byte_read) (const struct omnibook_operation *, u8 *); 
66         int (*byte_write) (const struct omnibook_operation *, u8);
67         int (*aerial_get) (const struct omnibook_operation *, unsigned int *);
68         int (*aerial_set) (const struct omnibook_operation *, unsigned int);
69         int (*hotkeys_get) (const struct omnibook_operation *, unsigned int *);
70         int (*hotkeys_set) (const struct omnibook_operation *, unsigned int);
71         int (*display_get) (const struct omnibook_operation *, unsigned int *);
72         int (*display_set) (const struct omnibook_operation *, unsigned int);
73         int (*throttle_get) (const struct omnibook_operation *, unsigned int *);
74         int (*throttle_set) (const struct omnibook_operation *, unsigned int);
75
76         /* Private fields, never to be accessed outside backend code */
77         struct kref kref;       /* Reference counter of this backend */
78         void *data;             /* private data pointer */
79         int already_failed;     /* Backend init already failed at least once */
80 };
81
82 extern struct omnibook_backend kbc_backend;
83 extern struct omnibook_backend pio_backend;
84 extern struct omnibook_backend ec_backend;
85 extern struct omnibook_backend acpi_backend;
86 extern struct omnibook_backend nbsmi_backend;
87 extern struct omnibook_backend compal_backend;
88
89 #define KBC   &kbc_backend
90 #define PIO   &pio_backend
91 #define EC    &ec_backend
92 #define ACPI  &acpi_backend
93 #define SMI   &nbsmi_backend
94 #define CDI   &compal_backend
95
96 int __omnibook_apply_write_mask(const struct omnibook_operation *io_op, int toggle);
97 int __omnibook_toggle(const struct omnibook_operation *io_op, int toggle);
98
99 /*
100  * Lock helper functions. Defines locking and __prefixed non locking variants.
101  */
102
103 #define helper_func(func) \
104 static inline int backend_##func##_get(const struct omnibook_operation *io_op, unsigned int *data) \
105 { \
106         int retval; \
107         if(mutex_lock_interruptible(&io_op->backend->mutex)) \
108                 return -ERESTARTSYS; \
109         retval = io_op->backend->func##_get(io_op, data); \
110         mutex_unlock(&io_op->backend->mutex); \
111         return retval; \
112 } \
113 static inline int backend_##func##_set(const struct omnibook_operation *io_op, unsigned int data) \
114 { \
115         int retval; \
116         if(mutex_lock_interruptible(&io_op->backend->mutex)) \
117                 return -ERESTARTSYS; \
118         retval = io_op->backend->func##_set(io_op, data); \
119         mutex_unlock(&io_op->backend->mutex); \
120         return retval; \
121 }\
122 static inline int __backend_##func##_get(const struct omnibook_operation *io_op, unsigned int *data) \
123 { \
124         int retval; \
125         WARN_ON(!mutex_is_locked(&io_op->backend->mutex)); \
126         retval = io_op->backend->func##_get(io_op, data); \
127         return retval; \
128 } \
129 static inline int __backend_##func##_set(const struct omnibook_operation *io_op, unsigned int data) \
130 { \
131         int retval; \
132         WARN_ON(!mutex_is_locked(&io_op->backend->mutex)); \
133         retval = io_op->backend->func##_set(io_op, data); \
134         return retval; \
135 }
136
137 helper_func(aerial)
138 helper_func(hotkeys)
139 helper_func(display)
140 helper_func(throttle)
141
142 static inline int backend_byte_read(const struct omnibook_operation *io_op, u8 *data)
143 {
144         int retval;
145         if(mutex_lock_interruptible(&io_op->backend->mutex))
146                 return -ERESTARTSYS;
147         retval = io_op->backend->byte_read(io_op, data);
148         mutex_unlock(&io_op->backend->mutex);
149         return retval;
150 }
151
152 static inline int backend_byte_write(const struct omnibook_operation *io_op, u8 data)
153 {
154         int retval;
155         if(mutex_lock_interruptible(&io_op->backend->mutex))
156                 return -ERESTARTSYS;
157         retval = io_op->backend->byte_write(io_op, data);
158         mutex_unlock(&io_op->backend->mutex);
159         return retval;
160 }
161
162 static inline int __backend_byte_read(const struct omnibook_operation *io_op, u8 *data)
163 {
164         int retval;
165         WARN_ON(!mutex_is_locked(&io_op->backend->mutex));
166         retval = io_op->backend->byte_read(io_op, data);
167         return retval;
168 }
169
170 static inline int __backend_byte_write(const struct omnibook_operation *io_op, u8 data)
171 {
172         int retval;
173         WARN_ON(!mutex_is_locked(&io_op->backend->mutex));
174         retval = io_op->backend->byte_write(io_op, data);
175         return retval;
176 }
177
178 static inline int omnibook_apply_write_mask(const struct omnibook_operation *io_op, int toggle)
179 {
180         int retval;
181         if(mutex_lock_interruptible(&io_op->backend->mutex))
182                 return -ERESTARTSYS;
183         retval = __omnibook_apply_write_mask(io_op, toggle);
184         mutex_unlock(&io_op->backend->mutex);
185         return retval;
186 }
187
188 static inline int omnibook_toggle(const struct omnibook_operation *io_op, int toggle)
189 {
190         int retval;
191         if(mutex_lock_interruptible(&io_op->backend->mutex))
192                 return -ERESTARTSYS;
193         retval = __omnibook_toggle(io_op, toggle);
194         mutex_unlock(&io_op->backend->mutex);
195         return retval;
196 }
197
198 /*
199  * Timeout in ms for sending to controller
200  */
201
202 #define OMNIBOOK_TIMEOUT                250
203
204
205 /*
206  *      Embedded controller adresses
207  */
208
209 #define XE3GF_CHGM      0x90    /* , 16 bit */
210 #define XE3GF_CHGS      0x92    /* , 16 bit */
211 #define XE3GF_CHGC      0x94    /* Current charge of board, 16 bit */
212 #define XE3GF_CHGV      0x96    /* Current voltage, 16 bit */
213 #define XE3GF_CHGA      0x98    /* Current intensity, 16 bit */
214 #define XE3GF_BAL       0x9A    /* Battery present status */
215 #define XE3GF_STA1      0x9C    /* Various status bits */
216 #define XE3GF_CSPR      0xA1    /* Port replicator status, 1 bit */
217 #define XE3GF_ADP       0xA3    /* AC acapter status, 1 bit */
218 #define XE3GF_FOT       0xA5    /* Fan off temperature, 8 bit */
219 #define XE3GF_FSD1      0xA6    /* Fan on temperature, 8 bit */
220 #define XE3GF_FSD2      0xA7    /* Fan level 2 temperature, 8 bit */
221 #define XE3GF_FSD3      0xA8    /* Fan level 3 temperature, 8 bit */
222 #define XE3GF_FSD4      0xA9    /* Fan level 4 temperature, 8 bit */
223 #define XE3GF_FSD5      0xAA    /* Fan level 5 temperature, 8 bit */
224 #define XE3GF_FSD6      0xAB    /* Fan level 6 temperature, 8 bit */
225 #define XE3GF_FSD7      0xAC    /* Fan level 7 temperature, 8 bit */
226 #define XE3GF_FSRD      0xAD    /* Fan status, 8 bit */
227 #define XE3GF_CTMP      0xB0    /* CPU tempetature, 8 bit */
228 #define XE3GF_BRTS      0xB9    /* LCD brightness, 4 bit */
229 #define XE3GF_BTY0      0xC0    /* Battery 0 type, 1 bit */
230 #define XE3GF_BST0      0xC1    /* Battery 0 status, 3 bit */
231 #define XE3GF_BRC0      0xC2    /* Battery 0 remaining capacity, 16 bit */
232 #define XE3GF_BSN0      0xC4    /* Battery 0 serial number 16 bit */
233 #define XE3GF_BPV0      0xC6    /* Battery 0 present voltage, 16 bit */
234 #define XE3GF_BDV0      0xC8    /* Battery 0 design voltage 16 bit */
235 #define XE3GF_BDC0      0xCA    /* Battery 0 design capacity 16 bit */
236 #define XE3GF_BFC0      0xCC    /* Battery 0 last full capacity 16 bit */
237 #define XE3GF_GAU0      0xCE    /* Battery 0 gauge, 8 bit */
238 #define XE3GF_BTY1      0xD0    /* Battery 1 type, 1 bit */
239 #define XE3GF_BST1      0xD1    /* Battery 1 status, 3 bit */
240 #define XE3GF_BRC1      0xD2    /* Battery 1 remaining capacity, 16 bit */
241 #define XE3GF_BSN1      0xD4    /* Battery 1 serial number, 16 bit */
242 #define XE3GF_BPV1      0xD6    /* Battery 1 present voltage, 16 bit */
243 #define XE3GF_BDV1      0xD8    /* Battery 1 design voltage 16 bit */
244 #define XE3GF_BDC1      0xDA    /* Battery 1 design capacity 16 bit */
245 #define XE3GF_BFC1      0xDC    /* Battery 1 last full capacity 16 bit */
246 #define XE3GF_GAU1      0xDE    /* Battery 1 gauge, 8 bit */
247
248 /*
249  * Bitmasks for sub byte values
250  */
251
252 #define XE3GF_SHDD_MASK         0x40    /* External display status */
253 #define XE3GF_CSPR_MASK         0x01    /* Port replicator status */
254 #define XE3GF_ADP_MASK          0x20    /* AC acapter status */
255 #define XE3GF_BAL0_MASK         0x01    /* Battery 0 present */
256 #define XE3GF_BAL1_MASK         0x02    /* Battery 1 present */
257 #define XE3GF_BMF_MASK          0x70    /* Model code */
258 #define XE3GF_BTY_MASK          0x80    /* Type: Ni-MH or Li-Ion */
259 #define XE3GF_BST_MASK_DSC      0x01    /* Discarging */
260 #define XE3GF_BST_MASK_CHR      0x02    /* Charging */
261 #define XE3GF_BST_MASK_CRT      0x04    /* Critical */
262 #define XE3GF_FSRD_MASK_S1      0x01    /* Fan level 1 */
263 #define XE3GF_FSRD_MASK_S2      0x02    /* Fan level 2 */
264 #define XE3GF_FSRD_MASK_S3      0x04    /* Fan level 3 */
265 #define XE3GF_FSRD_MASK_S4      0x08    /* Fan level 4 */
266 #define XE3GF_FSRD_MASK_S5      0x10    /* Fan level 5 */
267 #define XE3GF_FSRD_MASK_S6      0x20    /* Fan level 6 */
268 #define XE3GF_FSRD_MASK_S7      0x40    /* Fan level 7 */
269 #define XE3GF_BRTS_MASK         0x0F    /* LCD brightness */
270 #define XE3GF_FAN_ON_MASK       0x02    /* Fan on */
271
272 /*
273  * OmniBook XE3 GC values
274  */
275
276 #define XE3GC_CTMP      0x28    /* CPU tempetature, 8 bit */
277 #define XE3GC_STA1      0x30    /* Various status bits */
278 #define XE3GC_Q0A       0x31    /* Various status bits */
279 #define XE3GC_CCUR      0x38    /* Current charge of board, 16 bit ? */
280 #define XE3GC_CVOL      0x3A    /* Current voltage, 16 bit ? */
281 #define XE3GC_CARM      0x3C    /* Current intensity, 16 bit ? */
282 #define XE3GC_BAT       0x3E    /* Battery present status */
283 #define XE3GC_BST0      0x40    /* Battery 0 status, 3 bit */
284 #define XE3GC_BPR0      0x41    /* Battery 0 present rate, 16 bit ? */
285 #define XE3GC_BRC0      0x43    /* Battery 0 remaining capacity, 16 bit */
286 #define XE3GC_BPV0      0x45    /* Battery 0 present voltage, 16 bit */
287 #define XE3GC_BDV0      0x47    /* Battery 0 design voltage 16 bit */
288 #define XE3GC_BDC0      0x49    /* Battery 0 design capacity 16 bit */
289 #define XE3GC_BTY0      0x4A    /* Battery 0 type, 1 bit ? */
290 #define XE3GC_BTP0      0x4B    /* Battery 0 ?, 1 bit */
291 #define XE3GC_BSN0      0x4C    /* Battery 0 serial number, 8 bit ? */
292 #define XE3GC_BMF0      0x4D    /* Battery 0 ?,8 bit */
293 #define XE3GC_BST1      0x50    /* Battery 1 status, 3 bit */
294 #define XE3GC_BPR1      0x51    /* Battery 1 present rate, 16 bit ? */
295 #define XE3GC_BRC1      0x53    /* Battery 1 remaining capacity, 16 bit */
296 #define XE3GC_BPV1      0x55    /* Battery 1 present voltage, 16 bit */
297 #define XE3GC_BDV1      0x57    /* Battery 1 design voltage 16 bit */
298 #define XE3GC_BDC1      0x59    /* Battery 1 design capacity 16 bit */
299 #define XE3GC_BTY1      0x5A    /* Battery 1 type, 1 bit ? */
300 #define XE3GC_BTP1      0x5B    /* Battery 1 ?, 1 bit */
301 #define XE3GC_BSN1      0x5C    /* Battery 1 serial number, 8 bit ? */
302 #define XE3GC_BMF1      0x5D    /* Battery 1 ?,8 bit */
303 #define XE3GC_STA2      0x61    /* Various status bits */
304 #define XE3GC_BTVL      0x6A    /* LCD brightness, 4 bit */
305
306 /*
307  * Bitmasks for sub byte values
308  */
309
310 #define XE3GC_ADP_MASK          0x40    /* AC acapter status */
311 #define XE3GC_BAT0_MASK         0x01    /* Battery 0 present */
312 #define XE3GC_BAT1_MASK         0x02    /* Battery 1 present */
313 #define XE3GC_BTY_MASK          0x01    /* Type: Ni-MH or Li-Ion */
314 #define XE3GC_BST_MASK_DSC      0x01    /* Discarging */
315 #define XE3GC_BST_MASK_CHR      0x02    /* Charging */
316 #define XE3GC_BST_MASK_CRT      0x04    /* Critical */
317 #define XE3GC_CRTI_MASK         0x04    /* External display status */
318 #define XE3GC_SLPB_MASK         0x01    /* Sleep button pressed */
319 #define XE3GC_F5_MASK           0x02    /* Fn-F5 - LCD/CRT switch pressed */
320 #define XE3GC_VOLD_MASK         0x04    /* Fn-down arrow or Volume down pressed */
321 #define XE3GC_VOLU_MASK         0x08    /* Fn-up arrow or Volume up pressed */
322 #define XE3GC_MUTE_MASK         0x10    /* Fn+F7 - Volume mute pressed */
323 #define XE3GC_CNTR_MASK         0x20    /* Fn+F3/Fn+F4 - Contrast up or down pressed */
324 #define XE3GC_BRGT_MASK         0x40    /* Fn+F1/Fn+F2 - Brightness up or down pressed */
325 #define XE3GC_BTVL_MASK         0x0F    /* LCD brightness */
326
327 /*
328  * Toshiba Satellite A105 values and mask
329  */
330
331 #define A105_BNDT                               0xA3    /* LCD brightness */
332 #define A105_BNDT_MASK                          0x0F
333
334 /*
335  * Fujitsu Amilo D values
336  */
337
338 #define AMILOD_TMP      0x28    /* CPU tempetature, 8 bit */
339 #define AMILOD_STA1     0x30    /* Various status bits */
340 #define AMILOD_BAT      0x3E    /* Battery present status */
341 #define AMILOD_BDC0     0x40    /* Battery 0 design capacity 16 bit */
342 #define AMILOD_BDV0     0x42    /* Battery 0 design voltage 16 bit */
343 #define AMILOD_BTY0     0x44    /* Battery 0 type, 1 bit ? */
344 #define AMILOD_BST0     0x45    /* Battery 0 status, 3 bit */
345 #define AMILOD_BPR0     0x46    /* Battery 0 present rate, 16 bit ? */
346 #define AMILOD_BRC0     0x48    /* Battery 0 remaining capacity, 16 bit */
347 #define AMILOD_BPV0     0x4A    /* Battery 0 present voltage, 16 bit */
348 #define AMILOD_BTP0     0x4C    /* Battery 0 ?, 1 bit */
349 #define AMILOD_BDC1     0x50    /* Battery 1 design capacity 16 bit */
350 #define AMILOD_BDV1     0x52    /* Battery 1 design voltage 16 bit */
351 #define AMILOD_BTY1     0x54    /* Battery 1 type, 1 bit ? */
352 #define AMILOD_BST1     0x55    /* Battery 1 status, 3 bit */
353 #define AMILOD_BPR1     0x56    /* Battery 1 present rate, 16 bit ? */
354 #define AMILOD_BRC1     0x58    /* Battery 1 remaining capacity, 16 bit */
355 #define AMILOD_BPV1     0x5A    /* Battery 1 present voltage, 16 bit */
356 #define AMILOD_BTP1     0x5C    /* Battery 1 ?, 1 bit */
357 #define AMILOD_CBRG     0x6F    /* LCD brightness, 4 bit */
358
359 /*
360  * Bitmasks for sub byte values
361  */
362
363 #define AMILOD_ADP_MASK         0x40    /* AC acapter status */
364 #define AMILOD_BAT0_MASK        0x01    /* Battery 0 present */
365 #define AMILOD_BAT1_MASK        0x02    /* Battery 1 present */
366 #define AMILOD_BTY_MASK         0x01    /* Type: Ni-MH or Li-Ion */
367 #define AMILOD_BST_MASK_DSC     0x01    /* Discarging */
368 #define AMILOD_BST_MASK_CHR     0x02    /* Charging */
369 #define AMILOD_BST_MASK_CRT     0x04    /* Critical */
370 #define AMILOD_CBRG_MASK        0x0F    /* LCD brightness */
371
372 /*
373  * OmniBook 500, 510, 6000, 6100, XE2 values
374  */
375
376 #define OB500_STA1      0x44    /* Various status bits */
377 #define OB500_STA2      0x50    /* Various status bits */
378 #define OB500_CTMP      0x55    /* CPU tempetature, 8 bit */
379 #define OB500_BT1I      0x58    /* Battery 1 ? 16 bit */
380 #define OB500_BT1C      0x5A    /* Battery 1 remaining capacity 16 bit ? */
381 #define OB500_BT1V      0x5C    /* Battery 1 present voltage 16 bit ? */
382 #define OB500_BT1S      0x5E    /* Battery 1 status 3 bit ? */
383 #define OB500_BT2I      0x6A    /* Battery 2 ? 16 bit */
384 #define OB500_BT2C      0x6C    /* Battery 2 remaining capacity 16 bit ? */
385 #define OB500_BT2V      0x6E    /* Battery 2 present voltage 16 bit ? */
386 #define OB500_BT2S      0x70    /* Battery 2 status 3 bit ? */
387 #define OB500_BT3I      0x5F    /* Battery 3 ? 16 bit */
388 #define OB500_BT3C      0x61    /* Battery 3 remaining capacity 16 bit ? */
389 #define OB500_BT3V      0x63    /* Battery 3 present voltage 16 bit ? */
390 #define OB500_BT3S      0x65    /* Battery 3 status 3 bit ? */
391
392 #define OB6000_STA1     0x77    /* Various status bits */
393
394 #define XE2_STA1        0x50    /* Various status bits */
395
396 /*
397  * Bitmasks for sub byte values
398  */
399
400 #define OB500_LIDS_MASK         0x01    /* LID status */
401 #define OB500_CRTS_MASK         0x20    /* External display status */
402 #define OB500_SLPS_MASK         0x40    /* Sleep button status */
403 #define OB500_DCKS_MASK         0x80    /* Docking status */
404 #define OB500_ADP_MASK          0x02    /* AC acapter status */
405 #define OB500_BST_MASK_DSC      0x01    /* Discarging */
406 #define OB500_BST_MASK_CHR      0x02    /* Charging */
407 #define OB500_BST_MASK_CRT      0x04    /* Critical */
408
409 #define OB6000_FAN_MASK         0x10    /* Fan status */
410
411 #define XE2_ADP_MASK            0x02    /* AC acapter status */
412
413 /*
414  * OmniBook 4150
415  */
416
417 #define OB4150_TMP              0x28    /* CPU tempetature, 8 bit */
418 #define OB4150_STA1             0x2E    /* Various status bits */
419 #define OB4150_STA2             0x2F    /* Various status bits */
420 #define OB4150_ADP              0x30    /* AC acapter status, 1 bit */
421 #define OB4150_DCID             0x2C    /* Port replicator */
422
423 /*
424  * Bitmasks for sub byte values
425  */
426
427 #define OB4150_FAN_MASK         0x01    /* Fan status */
428 #define OB4150_ADP_MASK         0x40    /* AC acapter status */
429 #define OB4150_CRST_MASK        0x20    /* External display status */
430
431 /*
432  *      Keyboard controller command for some laptop functions
433  */
434
435 #define OMNIBOOK_KBC_CONTROL_CMD                0x59
436
437 /*
438  *      Keyboard controller command parameters for functions available via kbc
439  */
440
441 #define OMNIBOOK_KBC_CMD_ONETOUCH_ENABLE        0x90    /* Enables OneTouch buttons */
442 #define OMNIBOOK_KBC_CMD_ONETOUCH_DISABLE       0x91    /* Disables OneTouch buttons */
443 #define OMNIBOOK_KBC_CMD_TOUCHPAD_ENABLE        0xAA    /* Enables touchpad */
444 #define OMNIBOOK_KBC_CMD_TOUCHPAD_DISABLE       0xA9    /* Disables touchpad */
445 #define OMNIBOOK_KBC_CMD_LCD_ON                 0xE1    /* Turns LCD display on */
446 #define OMNIBOOK_KBC_CMD_LCD_OFF                0xE2    /* Turns LCD display off */
447 #define OMNIBOOK_KBC_CMD_MUTELED_ON             0x94    /* Turns (xe4500) Mute LED on */
448 #define OMNIBOOK_KBC_CMD_MUTELED_OFF            0x95    /* Turns (xe4500) Mute LED off */
449 #define OMNIBOOK_KBC_CMD_AC_POWER_ENABLE        0xC2    /* Enable AC power */
450 #define OMNIBOOK_KBC_CMD_AC_POWER_DISABLE       0xC1    /* Disable AC power */
451
452 /*
453  * Other I/O ports
454  */
455
456 #define ACL00_AC_STAT           0x11B9  /* AC adapter status on ACL00 */
457 #define ACL00_AC_MASK           0x04    /* Bitmask for AC adapter status on ACL00 */
458 #define TOSH3K_AC_STAT          0x102D  /* AC adapter status on Toshiba 3000 */
459 #define TOSH3K_AC_MASK          0x08    /* Bitmask for AC adapter status on Toshiba 3000 */
460 #define XE3GF_AC_STAT           0x11B9  /* AC adapter status on XE3 GF */
461 #define XE3GF_AC_MASK           0x04    /* Bitmask for AC adapter status on XE3 GF */
462 #define XE3GF_LID_STAT          0x11AD  /* LID switch status on XE3 GF */
463 #define XE3GF_LID_MASK          0x20    /* Bitmask for LID switch status on XE3 GF */
464 #define XE3GC_SMIC              0xFE00
465
466 #define OB500_GPO1              0x8034  /* Fan control */
467 #define OB510_GPO2              0x11B9  /* LCD backlight */
468 #define OB510_GPIO              0x118F  /* Fan control */
469
470 #define OB500_FAN_ON_MASK       0x0A    /* Turn fan on with zero bits */
471 #define OB500_FAN_OFF_MASK      0x08    /* Fan status/off */
472 #define OB500_BKLT_MASK         0x40    /* LCD backlight */
473 #define OB510_FAN_ON_MASK       0x18    /* Turn fan on with zero bits */
474 #define OB510_FAN_OFF_MASK      0x10    /* Turn fan on */
475 #define OB510_BKLT_MASK         0x01    /* LCD backlight */
476
477 #define XE2_FAN_MASK            0x02    /* Turn fan on with zero bit */
478
479 /*
480  * Memory adresses
481  */
482
483 #define XE3GC_BCMD              0xFFFFEBC
484
485 /*
486  * Toshiba Satellite A105 values and mask
487  */
488
489 #define A105_BNDT               0xA3    /* LCD brightness */
490 #define A105_BNDT_MASK          0x0F
491
492 /*
493  * Index and values for Command/Data/Index interface
494  * Notice similitudes with commands code for kbc
495  */
496
497 #define TSM70_FN_INDEX          0x45
498 #define TSM70_FN_ENABLE         0x75
499 #define TSM70_FN_DISABLE        0x74
500 #define TSM70_HOTKEYS_INDEX     0x59
501 #define TSM70_HOTKEYS_ENABLE    0x90
502 #define TSM70_HOTKEYS_DISABLE   0x91
503 #define TSM70_LCD_READ          0x5C
504 #define TSM70_LCD_WRITE         0x5D
505 #define TSM70_TOUCHPAD_ON       0x80
506 #define TSM70_TOUCHPAD_OFF      0x81
507 #define TSM100_BLANK_INDEX      0x59
508 #define TSM100_LCD_ON           0xe1
509 #define TSM100_LCD_OFF          0xe2
510 #define TSM70_COOLING_OFFSET    0xb0
511 #define TSM70_COOLING_POWERSAVE 0x0
512 #define TSM70_COOLING_PERF      0x2
513
514 /* Toshiba SMI funtions and constants*/
515 #define SMI_FN_PRESSED          0x8f
516 #define SMI_SET_LCD_BRIGHTNESS  0xa2
517 #define SMI_GET_LCD_BRIGHTNESS  0xa3
518 #define SMI_GET_KILL_SWITCH     0xa4
519 #define SMI_SET_AERIAL          0xa5
520 #define SMI_GET_AERIAL          0xa6
521 #define SMI_SET_DISPLAY_STATE   0xa7
522 #define SMI_GET_DISPLAY_STATE   0xa8
523 #define SMI_SET_FN_INTERFACE    0xa9
524 #define SMI_GET_FN_INTERFACE    0xaa
525 #define SMI_GET_FN_LAST_SCAN    0xab
526 #define SMI_SET_DOCK            0xac    /* Undocumented */
527 #define SMI_GET_DOCK            0xad    /* Undocumented */
528 #define SMI_SET_FN_F5_INTERFACE 0xc2
529
530 #define SMI_FN_KEYS_MASK        0x01
531 #define SMI_STICK_KEYS_MASK     0x02
532 #define SMI_FN_TWICE_LOCK_MASK  0x04
533 #define SMI_FN_DOCK_MASK        0x08
534
535 #define SMI_FN_SCAN             0x6d    /* Fn key scancode */
536 #define SMI_DOCK_SCAN           0x6e    /* Dock scancode */
537
538 /* Toshiba HCI method and constants */
539 #define HCI_METHOD              "SPFC"
540 #define HCI_WORDS               6
541
542 #define HCI_GET                 0xfe00
543 #define HCI_SET                 0xff00
544
545 #define HCI_HOTKEY_EVENT        0x001e
546 #define HCI_RF_CONTROL          0x0056
547
548 #define HCI_ENABLE              0x0001
549 #define HCI_DISABLE             0x0000
550
551 #define HCI_WIRELESS_CHECK      0x0001
552 #define HCI_WIRELESS_POWER      0x0200
553
554 #define HCI_SUCCESS             0x0000
555 #define HCI_FAILURE             0x1000
556 #define HCI_NOT_SUPPORTED       0x8000
557
558 /* Toshiba Satellite X205 methods */
559 #define TSX205_EVENTS_METHOD    "INFO"
560 #define TSX205_NOTIFY_METHOD    "NTFY"
561 #define TSX205_KILLSW_METHOD    "KLSW"
562 #define TSX205_SLIVDO_METHOD    "CSLI"
563
564 #define ACPI_FN_MASK            0x01
565 #define ACPI_FN_SCAN            0x6e    /* Fn key scancode */
566
567 /* HCI key definitions */
568 #define HCI_FN_RELEASED         0x100
569 #define HCI_MUTE                0x101
570 #define HCI_1                   0x102
571 #define HCI_2                   0x103
572 #define HCI_SPACE               0x139
573 #define HCI_BREAK               0x13b
574 #define HCI_BSM                 0x13c
575 #define HCI_SUSPEND             0x13d
576 #define HCI_HIBERNATE           0x13e
577 #define HCI_VIDEOOUT            0x13f
578 #define HCI_BRIGHTNESSDOWN      0x140
579 #define HCI_BRIGHTNESSUP        0x141
580 #define HCI_WLAN                0x142
581 #define HCI_TOUCHPAD            0x143
582 #define HCI_FN_PRESSED          0x17f