diff -urN linux-5.10-orig/drivers/hid/Kconfig linux-5.10/drivers/hid/Kconfig
--- linux-5.10-orig/drivers/hid/Kconfig	2020-12-14 07:41:30 +0900
+++ linux-5.10/drivers/hid/Kconfig	2022-04-02 13:22:54 +0900
@@ -915,6 +915,20 @@
	help
 	Say Y here if you have a Sony PS2/3/4 accessory and want to enable
 	force feedback support for it.
+
+config SONY_GAMEPAD_TOUCHPAD
+	bool "Support touchpad on Sony PS4 gamepad"
+	depends on HID_SONY
+	default y
+	help
+	Say N to disable support for the touchpad on the DualShock 4
+	controller.  This prevents the touchpad as being recognized as a
+	pointing device and interfering with normal mouse input.  In this
+	case, the touchpad button (pressing down on the touchpad) is
+	reported as an extra controller button, specifically BTN_Z,
+	instead of the left button of the pointing device.
+
+	If unsure, say Y.
 
 config HID_SPEEDLINK
 	tristate "Speedlink VAD Cezanne mouse support"
diff -urN linux-5.10-orig/drivers/hid/hid-sony.c linux-5.10/drivers/hid/hid-sony.c
--- linux-5.10-orig/drivers/hid/hid-sony.c	2020-12-14 07:41:30 +0900
+++ linux-5.10/drivers/hid/hid-sony.c	2022-04-02 13:22:54 +0900
@@ -952,7 +952,9 @@
 
 	/* Second bit of third button byte is for the touchpad button. */
 	offset = data_offset + DS4_INPUT_REPORT_BUTTON_OFFSET;
+#ifdef CONFIG_SONY_GAMEPAD_TOUCHPAD
 	input_report_key(sc->touchpad, BTN_LEFT, rd[offset+2] & 0x2);
+#endif
 
 	/*
 	 * The default behavior of the Dualshock 4 is to send reports using
@@ -1080,6 +1082,7 @@
 	 * The first byte indicates the number of touch data in the report.
 	 * Trackpad data starts 2 bytes later (e.g. 35 for USB).
 	 */
+#ifdef CONFIG_SONY_GAMEPAD_TOUCHPAD
 	offset = data_offset + DS4_INPUT_REPORT_TOUCHPAD_OFFSET;
 	max_touch_data = (sc->quirks & DUALSHOCK4_CONTROLLER_BT) ? 4 : 3;
 	if (rd[offset] > 0 && rd[offset] <= max_touch_data)
@@ -1121,6 +1124,7 @@
 		input_mt_sync_frame(sc->touchpad);
 		input_sync(sc->touchpad);
 	}
+#endif
 }
 
 static void nsg_mrxu_parse_report(struct sony_sc *sc, u8 *rd, int size)
@@ -1148,6 +1152,7 @@
 	 */
 	offset = 1;
 
+#ifdef CONFIG_SONY_GAMEPAD_TOUCHPAD
 	input_report_key(sc->touchpad, BTN_LEFT, rd[offset] & 0x0F);
 	active = (rd[offset] >> 4);
 	relx = (s8) rd[offset+5];
@@ -1195,6 +1200,7 @@
 	input_mt_sync_frame(sc->touchpad);
 
 	input_sync(sc->touchpad);
+#endif
 }
 
 static int sony_raw_event(struct hid_device *hdev, struct hid_report *report,
@@ -1365,6 +1371,7 @@
 	return 0;
 }
 
+#ifdef CONFIG_SONY_GAMEPAD_TOUCHPAD
 static int sony_register_touchpad(struct sony_sc *sc, int touch_count,
 		int w, int h, int touch_major, int touch_minor, int orientation)
 {
@@ -1428,6 +1435,7 @@
 
 	return 0;
 }
+#endif
 
 static int sony_register_sensors(struct sony_sc *sc)
 {
@@ -2741,6 +2749,7 @@
 		 * The Dualshock 4 touchpad supports 2 touches and has a
 		 * resolution of 1920x942 (44.86 dots/mm).
 		 */
+#ifdef CONFIG_SONY_GAMEPAD_TOUCHPAD
 		ret = sony_register_touchpad(sc, 2, 1920, 942, 0, 0, 0);
 		if (ret) {
 			hid_err(sc->hdev,
@@ -2748,6 +2757,7 @@
 			ret);
 			goto err_stop;
 		}
+#endif
 
 		ret = sony_register_sensors(sc);
 		if (ret) {
@@ -2777,6 +2787,7 @@
 		 * The NSG-MRxU touchpad supports 2 touches and has a
 		 * resolution of 1667x1868
 		 */
+#ifdef CONFIG_SONY_GAMEPAD_TOUCHPAD
 		ret = sony_register_touchpad(sc, 2,
 			NSG_MRXU_MAX_X, NSG_MRXU_MAX_Y, 15, 15, 1);
 		if (ret) {
@@ -2785,6 +2796,7 @@
 			ret);
 			goto err_stop;
 		}
+#endif
 
 	} else if (sc->quirks & MOTION_CONTROLLER) {
 		sony_init_output_report(sc, motion_send_output_report);
