* [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 related [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
* [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>
---
| 57 +++++++++++++++++++++++++
1 file changed, 57 insertions(+)
--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 = <®_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 related [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