forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.3 KiB
61 lines
1.3 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
/* |
|
* OLPC HGPK (XO-1) touchpad PS/2 mouse driver |
|
*/ |
|
|
|
#ifndef _HGPK_H |
|
#define _HGPK_H |
|
|
|
#define HGPK_GS 0xff /* The GlideSensor */ |
|
#define HGPK_PT 0xcf /* The PenTablet */ |
|
|
|
enum hgpk_model_t { |
|
HGPK_MODEL_PREA = 0x0a, /* pre-B1s */ |
|
HGPK_MODEL_A = 0x14, /* found on B1s, PT disabled in hardware */ |
|
HGPK_MODEL_B = 0x28, /* B2s, has capacitance issues */ |
|
HGPK_MODEL_C = 0x3c, |
|
HGPK_MODEL_D = 0x50, /* C1, mass production */ |
|
}; |
|
|
|
enum hgpk_spew_flag { |
|
NO_SPEW, |
|
MAYBE_SPEWING, |
|
SPEW_DETECTED, |
|
RECALIBRATING, |
|
}; |
|
|
|
#define SPEW_WATCH_COUNT 42 /* at 12ms/packet, this is 1/2 second */ |
|
|
|
enum hgpk_mode { |
|
HGPK_MODE_MOUSE, |
|
HGPK_MODE_GLIDESENSOR, |
|
HGPK_MODE_PENTABLET, |
|
HGPK_MODE_INVALID |
|
}; |
|
|
|
struct hgpk_data { |
|
struct psmouse *psmouse; |
|
enum hgpk_mode mode; |
|
bool powered; |
|
enum hgpk_spew_flag spew_flag; |
|
int spew_count, x_tally, y_tally; /* spew detection */ |
|
unsigned long recalib_window; |
|
struct delayed_work recalib_wq; |
|
int abs_x, abs_y; |
|
int dupe_count; |
|
int xbigj, ybigj, xlast, ylast; /* jumpiness detection */ |
|
int xsaw_secondary, ysaw_secondary; /* jumpiness detection */ |
|
}; |
|
|
|
int hgpk_detect(struct psmouse *psmouse, bool set_properties); |
|
int hgpk_init(struct psmouse *psmouse); |
|
|
|
#ifdef CONFIG_MOUSE_PS2_OLPC |
|
void hgpk_module_init(void); |
|
#else |
|
static inline void hgpk_module_init(void) |
|
{ |
|
} |
|
#endif |
|
|
|
#endif
|
|
|