mirror of
https://github.com/torvalds/linux.git
synced 2026-07-31 11:37:06 +02:00
Linux 5.17
-----BEGIN PGP SIGNATURE----- iQFSBAABCAA8FiEEq68RxlopcLEwq+PEeb4+QwBBGIYFAmI3ixkeHHRvcnZhbGRz QGxpbnV4LWZvdW5kYXRpb24ub3JnAAoJEHm+PkMAQRiGjVQIAKSaKOVok/XfIwZu lIBi4khMpPXG/9lrcZeQFy1ZQLO4s0R6EZf/gLZISKZPCc8aufjnftvPhxLM/N8T BGIRjBWro8u8Z6gOC0EWKjUwj0SvbEd3b4ANkBJKOunI/877q4Gb1o6N6x8Ij47X lTQiFJ2ljquD9ZfdnDTJJoyrXkRARfHr5EGyy4WeQur0VTQbfQOmMOTt+DL5hSJO sSv7NFerkXJdfVpXK4iTE5BmAawvjBgPyp3A3wn3XZGf4KVC8DuLPMlddB277XQg 64VoEqC5EpscGlUpBw6BozIGlH5RsEtw9dM6jxWXxSV9jDa4VxPeI8wy3LMy8qL5 ywdIKSk= =iw5F -----END PGP SIGNATURE----- Merge tag 'v5.17' into android-mainline Linux 5.17 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: Ia6886bf705ba2f640ad57bdf097838b16066a7d6
This commit is contained in:
commit
f63f2a5a63
2
Makefile
2
Makefile
|
|
@ -2,7 +2,7 @@
|
|||
VERSION = 5
|
||||
PATCHLEVEL = 17
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc8
|
||||
EXTRAVERSION =
|
||||
NAME = Superb Owl
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
|||
|
|
@ -429,8 +429,23 @@ static int fastop(struct x86_emulate_ctxt *ctxt, fastop_t fop);
|
|||
FOP_END
|
||||
|
||||
/* Special case for SETcc - 1 instruction per cc */
|
||||
|
||||
/*
|
||||
* Depending on .config the SETcc functions look like:
|
||||
*
|
||||
* SETcc %al [3 bytes]
|
||||
* RET [1 byte]
|
||||
* INT3 [1 byte; CONFIG_SLS]
|
||||
*
|
||||
* Which gives possible sizes 4 or 5. When rounded up to the
|
||||
* next power-of-two alignment they become 4 or 8.
|
||||
*/
|
||||
#define SETCC_LENGTH (4 + IS_ENABLED(CONFIG_SLS))
|
||||
#define SETCC_ALIGN (4 << IS_ENABLED(CONFIG_SLS))
|
||||
static_assert(SETCC_LENGTH <= SETCC_ALIGN);
|
||||
|
||||
#define FOP_SETCC(op) \
|
||||
".align 4 \n\t" \
|
||||
".align " __stringify(SETCC_ALIGN) " \n\t" \
|
||||
".type " #op ", @function \n\t" \
|
||||
#op ": \n\t" \
|
||||
#op " %al \n\t" \
|
||||
|
|
@ -1047,7 +1062,7 @@ static int em_bsr_c(struct x86_emulate_ctxt *ctxt)
|
|||
static __always_inline u8 test_cc(unsigned int condition, unsigned long flags)
|
||||
{
|
||||
u8 rc;
|
||||
void (*fop)(void) = (void *)em_setcc + 4 * (condition & 0xf);
|
||||
void (*fop)(void) = (void *)em_setcc + SETCC_ALIGN * (condition & 0xf);
|
||||
|
||||
flags = (flags & EFLAGS_MASK) | X86_EFLAGS_IF;
|
||||
asm("push %[flags]; popf; " CALL_NOSPEC
|
||||
|
|
|
|||
|
|
@ -1787,15 +1787,13 @@ aiptek_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
input_set_abs_params(inputdev, ABS_TILT_Y, AIPTEK_TILT_MIN, AIPTEK_TILT_MAX, 0, 0);
|
||||
input_set_abs_params(inputdev, ABS_WHEEL, AIPTEK_WHEEL_MIN, AIPTEK_WHEEL_MAX - 1, 0, 0);
|
||||
|
||||
/* Verify that a device really has an endpoint */
|
||||
if (intf->cur_altsetting->desc.bNumEndpoints < 1) {
|
||||
err = usb_find_common_endpoints(intf->cur_altsetting,
|
||||
NULL, NULL, &endpoint, NULL);
|
||||
if (err) {
|
||||
dev_err(&intf->dev,
|
||||
"interface has %d endpoints, but must have minimum 1\n",
|
||||
intf->cur_altsetting->desc.bNumEndpoints);
|
||||
err = -EINVAL;
|
||||
"interface has no int in endpoints, but must have minimum 1\n");
|
||||
goto fail3;
|
||||
}
|
||||
endpoint = &intf->cur_altsetting->endpoint[0].desc;
|
||||
|
||||
/* Go set up our URB, which is called when the tablet receives
|
||||
* input.
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ struct point_coord {
|
|||
|
||||
struct touch_event {
|
||||
__le16 status;
|
||||
u8 finger_cnt;
|
||||
u8 finger_mask;
|
||||
u8 time_stamp;
|
||||
struct point_coord point_coord[MAX_SUPPORTED_FINGER_NUM];
|
||||
};
|
||||
|
|
@ -322,11 +322,32 @@ static int zinitix_send_power_on_sequence(struct bt541_ts_data *bt541)
|
|||
static void zinitix_report_finger(struct bt541_ts_data *bt541, int slot,
|
||||
const struct point_coord *p)
|
||||
{
|
||||
u16 x, y;
|
||||
|
||||
if (unlikely(!(p->sub_status &
|
||||
(SUB_BIT_UP | SUB_BIT_DOWN | SUB_BIT_MOVE)))) {
|
||||
dev_dbg(&bt541->client->dev, "unknown finger event %#02x\n",
|
||||
p->sub_status);
|
||||
return;
|
||||
}
|
||||
|
||||
x = le16_to_cpu(p->x);
|
||||
y = le16_to_cpu(p->y);
|
||||
|
||||
input_mt_slot(bt541->input_dev, slot);
|
||||
input_mt_report_slot_state(bt541->input_dev, MT_TOOL_FINGER, true);
|
||||
touchscreen_report_pos(bt541->input_dev, &bt541->prop,
|
||||
le16_to_cpu(p->x), le16_to_cpu(p->y), true);
|
||||
input_report_abs(bt541->input_dev, ABS_MT_TOUCH_MAJOR, p->width);
|
||||
if (input_mt_report_slot_state(bt541->input_dev, MT_TOOL_FINGER,
|
||||
!(p->sub_status & SUB_BIT_UP))) {
|
||||
touchscreen_report_pos(bt541->input_dev,
|
||||
&bt541->prop, x, y, true);
|
||||
input_report_abs(bt541->input_dev,
|
||||
ABS_MT_TOUCH_MAJOR, p->width);
|
||||
dev_dbg(&bt541->client->dev, "finger %d %s (%u, %u)\n",
|
||||
slot, p->sub_status & SUB_BIT_DOWN ? "down" : "move",
|
||||
x, y);
|
||||
} else {
|
||||
dev_dbg(&bt541->client->dev, "finger %d up (%u, %u)\n",
|
||||
slot, x, y);
|
||||
}
|
||||
}
|
||||
|
||||
static irqreturn_t zinitix_ts_irq_handler(int irq, void *bt541_handler)
|
||||
|
|
@ -334,6 +355,7 @@ static irqreturn_t zinitix_ts_irq_handler(int irq, void *bt541_handler)
|
|||
struct bt541_ts_data *bt541 = bt541_handler;
|
||||
struct i2c_client *client = bt541->client;
|
||||
struct touch_event touch_event;
|
||||
unsigned long finger_mask;
|
||||
int error;
|
||||
int i;
|
||||
|
||||
|
|
@ -346,10 +368,14 @@ static irqreturn_t zinitix_ts_irq_handler(int irq, void *bt541_handler)
|
|||
goto out;
|
||||
}
|
||||
|
||||
for (i = 0; i < MAX_SUPPORTED_FINGER_NUM; i++)
|
||||
if (touch_event.point_coord[i].sub_status & SUB_BIT_EXIST)
|
||||
zinitix_report_finger(bt541, i,
|
||||
&touch_event.point_coord[i]);
|
||||
finger_mask = touch_event.finger_mask;
|
||||
for_each_set_bit(i, &finger_mask, MAX_SUPPORTED_FINGER_NUM) {
|
||||
const struct point_coord *p = &touch_event.point_coord[i];
|
||||
|
||||
/* Only process contacts that are actually reported */
|
||||
if (p->sub_status & SUB_BIT_EXIST)
|
||||
zinitix_report_finger(bt541, i, p);
|
||||
}
|
||||
|
||||
input_mt_sync_frame(bt541->input_dev);
|
||||
input_sync(bt541->input_dev);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user