diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2023-04-01 14:09:51 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2023-04-01 14:09:51 -0700 | 
| commit | 00c7b5f4ddc5b346df62b757ec73f9357bb452af (patch) | |
| tree | 56d2b6a91511432bce1bbbb28bdf8463f0f2532f /drivers | |
| parent | 93e2b01740863cf2f4a58887ac1384e6324b50a2 (diff) | |
| parent | cbedf1a33970c9b825ae75b81fbd3e88e224a418 (diff) | |
Merge tag 'input-for-v6.3-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
Pull input fixes from Dmitry Torokhov:
 - fixes to ALPS and Focaltech PS/2 drivers dealing with the breakage of
   switching to -funsigned-char
 - quirks to i8042 to better handle Lifebook A574/H and TUXEDO devices
 - a quirk to Goodix touchscreen driver to handle Yoga Book X90F
 - a fix for incorrectly merged patch to xpad game controller driver
* tag 'input-for-v6.3-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Input: i8042 - add TUXEDO devices to i8042 quirk tables for partial fix
  Input: alps - fix compatibility with -funsigned-char
  Input: focaltech - use explicitly signed char type
  Input: xpad - fix incorrectly applied patch for MAP_PROFILE_BUTTON
  Input: goodix - add Lenovo Yoga Book X90F to nine_bytes_report DMI table
  Input: i8042 - add quirk for Fujitsu Lifebook A574/H
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/input/joystick/xpad.c | 7 | ||||
| -rw-r--r-- | drivers/input/mouse/alps.c | 16 | ||||
| -rw-r--r-- | drivers/input/mouse/focaltech.c | 8 | ||||
| -rw-r--r-- | drivers/input/serio/i8042-acpipnpio.h | 36 | ||||
| -rw-r--r-- | drivers/input/touchscreen/goodix.c | 14 | 
5 files changed, 63 insertions, 18 deletions
| diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c index f642ec8e92dd..29131f1a2f06 100644 --- a/drivers/input/joystick/xpad.c +++ b/drivers/input/joystick/xpad.c @@ -781,9 +781,6 @@ static void xpad_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *d  	input_report_key(dev, BTN_C, data[8]);  	input_report_key(dev, BTN_Z, data[9]); -	/* Profile button has a value of 0-3, so it is reported as an axis */ -	if (xpad->mapping & MAP_PROFILE_BUTTON) -		input_report_abs(dev, ABS_PROFILE, data[34]);  	input_sync(dev);  } @@ -1061,6 +1058,10 @@ static void xpadone_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char  					(__u16) le16_to_cpup((__le16 *)(data + 8)));  		} +		/* Profile button has a value of 0-3, so it is reported as an axis */ +		if (xpad->mapping & MAP_PROFILE_BUTTON) +			input_report_abs(dev, ABS_PROFILE, data[34]); +  		/* paddle handling */  		/* based on SDL's SDL_hidapi_xboxone.c */  		if (xpad->mapping & MAP_PADDLES) { diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c index 989228b5a0a4..e2c11d9f3868 100644 --- a/drivers/input/mouse/alps.c +++ b/drivers/input/mouse/alps.c @@ -852,8 +852,8 @@ static void alps_process_packet_v6(struct psmouse *psmouse)  			x = y = z = 0;  		/* Divide 4 since trackpoint's speed is too fast */ -		input_report_rel(dev2, REL_X, (char)x / 4); -		input_report_rel(dev2, REL_Y, -((char)y / 4)); +		input_report_rel(dev2, REL_X, (s8)x / 4); +		input_report_rel(dev2, REL_Y, -((s8)y / 4));  		psmouse_report_standard_buttons(dev2, packet[3]); @@ -1104,8 +1104,8 @@ static void alps_process_trackstick_packet_v7(struct psmouse *psmouse)  	    ((packet[3] & 0x20) << 1);  	z = (packet[5] & 0x3f) | ((packet[3] & 0x80) >> 1); -	input_report_rel(dev2, REL_X, (char)x); -	input_report_rel(dev2, REL_Y, -((char)y)); +	input_report_rel(dev2, REL_X, (s8)x); +	input_report_rel(dev2, REL_Y, -((s8)y));  	input_report_abs(dev2, ABS_PRESSURE, z);  	psmouse_report_standard_buttons(dev2, packet[1]); @@ -2294,20 +2294,20 @@ static int alps_get_v3_v7_resolution(struct psmouse *psmouse, int reg_pitch)  	if (reg < 0)  		return reg; -	x_pitch = (char)(reg << 4) >> 4; /* sign extend lower 4 bits */ +	x_pitch = (s8)(reg << 4) >> 4; /* sign extend lower 4 bits */  	x_pitch = 50 + 2 * x_pitch; /* In 0.1 mm units */ -	y_pitch = (char)reg >> 4; /* sign extend upper 4 bits */ +	y_pitch = (s8)reg >> 4; /* sign extend upper 4 bits */  	y_pitch = 36 + 2 * y_pitch; /* In 0.1 mm units */  	reg = alps_command_mode_read_reg(psmouse, reg_pitch + 1);  	if (reg < 0)  		return reg; -	x_electrode = (char)(reg << 4) >> 4; /* sign extend lower 4 bits */ +	x_electrode = (s8)(reg << 4) >> 4; /* sign extend lower 4 bits */  	x_electrode = 17 + x_electrode; -	y_electrode = (char)reg >> 4; /* sign extend upper 4 bits */ +	y_electrode = (s8)reg >> 4; /* sign extend upper 4 bits */  	y_electrode = 13 + y_electrode;  	x_phys = x_pitch * (x_electrode - 1); /* In 0.1 mm units */ diff --git a/drivers/input/mouse/focaltech.c b/drivers/input/mouse/focaltech.c index 6fd5fff0cbff..c74b99077d16 100644 --- a/drivers/input/mouse/focaltech.c +++ b/drivers/input/mouse/focaltech.c @@ -202,8 +202,8 @@ static void focaltech_process_rel_packet(struct psmouse *psmouse,  	state->pressed = packet[0] >> 7;  	finger1 = ((packet[0] >> 4) & 0x7) - 1;  	if (finger1 < FOC_MAX_FINGERS) { -		state->fingers[finger1].x += (char)packet[1]; -		state->fingers[finger1].y += (char)packet[2]; +		state->fingers[finger1].x += (s8)packet[1]; +		state->fingers[finger1].y += (s8)packet[2];  	} else {  		psmouse_err(psmouse, "First finger in rel packet invalid: %d\n",  			    finger1); @@ -218,8 +218,8 @@ static void focaltech_process_rel_packet(struct psmouse *psmouse,  	 */  	finger2 = ((packet[3] >> 4) & 0x7) - 1;  	if (finger2 < FOC_MAX_FINGERS) { -		state->fingers[finger2].x += (char)packet[4]; -		state->fingers[finger2].y += (char)packet[5]; +		state->fingers[finger2].x += (s8)packet[4]; +		state->fingers[finger2].y += (s8)packet[5];  	}  } diff --git a/drivers/input/serio/i8042-acpipnpio.h b/drivers/input/serio/i8042-acpipnpio.h index efc61736099b..028e45bd050b 100644 --- a/drivers/input/serio/i8042-acpipnpio.h +++ b/drivers/input/serio/i8042-acpipnpio.h @@ -611,6 +611,14 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = {  		.driver_data = (void *)(SERIO_QUIRK_NOMUX)  	},  	{ +		/* Fujitsu Lifebook A574/H */ +		.matches = { +			DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), +			DMI_MATCH(DMI_PRODUCT_NAME, "FMVA0501PZ"), +		}, +		.driver_data = (void *)(SERIO_QUIRK_NOMUX) +	}, +	{  		/* Gigabyte M912 */  		.matches = {  			DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), @@ -1117,6 +1125,20 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = {  					SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)  	},  	{ +		/* +		 * Setting SERIO_QUIRK_NOMUX or SERIO_QUIRK_RESET_ALWAYS makes +		 * the keyboard very laggy for ~5 seconds after boot and +		 * sometimes also after resume. +		 * However both are required for the keyboard to not fail +		 * completely sometimes after boot or resume. +		 */ +		.matches = { +			DMI_MATCH(DMI_BOARD_NAME, "N150CU"), +		}, +		.driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | +					SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) +	}, +	{  		.matches = {  			DMI_MATCH(DMI_BOARD_NAME, "NH5xAx"),  		}, @@ -1124,6 +1146,20 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = {  					SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)  	},  	{ +		/* +		 * Setting SERIO_QUIRK_NOMUX or SERIO_QUIRK_RESET_ALWAYS makes +		 * the keyboard very laggy for ~5 seconds after boot and +		 * sometimes also after resume. +		 * However both are required for the keyboard to not fail +		 * completely sometimes after boot or resume. +		 */ +		.matches = { +			DMI_MATCH(DMI_BOARD_NAME, "NHxxRZQ"), +		}, +		.driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | +					SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) +	}, +	{  		.matches = {  			DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"),  		}, diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen/goodix.c index b348172f19c3..d77f116680a0 100644 --- a/drivers/input/touchscreen/goodix.c +++ b/drivers/input/touchscreen/goodix.c @@ -124,10 +124,18 @@ static const unsigned long goodix_irq_flags[] = {  static const struct dmi_system_id nine_bytes_report[] = {  #if defined(CONFIG_DMI) && defined(CONFIG_X86)  	{ -		.ident = "Lenovo YogaBook", -		/* YB1-X91L/F and YB1-X90L/F */ +		/* Lenovo Yoga Book X90F / X90L */  		.matches = { -			DMI_MATCH(DMI_PRODUCT_NAME, "Lenovo YB1-X9") +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Intel Corporation"), +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "CHERRYVIEW D1 PLATFORM"), +			DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "YETI-11"), +		} +	}, +	{ +		/* Lenovo Yoga Book X91F / X91L */ +		.matches = { +			/* Non exact match to match F + L versions */ +			DMI_MATCH(DMI_PRODUCT_NAME, "Lenovo YB1-X91"),  		}  	},  #endif | 
