Blame view
drivers/hid/wacom.h
8.07 KB
2874c5fd2 treewide: Replace... |
1 |
/* SPDX-License-Identifier: GPL-2.0-or-later */ |
3bea733ab USB: wacom tablet... |
2 |
/* |
4104d13fe Input: move USB t... |
3 |
* drivers/input/tablet/wacom.h |
3bea733ab USB: wacom tablet... |
4 |
* |
232f5693e Input: wacom - en... |
5 |
* USB Wacom tablet support |
3bea733ab USB: wacom tablet... |
6 7 8 9 10 11 12 13 14 |
* * Copyright (c) 2000-2004 Vojtech Pavlik <vojtech@ucw.cz> * Copyright (c) 2000 Andreas Bach Aaen <abach@stofanet.dk> * Copyright (c) 2000 Clifford Wolf <clifford@clifford.at> * Copyright (c) 2000 Sam Mosel <sam.mosel@computer.org> * Copyright (c) 2000 James E. Blair <corvus@gnu.org> * Copyright (c) 2000 Daniel Egger <egger@suse.de> * Copyright (c) 2001 Frederic Lepied <flepied@mandrakesoft.com> * Copyright (c) 2004 Panagiotis Issaris <panagiotis.issaris@mech.kuleuven.ac.be> |
09e7d9410 Input: wacom - ad... |
15 |
* Copyright (c) 2002-2011 Ping Cheng <pingc@wacom.com> |
1c3c52354 Input: wacom - ad... |
16 |
* Copyright (c) 2014 Benjamin Tissoires <benjamin.tissoires@redhat.com> |
3bea733ab USB: wacom tablet... |
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 |
* * ChangeLog: * v0.1 (vp) - Initial release * v0.2 (aba) - Support for all buttons / combinations * v0.3 (vp) - Support for Intuos added * v0.4 (sm) - Support for more Intuos models, menustrip * relative mode, proximity. * v0.5 (vp) - Big cleanup, nifty features removed, * they belong in userspace * v1.8 (vp) - Submit URB only when operating, moved to CVS, * use input_report_key instead of report_btn and * other cleanups * v1.11 (vp) - Add URB ->dev setting for new kernels * v1.11 (jb) - Add support for the 4D Mouse & Lens * v1.12 (de) - Add support for two more inking pen IDs * v1.14 (vp) - Use new USB device id probing scheme. * Fix Wacom Graphire mouse wheel * v1.18 (vp) - Fix mouse wheel direction * Make mouse relative * v1.20 (fl) - Report tool id for Intuos devices * - Multi tools support * - Corrected Intuos protocol decoding (airbrush, 4D mouse, lens cursor...) * - Add PL models support * - Fix Wacom Graphire mouse wheel again * v1.21 (vp) - Removed protocol descriptions * - Added MISC_SERIAL for tool serial numbers * (gb) - Identify version on module load. * v1.21.1 (fl) - added Graphire2 support * v1.21.2 (fl) - added Intuos2 support * - added all the PL ids * v1.21.3 (fl) - added another eraser id from Neil Okamoto * - added smooth filter for Graphire from Peri Hankey * - added PenPartner support from Olaf van Es * - new tool ids from Ole Martin Bjoerndalen * v1.29 (pc) - Add support for more tablets * - Fix pressure reporting * v1.30 (vp) - Merge 2.4 and 2.5 drivers * - Since 2.5 now has input_sync(), remove MSC_SERIAL abuse * - Cleanups here and there * v1.30.1 (pi) - Added Graphire3 support * v1.40 (pc) - Add support for several new devices, fix eraser reporting, ... * v1.43 (pc) - Added support for Cintiq 21UX * - Fixed a Graphire bug * - Merged wacom_intuos3_irq into wacom_intuos_irq * v1.44 (pc) - Added support for Graphire4, Cintiq 710, Intuos3 6x11, etc. * - Report Device IDs * v1.45 (pc) - Added support for DTF 521, Intuos3 12x12 and 12x19 * - Minor data report fix * v1.46 (pc) - Split wacom.c into wacom_sys.c and wacom_wac.c, * - where wacom_sys.c deals with system specific code, |
7ecfbfd3d Input: wacom - ad... |
67 |
* - and wacom_wac.c deals with Wacom specific code |
8d32e3ae5 USB: Wacom driver... |
68 |
* - Support Intuos3 4x6 |
7ecfbfd3d Input: wacom - ad... |
69 |
* v1.47 (pc) - Added support for Bamboo |
0e1763f53 Input: wacom - ad... |
70 |
* v1.48 (pc) - Added support for Bamboo1, BambooFun, and Cintiq 12WX |
545f4e99d Input: wacom - ad... |
71 |
* v1.49 (pc) - Added support for USB Tablet PC (0x90, 0x93, and 0x9A) |
384318ecd Input: wacom - fi... |
72 |
* v1.50 (pc) - Fixed a TabletPC touch bug in 2.6.28 |
6f660f12d Input: wacom - ad... |
73 |
* v1.51 (pc) - Added support for Intuos4 |
232f5693e Input: wacom - en... |
74 |
* v1.52 (pc) - Query Wacom data upon system resume |
ee54500d7 Input: wacom - ad... |
75 |
* - add defines for features->type |
ec67bbedc Input: wacom - ad... |
76 |
* - add new devices (0x9F, 0xE2, and 0XE3) |
1c3c52354 Input: wacom - ad... |
77 78 |
* v2.00 (bt) - conversion to a HID driver * - integration of the Bluetooth devices |
3bea733ab USB: wacom tablet... |
79 80 81 |
*/ /* |
3bea733ab USB: wacom tablet... |
82 83 84 85 86 87 |
*/ #ifndef WACOM_H #define WACOM_H #include <linux/kernel.h> #include <linux/slab.h> #include <linux/module.h> |
b036f6fb3 Input: wacom - ge... |
88 |
#include <linux/mod_devicetable.h> |
7704ac937 HID: wacom: imple... |
89 |
#include <linux/hid.h> |
e6f2813a6 HID: wacom: EKR: ... |
90 |
#include <linux/kfifo.h> |
97f5541fc HID: wacom: leds:... |
91 |
#include <linux/leds.h> |
3bea733ab USB: wacom tablet... |
92 |
#include <linux/usb/input.h> |
a1d552cc1 Input: wacom - wi... |
93 |
#include <linux/power_supply.h> |
3bea733ab USB: wacom tablet... |
94 95 96 97 98 |
#include <asm/unaligned.h> /* * Version Information */ |
1c3c52354 Input: wacom - ad... |
99 |
#define DRIVER_VERSION "v2.00" |
3bea733ab USB: wacom tablet... |
100 |
#define DRIVER_AUTHOR "Vojtech Pavlik <vojtech@ucw.cz>" |
232f5693e Input: wacom - en... |
101 |
#define DRIVER_DESC "USB Wacom tablet driver" |
3bea733ab USB: wacom tablet... |
102 |
|
3bea733ab USB: wacom tablet... |
103 |
#define USB_VENDOR_ID_WACOM 0x056a |
7b4b30689 Input: wacom - ad... |
104 |
#define USB_VENDOR_ID_LENOVO 0x17ef |
3bea733ab USB: wacom tablet... |
105 |
|
d17d1f171 HID: wacom: use o... |
106 107 108 |
enum wacom_worker { WACOM_WORKER_WIRELESS, WACOM_WORKER_BATTERY, |
e6f2813a6 HID: wacom: EKR: ... |
109 |
WACOM_WORKER_REMOTE, |
4082da80f HID: wacom: gener... |
110 |
WACOM_WORKER_MODE_CHANGE, |
d17d1f171 HID: wacom: use o... |
111 |
}; |
97f5541fc HID: wacom: leds:... |
112 113 114 115 116 117 118 119 120 121 122 123 |
struct wacom; struct wacom_led { struct led_classdev cdev; struct led_trigger trigger; struct wacom *wacom; unsigned int group; unsigned int id; u8 llv; u8 hlv; bool held; }; |
a50aac719 HID: wacom: leds:... |
124 125 |
struct wacom_group_leds { u8 select; /* status led selector (0..3) */ |
97f5541fc HID: wacom: leds:... |
126 127 |
struct wacom_led *leds; unsigned int count; |
589e50602 HID: wacom: leds:... |
128 |
struct device *dev; |
a50aac719 HID: wacom: leds:... |
129 |
}; |
59d69bc82 HID: wacom: EKR: ... |
130 |
struct wacom_battery { |
9956953ec HID: wacom: power... |
131 |
struct wacom *wacom; |
59d69bc82 HID: wacom: EKR: ... |
132 |
struct power_supply_desc bat_desc; |
59d69bc82 HID: wacom: EKR: ... |
133 |
struct power_supply *battery; |
59d69bc82 HID: wacom: EKR: ... |
134 |
char bat_name[WACOM_NAME_MAX]; |
16e459890 HID: wacom: Add a... |
135 |
int bat_status; |
59d69bc82 HID: wacom: EKR: ... |
136 137 138 139 140 |
int battery_capacity; int bat_charging; int bat_connected; int ps_connected; }; |
83e6b40e2 HID: wacom: EKR: ... |
141 142 143 144 |
struct wacom_remote { spinlock_t remote_lock; struct kfifo remote_fifo; struct kobject *remote_dir; |
e7749f6e5 HID: wacom: EKR: ... |
145 146 147 |
struct { struct attribute_group group; u32 serial; |
7c35dc3cd HID: wacom: EKR: ... |
148 149 |
struct input_dev *input; bool registered; |
59d69bc82 HID: wacom: EKR: ... |
150 |
struct wacom_battery battery; |
e7749f6e5 HID: wacom: EKR: ... |
151 |
} remotes[WACOM_MAX_REMOTES]; |
83e6b40e2 HID: wacom: EKR: ... |
152 |
}; |
3bea733ab USB: wacom tablet... |
153 |
struct wacom { |
3bea733ab USB: wacom tablet... |
154 |
struct usb_device *usbdev; |
e72240944 Input: wacom - im... |
155 |
struct usb_interface *intf; |
51269fe86 Input: wacom - do... |
156 |
struct wacom_wac wacom_wac; |
29b473913 Input: wacom - sw... |
157 |
struct hid_device *hdev; |
e72240944 Input: wacom - im... |
158 |
struct mutex lock; |
d17d1f171 HID: wacom: use o... |
159 160 |
struct work_struct wireless_work; struct work_struct battery_work; |
e6f2813a6 HID: wacom: EKR: ... |
161 |
struct work_struct remote_work; |
a544c619a HID: wacom: do no... |
162 |
struct delayed_work init_work; |
83e6b40e2 HID: wacom: EKR: ... |
163 |
struct wacom_remote *remote; |
4082da80f HID: wacom: gener... |
164 |
struct work_struct mode_change_work; |
10c55cacb HID: wacom: gener... |
165 |
bool generic_has_leds; |
a50aac719 HID: wacom: leds:... |
166 167 |
struct wacom_leds { struct wacom_group_leds *groups; |
97f5541fc HID: wacom: leds:... |
168 |
unsigned int count; |
09e7d9410 Input: wacom - ad... |
169 170 |
u8 llv; /* status led brightness no button (1..127) */ u8 hlv; /* status led brightness button pressed (1..127) */ |
5d7e7d479 Input: wacom - ad... |
171 |
u8 img_lum; /* OLED matrix display brightness */ |
97f5541fc HID: wacom: leds:... |
172 173 |
u8 max_llv; /* maximum brightness of LED (llv) */ u8 max_hlv; /* maximum brightness of LED (hlv) */ |
5d7e7d479 Input: wacom - ad... |
174 |
} led; |
59d69bc82 HID: wacom: EKR: ... |
175 |
struct wacom_battery battery; |
84dfbd7f2 HID: wacom: put t... |
176 |
bool resources; |
3bea733ab USB: wacom tablet... |
177 |
}; |
d17d1f171 HID: wacom: use o... |
178 179 |
static inline void wacom_schedule_work(struct wacom_wac *wacom_wac, enum wacom_worker which) |
16bf288c4 Input: wacom - cr... |
180 181 |
{ struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac); |
d17d1f171 HID: wacom: use o... |
182 183 184 185 186 187 188 189 |
switch (which) { case WACOM_WORKER_WIRELESS: schedule_work(&wacom->wireless_work); break; case WACOM_WORKER_BATTERY: schedule_work(&wacom->battery_work); break; |
e6f2813a6 HID: wacom: EKR: ... |
190 191 192 |
case WACOM_WORKER_REMOTE: schedule_work(&wacom->remote_work); break; |
4082da80f HID: wacom: gener... |
193 194 195 |
case WACOM_WORKER_MODE_CHANGE: schedule_work(&wacom->mode_change_work); break; |
d17d1f171 HID: wacom: use o... |
196 |
} |
16bf288c4 Input: wacom - cr... |
197 |
} |
ff479731c HID: wacom: gener... |
198 199 200 201 202 203 204 205 206 207 208 209 210 211 |
/* * Convert a signed 32-bit integer to an unsigned n-bit integer. Undoes * the normally-helpful work of 'hid_snto32' for fields that use signed * ranges for questionable reasons. */ static inline __u32 wacom_s32tou(s32 value, __u8 n) { switch (n) { case 8: return ((__u8)value); case 16: return ((__u16)value); case 32: return ((__u32)value); } return value & (1 << (n - 1)) ? value & (~(~0U << n)) : value; } |
29b473913 Input: wacom - sw... |
212 |
extern const struct hid_device_id wacom_ids[]; |
b036f6fb3 Input: wacom - ge... |
213 |
|
95dd3b30c Input: wacom - ge... |
214 |
void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len); |
42f4f2727 HID: wacom: move ... |
215 |
void wacom_setup_device_quirks(struct wacom *wacom); |
2636a3f2d HID: wacom: Split... |
216 217 218 |
int wacom_setup_pen_input_capabilities(struct input_dev *input_dev, struct wacom_wac *wacom_wac); int wacom_setup_touch_input_capabilities(struct input_dev *input_dev, |
1963518b9 Input: wacom - ad... |
219 |
struct wacom_wac *wacom_wac); |
d2d13f18a Input: wacom - cr... |
220 221 |
int wacom_setup_pad_input_capabilities(struct input_dev *input_dev, struct wacom_wac *wacom_wac); |
7704ac937 HID: wacom: imple... |
222 223 |
void wacom_wac_usage_mapping(struct hid_device *hdev, struct hid_field *field, struct hid_usage *usage); |
354a32985 HID: wacom: gener... |
224 |
void wacom_wac_event(struct hid_device *hdev, struct hid_field *field, |
7704ac937 HID: wacom: imple... |
225 226 |
struct hid_usage *usage, __s32 value); void wacom_wac_report(struct hid_device *hdev, struct hid_report *report); |
fce9957d8 HID: wacom: Allow... |
227 |
void wacom_battery_work(struct work_struct *work); |
34736aa96 HID: wacom: leds:... |
228 229 230 231 |
enum led_brightness wacom_leds_brightness_get(struct wacom_led *led); struct wacom_led *wacom_led_find(struct wacom *wacom, unsigned int group, unsigned int id); struct wacom_led *wacom_led_next(struct wacom *wacom, struct wacom_led *cur); |
ac2423c97 HID: wacom: gener... |
232 |
int wacom_equivalent_usage(int usage); |
10c55cacb HID: wacom: gener... |
233 |
int wacom_initialize_leds(struct wacom *wacom); |
3bea733ab USB: wacom tablet... |
234 |
#endif |