Lines Matching defs:wacom_wac
3 * drivers/input/tablet/wacom_wac.c
11 #include "wacom_wac.h"
46 static void wacom_force_proxout(struct wacom_wac *wacom_wac)
48 struct input_dev *input = wacom_wac->pen_input;
50 wacom_wac->shared->stylus_in_proximity = 0;
56 input_report_key(input, wacom_wac->tool[0], 0);
57 if (wacom_wac->serial[0]) {
62 wacom_wac->tool[0] = 0;
63 wacom_wac->id[0] = 0;
64 wacom_wac->serial[0] = 0;
72 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
74 if (!wacom_wac->hid_data.sense_state) {
79 wacom_force_proxout(wacom_wac);
116 static void wacom_notify_battery(struct wacom_wac *wacom_wac,
120 struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
126 static int wacom_penpartner_irq(struct wacom_wac *wacom)
170 static int wacom_pl_irq(struct wacom_wac *wacom)
231 static int wacom_ptu_irq(struct wacom_wac *wacom)
260 static int wacom_dtu_irq(struct wacom_wac *wacom)
290 static int wacom_dtus_irq(struct wacom_wac *wacom)
341 static int wacom_graphire_irq(struct wacom_wac *wacom)
496 static void wacom_intuos_schedule_prox_event(struct wacom_wac *wacom_wac)
498 struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
499 struct wacom_features *features = &wacom_wac->features;
513 static int wacom_intuos_pad(struct wacom_wac *wacom)
780 static void wacom_exit_report(struct wacom_wac *wacom)
819 static int wacom_intuos_inout(struct wacom_wac *wacom)
878 static inline bool report_touch_events(struct wacom_wac *wacom)
883 static inline bool delay_pen_events(struct wacom_wac *wacom)
888 static int wacom_intuos_general(struct wacom_wac *wacom)
1061 static int wacom_intuos_irq(struct wacom_wac *wacom)
1098 static int wacom_remote_irq(struct wacom_wac *wacom_wac, size_t len)
1100 unsigned char *data = wacom_wac->data;
1102 struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
1116 wacom_wac->id[0] = PAD_DEVICE_ID;
1188 static void wacom_remote_status_irq(struct wacom_wac *wacom_wac, size_t len)
1190 struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
1191 unsigned char *data = wacom_wac->data;
1222 wacom_schedule_work(wacom_wac, WACOM_WORKER_REMOTE);
1233 static void wacom_intuos_bt_process_data(struct wacom_wac *wacom,
1244 static int wacom_intuos_bt_irq(struct wacom_wac *wacom, size_t len)
1280 static int wacom_wac_finger_count_touches(struct wacom_wac *wacom)
1304 static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom)
1437 static void wacom_intuos_pro2_bt_touch(struct wacom_wac *wacom)
1504 static void wacom_intuos_pro2_bt_pad(struct wacom_wac *wacom)
1534 static void wacom_intuos_pro2_bt_battery(struct wacom_wac *wacom)
1545 static void wacom_intuos_gen3_bt_pad(struct wacom_wac *wacom)
1561 static void wacom_intuos_gen3_bt_battery(struct wacom_wac *wacom)
1572 static int wacom_intuos_pro2_bt_irq(struct wacom_wac *wacom, size_t len)
1595 static int wacom_24hdt_irq(struct wacom_wac *wacom)
1669 static int wacom_mt_touch(struct wacom_wac *wacom)
1720 static int wacom_tpc_mt_touch(struct wacom_wac *wacom)
1748 static int wacom_tpc_single_touch(struct wacom_wac *wacom, size_t len)
1784 static int wacom_tpc_pen(struct wacom_wac *wacom)
1814 static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len)
1918 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
1919 struct wacom_features *features = &wacom_wac->features;
1979 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
1985 wacom_wac->hid_data.bat_status = POWER_SUPPLY_STATUS_UNKNOWN;
1989 wacom_wac->hid_data.battery_capacity = value;
1990 wacom_wac->hid_data.bat_connected = 1;
1991 wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO;
1993 wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY;
1997 wacom_wac->hid_data.battery_capacity = value;
1998 wacom_wac->hid_data.bat_connected = 1;
1999 wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO;
2000 wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY;
2003 wacom_wac->hid_data.bat_charging = value;
2004 wacom_wac->hid_data.ps_connected = value;
2005 wacom_wac->hid_data.bat_connected = 1;
2006 wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO;
2007 wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY;
2022 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2024 int status = wacom_wac->hid_data.bat_status;
2025 int capacity = wacom_wac->hid_data.battery_capacity;
2026 bool charging = wacom_wac->hid_data.bat_charging;
2027 bool connected = wacom_wac->hid_data.bat_connected;
2028 bool powered = wacom_wac->hid_data.ps_connected;
2030 wacom_notify_battery(wacom_wac, status, capacity, charging,
2038 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2039 struct wacom_features *features = &wacom_wac->features;
2040 struct input_dev *input = wacom_wac->pad_input;
2081 wacom_wac->has_mute_touch_switch = true;
2121 if (!wacom_wac->has_mode_change) {
2122 wacom_wac->has_mode_change = true;
2123 wacom_wac->is_direct_mode = true;
2144 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2145 struct input_dev *input = wacom_wac->pad_input;
2146 struct wacom_features *features = &wacom_wac->features;
2160 wacom_wac->hid_data.inrange_state |= value;
2169 if (wacom_wac->shared->touch_input) {
2170 bool *is_touch_on = &wacom_wac->shared->is_touch_on;
2177 input_report_switch(wacom_wac->shared->touch_input,
2179 input_sync(wacom_wac->shared->touch_input);
2223 if (wacom_wac->is_direct_mode != value) {
2224 wacom_wac->is_direct_mode = value;
2225 wacom_schedule_work(&wacom->wacom_wac, WACOM_WORKER_MODE_CHANGE);
2242 wacom_wac->hid_data.pad_input_event_flag = true;
2250 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2252 wacom_wac->hid_data.inrange_state = 0;
2259 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2260 struct input_dev *input = wacom_wac->pad_input;
2261 bool active = wacom_wac->hid_data.inrange_state != 0;
2264 if (wacom_wac->hid_data.pad_input_event_flag) {
2268 wacom_wac->hid_data.pad_input_event_flag = false;
2276 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2277 struct wacom_features *features = &wacom_wac->features;
2278 struct input_dev *input = wacom_wac->pen_input;
2355 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2356 struct wacom_features *features = &wacom_wac->features;
2357 struct input_dev *input = wacom_wac->pen_input;
2360 if (wacom_wac->is_invalid_bt_frame)
2374 wacom_wac->hid_data.inrange_state = value;
2376 wacom_wac->hid_data.sense_state = value;
2379 wacom_wac->hid_data.invert_state = value;
2383 wacom_wac->hid_data.tipswitch |= value;
2386 wacom_wac->hid_data.barrelswitch = value;
2389 wacom_wac->hid_data.barrelswitch2 = value;
2393 wacom_wac->serial[0] = (wacom_wac->serial[0] & ~0xFFFFFFFFULL);
2394 wacom_wac->serial[0] |= wacom_s32tou(value, field->report_size);
2399 if (!wacom_is_art_pen(wacom_wac->id[0])) return;
2409 wacom_wac->hid_data.sense_state = value;
2415 wacom_wac->serial[0] = (wacom_wac->serial[0] & 0xFFFFFFFF);
2416 wacom_wac->serial[0] |= ((__u64)raw_value) << 32;
2423 wacom_wac->id[0] |= raw_value & 0xFFFFF;
2435 wacom_wac->id[0] |= wacom_s32tou(value, field->report_size);
2466 wacom_wac->is_invalid_bt_frame = !value;
2473 if (!usage->type || delay_pen_events(wacom_wac))
2477 if (wacom_wac->hid_data.inrange_state)
2479 else if (wacom_wac->shared->stylus_in_proximity && !wacom_wac->hid_data.sense_state)
2487 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2489 wacom_wac->is_invalid_bt_frame = false;
2497 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2498 struct input_dev *input = wacom_wac->pen_input;
2499 bool range = wacom_wac->hid_data.inrange_state;
2500 bool sense = wacom_wac->hid_data.sense_state;
2502 if (wacom_wac->is_invalid_bt_frame)
2505 if (!wacom_wac->tool[0] && range) { /* first in range */
2507 if (wacom_wac->hid_data.invert_state)
2508 wacom_wac->tool[0] = BTN_TOOL_RUBBER;
2509 else if (wacom_wac->id[0])
2510 wacom_wac->tool[0] = wacom_intuos_get_tool_type(wacom_wac->id[0]);
2512 wacom_wac->tool[0] = BTN_TOOL_PEN;
2516 wacom_wac->shared->stylus_in_proximity = sense;
2518 if (!delay_pen_events(wacom_wac) && wacom_wac->tool[0]) {
2519 int id = wacom_wac->id[0];
2520 int sw_state = wacom_wac->hid_data.barrelswitch |
2521 (wacom_wac->hid_data.barrelswitch2 << 1);
2531 if (wacom_wac->serial[0] >> 52 == 1)
2540 wacom_wac->hid_data.tipswitch);
2541 input_report_key(input, wacom_wac->tool[0], sense);
2542 if (wacom_wac->serial[0]) {
2548 __u32 serial_lo = wacom_wac->serial[0] & 0xFFFFFFFFu;
2549 __u32 serial_hi = wacom_wac->serial[0] >> 32;
2554 wacom_wac->hid_data.tipswitch = false;
2560 wacom_wac->tool[0] = 0;
2561 wacom_wac->id[0] = 0;
2562 wacom_wac->serial[0] = 0;
2570 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2571 struct input_dev *input = wacom_wac->touch_input;
2572 unsigned touch_max = wacom_wac->features.touch_max;
2600 wacom_wac->hid_data.cc_report = field->report->id;
2601 wacom_wac->hid_data.cc_index = field->index;
2602 wacom_wac->hid_data.cc_value_index = usage->usage_index;
2617 static void wacom_wac_finger_slot(struct wacom_wac *wacom_wac,
2620 struct hid_data *hid_data = &wacom_wac->hid_data;
2621 bool mt = wacom_wac->features.touch_max > 1;
2623 bool prox = touch_down && report_touch_events(wacom_wac);
2625 if (wacom_wac->shared->has_mute_touch_switch &&
2626 !wacom_wac->shared->is_touch_on) {
2627 if (!wacom_wac->shared->touch_down)
2632 wacom_wac->hid_data.num_received++;
2633 if (wacom_wac->hid_data.num_received > wacom_wac->hid_data.num_expected)
2666 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2668 struct wacom_features *features = &wacom->wacom_wac.features;
2670 if (wacom_wac->is_invalid_bt_frame)
2675 wacom_wac->hid_data.confidence = value;
2678 wacom_wac->hid_data.x = value;
2681 wacom_wac->hid_data.y = value;
2684 wacom_wac->hid_data.width = value;
2687 wacom_wac->hid_data.height = value;
2690 wacom_wac->hid_data.id = value;
2693 wacom_wac->hid_data.tipswitch = value;
2696 wacom_wac->is_invalid_bt_frame = !value;
2709 if (equivalent_usage == wacom_wac->hid_data.last_slot_field)
2710 wacom_wac_finger_slot(wacom_wac, wacom_wac->touch_input);
2718 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2719 struct hid_data* hid_data = &wacom_wac->hid_data;
2722 wacom_wac->is_invalid_bt_frame = false;
2769 hid_data->num_expected = wacom_wac->features.touch_max;
2778 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2779 struct input_dev *input = wacom_wac->touch_input;
2780 unsigned touch_max = wacom_wac->features.touch_max;
2786 if (wacom_wac->hid_data.num_received < wacom_wac->hid_data.num_expected)
2793 wacom_wac->hid_data.num_received = 0;
2794 wacom_wac->hid_data.num_expected = 0;
2797 wacom_wac->shared->touch_down = wacom_wac_finger_count_touches(wacom_wac);
2804 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2805 struct wacom_features *features = &wacom_wac->features;
2826 if (wacom->wacom_wac.features.type != HID_GENERIC)
2837 else if (WACOM_PEN_FIELD(field) && wacom->wacom_wac.pen_input)
2839 else if (WACOM_FINGER_FIELD(field) && wacom->wacom_wac.touch_input)
2889 else if (WACOM_PEN_FIELD(field) && wacom->wacom_wac.pen_input)
2891 else if (WACOM_FINGER_FIELD(field) && wacom->wacom_wac.touch_input)
2900 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2907 if (wacom_wac->features.type != HID_GENERIC)
2925 if (pad_in_hid_field && wacom->wacom_wac.pad_input)
2927 if (pen_in_hid_field && wacom->wacom_wac.pen_input)
2929 if (finger_in_hid_field && wacom->wacom_wac.touch_input)
2945 if (true_pad && wacom->wacom_wac.pad_input)
2949 static int wacom_bpt_touch(struct wacom_wac *wacom)
2990 static void wacom_bpt3_touch_msg(struct wacom_wac *wacom, unsigned char *data)
3033 static void wacom_bpt3_button_msg(struct wacom_wac *wacom, unsigned char *data)
3049 static int wacom_bpt3_touch(struct wacom_wac *wacom)
3080 static int wacom_bpt_pen(struct wacom_wac *wacom)
3155 static int wacom_bpt_irq(struct wacom_wac *wacom, size_t len)
3172 static void wacom_bamboo_pad_pen_event(struct wacom_wac *wacom,
3198 static int wacom_bamboo_pad_touch_event(struct wacom_wac *wacom,
3238 static int wacom_bamboo_pad_irq(struct wacom_wac *wacom, size_t len)
3256 static int wacom_wireless_irq(struct wacom_wac *wacom, size_t len)
3298 static int wacom_status_irq(struct wacom_wac *wacom_wac, size_t len)
3300 struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
3301 struct wacom_features *features = &wacom_wac->features;
3302 unsigned char *data = wacom_wac->data;
3309 wacom_wac->shared->touch_input &&
3311 input_report_switch(wacom_wac->shared->touch_input,
3313 input_sync(wacom_wac->shared->touch_input);
3320 wacom_notify_battery(wacom_wac, WACOM_POWER_SUPPLY_STATUS_AUTO,
3326 wacom_schedule_work(wacom_wac, WACOM_WORKER_BATTERY);
3332 wacom_schedule_work(wacom_wac, WACOM_WORKER_BATTERY);
3333 wacom_notify_battery(wacom_wac, POWER_SUPPLY_STATUS_UNKNOWN, 0, 0, 0, 0);
3338 void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
3342 switch (wacom_wac->features.type) {
3344 sync = wacom_penpartner_irq(wacom_wac);
3348 sync = wacom_pl_irq(wacom_wac);
3355 sync = wacom_graphire_irq(wacom_wac);
3359 sync = wacom_ptu_irq(wacom_wac);
3363 sync = wacom_dtu_irq(wacom_wac);
3368 sync = wacom_dtus_irq(wacom_wac);
3388 sync = wacom_intuos_irq(wacom_wac);
3392 sync = wacom_intuos_bt_irq(wacom_wac, len);
3397 sync = wacom_24hdt_irq(wacom_wac);
3407 sync = wacom_bpt3_touch(wacom_wac);
3408 else if (wacom_wac->data[0] == WACOM_REPORT_USB)
3409 sync = wacom_status_irq(wacom_wac, len);
3411 sync = wacom_intuos_irq(wacom_wac);
3417 sync = wacom_intuos_pro2_bt_irq(wacom_wac, len);
3426 sync = wacom_tpc_irq(wacom_wac, len);
3434 if (wacom_wac->data[0] == WACOM_REPORT_USB)
3435 sync = wacom_status_irq(wacom_wac, len);
3437 sync = wacom_bpt_irq(wacom_wac, len);
3441 sync = wacom_bamboo_pad_irq(wacom_wac, len);
3445 sync = wacom_wireless_irq(wacom_wac, len);
3450 if (wacom_wac->data[0] == WACOM_REPORT_DEVICE_LIST)
3451 wacom_remote_status_irq(wacom_wac, len);
3453 sync = wacom_remote_irq(wacom_wac, len);
3462 if (wacom_wac->pen_input)
3463 input_sync(wacom_wac->pen_input);
3464 if (wacom_wac->touch_input)
3465 input_sync(wacom_wac->touch_input);
3466 if (wacom_wac->pad_input)
3467 input_sync(wacom_wac->pad_input);
3471 static void wacom_setup_basic_pro_pen(struct wacom_wac *wacom_wac)
3473 struct input_dev *input_dev = wacom_wac->pen_input;
3482 0, wacom_wac->features.distance_max, wacom_wac->features.distance_fuzz, 0);
3485 static void wacom_setup_cintiq(struct wacom_wac *wacom_wac)
3487 struct input_dev *input_dev = wacom_wac->pen_input;
3488 struct wacom_features *features = &wacom_wac->features;
3490 wacom_setup_basic_pro_pen(wacom_wac);
3504 static void wacom_setup_intuos(struct wacom_wac *wacom_wac)
3506 struct input_dev *input_dev = wacom_wac->pen_input;
3510 wacom_setup_cintiq(wacom_wac);
3527 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
3528 struct wacom_features *features = &wacom->wacom_wac.features;
3664 __clear_bit(BTN_TOOL_BRUSH, wacom_wac->pen_input->keybit);
3665 __clear_bit(BTN_TOOL_PENCIL, wacom_wac->pen_input->keybit);
3666 __clear_bit(BTN_TOOL_AIRBRUSH, wacom_wac->pen_input->keybit);
3667 __clear_bit(ABS_Z, wacom_wac->pen_input->absbit);
3668 __clear_bit(ABS_DISTANCE, wacom_wac->pen_input->absbit);
3669 __clear_bit(ABS_TILT_X, wacom_wac->pen_input->absbit);
3670 __clear_bit(ABS_TILT_Y, wacom_wac->pen_input->absbit);
3671 __clear_bit(ABS_WHEEL, wacom_wac->pen_input->absbit);
3672 __clear_bit(ABS_MISC, wacom_wac->pen_input->absbit);
3673 __clear_bit(MSC_SERIAL, wacom_wac->pen_input->mscbit);
3674 __clear_bit(EV_MSC, wacom_wac->pen_input->evbit);
3679 struct wacom_wac *wacom_wac)
3681 struct wacom_features *features = &wacom_wac->features;
3752 wacom_setup_cintiq(wacom_wac);
3767 wacom_setup_intuos(wacom_wac);
3785 wacom_setup_intuos(wacom_wac);
3826 wacom_setup_basic_pro_pen(wacom_wac);
3846 struct wacom_wac *wacom_wac)
3848 struct wacom_features *features = &wacom_wac->features;
3892 if (wacom_wac->shared->touch->product == 0x361) {
3898 else if (wacom_wac->shared->touch->product == 0x360) {
3904 else if (wacom_wac->shared->touch->product == 0x393) {
3934 if (wacom_wac->shared->touch->product == 0x32C ||
3935 wacom_wac->shared->touch->product == 0xF6) {
3938 wacom_wac->has_mute_touch_switch = true;
4047 if (wacom->wacom_wac.features.type == WACOM_21UX2)
4052 if (wacom->wacom_wac.features.type == INTUOSP2_BT)
4065 if (wacom->wacom_wac.features.type == WACOM_24HD)
4118 struct wacom_wac *wacom_wac)
4120 struct wacom_features *features = &wacom_wac->features;
4128 if (features->type == REMOTE && input_dev == wacom_wac->pad_input)