linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v12 1/3] HID: quirks: Allow inverting the absolute X/Y values
@ 2021-10-21  9:51 Alistair Francis
  2021-10-21  9:51 ` [PATCH v12 2/3] HID: quirks: Invert X/Y values for rM2 Wacom Alistair Francis
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Alistair Francis @ 2021-10-21  9:51 UTC (permalink / raw)
  To: dmitry.torokhov, shawnguo, s.hauer, benjamin.tissoires
  Cc: linux-imx, jikos, linux-input, devicetree, linux-kernel,
	linux-arm-kernel, alistair23, Alistair Francis

Add a HID_QUIRK_XY_INVERT quirk that can be used to invert the X/Y
values.

Signed-off-by: Alistair Francis <alistair@alistair23.me>
---
 drivers/hid/hid-input.c | 7 +++++++
 include/linux/hid.h     | 1 +
 2 files changed, 8 insertions(+)

diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index 4b5ebeacd283..0a9634473940 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -1328,6 +1328,13 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
 
 	input = field->hidinput->input;
 
+	if (*quirks & HID_QUIRK_XY_INVERT) {
+		if (usage->type == EV_ABS &&
+			(usage->code == ABS_X || usage->code == ABS_Y)) {
+			value = field->logical_maximum - value;
+		}
+	}
+
 	if (usage->hat_min < usage->hat_max || usage->hat_dir) {
 		int hat_dir = usage->hat_dir;
 		if (!hat_dir)
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 9e067f937dbc..a6e91ee5b3de 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -349,6 +349,7 @@ struct hid_item {
 /* BIT(9) reserved for backward compatibility, was NO_INIT_INPUT_REPORTS */
 #define HID_QUIRK_ALWAYS_POLL			BIT(10)
 #define HID_QUIRK_INPUT_PER_APP			BIT(11)
+#define HID_QUIRK_XY_INVERT			BIT(12)
 #define HID_QUIRK_SKIP_OUTPUT_REPORTS		BIT(16)
 #define HID_QUIRK_SKIP_OUTPUT_REPORT_ID		BIT(17)
 #define HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP	BIT(18)
-- 
2.31.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v12 2/3] HID: quirks: Invert X/Y values for rM2 Wacom
  2021-10-21  9:51 [PATCH v12 1/3] HID: quirks: Allow inverting the absolute X/Y values Alistair Francis
@ 2021-10-21  9:51 ` Alistair Francis
  2021-10-21 10:05   ` Benjamin Tissoires
  2021-10-21  9:51 ` [PATCH v12 3/3] ARM: dts: imx7d: remarkable2: add wacom digitizer device Alistair Francis
  2021-10-21  9:58 ` [PATCH v12 1/3] HID: quirks: Allow inverting the absolute X/Y values Benjamin Tissoires
  2 siblings, 1 reply; 5+ messages in thread
From: Alistair Francis @ 2021-10-21  9:51 UTC (permalink / raw)
  To: dmitry.torokhov, shawnguo, s.hauer, benjamin.tissoires
  Cc: linux-imx, jikos, linux-input, devicetree, linux-kernel,
	linux-arm-kernel, alistair23, Alistair Francis

Enable the HID_QUIRK_XY_INVERT quirk for the Wacom digitiser used on the
reMarkable 2.

Signed-off-by: Alistair Francis <alistair@alistair23.me>
---
 drivers/hid/hid-ids.h    | 2 ++
 drivers/hid/hid-quirks.c | 1 +
 2 files changed, 3 insertions(+)

diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 29564b370341..9dc17bf3e550 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -1260,8 +1260,10 @@
 #define USB_DEVICE_ID_VTL_MULTITOUCH_FF3F	0xff3f
 
 #define USB_VENDOR_ID_WACOM		0x056a
+#define USB_VENDOR_ID_WACOM_HID		0x2D1F
 #define USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH	0x81
 #define USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH   0x00BD
+#define I2C_DEVICE_ID_WACOM_REMARKABLE2		0x0095
 
 #define USB_VENDOR_ID_WALTOP				0x172f
 #define USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH	0x0032
diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
index 2e104682c22b..b081af3329a5 100644
--- a/drivers/hid/hid-quirks.c
+++ b/drivers/hid/hid-quirks.c
@@ -186,6 +186,7 @@ static const struct hid_device_id hid_quirks[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD), HID_QUIRK_NOGET },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_KNA5), HID_QUIRK_MULTI_INPUT },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_TWA60), HID_QUIRK_MULTI_INPUT },
+	{ HID_I2C_DEVICE(USB_VENDOR_ID_WACOM_HID, I2C_DEVICE_ID_WACOM_REMARKABLE2), HID_QUIRK_XY_INVERT },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH), HID_QUIRK_MULTI_INPUT },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH), HID_QUIRK_MULTI_INPUT },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET), HID_QUIRK_MULTI_INPUT },
-- 
2.31.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v12 3/3] ARM: dts: imx7d: remarkable2: add wacom digitizer device
  2021-10-21  9:51 [PATCH v12 1/3] HID: quirks: Allow inverting the absolute X/Y values Alistair Francis
  2021-10-21  9:51 ` [PATCH v12 2/3] HID: quirks: Invert X/Y values for rM2 Wacom Alistair Francis
@ 2021-10-21  9:51 ` Alistair Francis
  2021-10-21  9:58 ` [PATCH v12 1/3] HID: quirks: Allow inverting the absolute X/Y values Benjamin Tissoires
  2 siblings, 0 replies; 5+ messages in thread
From: Alistair Francis @ 2021-10-21  9:51 UTC (permalink / raw)
  To: dmitry.torokhov, shawnguo, s.hauer, benjamin.tissoires
  Cc: linux-imx, jikos, linux-input, devicetree, linux-kernel,
	linux-arm-kernel, alistair23, Alistair Francis

Signed-off-by: Alistair Francis <alistair@alistair23.me>
---
 arch/arm/boot/dts/imx7d-remarkable2.dts | 57 +++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/arch/arm/boot/dts/imx7d-remarkable2.dts b/arch/arm/boot/dts/imx7d-remarkable2.dts
index 89cbf13097a4..6059544e7a2d 100644
--- a/arch/arm/boot/dts/imx7d-remarkable2.dts
+++ b/arch/arm/boot/dts/imx7d-remarkable2.dts
@@ -34,6 +34,19 @@ reg_brcm: regulator-brcm {
 		startup-delay-us = <150>;
 	};
 
+	reg_digitizer: regulator-digitizer {
+		compatible = "regulator-fixed";
+		regulator-name = "VDD_3V3_DIGITIZER";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		pinctrl-names = "default", "sleep";
+		pinctrl-0 = <&pinctrl_digitizer_reg>;
+		pinctrl-1 = <&pinctrl_digitizer_reg>;
+		gpio = <&gpio1 6 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+		startup-delay-us = <100000>; /* 100 ms */
+	};
+
 	wifi_pwrseq: wifi_pwrseq {
 		compatible = "mmc-pwrseq-simple";
 		pinctrl-names = "default";
@@ -51,6 +64,24 @@ &clks {
 	assigned-clock-rates = <0>, <32768>;
 };
 
+&i2c1 {
+	clock-frequency = <400000>;
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_i2c1>;
+	status = "okay";
+
+	wacom_digitizer: digitizer@9 {
+		compatible = "hid-over-i2c";
+		reg = <0x09>;
+		hid-descr-addr = <0x01>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&pinctrl_wacom>;
+		interrupt-parent = <&gpio1>;
+		interrupts = <1 IRQ_TYPE_LEVEL_LOW>;
+		vdd-supply = <&reg_digitizer>;
+	};
+};
+
 &snvs_pwrkey {
 	status = "okay";
 };
@@ -117,6 +148,25 @@ &wdog1 {
 	fsl,ext-reset-output;
 };
 
+&iomuxc_lpsr {
+	pinctrl_digitizer_reg: digitizerreggrp {
+		fsl,pins = <
+			/* DIGITIZER_PWR_EN */
+			MX7D_PAD_LPSR_GPIO1_IO06__GPIO1_IO6	0x14
+		>;
+	};
+
+	pinctrl_wacom: wacomgrp {
+		fsl,pins = <
+			/*MX7D_PAD_LPSR_GPIO1_IO05__GPIO1_IO5	0x00000014 FWE */
+			MX7D_PAD_LPSR_GPIO1_IO04__GPIO1_IO4	0x00000074 /* PDCTB */
+			MX7D_PAD_LPSR_GPIO1_IO01__GPIO1_IO1	0x00000034 /* WACOM INT */
+			/*MX7D_PAD_LPSR_GPIO1_IO06__GPIO1_IO6	0x00000014 WACOM PWR ENABLE */
+			/*MX7D_PAD_LPSR_GPIO1_IO00__GPIO1_IO0	0x00000074 WACOM RESET */
+		>;
+	};
+};
+
 &iomuxc {
 	pinctrl_brcm_reg: brcmreggrp {
 		fsl,pins = <
@@ -125,6 +175,13 @@ MX7D_PAD_SAI1_TX_BCLK__GPIO6_IO13	0x14
 		>;
 	};
 
+	pinctrl_i2c1: i2c1grp {
+		fsl,pins = <
+			MX7D_PAD_I2C1_SDA__I2C1_SDA		0x4000007f
+			MX7D_PAD_I2C1_SCL__I2C1_SCL		0x4000007f
+		>;
+	};
+
 	pinctrl_uart1: uart1grp {
 		fsl,pins = <
 			MX7D_PAD_UART1_TX_DATA__UART1_DCE_TX	0x79
-- 
2.31.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v12 1/3] HID: quirks: Allow inverting the absolute X/Y values
  2021-10-21  9:51 [PATCH v12 1/3] HID: quirks: Allow inverting the absolute X/Y values Alistair Francis
  2021-10-21  9:51 ` [PATCH v12 2/3] HID: quirks: Invert X/Y values for rM2 Wacom Alistair Francis
  2021-10-21  9:51 ` [PATCH v12 3/3] ARM: dts: imx7d: remarkable2: add wacom digitizer device Alistair Francis
@ 2021-10-21  9:58 ` Benjamin Tissoires
  2 siblings, 0 replies; 5+ messages in thread
From: Benjamin Tissoires @ 2021-10-21  9:58 UTC (permalink / raw)
  To: Alistair Francis
  Cc: Dmitry Torokhov, Shawn Guo, Sascha Hauer, dl-linux-imx,
	Jiri Kosina, open list:HID CORE LAYER, DTML, lkml, Linux ARM,
	Alistair Francis

On Thu, Oct 21, 2021 at 11:51 AM Alistair Francis
<alistair@alistair23.me> wrote:
>
> Add a HID_QUIRK_XY_INVERT quirk that can be used to invert the X/Y
> values.
>
> Signed-off-by: Alistair Francis <alistair@alistair23.me>
> ---
>  drivers/hid/hid-input.c | 7 +++++++
>  include/linux/hid.h     | 1 +
>  2 files changed, 8 insertions(+)
>
> diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
> index 4b5ebeacd283..0a9634473940 100644
> --- a/drivers/hid/hid-input.c
> +++ b/drivers/hid/hid-input.c
> @@ -1328,6 +1328,13 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
>
>         input = field->hidinput->input;
>
> +       if (*quirks & HID_QUIRK_XY_INVERT) {
> +               if (usage->type == EV_ABS &&
> +                       (usage->code == ABS_X || usage->code == ABS_Y)) {

I think I would prefer to have one quirk per axis if we go this route.

Cheers,
Benjamin

> +                       value = field->logical_maximum - value;
> +               }
> +       }
> +
>         if (usage->hat_min < usage->hat_max || usage->hat_dir) {
>                 int hat_dir = usage->hat_dir;
>                 if (!hat_dir)
> diff --git a/include/linux/hid.h b/include/linux/hid.h
> index 9e067f937dbc..a6e91ee5b3de 100644
> --- a/include/linux/hid.h
> +++ b/include/linux/hid.h
> @@ -349,6 +349,7 @@ struct hid_item {
>  /* BIT(9) reserved for backward compatibility, was NO_INIT_INPUT_REPORTS */
>  #define HID_QUIRK_ALWAYS_POLL                  BIT(10)
>  #define HID_QUIRK_INPUT_PER_APP                        BIT(11)
> +#define HID_QUIRK_XY_INVERT                    BIT(12)
>  #define HID_QUIRK_SKIP_OUTPUT_REPORTS          BIT(16)
>  #define HID_QUIRK_SKIP_OUTPUT_REPORT_ID                BIT(17)
>  #define HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP BIT(18)
> --
> 2.31.1
>


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v12 2/3] HID: quirks: Invert X/Y values for rM2 Wacom
  2021-10-21  9:51 ` [PATCH v12 2/3] HID: quirks: Invert X/Y values for rM2 Wacom Alistair Francis
@ 2021-10-21 10:05   ` Benjamin Tissoires
  0 siblings, 0 replies; 5+ messages in thread
From: Benjamin Tissoires @ 2021-10-21 10:05 UTC (permalink / raw)
  To: Alistair Francis
  Cc: Dmitry Torokhov, Shawn Guo, Sascha Hauer, dl-linux-imx,
	Jiri Kosina, open list:HID CORE LAYER, DTML, lkml, Linux ARM,
	Alistair Francis

On Thu, Oct 21, 2021 at 11:51 AM Alistair Francis
<alistair@alistair23.me> wrote:
>
> Enable the HID_QUIRK_XY_INVERT quirk for the Wacom digitiser used on the
> reMarkable 2.
>
> Signed-off-by: Alistair Francis <alistair@alistair23.me>
> ---
>  drivers/hid/hid-ids.h    | 2 ++
>  drivers/hid/hid-quirks.c | 1 +
>  2 files changed, 3 insertions(+)
>
> diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
> index 29564b370341..9dc17bf3e550 100644
> --- a/drivers/hid/hid-ids.h
> +++ b/drivers/hid/hid-ids.h
> @@ -1260,8 +1260,10 @@
>  #define USB_DEVICE_ID_VTL_MULTITOUCH_FF3F      0xff3f
>
>  #define USB_VENDOR_ID_WACOM            0x056a
> +#define USB_VENDOR_ID_WACOM_HID                0x2D1F
>  #define USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH 0x81
>  #define USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH   0x00BD
> +#define I2C_DEVICE_ID_WACOM_REMARKABLE2                0x0095
>
>  #define USB_VENDOR_ID_WALTOP                           0x172f
>  #define USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH      0x0032
> diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
> index 2e104682c22b..b081af3329a5 100644
> --- a/drivers/hid/hid-quirks.c
> +++ b/drivers/hid/hid-quirks.c
> @@ -186,6 +186,7 @@ static const struct hid_device_id hid_quirks[] = {
>         { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD), HID_QUIRK_NOGET },
>         { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_KNA5), HID_QUIRK_MULTI_INPUT },
>         { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_TWA60), HID_QUIRK_MULTI_INPUT },
> +       { HID_I2C_DEVICE(USB_VENDOR_ID_WACOM_HID, I2C_DEVICE_ID_WACOM_REMARKABLE2), HID_QUIRK_XY_INVERT },

Well, there is no guarantee that this PID will always be installed in
this particular configuration.

Can you instead set the quirk in i2c_hid?:
- retrieve that information from the DT in
drivers/hid/i2c-hid/i2c-hid-of.c (with the generic touchscreen OF
properties)
- amend the signature of i2c_hid_core_probe() to account for extra quirks
- after having allocated the device, add the provided quirks

Then I still need to figure out how we can add tests for the quirk.

Cheers,
Benjamin

>         { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH), HID_QUIRK_MULTI_INPUT },
>         { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH), HID_QUIRK_MULTI_INPUT },
>         { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET), HID_QUIRK_MULTI_INPUT },
> --
> 2.31.1
>


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-10-21 10:05 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-21  9:51 [PATCH v12 1/3] HID: quirks: Allow inverting the absolute X/Y values Alistair Francis
2021-10-21  9:51 ` [PATCH v12 2/3] HID: quirks: Invert X/Y values for rM2 Wacom Alistair Francis
2021-10-21 10:05   ` Benjamin Tissoires
2021-10-21  9:51 ` [PATCH v12 3/3] ARM: dts: imx7d: remarkable2: add wacom digitizer device Alistair Francis
2021-10-21  9:58 ` [PATCH v12 1/3] HID: quirks: Allow inverting the absolute X/Y values Benjamin Tissoires

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).