mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 20:51:44 +00:00
Merge branch 'for-5.15/wacom' into for-linus
This commit is contained in:
commit
2501ce96ec
@ -2287,7 +2287,13 @@ static void wacom_set_shared_values(struct wacom_wac *wacom_wac)
|
|||||||
|
|
||||||
if (wacom_wac->has_mute_touch_switch) {
|
if (wacom_wac->has_mute_touch_switch) {
|
||||||
wacom_wac->shared->has_mute_touch_switch = true;
|
wacom_wac->shared->has_mute_touch_switch = true;
|
||||||
wacom_wac->shared->is_touch_on = true;
|
/* Hardware touch switch may be off. Wait until
|
||||||
|
* we know the switch state to decide is_touch_on.
|
||||||
|
* Softkey state should be initialized to "on" to
|
||||||
|
* match historic default.
|
||||||
|
*/
|
||||||
|
if (wacom_wac->is_soft_touch_switch)
|
||||||
|
wacom_wac->shared->is_touch_on = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wacom_wac->shared->has_mute_touch_switch &&
|
if (wacom_wac->shared->has_mute_touch_switch &&
|
||||||
@ -2791,6 +2797,7 @@ static int wacom_probe(struct hid_device *hdev,
|
|||||||
error);
|
error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wacom_wac->probe_complete = true;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -824,6 +824,13 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool touch_is_muted(struct wacom_wac *wacom_wac)
|
||||||
|
{
|
||||||
|
return wacom_wac->probe_complete &&
|
||||||
|
wacom_wac->shared->has_mute_touch_switch &&
|
||||||
|
!wacom_wac->shared->is_touch_on;
|
||||||
|
}
|
||||||
|
|
||||||
static inline bool report_touch_events(struct wacom_wac *wacom)
|
static inline bool report_touch_events(struct wacom_wac *wacom)
|
||||||
{
|
{
|
||||||
return (touch_arbitration ? !wacom->shared->stylus_in_proximity : 1);
|
return (touch_arbitration ? !wacom->shared->stylus_in_proximity : 1);
|
||||||
@ -1525,11 +1532,8 @@ static int wacom_24hdt_irq(struct wacom_wac *wacom)
|
|||||||
int byte_per_packet = WACOM_BYTES_PER_24HDT_PACKET;
|
int byte_per_packet = WACOM_BYTES_PER_24HDT_PACKET;
|
||||||
int y_offset = 2;
|
int y_offset = 2;
|
||||||
|
|
||||||
if (wacom->shared->has_mute_touch_switch &&
|
if (touch_is_muted(wacom) && !wacom->shared->touch_down)
|
||||||
!wacom->shared->is_touch_on) {
|
return 0;
|
||||||
if (!wacom->shared->touch_down)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wacom->features.type == WACOM_27QHDT) {
|
if (wacom->features.type == WACOM_27QHDT) {
|
||||||
current_num_contacts = data[63];
|
current_num_contacts = data[63];
|
||||||
@ -1987,14 +1991,17 @@ static void wacom_wac_pad_usage_mapping(struct hid_device *hdev,
|
|||||||
features->numbered_buttons++;
|
features->numbered_buttons++;
|
||||||
features->device_type |= WACOM_DEVICETYPE_PAD;
|
features->device_type |= WACOM_DEVICETYPE_PAD;
|
||||||
break;
|
break;
|
||||||
case WACOM_HID_WD_TOUCHONOFF:
|
|
||||||
case WACOM_HID_WD_MUTE_DEVICE:
|
case WACOM_HID_WD_MUTE_DEVICE:
|
||||||
|
/* softkey touch switch */
|
||||||
|
wacom_wac->is_soft_touch_switch = true;
|
||||||
|
fallthrough;
|
||||||
|
case WACOM_HID_WD_TOUCHONOFF:
|
||||||
/*
|
/*
|
||||||
* This usage, which is used to mute touch events, comes
|
* These two usages, which are used to mute touch events, come
|
||||||
* from the pad packet, but is reported on the touch
|
* from the pad packet, but are reported on the touch
|
||||||
* interface. Because the touch interface may not have
|
* interface. Because the touch interface may not have
|
||||||
* been created yet, we cannot call wacom_map_usage(). In
|
* been created yet, we cannot call wacom_map_usage(). In
|
||||||
* order to process this usage when we receive it, we set
|
* order to process the usages when we receive them, we set
|
||||||
* the usage type and code directly.
|
* the usage type and code directly.
|
||||||
*/
|
*/
|
||||||
wacom_wac->has_mute_touch_switch = true;
|
wacom_wac->has_mute_touch_switch = true;
|
||||||
@ -2533,8 +2540,7 @@ static void wacom_wac_finger_slot(struct wacom_wac *wacom_wac,
|
|||||||
bool prox = hid_data->tipswitch &&
|
bool prox = hid_data->tipswitch &&
|
||||||
report_touch_events(wacom_wac);
|
report_touch_events(wacom_wac);
|
||||||
|
|
||||||
if (wacom_wac->shared->has_mute_touch_switch &&
|
if (touch_is_muted(wacom_wac)) {
|
||||||
!wacom_wac->shared->is_touch_on) {
|
|
||||||
if (!wacom_wac->shared->touch_down)
|
if (!wacom_wac->shared->touch_down)
|
||||||
return;
|
return;
|
||||||
prox = false;
|
prox = false;
|
||||||
@ -2548,8 +2554,17 @@ static void wacom_wac_finger_slot(struct wacom_wac *wacom_wac,
|
|||||||
int slot;
|
int slot;
|
||||||
|
|
||||||
slot = input_mt_get_slot_by_key(input, hid_data->id);
|
slot = input_mt_get_slot_by_key(input, hid_data->id);
|
||||||
if (slot < 0)
|
if (slot < 0) {
|
||||||
return;
|
return;
|
||||||
|
} else {
|
||||||
|
struct input_mt_slot *ps = &input->mt->slots[slot];
|
||||||
|
int mt_id = input_mt_get_value(ps, ABS_MT_TRACKING_ID);
|
||||||
|
|
||||||
|
if (!prox && mt_id < 0) {
|
||||||
|
// No data to send for this slot; short-circuit
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
input_mt_slot(input, slot);
|
input_mt_slot(input, slot);
|
||||||
input_mt_report_slot_state(input, MT_TOOL_FINGER, prox);
|
input_mt_report_slot_state(input, MT_TOOL_FINGER, prox);
|
||||||
@ -2581,6 +2596,9 @@ static void wacom_wac_finger_event(struct hid_device *hdev,
|
|||||||
unsigned equivalent_usage = wacom_equivalent_usage(usage->hid);
|
unsigned equivalent_usage = wacom_equivalent_usage(usage->hid);
|
||||||
struct wacom_features *features = &wacom->wacom_wac.features;
|
struct wacom_features *features = &wacom->wacom_wac.features;
|
||||||
|
|
||||||
|
if (touch_is_muted(wacom_wac) && !wacom_wac->shared->touch_down)
|
||||||
|
return;
|
||||||
|
|
||||||
if (wacom_wac->is_invalid_bt_frame)
|
if (wacom_wac->is_invalid_bt_frame)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -2630,6 +2648,9 @@ static void wacom_wac_finger_pre_report(struct hid_device *hdev,
|
|||||||
struct hid_data* hid_data = &wacom_wac->hid_data;
|
struct hid_data* hid_data = &wacom_wac->hid_data;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (touch_is_muted(wacom_wac) && !wacom_wac->shared->touch_down)
|
||||||
|
return;
|
||||||
|
|
||||||
wacom_wac->is_invalid_bt_frame = false;
|
wacom_wac->is_invalid_bt_frame = false;
|
||||||
|
|
||||||
for (i = 0; i < report->maxfield; i++) {
|
for (i = 0; i < report->maxfield; i++) {
|
||||||
@ -2681,6 +2702,10 @@ static void wacom_wac_finger_report(struct hid_device *hdev,
|
|||||||
struct input_dev *input = wacom_wac->touch_input;
|
struct input_dev *input = wacom_wac->touch_input;
|
||||||
unsigned touch_max = wacom_wac->features.touch_max;
|
unsigned touch_max = wacom_wac->features.touch_max;
|
||||||
|
|
||||||
|
/* if there was nothing to process, don't send an empty sync */
|
||||||
|
if (wacom_wac->hid_data.num_expected == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
/* If more packets of data are expected, give us a chance to
|
/* If more packets of data are expected, give us a chance to
|
||||||
* process them rather than immediately syncing a partial
|
* process them rather than immediately syncing a partial
|
||||||
* update.
|
* update.
|
||||||
@ -3835,6 +3860,7 @@ int wacom_setup_touch_input_capabilities(struct input_dev *input_dev,
|
|||||||
input_dev->evbit[0] |= BIT_MASK(EV_SW);
|
input_dev->evbit[0] |= BIT_MASK(EV_SW);
|
||||||
__set_bit(SW_MUTE_DEVICE, input_dev->swbit);
|
__set_bit(SW_MUTE_DEVICE, input_dev->swbit);
|
||||||
wacom_wac->has_mute_touch_switch = true;
|
wacom_wac->has_mute_touch_switch = true;
|
||||||
|
wacom_wac->is_soft_touch_switch = true;
|
||||||
}
|
}
|
||||||
fallthrough;
|
fallthrough;
|
||||||
|
|
||||||
|
@ -337,6 +337,7 @@ struct wacom_wac {
|
|||||||
int tool[2];
|
int tool[2];
|
||||||
int id[2];
|
int id[2];
|
||||||
__u64 serial[2];
|
__u64 serial[2];
|
||||||
|
bool probe_complete;
|
||||||
bool reporting_data;
|
bool reporting_data;
|
||||||
struct wacom_features features;
|
struct wacom_features features;
|
||||||
struct wacom_shared *shared;
|
struct wacom_shared *shared;
|
||||||
@ -352,6 +353,7 @@ struct wacom_wac {
|
|||||||
int mode_value;
|
int mode_value;
|
||||||
struct hid_data hid_data;
|
struct hid_data hid_data;
|
||||||
bool has_mute_touch_switch;
|
bool has_mute_touch_switch;
|
||||||
|
bool is_soft_touch_switch;
|
||||||
bool has_mode_change;
|
bool has_mode_change;
|
||||||
bool is_direct_mode;
|
bool is_direct_mode;
|
||||||
bool is_invalid_bt_frame;
|
bool is_invalid_bt_frame;
|
||||||
|
Loading…
Reference in New Issue
Block a user