0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083 #ifndef WACOM_H
0084 #define WACOM_H
0085 #include <linux/kernel.h>
0086 #include <linux/slab.h>
0087 #include <linux/module.h>
0088 #include <linux/mod_devicetable.h>
0089 #include <linux/hid.h>
0090 #include <linux/kfifo.h>
0091 #include <linux/leds.h>
0092 #include <linux/usb/input.h>
0093 #include <linux/power_supply.h>
0094 #include <linux/timer.h>
0095 #include <asm/unaligned.h>
0096
0097
0098
0099
0100 #define DRIVER_VERSION "v2.00"
0101 #define DRIVER_AUTHOR "Vojtech Pavlik <vojtech@ucw.cz>"
0102 #define DRIVER_DESC "USB Wacom tablet driver"
0103
0104 #define USB_VENDOR_ID_WACOM 0x056a
0105 #define USB_VENDOR_ID_LENOVO 0x17ef
0106
0107 enum wacom_worker {
0108 WACOM_WORKER_WIRELESS,
0109 WACOM_WORKER_BATTERY,
0110 WACOM_WORKER_REMOTE,
0111 WACOM_WORKER_MODE_CHANGE,
0112 };
0113
0114 struct wacom;
0115
0116 struct wacom_led {
0117 struct led_classdev cdev;
0118 struct led_trigger trigger;
0119 struct wacom *wacom;
0120 unsigned int group;
0121 unsigned int id;
0122 u8 llv;
0123 u8 hlv;
0124 bool held;
0125 };
0126
0127 struct wacom_group_leds {
0128 u8 select;
0129 struct wacom_led *leds;
0130 unsigned int count;
0131 struct device *dev;
0132 };
0133
0134 struct wacom_battery {
0135 struct wacom *wacom;
0136 struct power_supply_desc bat_desc;
0137 struct power_supply *battery;
0138 char bat_name[WACOM_NAME_MAX];
0139 int bat_status;
0140 int battery_capacity;
0141 int bat_charging;
0142 int bat_connected;
0143 int ps_connected;
0144 };
0145
0146 struct wacom_remote {
0147 spinlock_t remote_lock;
0148 struct kfifo remote_fifo;
0149 struct kobject *remote_dir;
0150 struct {
0151 struct attribute_group group;
0152 u32 serial;
0153 struct input_dev *input;
0154 bool registered;
0155 struct wacom_battery battery;
0156 } remotes[WACOM_MAX_REMOTES];
0157 };
0158
0159 struct wacom {
0160 struct usb_device *usbdev;
0161 struct usb_interface *intf;
0162 struct wacom_wac wacom_wac;
0163 struct hid_device *hdev;
0164 struct mutex lock;
0165 struct work_struct wireless_work;
0166 struct work_struct battery_work;
0167 struct work_struct remote_work;
0168 struct delayed_work init_work;
0169 struct wacom_remote *remote;
0170 struct work_struct mode_change_work;
0171 struct timer_list idleprox_timer;
0172 bool generic_has_leds;
0173 struct wacom_leds {
0174 struct wacom_group_leds *groups;
0175 unsigned int count;
0176 u8 llv;
0177 u8 hlv;
0178 u8 img_lum;
0179 u8 max_llv;
0180 u8 max_hlv;
0181 } led;
0182 struct wacom_battery battery;
0183 bool resources;
0184 };
0185
0186 static inline void wacom_schedule_work(struct wacom_wac *wacom_wac,
0187 enum wacom_worker which)
0188 {
0189 struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
0190
0191 switch (which) {
0192 case WACOM_WORKER_WIRELESS:
0193 schedule_work(&wacom->wireless_work);
0194 break;
0195 case WACOM_WORKER_BATTERY:
0196 schedule_work(&wacom->battery_work);
0197 break;
0198 case WACOM_WORKER_REMOTE:
0199 schedule_work(&wacom->remote_work);
0200 break;
0201 case WACOM_WORKER_MODE_CHANGE:
0202 schedule_work(&wacom->mode_change_work);
0203 break;
0204 }
0205 }
0206
0207
0208
0209
0210
0211
0212 static inline __u32 wacom_s32tou(s32 value, __u8 n)
0213 {
0214 switch (n) {
0215 case 8: return ((__u8)value);
0216 case 16: return ((__u16)value);
0217 case 32: return ((__u32)value);
0218 }
0219 return value & (1 << (n - 1)) ? value & (~(~0U << n)) : value;
0220 }
0221
0222 extern const struct hid_device_id wacom_ids[];
0223
0224 void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len);
0225 void wacom_setup_device_quirks(struct wacom *wacom);
0226 int wacom_setup_pen_input_capabilities(struct input_dev *input_dev,
0227 struct wacom_wac *wacom_wac);
0228 int wacom_setup_touch_input_capabilities(struct input_dev *input_dev,
0229 struct wacom_wac *wacom_wac);
0230 int wacom_setup_pad_input_capabilities(struct input_dev *input_dev,
0231 struct wacom_wac *wacom_wac);
0232 void wacom_wac_usage_mapping(struct hid_device *hdev,
0233 struct hid_field *field, struct hid_usage *usage);
0234 void wacom_wac_event(struct hid_device *hdev, struct hid_field *field,
0235 struct hid_usage *usage, __s32 value);
0236 void wacom_wac_report(struct hid_device *hdev, struct hid_report *report);
0237 void wacom_battery_work(struct work_struct *work);
0238 enum led_brightness wacom_leds_brightness_get(struct wacom_led *led);
0239 struct wacom_led *wacom_led_find(struct wacom *wacom, unsigned int group,
0240 unsigned int id);
0241 struct wacom_led *wacom_led_next(struct wacom *wacom, struct wacom_led *cur);
0242 int wacom_equivalent_usage(int usage);
0243 int wacom_initialize_leds(struct wacom *wacom);
0244 void wacom_idleprox_timeout(struct timer_list *list);
0245 #endif