Lines Matching defs:wacom_wac
6 #include "wacom_wac.h"
41 static void wacom_force_proxout(struct wacom_wac *wacom_wac)
43 struct input_dev *input = wacom_wac->pen_input;
45 wacom_wac->shared->stylus_in_proximity = 0;
51 input_report_key(input, wacom_wac->tool[0], 0);
52 if (wacom_wac->serial[0]) {
57 wacom_wac->tool[0] = 0;
58 wacom_wac->id[0] = 0;
59 wacom_wac->serial[0] = 0;
67 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
69 if (!wacom_wac->hid_data.sense_state) {
74 wacom_force_proxout(wacom_wac);
111 static void wacom_notify_battery(struct wacom_wac *wacom_wac,
115 struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
117 bool has_quirk = wacom_wac->features.quirks & WACOM_QUIRK_BATTERY;
120 wacom_schedule_work(wacom_wac, WACOM_WORKER_BATTERY);
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 touch_is_muted(struct wacom_wac *wacom_wac)
880 return wacom_wac->probe_complete &&
881 wacom_wac->shared->has_mute_touch_switch &&
882 !wacom_wac->shared->is_touch_on;
885 static inline bool report_touch_events(struct wacom_wac *wacom)
890 static inline bool delay_pen_events(struct wacom_wac *wacom)
895 static int wacom_intuos_general(struct wacom_wac *wacom)
1068 static int wacom_intuos_irq(struct wacom_wac *wacom)
1105 static int wacom_remote_irq(struct wacom_wac *wacom_wac, size_t len)
1107 unsigned char *data = wacom_wac->data;
1109 struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
1123 wacom_wac->id[0] = PAD_DEVICE_ID;
1195 static void wacom_remote_status_irq(struct wacom_wac *wacom_wac, size_t len)
1197 struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
1198 unsigned char *data = wacom_wac->data;
1227 wacom_schedule_work(wacom_wac, WACOM_WORKER_REMOTE);
1238 static void wacom_intuos_bt_process_data(struct wacom_wac *wacom,
1249 static int wacom_intuos_bt_irq(struct wacom_wac *wacom, size_t len)
1285 static int wacom_wac_finger_count_touches(struct wacom_wac *wacom)
1309 static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom)
1442 static void wacom_intuos_pro2_bt_touch(struct wacom_wac *wacom)
1509 static void wacom_intuos_pro2_bt_pad(struct wacom_wac *wacom)
1539 static void wacom_intuos_pro2_bt_battery(struct wacom_wac *wacom)
1550 static void wacom_intuos_gen3_bt_pad(struct wacom_wac *wacom)
1566 static void wacom_intuos_gen3_bt_battery(struct wacom_wac *wacom)
1577 static int wacom_intuos_pro2_bt_irq(struct wacom_wac *wacom, size_t len)
1600 static int wacom_24hdt_irq(struct wacom_wac *wacom)
1671 static int wacom_mt_touch(struct wacom_wac *wacom)
1722 static int wacom_tpc_mt_touch(struct wacom_wac *wacom)
1750 static int wacom_tpc_single_touch(struct wacom_wac *wacom, size_t len)
1786 static int wacom_tpc_pen(struct wacom_wac *wacom)
1816 static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len)
1922 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
1923 struct wacom_features *features = &wacom_wac->features;
1977 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
1983 wacom_wac->hid_data.bat_status = POWER_SUPPLY_STATUS_UNKNOWN;
1987 wacom_wac->hid_data.battery_capacity = value;
1988 wacom_wac->hid_data.bat_connected = 1;
1989 wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO;
1991 wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY;
1995 wacom_wac->hid_data.battery_capacity = value;
1996 wacom_wac->hid_data.bat_connected = 1;
1997 wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO;
1998 wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY;
2001 wacom_wac->hid_data.bat_charging = value;
2002 wacom_wac->hid_data.ps_connected = value;
2003 wacom_wac->hid_data.bat_connected = 1;
2004 wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO;
2005 wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY;
2020 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2022 int status = wacom_wac->hid_data.bat_status;
2023 int capacity = wacom_wac->hid_data.battery_capacity;
2024 bool charging = wacom_wac->hid_data.bat_charging;
2025 bool connected = wacom_wac->hid_data.bat_connected;
2026 bool powered = wacom_wac->hid_data.ps_connected;
2028 wacom_notify_battery(wacom_wac, status, capacity, charging,
2036 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2037 struct wacom_features *features = &wacom_wac->features;
2038 struct input_dev *input = wacom_wac->pad_input;
2071 wacom_wac->is_soft_touch_switch = true;
2082 wacom_wac->has_mute_touch_switch = true;
2122 if (!wacom_wac->has_mode_change) {
2123 wacom_wac->has_mode_change = true;
2124 wacom_wac->is_direct_mode = true;
2145 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2146 struct input_dev *input = wacom_wac->pad_input;
2147 struct wacom_features *features = &wacom_wac->features;
2161 wacom_wac->hid_data.inrange_state |= value;
2170 if (wacom_wac->shared->touch_input) {
2171 bool *is_touch_on = &wacom_wac->shared->is_touch_on;
2178 input_report_switch(wacom_wac->shared->touch_input,
2180 input_sync(wacom_wac->shared->touch_input);
2224 if (wacom_wac->is_direct_mode != value) {
2225 wacom_wac->is_direct_mode = value;
2226 wacom_schedule_work(&wacom->wacom_wac, WACOM_WORKER_MODE_CHANGE);
2243 wacom_wac->hid_data.pad_input_event_flag = true;
2251 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2253 wacom_wac->hid_data.inrange_state = 0;
2260 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2261 struct input_dev *input = wacom_wac->pad_input;
2262 bool active = wacom_wac->hid_data.inrange_state != 0;
2265 if (wacom_wac->hid_data.pad_input_event_flag) {
2269 wacom_wac->hid_data.pad_input_event_flag = false;
2273 static void wacom_set_barrel_switch3_usage(struct wacom_wac *wacom_wac)
2275 struct input_dev *input = wacom_wac->pen_input;
2276 struct wacom_features *features = &wacom_wac->features;
2279 wacom_wac->hid_data.barrelswitch &&
2280 wacom_wac->hid_data.barrelswitch2 &&
2281 wacom_wac->hid_data.serialhi &&
2282 !wacom_wac->hid_data.barrelswitch3) {
2292 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2293 struct wacom_features *features = &wacom_wac->features;
2294 struct input_dev *input = wacom_wac->pen_input;
2336 wacom_wac->hid_data.barrelswitch = true;
2337 wacom_set_barrel_switch3_usage(wacom_wac);
2341 wacom_wac->hid_data.barrelswitch2 = true;
2342 wacom_set_barrel_switch3_usage(wacom_wac);
2357 wacom_wac->hid_data.serialhi = true;
2358 wacom_set_barrel_switch3_usage(wacom_wac);
2366 wacom_wac->hid_data.barrelswitch3 = true;
2377 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2378 struct wacom_features *features = &wacom_wac->features;
2379 struct input_dev *input = wacom_wac->pen_input;
2382 if (wacom_wac->is_invalid_bt_frame)
2396 wacom_wac->hid_data.inrange_state = value;
2398 wacom_wac->hid_data.sense_state = value;
2401 wacom_wac->hid_data.invert_state = value;
2405 wacom_wac->hid_data.tipswitch |= value;
2408 wacom_wac->hid_data.barrelswitch = value;
2411 wacom_wac->hid_data.barrelswitch2 = value;
2415 wacom_wac->serial[0] = (wacom_wac->serial[0] & ~0xFFFFFFFFULL);
2416 wacom_wac->serial[0] |= wacom_s32tou(value, field->report_size);
2421 if (!wacom_is_art_pen(wacom_wac->id[0])) return;
2431 wacom_wac->hid_data.sense_state = value;
2437 wacom_wac->serial[0] = (wacom_wac->serial[0] & 0xFFFFFFFF);
2438 wacom_wac->serial[0] |= ((__u64)raw_value) << 32;
2445 wacom_wac->id[0] |= raw_value & 0xFFFFF;
2457 wacom_wac->id[0] |= wacom_s32tou(value, field->report_size);
2488 wacom_wac->is_invalid_bt_frame = !value;
2491 wacom_wac->hid_data.barrelswitch3 = value;
2494 if (wacom_wac->hid_data.sequence_number != value)
2495 hid_warn(hdev, "Dropped %hu packets", (unsigned short)(value - wacom_wac->hid_data.sequence_number));
2496 wacom_wac->hid_data.sequence_number = value + 1;
2503 if (!usage->type || delay_pen_events(wacom_wac))
2507 if (wacom_wac->hid_data.inrange_state)
2509 else if (wacom_wac->shared->stylus_in_proximity && !wacom_wac->hid_data.sense_state)
2517 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2519 wacom_wac->is_invalid_bt_frame = false;
2527 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2528 struct input_dev *input = wacom_wac->pen_input;
2529 bool range = wacom_wac->hid_data.inrange_state;
2530 bool sense = wacom_wac->hid_data.sense_state;
2532 if (wacom_wac->is_invalid_bt_frame)
2535 if (!wacom_wac->tool[0] && range) { /* first in range */
2537 if (wacom_wac->hid_data.invert_state)
2538 wacom_wac->tool[0] = BTN_TOOL_RUBBER;
2539 else if (wacom_wac->id[0])
2540 wacom_wac->tool[0] = wacom_intuos_get_tool_type(wacom_wac->id[0]);
2542 wacom_wac->tool[0] = BTN_TOOL_PEN;
2546 wacom_wac->shared->stylus_in_proximity = sense;
2548 if (!delay_pen_events(wacom_wac) && wacom_wac->tool[0]) {
2549 int id = wacom_wac->id[0];
2550 if (wacom_wac->features.quirks & WACOM_QUIRK_PEN_BUTTON3) {
2551 int sw_state = wacom_wac->hid_data.barrelswitch |
2552 (wacom_wac->hid_data.barrelswitch2 << 1);
2553 wacom_wac->hid_data.barrelswitch = sw_state == 1;
2554 wacom_wac->hid_data.barrelswitch2 = sw_state == 2;
2555 wacom_wac->hid_data.barrelswitch3 = sw_state == 3;
2557 input_report_key(input, BTN_STYLUS, wacom_wac->hid_data.barrelswitch);
2558 input_report_key(input, BTN_STYLUS2, wacom_wac->hid_data.barrelswitch2);
2559 input_report_key(input, BTN_STYLUS3, wacom_wac->hid_data.barrelswitch3);
2565 if (wacom_wac->serial[0] >> 52 == 1)
2574 wacom_wac->hid_data.tipswitch);
2575 input_report_key(input, wacom_wac->tool[0], sense);
2576 if (wacom_wac->serial[0]) {
2582 __u32 serial_lo = wacom_wac->serial[0] & 0xFFFFFFFFu;
2583 __u32 serial_hi = wacom_wac->serial[0] >> 32;
2588 wacom_wac->hid_data.tipswitch = false;
2594 wacom_wac->tool[0] = 0;
2595 wacom_wac->id[0] = 0;
2596 wacom_wac->serial[0] = 0;
2604 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2605 struct input_dev *input = wacom_wac->touch_input;
2606 unsigned touch_max = wacom_wac->features.touch_max;
2634 wacom_wac->hid_data.cc_report = field->report->id;
2635 wacom_wac->hid_data.cc_index = field->index;
2636 wacom_wac->hid_data.cc_value_index = usage->usage_index;
2654 static void wacom_wac_finger_slot(struct wacom_wac *wacom_wac,
2657 struct hid_data *hid_data = &wacom_wac->hid_data;
2658 bool mt = wacom_wac->features.touch_max > 1;
2660 bool prox = touch_down && report_touch_events(wacom_wac);
2662 if (touch_is_muted(wacom_wac)) {
2663 if (!wacom_wac->shared->touch_down)
2668 wacom_wac->hid_data.num_received++;
2669 if (wacom_wac->hid_data.num_received > wacom_wac->hid_data.num_expected)
2714 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2716 struct wacom_features *features = &wacom->wacom_wac.features;
2718 if (touch_is_muted(wacom_wac) && !wacom_wac->shared->touch_down)
2721 if (wacom_wac->is_invalid_bt_frame)
2726 wacom_wac->hid_data.confidence = value;
2729 wacom_wac->hid_data.x = value;
2732 wacom_wac->hid_data.y = value;
2735 wacom_wac->hid_data.width = value;
2738 wacom_wac->hid_data.height = value;
2741 wacom_wac->hid_data.id = value;
2744 wacom_wac->hid_data.tipswitch = value;
2747 wacom_wac->is_invalid_bt_frame = !value;
2760 if (equivalent_usage == wacom_wac->hid_data.last_slot_field)
2761 wacom_wac_finger_slot(wacom_wac, wacom_wac->touch_input);
2769 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2770 struct hid_data* hid_data = &wacom_wac->hid_data;
2773 if (touch_is_muted(wacom_wac) && !wacom_wac->shared->touch_down)
2776 wacom_wac->is_invalid_bt_frame = false;
2823 hid_data->num_expected = wacom_wac->features.touch_max;
2832 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2833 struct input_dev *input = wacom_wac->touch_input;
2834 unsigned touch_max = wacom_wac->features.touch_max;
2837 if (wacom_wac->hid_data.num_expected == 0)
2844 if (wacom_wac->hid_data.num_received < wacom_wac->hid_data.num_expected)
2851 wacom_wac->hid_data.num_received = 0;
2852 wacom_wac->hid_data.num_expected = 0;
2855 wacom_wac->shared->touch_down = wacom_wac_finger_count_touches(wacom_wac);
2862 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2863 struct wacom_features *features = &wacom_wac->features;
2884 if (wacom->wacom_wac.features.type != HID_GENERIC)
2895 else if (WACOM_PEN_FIELD(field) && wacom->wacom_wac.pen_input)
2897 else if (WACOM_FINGER_FIELD(field) && wacom->wacom_wac.touch_input)
2947 else if (WACOM_PEN_FIELD(field) && wacom->wacom_wac.pen_input)
2949 else if (WACOM_FINGER_FIELD(field) && wacom->wacom_wac.touch_input)
2958 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2965 if (wacom_wac->features.type != HID_GENERIC)
2983 if (pad_in_hid_field && wacom->wacom_wac.pad_input)
2985 if (pen_in_hid_field && wacom->wacom_wac.pen_input)
2987 if (finger_in_hid_field && wacom->wacom_wac.touch_input)
3003 if (true_pad && wacom->wacom_wac.pad_input)
3007 static int wacom_bpt_touch(struct wacom_wac *wacom)
3048 static void wacom_bpt3_touch_msg(struct wacom_wac *wacom, unsigned char *data)
3091 static void wacom_bpt3_button_msg(struct wacom_wac *wacom, unsigned char *data)
3107 static int wacom_bpt3_touch(struct wacom_wac *wacom)
3138 static int wacom_bpt_pen(struct wacom_wac *wacom)
3213 static int wacom_bpt_irq(struct wacom_wac *wacom, size_t len)
3230 static void wacom_bamboo_pad_pen_event(struct wacom_wac *wacom,
3256 static int wacom_bamboo_pad_touch_event(struct wacom_wac *wacom,
3296 static int wacom_bamboo_pad_irq(struct wacom_wac *wacom, size_t len)
3314 static int wacom_wireless_irq(struct wacom_wac *wacom, size_t len)
3356 static int wacom_status_irq(struct wacom_wac *wacom_wac, size_t len)
3358 struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
3359 struct wacom_features *features = &wacom_wac->features;
3360 unsigned char *data = wacom_wac->data;
3367 wacom_wac->shared->touch_input &&
3369 input_report_switch(wacom_wac->shared->touch_input,
3371 input_sync(wacom_wac->shared->touch_input);
3379 wacom_notify_battery(wacom_wac, WACOM_POWER_SUPPLY_STATUS_AUTO,
3385 wacom_notify_battery(wacom_wac, POWER_SUPPLY_STATUS_UNKNOWN, 0, 0, 0, 0);
3390 void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
3394 switch (wacom_wac->features.type) {
3396 sync = wacom_penpartner_irq(wacom_wac);
3400 sync = wacom_pl_irq(wacom_wac);
3407 sync = wacom_graphire_irq(wacom_wac);
3411 sync = wacom_ptu_irq(wacom_wac);
3415 sync = wacom_dtu_irq(wacom_wac);
3420 sync = wacom_dtus_irq(wacom_wac);
3440 sync = wacom_intuos_irq(wacom_wac);
3444 sync = wacom_intuos_bt_irq(wacom_wac, len);
3449 sync = wacom_24hdt_irq(wacom_wac);
3459 sync = wacom_bpt3_touch(wacom_wac);
3460 else if (wacom_wac->data[0] == WACOM_REPORT_USB)
3461 sync = wacom_status_irq(wacom_wac, len);
3463 sync = wacom_intuos_irq(wacom_wac);
3469 sync = wacom_intuos_pro2_bt_irq(wacom_wac, len);
3478 sync = wacom_tpc_irq(wacom_wac, len);
3486 if (wacom_wac->data[0] == WACOM_REPORT_USB)
3487 sync = wacom_status_irq(wacom_wac, len);
3489 sync = wacom_bpt_irq(wacom_wac, len);
3493 sync = wacom_bamboo_pad_irq(wacom_wac, len);
3497 sync = wacom_wireless_irq(wacom_wac, len);
3502 if (wacom_wac->data[0] == WACOM_REPORT_DEVICE_LIST)
3503 wacom_remote_status_irq(wacom_wac, len);
3505 sync = wacom_remote_irq(wacom_wac, len);
3514 if (wacom_wac->pen_input)
3515 input_sync(wacom_wac->pen_input);
3516 if (wacom_wac->touch_input)
3517 input_sync(wacom_wac->touch_input);
3518 if (wacom_wac->pad_input)
3519 input_sync(wacom_wac->pad_input);
3523 static void wacom_setup_basic_pro_pen(struct wacom_wac *wacom_wac)
3525 struct input_dev *input_dev = wacom_wac->pen_input;
3534 0, wacom_wac->features.distance_max, wacom_wac->features.distance_fuzz, 0);
3537 static void wacom_setup_cintiq(struct wacom_wac *wacom_wac)
3539 struct input_dev *input_dev = wacom_wac->pen_input;
3540 struct wacom_features *features = &wacom_wac->features;
3542 wacom_setup_basic_pro_pen(wacom_wac);
3556 static void wacom_setup_intuos(struct wacom_wac *wacom_wac)
3558 struct input_dev *input_dev = wacom_wac->pen_input;
3562 wacom_setup_cintiq(wacom_wac);
3579 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
3580 struct wacom_features *features = &wacom->wacom_wac.features;
3716 __clear_bit(BTN_TOOL_BRUSH, wacom_wac->pen_input->keybit);
3717 __clear_bit(BTN_TOOL_PENCIL, wacom_wac->pen_input->keybit);
3718 __clear_bit(BTN_TOOL_AIRBRUSH, wacom_wac->pen_input->keybit);
3719 __clear_bit(ABS_Z, wacom_wac->pen_input->absbit);
3720 __clear_bit(ABS_DISTANCE, wacom_wac->pen_input->absbit);
3721 __clear_bit(ABS_TILT_X, wacom_wac->pen_input->absbit);
3722 __clear_bit(ABS_TILT_Y, wacom_wac->pen_input->absbit);
3723 __clear_bit(ABS_WHEEL, wacom_wac->pen_input->absbit);
3724 __clear_bit(ABS_MISC, wacom_wac->pen_input->absbit);
3725 __clear_bit(MSC_SERIAL, wacom_wac->pen_input->mscbit);
3726 __clear_bit(EV_MSC, wacom_wac->pen_input->evbit);
3731 struct wacom_wac *wacom_wac)
3733 struct wacom_features *features = &wacom_wac->features;
3802 wacom_setup_cintiq(wacom_wac);
3817 wacom_setup_intuos(wacom_wac);
3835 wacom_setup_intuos(wacom_wac);
3876 wacom_setup_basic_pro_pen(wacom_wac);
3896 struct wacom_wac *wacom_wac)
3898 struct wacom_features *features = &wacom_wac->features;
3942 if (wacom_wac->shared->touch->product == 0x361) {
3948 else if (wacom_wac->shared->touch->product == 0x360) {
3954 else if (wacom_wac->shared->touch->product == 0x393) {
3984 if (wacom_wac->shared->touch->product == 0x32C ||
3985 wacom_wac->shared->touch->product == 0xF6) {
3988 wacom_wac->has_mute_touch_switch = true;
3989 wacom_wac->is_soft_touch_switch = true;
4098 if (wacom->wacom_wac.features.type == WACOM_21UX2)
4103 if (wacom->wacom_wac.features.type == INTUOSP2_BT)
4116 if (wacom->wacom_wac.features.type == WACOM_24HD)
4169 struct wacom_wac *wacom_wac)
4171 struct wacom_features *features = &wacom_wac->features;
4179 if (features->type == REMOTE && input_dev == wacom_wac->pad_input)