Lines Matching refs: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;
2531 bool entering_range = !wacom_wac->tool[0] && range;
2533 if (wacom_wac->is_invalid_bt_frame)
2538 if (wacom_wac->hid_data.invert_state)
2539 wacom_wac->tool[0] = BTN_TOOL_RUBBER;
2540 else if (wacom_wac->id[0])
2541 wacom_wac->tool[0] = wacom_intuos_get_tool_type(wacom_wac->id[0]);
2543 wacom_wac->tool[0] = BTN_TOOL_PEN;
2547 wacom_wac->shared->stylus_in_proximity = sense;
2549 if (!delay_pen_events(wacom_wac) && wacom_wac->tool[0]) {
2550 int id = wacom_wac->id[0];
2551 if (wacom_wac->features.quirks & WACOM_QUIRK_PEN_BUTTON3) {
2552 int sw_state = wacom_wac->hid_data.barrelswitch |
2553 (wacom_wac->hid_data.barrelswitch2 << 1);
2554 wacom_wac->hid_data.barrelswitch = sw_state == 1;
2555 wacom_wac->hid_data.barrelswitch2 = sw_state == 2;
2556 wacom_wac->hid_data.barrelswitch3 = sw_state == 3;
2558 input_report_key(input, BTN_STYLUS, wacom_wac->hid_data.barrelswitch);
2559 input_report_key(input, BTN_STYLUS2, wacom_wac->hid_data.barrelswitch2);
2560 input_report_key(input, BTN_STYLUS3, wacom_wac->hid_data.barrelswitch3);
2566 if (wacom_wac->serial[0] >> 52 == 1)
2575 wacom_wac->hid_data.tipswitch);
2576 input_report_key(input, wacom_wac->tool[0], sense);
2577 if (wacom_wac->serial[0]) {
2583 __u32 serial_lo = wacom_wac->serial[0] & 0xFFFFFFFFu;
2584 __u32 serial_hi = wacom_wac->serial[0] >> 32;
2589 wacom_wac->hid_data.tipswitch = false;
2595 if (wacom_wac->features.quirks & WACOM_QUIRK_AESPEN) {
2604 wacom_wac->tool[0] = 0;
2605 wacom_wac->id[0] = 0;
2606 wacom_wac->serial[0] = 0;
2614 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2615 struct input_dev *input = wacom_wac->touch_input;
2616 unsigned touch_max = wacom_wac->features.touch_max;
2644 wacom_wac->hid_data.cc_report = field->report->id;
2645 wacom_wac->hid_data.cc_index = field->index;
2646 wacom_wac->hid_data.cc_value_index = usage->usage_index;
2664 static void wacom_wac_finger_slot(struct wacom_wac *wacom_wac,
2667 struct hid_data *hid_data = &wacom_wac->hid_data;
2668 bool mt = wacom_wac->features.touch_max > 1;
2670 bool prox = touch_down && report_touch_events(wacom_wac);
2672 if (touch_is_muted(wacom_wac)) {
2673 if (!wacom_wac->shared->touch_down)
2678 wacom_wac->hid_data.num_received++;
2679 if (wacom_wac->hid_data.num_received > wacom_wac->hid_data.num_expected)
2724 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2726 struct wacom_features *features = &wacom->wacom_wac.features;
2728 if (touch_is_muted(wacom_wac) && !wacom_wac->shared->touch_down)
2731 if (wacom_wac->is_invalid_bt_frame)
2736 wacom_wac->hid_data.confidence = value;
2739 wacom_wac->hid_data.x = value;
2742 wacom_wac->hid_data.y = value;
2745 wacom_wac->hid_data.width = value;
2748 wacom_wac->hid_data.height = value;
2751 wacom_wac->hid_data.id = value;
2754 wacom_wac->hid_data.tipswitch = value;
2757 wacom_wac->is_invalid_bt_frame = !value;
2770 if (equivalent_usage == wacom_wac->hid_data.last_slot_field)
2771 wacom_wac_finger_slot(wacom_wac, wacom_wac->touch_input);
2779 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2780 struct hid_data* hid_data = &wacom_wac->hid_data;
2783 if (touch_is_muted(wacom_wac) && !wacom_wac->shared->touch_down)
2786 wacom_wac->is_invalid_bt_frame = false;
2833 hid_data->num_expected = wacom_wac->features.touch_max;
2842 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2843 struct input_dev *input = wacom_wac->touch_input;
2844 unsigned touch_max = wacom_wac->features.touch_max;
2847 if (wacom_wac->hid_data.num_expected == 0)
2854 if (wacom_wac->hid_data.num_received < wacom_wac->hid_data.num_expected)
2861 wacom_wac->hid_data.num_received = 0;
2862 wacom_wac->hid_data.num_expected = 0;
2865 wacom_wac->shared->touch_down = wacom_wac_finger_count_touches(wacom_wac);
2872 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2873 struct wacom_features *features = &wacom_wac->features;
2894 if (wacom->wacom_wac.features.type != HID_GENERIC)
2905 else if (WACOM_PEN_FIELD(field) && wacom->wacom_wac.pen_input)
2907 else if (WACOM_FINGER_FIELD(field) && wacom->wacom_wac.touch_input)
2957 else if (WACOM_PEN_FIELD(field) && wacom->wacom_wac.pen_input)
2959 else if (WACOM_FINGER_FIELD(field) && wacom->wacom_wac.touch_input)
2968 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2975 if (wacom_wac->features.type != HID_GENERIC)
2993 if (pad_in_hid_field && wacom_wac->pad_input)
2995 if (pen_in_hid_field && wacom_wac->pen_input)
2997 if (finger_in_hid_field && wacom_wac->touch_input)
3013 if (true_pad && wacom_wac->pad_input)
3017 static int wacom_bpt_touch(struct wacom_wac *wacom)
3058 static void wacom_bpt3_touch_msg(struct wacom_wac *wacom, unsigned char *data)
3101 static void wacom_bpt3_button_msg(struct wacom_wac *wacom, unsigned char *data)
3117 static int wacom_bpt3_touch(struct wacom_wac *wacom)
3148 static int wacom_bpt_pen(struct wacom_wac *wacom)
3223 static int wacom_bpt_irq(struct wacom_wac *wacom, size_t len)
3240 static void wacom_bamboo_pad_pen_event(struct wacom_wac *wacom,
3266 static int wacom_bamboo_pad_touch_event(struct wacom_wac *wacom,
3306 static int wacom_bamboo_pad_irq(struct wacom_wac *wacom, size_t len)
3324 static int wacom_wireless_irq(struct wacom_wac *wacom, size_t len)
3366 static int wacom_status_irq(struct wacom_wac *wacom_wac, size_t len)
3368 struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
3369 struct wacom_features *features = &wacom_wac->features;
3370 unsigned char *data = wacom_wac->data;
3377 wacom_wac->shared->touch_input &&
3379 input_report_switch(wacom_wac->shared->touch_input,
3381 input_sync(wacom_wac->shared->touch_input);
3389 wacom_notify_battery(wacom_wac, WACOM_POWER_SUPPLY_STATUS_AUTO,
3395 wacom_notify_battery(wacom_wac, POWER_SUPPLY_STATUS_UNKNOWN, 0, 0, 0, 0);
3400 void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
3404 switch (wacom_wac->features.type) {
3406 sync = wacom_penpartner_irq(wacom_wac);
3410 sync = wacom_pl_irq(wacom_wac);
3417 sync = wacom_graphire_irq(wacom_wac);
3421 sync = wacom_ptu_irq(wacom_wac);
3425 sync = wacom_dtu_irq(wacom_wac);
3430 sync = wacom_dtus_irq(wacom_wac);
3450 sync = wacom_intuos_irq(wacom_wac);
3454 sync = wacom_intuos_bt_irq(wacom_wac, len);
3459 sync = wacom_24hdt_irq(wacom_wac);
3469 sync = wacom_bpt3_touch(wacom_wac);
3470 else if (wacom_wac->data[0] == WACOM_REPORT_USB)
3471 sync = wacom_status_irq(wacom_wac, len);
3473 sync = wacom_intuos_irq(wacom_wac);
3479 sync = wacom_intuos_pro2_bt_irq(wacom_wac, len);
3488 sync = wacom_tpc_irq(wacom_wac, len);
3496 if (wacom_wac->data[0] == WACOM_REPORT_USB)
3497 sync = wacom_status_irq(wacom_wac, len);
3499 sync = wacom_bpt_irq(wacom_wac, len);
3503 sync = wacom_bamboo_pad_irq(wacom_wac, len);
3507 sync = wacom_wireless_irq(wacom_wac, len);
3512 if (wacom_wac->data[0] == WACOM_REPORT_DEVICE_LIST)
3513 wacom_remote_status_irq(wacom_wac, len);
3515 sync = wacom_remote_irq(wacom_wac, len);
3524 if (wacom_wac->pen_input)
3525 input_sync(wacom_wac->pen_input);
3526 if (wacom_wac->touch_input)
3527 input_sync(wacom_wac->touch_input);
3528 if (wacom_wac->pad_input)
3529 input_sync(wacom_wac->pad_input);
3533 static void wacom_setup_basic_pro_pen(struct wacom_wac *wacom_wac)
3535 struct input_dev *input_dev = wacom_wac->pen_input;
3544 0, wacom_wac->features.distance_max, wacom_wac->features.distance_fuzz, 0);
3547 static void wacom_setup_cintiq(struct wacom_wac *wacom_wac)
3549 struct input_dev *input_dev = wacom_wac->pen_input;
3550 struct wacom_features *features = &wacom_wac->features;
3552 wacom_setup_basic_pro_pen(wacom_wac);
3566 static void wacom_setup_intuos(struct wacom_wac *wacom_wac)
3568 struct input_dev *input_dev = wacom_wac->pen_input;
3572 wacom_setup_cintiq(wacom_wac);
3589 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
3590 struct wacom_features *features = &wacom->wacom_wac.features;
3726 __clear_bit(BTN_TOOL_BRUSH, wacom_wac->pen_input->keybit);
3727 __clear_bit(BTN_TOOL_PENCIL, wacom_wac->pen_input->keybit);
3728 __clear_bit(BTN_TOOL_AIRBRUSH, wacom_wac->pen_input->keybit);
3729 __clear_bit(ABS_Z, wacom_wac->pen_input->absbit);
3730 __clear_bit(ABS_DISTANCE, wacom_wac->pen_input->absbit);
3731 __clear_bit(ABS_TILT_X, wacom_wac->pen_input->absbit);
3732 __clear_bit(ABS_TILT_Y, wacom_wac->pen_input->absbit);
3733 __clear_bit(ABS_WHEEL, wacom_wac->pen_input->absbit);
3734 __clear_bit(ABS_MISC, wacom_wac->pen_input->absbit);
3735 __clear_bit(MSC_SERIAL, wacom_wac->pen_input->mscbit);
3736 __clear_bit(EV_MSC, wacom_wac->pen_input->evbit);
3741 struct wacom_wac *wacom_wac)
3743 struct wacom_features *features = &wacom_wac->features;
3812 wacom_setup_cintiq(wacom_wac);
3827 wacom_setup_intuos(wacom_wac);
3845 wacom_setup_intuos(wacom_wac);
3886 wacom_setup_basic_pro_pen(wacom_wac);
3906 struct wacom_wac *wacom_wac)
3908 struct wacom_features *features = &wacom_wac->features;
3952 if (wacom_wac->shared->touch->product == 0x361) {
3958 else if (wacom_wac->shared->touch->product == 0x360) {
3964 else if (wacom_wac->shared->touch->product == 0x393) {
3994 if (wacom_wac->shared->touch->product == 0x32C ||
3995 wacom_wac->shared->touch->product == 0xF6) {
3998 wacom_wac->has_mute_touch_switch = true;
3999 wacom_wac->is_soft_touch_switch = true;
4108 if (wacom->wacom_wac.features.type == WACOM_21UX2)
4113 if (wacom->wacom_wac.features.type == INTUOSP2_BT)
4126 if (wacom->wacom_wac.features.type == WACOM_24HD)
4179 struct wacom_wac *wacom_wac)
4181 struct wacom_features *features = &wacom_wac->features;
4189 if (features->type == REMOTE && input_dev == wacom_wac->pad_input)