Linux Input/HID development
 help / color / mirror / Atom feed
* Re: [PATCH] HID: quirks: Add quirk for Logitech G923 Xbox steering wheel
From: Walt Holman @ 2023-01-27 22:06 UTC (permalink / raw)
  To: linux-input, linux-kernel, Mattijs Korpershoek
In-Reply-To: <823df262-aa1d-4340-666f-07b991fce64b@gmail.com>

On 1/27/23 16:03, Walt Holman wrote:
> Hello,
> 
> This patch adds support for the Logitech G923 Xbox edition steering
> wheel.
> 
> -Walt
> 
> diff -uprN linux-master-source/drivers/hid/hid-ids.h linux-master-target/drivers/hid/hid-ids.h
> --- linux-master-source/drivers/hid/hid-ids.h    2023-01-27 15:18:14.000000000 -0600
> +++ linux-master-target/drivers/hid/hid-ids.h    2023-01-27 15:50:24.077639994 -0600
> @@ -819,6 +819,7 @@
>   #define USB_DEVICE_ID_LOGITECH_G510_USB_AUDIO    0xc22e
>   #define USB_DEVICE_ID_LOGITECH_G29_WHEEL    0xc24f
>   #define USB_DEVICE_ID_LOGITECH_G920_WHEEL    0xc262
> +#define USB_DEVICE_ID_LOGITECH_G923_XBOX_WHEEL    0xc26e
>   #define USB_DEVICE_ID_LOGITECH_WINGMAN_F3D    0xc283
>   #define USB_DEVICE_ID_LOGITECH_FORCE3D_PRO    0xc286
>   #define USB_DEVICE_ID_LOGITECH_FLIGHT_SYSTEM_G940    0xc287
> diff -uprN linux-master-source/drivers/hid/hid-logitech-hidpp.c linux-master-target/drivers/hid/hid-logitech-hidpp.c
> --- linux-master-source/drivers/hid/hid-logitech-hidpp.c    2023-01-27 15:18:14.000000000 -0600
> +++ linux-master-target/drivers/hid/hid-logitech-hidpp.c    2023-01-27 15:50:24.077639994 -0600
> @@ -4347,6 +4347,9 @@ static const struct hid_device_id hidpp_
>       { /* Logitech G920 Wheel over USB */
>         HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G920_WHEEL),
>           .driver_data = HIDPP_QUIRK_CLASS_G920 | HIDPP_QUIRK_FORCE_OUTPUT_REPORTS},
> +    { /* Logitech G923 Wheel (Xbox version) over USB */
> +      HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G923_XBOX_WHEEL),
> +        .driver_data = HIDPP_QUIRK_CLASS_G920 | HIDPP_QUIRK_FORCE_OUTPUT_REPORTS },
>       { /* Logitech G Pro Gaming Mouse over USB */
>         HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, 0xC088) },
> 
Signed off by: Walt Holman (waltholman09@gmail.com)


^ permalink raw reply

* [PATCH v2 0/2] Miscellaneous fixes for Azoteq IQS626A
From: Jeff LaBundy @ 2023-01-27 22:28 UTC (permalink / raw)
  To: dmitry.torokhov, robh+dt; +Cc: linux-input, devicetree, jeff

This series addresses a fwnode_handle reference count leak. Tightly
coupled with this logic is that behind the discussion in [1], where
it was pointed out that two properties in question have different
types across bindings for the same vendor.

Addressing the latter in fact simplifies the former; therefore both
changes are introduced in patch [1/2]. As there are no known users
of this driver, it is safe to change the binding in this way.

Patch [2/2] makes the corresponding documentation change and carries
a fixes tag so that it accompanies patch [1/2] into stable releases.

[1] https://patchwork.kernel.org/patch/13116327/

Jeff LaBundy (2):
  Input: iqs626a - drop unused device node references
  dt-bindings: input: iqs626a: Redefine trackpad property types

 .../devicetree/bindings/input/iqs626a.yaml    |  94 ++++++++---
 drivers/input/misc/iqs626a.c                  | 156 ++++++++----------
 2 files changed, 140 insertions(+), 110 deletions(-)

-- 
2.34.1


^ permalink raw reply

* [PATCH v2 1/2] Input: iqs626a - drop unused device node references
From: Jeff LaBundy @ 2023-01-27 22:29 UTC (permalink / raw)
  To: dmitry.torokhov, robh+dt; +Cc: linux-input, devicetree, jeff
In-Reply-To: <Y9RQCQa69f3TaiWf@nixie71>

Each call to device/fwnode_get_named_child_node() must be matched
with a call to fwnode_handle_put() once the corresponding node is
no longer in use. This ensures a reference count remains balanced
in the case of dynamic device tree support.

Currently, the driver never calls fwnode_handle_put(); this patch
adds the missing calls. Because fwnode_handle_put() does not take
a const *fwnode_handle, the const qualifier is removed across all
corresponding *fwnode_handle instances.

As part of this change, trackpad channel touch thresholds and ATI
base values are now specified under single trackpad channel child
nodes. This enhancement moves both properties to scalar values as
opposed to arrays, making their types consistent across bindings.

Fixes: f1d2809de97a ("Input: Add support for Azoteq IQS626A")
Signed-off-by: Jeff LaBundy <jeff@labundy.com>
---
Changes in v2:
 - Added support for trackpad channel child nodes and removed logic that
   parsed former trackpad touch threshold and ATI base arrays

 drivers/input/misc/iqs626a.c | 156 ++++++++++++++++-------------------
 1 file changed, 73 insertions(+), 83 deletions(-)

diff --git a/drivers/input/misc/iqs626a.c b/drivers/input/misc/iqs626a.c
index 4727e6b95e41..90f997a905b5 100644
--- a/drivers/input/misc/iqs626a.c
+++ b/drivers/input/misc/iqs626a.c
@@ -458,18 +458,15 @@ struct iqs626_private {
 
 static noinline_for_stack int
 iqs626_parse_events(struct iqs626_private *iqs626,
-		    const struct fwnode_handle *ch_node,
-		    enum iqs626_ch_id ch_id)
+		    struct fwnode_handle *ch_node, enum iqs626_ch_id ch_id)
 {
 	struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg;
 	struct i2c_client *client = iqs626->client;
-	const struct fwnode_handle *ev_node;
+	struct fwnode_handle *ev_node;
 	const char *ev_name;
 	u8 *thresh, *hyst;
-	unsigned int thresh_tp[IQS626_NUM_CH_TP_3];
 	unsigned int val;
-	int num_ch = iqs626_channels[ch_id].num_ch;
-	int error, i, j;
+	int i;
 
 	switch (ch_id) {
 	case IQS626_CH_ULP_0:
@@ -509,7 +506,7 @@ iqs626_parse_events(struct iqs626_private *iqs626,
 			 * Trackpad touch events are simply described under the
 			 * trackpad child node.
 			 */
-			ev_node = ch_node;
+			ev_node = fwnode_handle_get(ch_node);
 		} else {
 			ev_name = iqs626_events[i].name;
 			ev_node = fwnode_get_named_child_node(ch_node, ev_name);
@@ -533,6 +530,7 @@ iqs626_parse_events(struct iqs626_private *iqs626,
 					dev_err(&client->dev,
 						"Invalid input type: %u\n",
 						val);
+					fwnode_handle_put(ev_node);
 					return -EINVAL;
 				}
 
@@ -547,6 +545,7 @@ iqs626_parse_events(struct iqs626_private *iqs626,
 				dev_err(&client->dev,
 					"Invalid %s channel hysteresis: %u\n",
 					fwnode_get_name(ch_node), val);
+				fwnode_handle_put(ev_node);
 				return -EINVAL;
 			}
 
@@ -567,6 +566,7 @@ iqs626_parse_events(struct iqs626_private *iqs626,
 				dev_err(&client->dev,
 					"Invalid %s channel threshold: %u\n",
 					fwnode_get_name(ch_node), val);
+				fwnode_handle_put(ev_node);
 				return -EINVAL;
 			}
 
@@ -574,32 +574,9 @@ iqs626_parse_events(struct iqs626_private *iqs626,
 				*thresh = val;
 			else
 				*(thresh + iqs626_events[i].th_offs) = val;
-
-			continue;
-		}
-
-		if (!fwnode_property_present(ev_node, "azoteq,thresh"))
-			continue;
-
-		error = fwnode_property_read_u32_array(ev_node, "azoteq,thresh",
-						       thresh_tp, num_ch);
-		if (error) {
-			dev_err(&client->dev,
-				"Failed to read %s channel thresholds: %d\n",
-				fwnode_get_name(ch_node), error);
-			return error;
 		}
 
-		for (j = 0; j < num_ch; j++) {
-			if (thresh_tp[j] > IQS626_CHx_THRESH_MAX) {
-				dev_err(&client->dev,
-					"Invalid %s channel threshold: %u\n",
-					fwnode_get_name(ch_node), thresh_tp[j]);
-				return -EINVAL;
-			}
-
-			sys_reg->tp_grp_reg.ch_reg_tp[j].thresh = thresh_tp[j];
-		}
+		fwnode_handle_put(ev_node);
 	}
 
 	return 0;
@@ -607,16 +584,13 @@ iqs626_parse_events(struct iqs626_private *iqs626,
 
 static noinline_for_stack int
 iqs626_parse_ati_target(struct iqs626_private *iqs626,
-			const struct fwnode_handle *ch_node,
-			enum iqs626_ch_id ch_id)
+			struct fwnode_handle *ch_node, enum iqs626_ch_id ch_id)
 {
 	struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg;
 	struct i2c_client *client = iqs626->client;
-	unsigned int ati_base[IQS626_NUM_CH_TP_3];
 	unsigned int val;
 	u8 *ati_target;
-	int num_ch = iqs626_channels[ch_id].num_ch;
-	int error, i;
+	int i;
 
 	switch (ch_id) {
 	case IQS626_CH_ULP_0:
@@ -683,40 +657,13 @@ iqs626_parse_ati_target(struct iqs626_private *iqs626,
 
 		*ati_target &= ~IQS626_CHx_ATI_BASE_MASK;
 		*ati_target |= val;
-
-		return 0;
-	}
-
-	if (!fwnode_property_present(ch_node, "azoteq,ati-base"))
-		return 0;
-
-	error = fwnode_property_read_u32_array(ch_node, "azoteq,ati-base",
-					       ati_base, num_ch);
-	if (error) {
-		dev_err(&client->dev,
-			"Failed to read %s channel ATI bases: %d\n",
-			fwnode_get_name(ch_node), error);
-		return error;
-	}
-
-	for (i = 0; i < num_ch; i++) {
-		if (ati_base[i] < IQS626_TPx_ATI_BASE_MIN ||
-		    ati_base[i] > IQS626_TPx_ATI_BASE_MAX) {
-			dev_err(&client->dev,
-				"Invalid %s channel ATI base: %u\n",
-				fwnode_get_name(ch_node), ati_base[i]);
-			return -EINVAL;
-		}
-
-		ati_base[i] -= IQS626_TPx_ATI_BASE_MIN;
-		sys_reg->tp_grp_reg.ch_reg_tp[i].ati_base = ati_base[i];
 	}
 
 	return 0;
 }
 
 static int iqs626_parse_pins(struct iqs626_private *iqs626,
-			     const struct fwnode_handle *ch_node,
+			     struct fwnode_handle *ch_node,
 			     const char *propname, u8 *enable)
 {
 	struct i2c_client *client = iqs626->client;
@@ -764,13 +711,14 @@ static int iqs626_parse_pins(struct iqs626_private *iqs626,
 }
 
 static int iqs626_parse_trackpad(struct iqs626_private *iqs626,
-				 const struct fwnode_handle *ch_node)
+				 struct fwnode_handle *ch_node,
+				 enum iqs626_ch_id ch_id)
 {
 	struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg;
 	struct i2c_client *client = iqs626->client;
 	u8 *hyst = &sys_reg->tp_grp_reg.hyst;
+	int error, count, i;
 	unsigned int val;
-	int error, count;
 
 	if (!fwnode_property_read_u32(ch_node, "azoteq,lta-update", &val)) {
 		if (val > IQS626_MISC_A_TPx_LTA_UPDATE_MAX) {
@@ -823,6 +771,48 @@ static int iqs626_parse_trackpad(struct iqs626_private *iqs626,
 		*hyst |= (val << IQS626_FILT_STR_LP_TPx_SHIFT);
 	}
 
+	for (i = 0; i < iqs626_channels[ch_id].num_ch; i++) {
+		u8 *ati_base = &sys_reg->tp_grp_reg.ch_reg_tp[i].ati_base;
+		u8 *thresh = &sys_reg->tp_grp_reg.ch_reg_tp[i].thresh;
+		struct fwnode_handle *tc_node;
+		char tc_name[10];
+
+		snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
+
+		tc_node = fwnode_get_named_child_node(ch_node, tc_name);
+		if (!tc_node)
+			continue;
+
+		if (!fwnode_property_read_u32(tc_node, "azoteq,ati-base",
+					      &val)) {
+			if (val < IQS626_TPx_ATI_BASE_MIN ||
+			    val > IQS626_TPx_ATI_BASE_MAX) {
+				dev_err(&client->dev,
+					"Invalid %s %s ATI base: %u\n",
+					fwnode_get_name(ch_node), tc_name, val);
+				fwnode_handle_put(tc_node);
+				return -EINVAL;
+			}
+
+			*ati_base = val - IQS626_TPx_ATI_BASE_MIN;
+		}
+
+		if (!fwnode_property_read_u32(tc_node, "azoteq,thresh",
+					      &val)) {
+			if (val > IQS626_CHx_THRESH_MAX) {
+				dev_err(&client->dev,
+					"Invalid %s %s threshold: %u\n",
+					fwnode_get_name(ch_node), tc_name, val);
+				fwnode_handle_put(tc_node);
+				return -EINVAL;
+			}
+
+			*thresh = val;
+		}
+
+		fwnode_handle_put(tc_node);
+	}
+
 	if (!fwnode_property_present(ch_node, "linux,keycodes"))
 		return 0;
 
@@ -889,8 +879,7 @@ static int iqs626_parse_trackpad(struct iqs626_private *iqs626,
 
 static noinline_for_stack int
 iqs626_parse_channel(struct iqs626_private *iqs626,
-		     const struct fwnode_handle *ch_node,
-		     enum iqs626_ch_id ch_id)
+		     struct fwnode_handle *ch_node, enum iqs626_ch_id ch_id)
 {
 	struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg;
 	struct i2c_client *client = iqs626->client;
@@ -924,6 +913,20 @@ iqs626_parse_channel(struct iqs626_private *iqs626,
 		return -EINVAL;
 	}
 
+	error = iqs626_parse_ati_target(iqs626, ch_node, ch_id);
+	if (error)
+		return error;
+
+	error = iqs626_parse_events(iqs626, ch_node, ch_id);
+	if (error)
+		return error;
+
+	if (!fwnode_property_present(ch_node, "azoteq,ati-exclude"))
+		sys_reg->redo_ati |= iqs626_channels[ch_id].active;
+
+	if (!fwnode_property_present(ch_node, "azoteq,reseed-disable"))
+		sys_reg->reseed |= iqs626_channels[ch_id].active;
+
 	*engine |= IQS626_CHx_ENG_0_MEAS_CAP_SIZE;
 	if (fwnode_property_present(ch_node, "azoteq,meas-cap-decrease"))
 		*engine &= ~IQS626_CHx_ENG_0_MEAS_CAP_SIZE;
@@ -1057,7 +1060,7 @@ iqs626_parse_channel(struct iqs626_private *iqs626,
 		*(engine + 1) |= IQS626_CHx_ENG_1_ATI_BAND_TIGHTEN;
 
 	if (ch_id == IQS626_CH_TP_2 || ch_id == IQS626_CH_TP_3)
-		return iqs626_parse_trackpad(iqs626, ch_node);
+		return iqs626_parse_trackpad(iqs626, ch_node, ch_id);
 
 	if (ch_id == IQS626_CH_ULP_0) {
 		sys_reg->ch_reg_ulp.hyst &= ~IQS626_ULP_PROJ_ENABLE;
@@ -1378,23 +1381,10 @@ static int iqs626_parse_prop(struct iqs626_private *iqs626)
 			continue;
 
 		error = iqs626_parse_channel(iqs626, ch_node, i);
+		fwnode_handle_put(ch_node);
 		if (error)
 			return error;
 
-		error = iqs626_parse_ati_target(iqs626, ch_node, i);
-		if (error)
-			return error;
-
-		error = iqs626_parse_events(iqs626, ch_node, i);
-		if (error)
-			return error;
-
-		if (!fwnode_property_present(ch_node, "azoteq,ati-exclude"))
-			sys_reg->redo_ati |= iqs626_channels[i].active;
-
-		if (!fwnode_property_present(ch_node, "azoteq,reseed-disable"))
-			sys_reg->reseed |= iqs626_channels[i].active;
-
 		sys_reg->active |= iqs626_channels[i].active;
 	}
 
-- 
2.34.1


^ permalink raw reply related

* [PATCH v2 2/2] dt-bindings: input: iqs626a: Redefine trackpad property types
From: Jeff LaBundy @ 2023-01-27 22:30 UTC (permalink / raw)
  To: dmitry.torokhov, robh+dt; +Cc: linux-input, devicetree, jeff
In-Reply-To: <Y9RQCQa69f3TaiWf@nixie71>

Following a recent refactor of the driver to properly drop unused
device nodes, the driver expects trackpad channel touch thresholds
and ATI base values to be specified under single trackpad channel
child nodes.

This enhancement moves both properties to scalar values as opposed
to arrays, making their types consistent across bindings.

Fixes: a8f1f0dc865c ("dt-bindings: input: Add bindings for Azoteq IQS626A")
Signed-off-by: Jeff LaBundy <jeff@labundy.com>
---
Changes in v2:
 - Added to series

 .../devicetree/bindings/input/iqs626a.yaml    | 94 +++++++++++++------
 1 file changed, 67 insertions(+), 27 deletions(-)

diff --git a/Documentation/devicetree/bindings/input/iqs626a.yaml b/Documentation/devicetree/bindings/input/iqs626a.yaml
index 7a27502095f3..e424d67b0542 100644
--- a/Documentation/devicetree/bindings/input/iqs626a.yaml
+++ b/Documentation/devicetree/bindings/input/iqs626a.yaml
@@ -564,16 +564,6 @@ patternProperties:
           2: Partial
           3: Full
 
-      azoteq,ati-base:
-        $ref: /schemas/types.yaml#/definitions/uint32-array
-        minItems: 6
-        maxItems: 9
-        items:
-          minimum: 45
-          maximum: 300
-        default: [45, 45, 45, 45, 45, 45, 45, 45, 45]
-        description: Specifies each individual trackpad channel's ATI base.
-
       azoteq,ati-target:
         $ref: /schemas/types.yaml#/definitions/uint32
         multipleOf: 32
@@ -620,17 +610,6 @@ patternProperties:
         description:
           Tightens the ATI band from 1/8 to 1/16 of the desired target.
 
-      azoteq,thresh:
-        $ref: /schemas/types.yaml#/definitions/uint32-array
-        minItems: 6
-        maxItems: 9
-        items:
-          minimum: 0
-          maximum: 255
-        default: [0, 0, 0, 0, 0, 0, 0, 0, 0]
-        description:
-          Specifies each individual trackpad channel's touch threshold.
-
       azoteq,hyst:
         $ref: /schemas/types.yaml#/definitions/uint32
         minimum: 0
@@ -720,6 +699,28 @@ patternProperties:
           Specifies the number of points across which an axial gesture must
           travel in order to be interpreted as a flick or swipe.
 
+    patternProperties:
+      "^channel-[0-8]$":
+        type: object
+        description: Represents a single trackpad channel.
+
+        properties:
+          azoteq,thresh:
+            $ref: /schemas/types.yaml#/definitions/uint32
+            minimum: 0
+            maximum: 255
+            default: 0
+            description: Specifies the threshold for the channel.
+
+          azoteq,ati-base:
+            $ref: /schemas/types.yaml#/definitions/uint32
+            minimum: 45
+            maximum: 300
+            default: 45
+            description: Specifies the channel's ATI base.
+
+        additionalProperties: false
+
     dependencies:
       azoteq,gesture-swipe: ["linux,keycodes"]
       azoteq,timeout-tap-ms: ["linux,keycodes"]
@@ -780,14 +781,8 @@ examples:
                             azoteq,filt-str-lp-cnt = <1>;
 
                             azoteq,hyst = <4>;
-                            azoteq,thresh = <35>, <40>, <40>,
-                                            <38>, <33>, <38>,
-                                            <35>, <35>, <35>;
 
                             azoteq,ati-mode = <3>;
-                            azoteq,ati-base = <195>, <195>, <195>,
-                                              <195>, <195>, <195>,
-                                              <195>, <195>, <195>;
                             azoteq,ati-target = <512>;
 
                             azoteq,proj-bias = <1>;
@@ -804,6 +799,51 @@ examples:
                             azoteq,timeout-swipe-ms = <800>;
                             azoteq,timeout-tap-ms = <400>;
                             azoteq,thresh-swipe = <40>;
+
+                            channel-0 {
+                                    azoteq,thresh = <35>;
+                                    azoteq,ati-base = <195>;
+                            };
+
+                            channel-1 {
+                                    azoteq,thresh = <40>;
+                                    azoteq,ati-base = <195>;
+                            };
+
+                            channel-2 {
+                                    azoteq,thresh = <40>;
+                                    azoteq,ati-base = <195>;
+                            };
+
+                            channel-3 {
+                                    azoteq,thresh = <38>;
+                                    azoteq,ati-base = <195>;
+                            };
+
+                            channel-4 {
+                                    azoteq,thresh = <33>;
+                                    azoteq,ati-base = <195>;
+                            };
+
+                            channel-5 {
+                                    azoteq,thresh = <38>;
+                                    azoteq,ati-base = <195>;
+                            };
+
+                            channel-6 {
+                                    azoteq,thresh = <35>;
+                                    azoteq,ati-base = <195>;
+                            };
+
+                            channel-7 {
+                                    azoteq,thresh = <35>;
+                                    azoteq,ati-base = <195>;
+                            };
+
+                            channel-8 {
+                                    azoteq,thresh = <35>;
+                                    azoteq,ati-base = <195>;
+                            };
                     };
 
                     /*
-- 
2.34.1


^ permalink raw reply related

* Re: [PATCH] dt-bindings: input: azoteq: Fix differing types
From: Jeff LaBundy @ 2023-01-27 22:37 UTC (permalink / raw)
  To: Rob Herring
  Cc: Dmitry Torokhov, Krzysztof Kozlowski, linux-input, devicetree,
	linux-kernel
In-Reply-To: <CAL_JsqJACct1J2T357V6CSQWsRP1P7bFpNCmippbYf2rYdd2Rw@mail.gmail.com>

Hi Rob,

On Wed, Jan 25, 2023 at 09:10:33PM -0600, Rob Herring wrote:
> On Wed, Jan 25, 2023 at 7:51 PM Jeff LaBundy <jeff@labundy.com> wrote:
> >
> > Hi Rob,
> >
> > On Wed, Jan 25, 2023 at 04:14:16PM -0600, Rob Herring wrote:
> > > 'azoteq,ati-base' and 'azoteq,thresh' properties are defined in multiple
> > > bindings, but have differing types defined. Both 'uint32' and
> > > 'uint32-array' are used. Unify these to use 'uint32-array' everywhere.
> > >
> > > Signed-off-by: Rob Herring <robh@kernel.org>
> >
> > Thank you for the patch. While this is a step forward in moving toward
> > a common binding for this vendor like we have discussed in the past, I
> > do not agree with this approach and will instead propose an alternative
> > that accomplishes the same goal.
> >
> > For all of these devices, a single sensing channel takes a base and a
> > threshold property. IQS626A is unique in that a fixed number of channels
> > form a trackpad, and I decided at the time to simply define the base and
> > target properties for all channels as a uint32-array.
> >
> > For all other existing drivers, as well as others coming down the pipe,
> > base and threshold are uint32s. I find it confusing to redefine all of
> > those as single-element arrays, especially on account of one device.
> >
> > In hindsight, a better design would have been to define a child node
> > for each channel under the trackpad node, with each child node accepting
> > a uint32 base and threshold. That would follow other devices, be more
> > representative of the actual hardware, and keep the definitions the same
> > across each binding.
> >
> > So, that's what I propose to do here instead. I happen to have a fix in
> > review [1] that addresses a bug related to this parsing code, and would
> > be happy to build this solution on top assuming it can wait until the
> > next cycle. Does this compromise sound OK?
> 
> Shrug
> 
> How exactly are you going to change an existing property and not break
> existing users? Or are there not any users?

There are no known users at this time.

> 
> We have the same properties with 2 definitions. At the end of the day,
> I just want to fix that...

Agreed on all counts. I've folded my proposal into the existing fix for
this driver and sent [1] for your consideration.

[1] https://patchwork.kernel.org/patch/13119464/

> 
> Rob

Kind regards,
Jeff LaBundy

^ permalink raw reply

* Re: [PATCH 00/16] Input: Switch to new PM macros set 3
From: Dmitry Torokhov @ 2023-01-27 22:50 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: linux-input, Jonathan Cameron, Hans de Goede, Caleb Connolly,
	Andi Shyti, Matthias Schiffer, Lyude Paul, Andrew Duggan,
	Michael Hennerich, Javier Martinez Canillas, Linus Walleij
In-Reply-To: <20230114171620.42891-1-jic23@kernel.org>

On Sat, Jan 14, 2023 at 05:16:04PM +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> 
> Continuation of
> https://lore.kernel.org/all/20230102181842.718010-1-jic23@kernel.org/
> 
> This time we have most of the remaining drivers where the changes needed
> are more complex than the earlier straight conversions.
> 
> A separate series will deal with pm80x as the cleanup for that will
> extend to MFD and RTC trees and cannot easily be broken up due to
> some changes in exports.
> 
> There is a general mixture of cases in here:
> 1) More complex direct conversions - typically drivers with separate
>    sleep and runtime pm ops.
> 2) Cases where the callbacks or struct dev_pm_ops is exported to
>    multiple modules.
> 3) Refactors that avoid duplication of callbacks or exports.
> 4) A tweak to the core input handling to use the new macros - this
>    is different from the driver changes, but seemed sensible.
> 
> Note there are a few cases in here where I a much more minimal
> set of callbacks is provided than DEFINE_SIMPLE_DEV_PM_OPS() and
> friends would set. I don't know the history behind those so whilst
> they might well be fine converted to the generic macros, I've
> left them alone.

Applied the lot, thank you.

-- 
Dmitry

^ permalink raw reply

* Re: [PATCH] Input: ipaq-micro-ts - fix DEFINE_SIMPLE_DEV_PM_OPS typo
From: Dmitry Torokhov @ 2023-01-27 22:52 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Jonathan Cameron, Linus Walleij, Arnd Bergmann, linux-input,
	linux-kernel
In-Reply-To: <20230117164539.1631336-1-arnd@kernel.org>

On Tue, Jan 17, 2023 at 05:45:33PM +0100, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd@arndb.de>
> 
> The previous change was not properly build tested and needs
> a trivial spelling change:
> 
> ipaq-micro-ts.c:146:8: error: type defaults to 'int' in declaration of 'DEFINE_SIMPLE_DEV_PM' [-Werror=implicit-int]
> 
> Fixes: 144ff5e03d74 ("Input: ipaq-micro-ts - use DEFINE_SIMPLE_DEV_PM_OPS() and pm_sleep_ptr()")
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Applied, thank you.

-- 
Dmitry

^ permalink raw reply

* Re: [PATCH] Input: xpad - add 8BitDo Pro 2 Wired Controller support
From: Dmitry Torokhov @ 2023-01-27 22:58 UTC (permalink / raw)
  To: John Butler; +Cc: linux-input
In-Reply-To: <20230124005206.80706-1-radon86dev@gmail.com>

On Tue, Jan 24, 2023 at 12:52:06AM +0000, John Butler wrote:
> Add VID and PID to the xpad_device table to allow driver
> to use the 8BitDo Pro 2 Wired Controller, which is
> XTYPE_XBOX360 compatible by default.
> 
> Signed-off-by: John Butler <radon86dev@gmail.com>
> Cc: linux-input@vger.kernel.org

Applied, thank you.

-- 
Dmitry

^ permalink raw reply

* [PATCH] HID: apple: Set the tilde quirk flag on the Geyser 4 and later
From: Alex Henrie @ 2023-01-28  1:59 UTC (permalink / raw)
  To: linux-input, jkosina; +Cc: Alex Henrie

I recently tested several old MacBooks and as far as I can tell, all
MacBooks that have an ISO keyboard have the tilde key quirk:

Product    Model  Year  CPU    Shape  Labels     Country  Quirky
================================================================
05ac:021b  A1181  2006  T5600  ISO    British    13       Yes
05ac:021b  A1181  2007  T7200  ISO    Québécois  13       Yes
05ac:0229  A1181  2007  T8300  ANSI   Usonian    33       No
05ac:022a  A1181  2007  T8100  ISO    English    13       Yes
05ac:022a  A1181  2007  P7350  ISO    Québécois  13       Yes
05ac:0237  A1278  2008  P7350  ISO    Dutch      13       Yes
05ac:0237  A1278  2009  P7550  ISO    British    13       Yes

The model number and year are from the laptop case. Since Apple printed
the same model and year on many different laptops, the CPU is a more
precise identifier.

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
---
 drivers/hid/hid-apple.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c
index 1ccab8aa326c..5c145775482b 100644
--- a/drivers/hid/hid-apple.c
+++ b/drivers/hid/hid-apple.c
@@ -882,7 +882,8 @@ static const struct hid_device_id apple_devices[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ANSI),
 		.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ISO),
-		.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
+		.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
+			APPLE_ISO_TILDE_QUIRK },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS),
 		.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
 			APPLE_RDESC_JIS },
@@ -901,7 +902,8 @@ static const struct hid_device_id apple_devices[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI),
 		.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO),
-		.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
+		.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
+			APPLE_ISO_TILDE_QUIRK },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS),
 		.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
 			APPLE_RDESC_JIS },
@@ -942,31 +944,31 @@ static const struct hid_device_id apple_devices[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ANSI),
 		.driver_data = APPLE_HAS_FN },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ISO),
-		.driver_data = APPLE_HAS_FN },
+		.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_JIS),
 		.driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI),
 		.driver_data = APPLE_HAS_FN },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ISO),
-		.driver_data = APPLE_HAS_FN },
+		.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_JIS),
 		.driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI),
 		.driver_data = APPLE_HAS_FN },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO),
-		.driver_data = APPLE_HAS_FN },
+		.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS),
 		.driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI),
 		.driver_data = APPLE_HAS_FN },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO),
-		.driver_data = APPLE_HAS_FN },
+		.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS),
 		.driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI),
 		.driver_data = APPLE_HAS_FN },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO),
-		.driver_data = APPLE_HAS_FN },
+		.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS),
 		.driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI),
-- 
2.39.1


^ permalink raw reply related

* [PATCH] Input: altera_ps2 - Use devm_platform_get_and_ioremap_resource()
From: ye.xingchen @ 2023-01-28  8:03 UTC (permalink / raw)
  To: dmitry.torokhov; +Cc: wsa+renesas, linux-input, linux-kernel

From: ye xingchen <ye.xingchen@zte.com.cn>

Convert platform_get_resource(), devm_ioremap_resource() to a single
call to devm_platform_get_and_ioremap_resource(), as this is exactly
what this function does.

Signed-off-by: ye xingchen <ye.xingchen@zte.com.cn>
---
 drivers/input/serio/altera_ps2.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/input/serio/altera_ps2.c b/drivers/input/serio/altera_ps2.c
index 3a92304f64fb..9f8d7b332d1b 100644
--- a/drivers/input/serio/altera_ps2.c
+++ b/drivers/input/serio/altera_ps2.c
@@ -78,7 +78,6 @@ static void altera_ps2_close(struct serio *io)
 static int altera_ps2_probe(struct platform_device *pdev)
 {
 	struct ps2if *ps2if;
-	struct resource *res;
 	struct serio *serio;
 	int error, irq;

@@ -86,8 +85,7 @@ static int altera_ps2_probe(struct platform_device *pdev)
 	if (!ps2if)
 		return -ENOMEM;

-	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	ps2if->base = devm_ioremap_resource(&pdev->dev, res);
+	ps2if->base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
 	if (IS_ERR(ps2if->base))
 		return PTR_ERR(ps2if->base);

-- 
2.25.1

^ permalink raw reply related

* [PATCH] Input: apbps2 - Use devm_platform_get_and_ioremap_resource()
From: ye.xingchen @ 2023-01-28  8:04 UTC (permalink / raw)
  To: dmitry.torokhov; +Cc: wsa+renesas, linux-input, linux-kernel

From: ye xingchen <ye.xingchen@zte.com.cn>

Convert platform_get_resource(), devm_ioremap_resource() to a single
call to devm_platform_get_and_ioremap_resource(), as this is exactly
what this function does.

Signed-off-by: ye xingchen <ye.xingchen@zte.com.cn>
---
 drivers/input/serio/apbps2.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/input/serio/apbps2.c b/drivers/input/serio/apbps2.c
index 9c9ce097f8bf..513d96e40e0e 100644
--- a/drivers/input/serio/apbps2.c
+++ b/drivers/input/serio/apbps2.c
@@ -132,7 +132,6 @@ static int apbps2_of_probe(struct platform_device *ofdev)
 	struct apbps2_priv *priv;
 	int irq, err;
 	u32 freq_hz;
-	struct resource *res;

 	priv = devm_kzalloc(&ofdev->dev, sizeof(*priv), GFP_KERNEL);
 	if (!priv) {
@@ -141,8 +140,7 @@ static int apbps2_of_probe(struct platform_device *ofdev)
 	}

 	/* Find Device Address */
-	res = platform_get_resource(ofdev, IORESOURCE_MEM, 0);
-	priv->regs = devm_ioremap_resource(&ofdev->dev, res);
+	priv->regs = devm_platform_get_and_ioremap_resource(ofdev, 0, NULL);
 	if (IS_ERR(priv->regs))
 		return PTR_ERR(priv->regs);

-- 
2.25.1

^ permalink raw reply related

* [PATCH] Input: arc_ps2 - Use devm_platform_get_and_ioremap_resource()
From: ye.xingchen @ 2023-01-28  8:06 UTC (permalink / raw)
  To: dmitry.torokhov; +Cc: linux-input, linux-kernel

From: ye xingchen <ye.xingchen@zte.com.cn>

Convert platform_get_resource(), devm_ioremap_resource() to a single
call to devm_platform_get_and_ioremap_resource(), as this is exactly
what this function does.

Signed-off-by: ye xingchen <ye.xingchen@zte.com.cn>
---
 drivers/input/serio/arc_ps2.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/input/serio/arc_ps2.c b/drivers/input/serio/arc_ps2.c
index 0af9fba5d16d..a6debb13d527 100644
--- a/drivers/input/serio/arc_ps2.c
+++ b/drivers/input/serio/arc_ps2.c
@@ -182,7 +182,6 @@ static int arc_ps2_create_port(struct platform_device *pdev,
 static int arc_ps2_probe(struct platform_device *pdev)
 {
 	struct arc_ps2_data *arc_ps2;
-	struct resource *res;
 	int irq;
 	int error, id, i;

@@ -197,8 +196,7 @@ static int arc_ps2_probe(struct platform_device *pdev)
 		return -ENOMEM;
 	}

-	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	arc_ps2->addr = devm_ioremap_resource(&pdev->dev, res);
+	arc_ps2->addr = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
 	if (IS_ERR(arc_ps2->addr))
 		return PTR_ERR(arc_ps2->addr);

-- 
2.25.1

^ permalink raw reply related

* [PATCH] Input: olpc_apsp - Use devm_platform_get_and_ioremap_resource()
From: ye.xingchen @ 2023-01-28  8:08 UTC (permalink / raw)
  To: dmitry.torokhov; +Cc: wsa+renesas, linux-input, linux-kernel

From: ye xingchen <ye.xingchen@zte.com.cn>

Convert platform_get_resource(), devm_ioremap_resource() to a single
call to devm_platform_get_and_ioremap_resource(), as this is exactly
what this function does.

Signed-off-by: ye xingchen <ye.xingchen@zte.com.cn>
---
 drivers/input/serio/olpc_apsp.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/input/serio/olpc_apsp.c b/drivers/input/serio/olpc_apsp.c
index 04d2db982fb8..33a8e5889bd8 100644
--- a/drivers/input/serio/olpc_apsp.c
+++ b/drivers/input/serio/olpc_apsp.c
@@ -169,7 +169,6 @@ static int olpc_apsp_probe(struct platform_device *pdev)
 {
 	struct serio *kb_serio, *pad_serio;
 	struct olpc_apsp *priv;
-	struct resource *res;
 	int error;

 	priv = devm_kzalloc(&pdev->dev, sizeof(struct olpc_apsp), GFP_KERNEL);
@@ -178,8 +177,7 @@ static int olpc_apsp_probe(struct platform_device *pdev)

 	priv->dev = &pdev->dev;

-	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	priv->base = devm_ioremap_resource(&pdev->dev, res);
+	priv->base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
 	if (IS_ERR(priv->base)) {
 		dev_err(&pdev->dev, "Failed to map WTM registers\n");
 		return PTR_ERR(priv->base);
-- 
2.25.1

^ permalink raw reply related

* [PATCH] Input: spear-keyboard - Use devm_platform_get_and_ioremap_resource()
From: ye.xingchen @ 2023-01-28  8:09 UTC (permalink / raw)
  To: dmitry.torokhov; +Cc: jonathan.cameron, linux-input, linux-kernel

From: ye xingchen <ye.xingchen@zte.com.cn>

Convert platform_get_resource(), devm_ioremap_resource() to a single
call to devm_platform_get_and_ioremap_resource(), as this is exactly
what this function does.

Signed-off-by: ye xingchen <ye.xingchen@zte.com.cn>
---
 drivers/input/keyboard/spear-keyboard.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/input/keyboard/spear-keyboard.c b/drivers/input/keyboard/spear-keyboard.c
index 4bb7c533147c..a50fa9915381 100644
--- a/drivers/input/keyboard/spear-keyboard.c
+++ b/drivers/input/keyboard/spear-keyboard.c
@@ -186,7 +186,6 @@ static int spear_kbd_probe(struct platform_device *pdev)
 	const struct matrix_keymap_data *keymap = pdata ? pdata->keymap : NULL;
 	struct spear_kbd *kbd;
 	struct input_dev *input_dev;
-	struct resource *res;
 	int irq;
 	int error;

@@ -219,8 +218,7 @@ static int spear_kbd_probe(struct platform_device *pdev)
 		kbd->suspended_rate = pdata->suspended_rate;
 	}

-	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	kbd->io_base = devm_ioremap_resource(&pdev->dev, res);
+	kbd->io_base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
 	if (IS_ERR(kbd->io_base))
 		return PTR_ERR(kbd->io_base);

-- 
2.25.1

^ permalink raw reply related

* [PATCH] Input: st-keyscan - Use devm_platform_get_and_ioremap_resource()
From: ye.xingchen @ 2023-01-28  8:11 UTC (permalink / raw)
  To: dmitry.torokhov
  Cc: andriy.shevchenko, jonathan.cameron, linux-input, linux-kernel

From: ye xingchen <ye.xingchen@zte.com.cn>

Convert platform_get_resource(), devm_ioremap_resource() to a single
call to devm_platform_get_and_ioremap_resource(), as this is exactly
what this function does.

Signed-off-by: ye xingchen <ye.xingchen@zte.com.cn>
---
 drivers/input/keyboard/st-keyscan.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/input/keyboard/st-keyscan.c b/drivers/input/keyboard/st-keyscan.c
index 13735a5e8391..b6e83324f97a 100644
--- a/drivers/input/keyboard/st-keyscan.c
+++ b/drivers/input/keyboard/st-keyscan.c
@@ -125,7 +125,6 @@ static int keyscan_probe(struct platform_device *pdev)
 {
 	struct st_keyscan *keypad_data;
 	struct input_dev *input_dev;
-	struct resource *res;
 	int error;

 	if (!pdev->dev.of_node) {
@@ -169,8 +168,7 @@ static int keyscan_probe(struct platform_device *pdev)

 	input_set_drvdata(input_dev, keypad_data);

-	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	keypad_data->base = devm_ioremap_resource(&pdev->dev, res);
+	keypad_data->base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
 	if (IS_ERR(keypad_data->base))
 		return PTR_ERR(keypad_data->base);

-- 
2.25.1

^ permalink raw reply related

* [PATCH] Input: tegra-kbc - Use devm_platform_get_and_ioremap_resource()
From: ye.xingchen @ 2023-01-28  8:13 UTC (permalink / raw)
  To: dmitry.torokhov
  Cc: ldewangan, thierry.reding, jonathanh, linux-input, linux-tegra,
	linux-kernel

From: ye xingchen <ye.xingchen@zte.com.cn>

Convert platform_get_resource(), devm_ioremap_resource() to a single
call to devm_platform_get_and_ioremap_resource(), as this is exactly
what this function does.

Signed-off-by: ye xingchen <ye.xingchen@zte.com.cn>
---
 drivers/input/keyboard/tegra-kbc.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/input/keyboard/tegra-kbc.c b/drivers/input/keyboard/tegra-kbc.c
index 1eba06bcf27a..da4019cf0c83 100644
--- a/drivers/input/keyboard/tegra-kbc.c
+++ b/drivers/input/keyboard/tegra-kbc.c
@@ -598,7 +598,6 @@ MODULE_DEVICE_TABLE(of, tegra_kbc_of_match);
 static int tegra_kbc_probe(struct platform_device *pdev)
 {
 	struct tegra_kbc *kbc;
-	struct resource *res;
 	int err;
 	int num_rows = 0;
 	unsigned int debounce_cnt;
@@ -642,8 +641,7 @@ static int tegra_kbc_probe(struct platform_device *pdev)

 	timer_setup(&kbc->timer, tegra_kbc_keypress_timer, 0);

-	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	kbc->mmio = devm_ioremap_resource(&pdev->dev, res);
+	kbc->mmio = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
 	if (IS_ERR(kbc->mmio))
 		return PTR_ERR(kbc->mmio);

-- 
2.25.1

^ permalink raw reply related

* Re: (subset) [PATCH 00/35] Documentation: correct lots of spelling errors (series 1)
From: Mark Brown @ 2023-01-28 10:48 UTC (permalink / raw)
  To: linux-kernel, Randy Dunlap
  Cc: Jonathan Corbet, Catalin Marinas, Will Deacon, Russell King,
	Jens Axboe, Andrii Nakryiko, Alexei Starovoitov, Daniel Borkmann,
	Vladimir Oltean, Steffen Klassert, Daniel Jordan, Akinobu Mita,
	Helge Deller, Rafael J. Wysocki, Jiri Kosina, Benjamin Tissoires,
	Srinivas Pandruvada, Wolfram Sang, Dmitry Torokhov,
	Henrik Rydberg, Karsten Keil, Pavel Machek, Lee Jones,
	Josh Poimboeuf, Miroslav Benes, Petr Mladek, Peter Zijlstra,
	Ingo Molnar, Jérôme Glisse, Naoya Horiguchi, Miaohe Lin,
	Jonas Bonn, Stefan Kristiansson, Stafford Horne, Bjorn Helgaas,
	Lorenzo Pieralisi, Marc Zyngier, Michael Ellerman, Len Brown,
	Heiko Carstens, Vasily Gorbik, Alexander Gordeev, Juri Lelli,
	Vincent Guittot, David Howells, Jarkko Sakkinen, Paul Moore,
	James Morris, Serge E. Hallyn, Jaroslav Kysela, Takashi Iwai,
	Martin K. Petersen, Daniel Bristot de Oliveira, Steven Rostedt,
	Greg Kroah-Hartman, Masami Hiramatsu, Mathieu Poirier,
	Suzuki K Poulose, Evgeniy Polyakov, Fenghua Yu, Reinette Chatre,
	Thomas Gleixner, Borislav Petkov, Chris Zankel, Max Filippov,
	alsa-devel, coresight, bpf, dri-devel, isdn4linux, keyrings,
	linux-acpi, linux-block, linux-crypto, linux-doc, linux-fbdev,
	linux-i2c, linux-input, linux-leds, linux-pci, linux-s390,
	linux-scsi, linux-sgx, linux-spi, linux-trace-devel,
	linux-trace-kernel, live-patching, linux-pm,
	linux-security-module, linux-usb, netdev, target-devel, linux-mm,
	openrisc, linux-arm-kernel, linux-xtensa, linuxppc-dev, x86
In-Reply-To: <20230127064005.1558-1-rdunlap@infradead.org>

On Thu, 26 Jan 2023 22:39:30 -0800, Randy Dunlap wrote:
> Correct many spelling errors in Documentation/ as reported by codespell.
> 
> Maintainers of specific kernel subsystems are only Cc-ed on their
> respective patches, not the entire series. [if all goes well]
> 
> These patches are based on linux-next-20230125.
> 
> [...]

Applied to

   broonie/spi.git for-next

Thanks!

[27/35] Documentation: spi: correct spelling
        commit: 0f6d2cee58f1ff2ebf66f0bceb113d79f66ecb07

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


^ permalink raw reply

* [dtor-input:next] BUILD SUCCESS 21617de3b4647175a4c6a2a58f40515a94a13df4
From: kernel test robot @ 2023-01-28 14:21 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input

tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git next
branch HEAD: 21617de3b4647175a4c6a2a58f40515a94a13df4  Input: xpad - add 8BitDo Pro 2 Wired Controller support

elapsed time: 735m

configs tested: 83
configs skipped: 2

The following configs have been built successfully.
More configs may be tested in the coming days.

gcc tested configs:
x86_64                            allnoconfig
arm64                            allyesconfig
arm                                 defconfig
arm                              allyesconfig
i386                             allyesconfig
i386                                defconfig
ia64                             allmodconfig
x86_64                          rhel-8.3-func
x86_64                    rhel-8.3-kselftests
x86_64                              defconfig
x86_64                           allyesconfig
x86_64                               rhel-8.3
x86_64               randconfig-a002-20230123
x86_64               randconfig-a005-20230123
x86_64               randconfig-a001-20230123
x86_64               randconfig-a006-20230123
x86_64               randconfig-a003-20230123
x86_64               randconfig-a004-20230123
x86_64                           rhel-8.3-kvm
x86_64                           rhel-8.3-syz
x86_64                           rhel-8.3-bpf
x86_64                         rhel-8.3-kunit
i386                 randconfig-a004-20230123
i386                 randconfig-a006-20230123
i386                 randconfig-a005-20230123
i386                 randconfig-a002-20230123
i386                 randconfig-a003-20230123
i386                 randconfig-a001-20230123
s390                                defconfig
s390                             allmodconfig
arc                                 defconfig
alpha                               defconfig
s390                             allyesconfig
um                           x86_64_defconfig
um                             i386_defconfig
m68k                             allyesconfig
m68k                             allmodconfig
arc                              allyesconfig
alpha                            allyesconfig
powerpc                           allnoconfig
mips                             allyesconfig
powerpc                          allmodconfig
sh                               allmodconfig
i386                          randconfig-a012
i386                          randconfig-a014
i386                          randconfig-a016
i386                 randconfig-c001-20230123
i386                          randconfig-c001
riscv                    nommu_virt_defconfig
riscv                          rv32_defconfig
riscv                    nommu_k210_defconfig
riscv                             allnoconfig
i386                   debian-10.3-kselftests
i386                              debian-10.3
m68k                         amcore_defconfig
powerpc                      makalu_defconfig
m68k                        mvme147_defconfig
m68k                          amiga_defconfig
mips                          rb532_defconfig

clang tested configs:
x86_64               randconfig-a013-20230123
x86_64               randconfig-a011-20230123
x86_64               randconfig-a016-20230123
x86_64               randconfig-a012-20230123
x86_64               randconfig-a015-20230123
x86_64               randconfig-a014-20230123
riscv                randconfig-r042-20230123
hexagon              randconfig-r041-20230123
hexagon              randconfig-r045-20230123
s390                 randconfig-r044-20230123
i386                 randconfig-a013-20230123
i386                 randconfig-a016-20230123
i386                 randconfig-a012-20230123
i386                 randconfig-a015-20230123
i386                 randconfig-a011-20230123
i386                 randconfig-a014-20230123
powerpc                 mpc832x_mds_defconfig
powerpc                      walnut_defconfig
arm                        mvebu_v5_defconfig
arm                           sama7_defconfig
x86_64                          rhel-8.3-rust
hexagon              randconfig-r041-20230124
hexagon              randconfig-r045-20230124
arm                  randconfig-r046-20230124

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

^ permalink raw reply

* Re: Linux 6.1 and 6.2-rc make mousewheel on Logitech G903 (046d:c091) report too many non-hires events
From: Salvatore Bonaccorso @ 2023-01-28 15:39 UTC (permalink / raw)
  To: Tobias Klausmann; +Cc: linux-input, regressions
In-Reply-To: <Y9GmnIjUgIGuYtk2@skade.schwarzvogel.de>

On Wed, Jan 25, 2023 at 11:01:00PM +0100, Tobias Klausmann wrote:
> Hi!
> 
> As it says in the subject.
> 
> At some point between 6.0 and 6.1, the kernel (if HID_LOGITECH_HIDPP was
> m or y) started reporting a full event for every hires event on a
> Logitech G903. 
> 
> In my quest of finding out what the root cause is, ive filed these bugs:
> 
> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1029584
> https://gitlab.freedesktop.org/libinput/libinput/-/issues/852
> 
> The libinput one has the most detail. The most relevant one is this log
> from libinput record, showing what happens if I turn the mousewheel by
> one notch:
> 
>     events:
>     # Current time is 20:37:11
>     - evdev:
>       - [  3,  63476,   2,   8,      -1] # EV_REL / REL_WHEEL                -1
>       - [  3,  63476,   2,  11,    -120] # EV_REL / REL_WHEEL_HI_RES       -120
>       - [  3,  63476,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +3063ms
>     - evdev:
>       - [  3, 139476,   2,   8,      -1] # EV_REL / REL_WHEEL                -1
>       - [  3, 139476,   2,  11,    -120] # EV_REL / REL_WHEEL_HI_RES       -120
>       - [  3, 139476,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +76ms
>     - evdev:
>       - [  3, 197482,   2,   8,      -1] # EV_REL / REL_WHEEL                -1
>       - [  3, 197482,   2,  11,    -120] # EV_REL / REL_WHEEL_HI_RES       -120
>       - [  3, 197482,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +58ms
>     - evdev:
>       - [  3, 227485,   2,   8,      -1] # EV_REL / REL_WHEEL                -1
>       - [  3, 227485,   2,  11,    -120] # EV_REL / REL_WHEEL_HI_RES       -120
>       - [  3, 227485,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +30ms
>     - evdev:
>       - [  3, 240484,   2,   8,      -1] # EV_REL / REL_WHEEL                -1
>       - [  3, 240484,   2,  11,    -120] # EV_REL / REL_WHEEL_HI_RES       -120
>       - [  3, 240484,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +13ms
>     - evdev:
>       - [  3, 250470,   2,   8,      -1] # EV_REL / REL_WHEEL                -1
>       - [  3, 250470,   2,  11,    -120] # EV_REL / REL_WHEEL_HI_RES       -120
>       - [  3, 250470,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +10ms
>     - evdev:
>       - [  3, 256486,   2,   8,      -1] # EV_REL / REL_WHEEL                -1
>       - [  3, 256486,   2,  11,    -120] # EV_REL / REL_WHEEL_HI_RES       -120
>       - [  3, 256486,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +6ms
>     - evdev:
>       - [  3, 264472,   2,   8,      -1] # EV_REL / REL_WHEEL                -1
>       - [  3, 264472,   2,  11,    -120] # EV_REL / REL_WHEEL_HI_RES       -120
>       - [  3, 264472,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +8ms
>     # Current time is 20:37:15
> 
> Note how it reports both REL_WHEEL and REL_WHEEL_HI_RES at every
> instance.
> 
> I've tried assorted kernels, both Debian as well as hand-compiled
> vanilla ones, and the problem only shows up if hid_logitech_hidpp.ko is
> loaded, so I am blacklisting it for now. Also note that even unloading
> the module didn't fix the behavior, though that may be because X11 was
> still runing and so libinput's state ight have been still mangled.
> 
> The most recent kernels I have tested with are 6.1.4 and 6.2-rc5.
> 
> Best,
> Tobias

Let's loop in as well the regresssions list.

#regzbot introduced: v6.0..v6.1
#regzbot link: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1029584
#regzbot link: https://gitlab.freedesktop.org/libinput/libinput/-/issues/852

Regards,
Salvatore

^ permalink raw reply

* [PATCH] Input: edt-ft5x06 - fix typo in a comment
From: Dario Binacchi @ 2023-01-28 16:23 UTC (permalink / raw)
  To: linux-kernel
  Cc: Dario Binacchi, Dmitry Torokhov, Michael Trimarchi, Oliver Graute,
	Uwe Kleine-König, Wolfram Sang, linux-input

Replace 'firmares' with 'firmwares'.

Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
---

 drivers/input/touchscreen/edt-ft5x06.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c
index ddd0f1f62458..04bfefe3c0e0 100644
--- a/drivers/input/touchscreen/edt-ft5x06.c
+++ b/drivers/input/touchscreen/edt-ft5x06.c
@@ -931,7 +931,7 @@ static int edt_ft5x06_ts_identify(struct i2c_client *client,
 	} else {
 		/* If it is not an EDT M06/M12 touchscreen, then the model
 		 * detection is a bit hairy. The different ft5x06
-		 * firmares around don't reliably implement the
+		 * firmwares around don't reliably implement the
 		 * identification registers. Well, we'll take a shot.
 		 *
 		 * The main difference between generic focaltec based
-- 
2.32.0


^ permalink raw reply related

* Re: Linux 6.1 and 6.2-rc make mousewheel on Logitech G903 (046d:c091) report too many non-hires events
From: Linux kernel regression tracking (Thorsten Leemhuis) @ 2023-01-28 16:28 UTC (permalink / raw)
  To: Salvatore Bonaccorso, Tobias Klausmann; +Cc: linux-input, regressions
In-Reply-To: <Y9VBz/GVZPqG3KwM@eldamar.lan>



On 28.01.23 16:39, Salvatore Bonaccorso wrote:
> On Wed, Jan 25, 2023 at 11:01:00PM +0100, Tobias Klausmann wrote:
>> Hi!
>>
>> As it says in the subject.
>>
>> At some point between 6.0 and 6.1, the kernel (if HID_LOGITECH_HIDPP was
>> m or y) started reporting a full event for every hires event on a
>> Logitech G903. 
>>
>> In my quest of finding out what the root cause is, ive filed these bugs:
>>
>> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1029584
>> https://gitlab.freedesktop.org/libinput/libinput/-/issues/852
>>
>> The libinput one has the most detail. The most relevant one is this log
>> from libinput record, showing what happens if I turn the mousewheel by
>> one notch:
>>
>>     events:
>>     # Current time is 20:37:11
>>     - evdev:
>>       - [  3,  63476,   2,   8,      -1] # EV_REL / REL_WHEEL                -1
>>       - [  3,  63476,   2,  11,    -120] # EV_REL / REL_WHEEL_HI_RES       -120
>>       - [  3,  63476,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +3063ms
>>     - evdev:
>>       - [  3, 139476,   2,   8,      -1] # EV_REL / REL_WHEEL                -1
>>       - [  3, 139476,   2,  11,    -120] # EV_REL / REL_WHEEL_HI_RES       -120
>>       - [  3, 139476,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +76ms
>>     - evdev:
>>       - [  3, 197482,   2,   8,      -1] # EV_REL / REL_WHEEL                -1
>>       - [  3, 197482,   2,  11,    -120] # EV_REL / REL_WHEEL_HI_RES       -120
>>       - [  3, 197482,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +58ms
>>     - evdev:
>>       - [  3, 227485,   2,   8,      -1] # EV_REL / REL_WHEEL                -1
>>       - [  3, 227485,   2,  11,    -120] # EV_REL / REL_WHEEL_HI_RES       -120
>>       - [  3, 227485,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +30ms
>>     - evdev:
>>       - [  3, 240484,   2,   8,      -1] # EV_REL / REL_WHEEL                -1
>>       - [  3, 240484,   2,  11,    -120] # EV_REL / REL_WHEEL_HI_RES       -120
>>       - [  3, 240484,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +13ms
>>     - evdev:
>>       - [  3, 250470,   2,   8,      -1] # EV_REL / REL_WHEEL                -1
>>       - [  3, 250470,   2,  11,    -120] # EV_REL / REL_WHEEL_HI_RES       -120
>>       - [  3, 250470,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +10ms
>>     - evdev:
>>       - [  3, 256486,   2,   8,      -1] # EV_REL / REL_WHEEL                -1
>>       - [  3, 256486,   2,  11,    -120] # EV_REL / REL_WHEEL_HI_RES       -120
>>       - [  3, 256486,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +6ms
>>     - evdev:
>>       - [  3, 264472,   2,   8,      -1] # EV_REL / REL_WHEEL                -1
>>       - [  3, 264472,   2,  11,    -120] # EV_REL / REL_WHEEL_HI_RES       -120
>>       - [  3, 264472,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +8ms
>>     # Current time is 20:37:15
>>
>> Note how it reports both REL_WHEEL and REL_WHEEL_HI_RES at every
>> instance.
>>
>> I've tried assorted kernels, both Debian as well as hand-compiled
>> vanilla ones, and the problem only shows up if hid_logitech_hidpp.ko is
>> loaded, so I am blacklisting it for now. Also note that even unloading
>> the module didn't fix the behavior, though that may be because X11 was
>> still runing and so libinput's state ight have been still mangled.
>>
>> The most recent kernels I have tested with are 6.1.4 and 6.2-rc5.
>>
>> Best,
>> Tobias
> 
> Let's loop in as well the regresssions list.

Thx for that.

TWIMC, I assume it's the same issue as this one:
https://bugzilla.kernel.org/show_bug.cgi?id=216885

There in the past few days was some discussion about the issue with the
author of the culprit there.

HTH, ciao, Thorsten (wearing his 'the Linux kernel's regression tracker'
hat)
--
Everything you wanna know about Linux kernel regression tracking:
https://linux-regtracking.leemhuis.info/about/#tldr
If I did something stupid, please tell me, as explained on that page.

^ permalink raw reply

* Re: Linux 6.1 and 6.2-rc make mousewheel on Logitech G903 (046d:c091) report too many non-hires events
From: Tobias Klausmann @ 2023-01-28 16:36 UTC (permalink / raw)
  To: Linux kernel regression tracking (Thorsten Leemhuis)
  Cc: Salvatore Bonaccorso, linux-input, regressions
In-Reply-To: <01fb3b37-8ba2-70f9-df62-4cf8df6bcc97@leemhuis.info>

Hi! 

On Sat, 28 Jan 2023, Linux kernel regression tracking (Thorsten Leemhuis) wrote:
> On 28.01.23 16:39, Salvatore Bonaccorso wrote:
> > Let's loop in as well the regresssions list.
> 
> Thx for that.
> 
> TWIMC, I assume it's the same issue as this one:
> https://bugzilla.kernel.org/show_bug.cgi?id=216885

That is correct.

Best,
Tobias

^ permalink raw reply

* [PATCH 0/4] DeviceTree Support for USB-HID Devices and CP2112
From: Danny Kaehn @ 2023-01-28 20:26 UTC (permalink / raw)
  To: robh+dt, krzysztof.kozlowski+dt, jikos, benjamin.tissoires
  Cc: devicetree, linux-input, ethan.twardy

This patchset allows USB-HID devices to have DeviceTree bindings through sharing
the USB of_node with the HID driver, and adds such a binding and driver
implementation for the CP2112 USB to SMBus Bridge (which necessitated the
USB-HID change). This change allows a CP2112 permanently attached in hardware to
be described in DT and interoperate with other drivers, and exposed the threaded
interrupt bug fixed in patch 0003.

Plese correct if the assumption made that there is a 1:1 correlation between
a USB device and its HID device is not always true. If so, patch 0002 would
then need to be reworked.


Danny Kaehn (4):
  dt-bindings: hid: Add CP2112 HID USB to SMBus Bridge
  Share USB device devicetree node with child HID device
  Fix CP2112 driver not registering GPIO IRQ chip as threaded
  CP2112 Devicetree Support

 .../bindings/hid/silabs,cp2112.yaml           | 82 +++++++++++++++++++
 drivers/hid/hid-cp2112.c                      | 10 +++
 drivers/hid/usbhid/hid-core.c                 |  2 +
 3 files changed, 94 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/hid/silabs,cp2112.yaml

-- 
2.25.1


^ permalink raw reply

* [PATCH 1/4] dt-bindings: hid: Add CP2112 HID USB to SMBus Bridge
From: Danny Kaehn @ 2023-01-28 20:26 UTC (permalink / raw)
  To: robh+dt, krzysztof.kozlowski+dt, jikos, benjamin.tissoires
  Cc: devicetree, linux-input, ethan.twardy
In-Reply-To: <20230128202622.12676-1-kaehndan@gmail.com>

This is a USB HID device which includes an I2C controller and 8 GPIO pins.

The binding allows describing the chip's gpio and i2c controller in DT
using the subnodes named "gpio" and "i2c", respectively. This is
intended to be used in configurations where the CP2112 is permanently
connected in hardware.

Signed-off-by: Danny Kaehn <kaehndan@gmail.com>
---
 .../bindings/hid/silabs,cp2112.yaml           | 82 +++++++++++++++++++
 1 file changed, 82 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/hid/silabs,cp2112.yaml

diff --git a/Documentation/devicetree/bindings/hid/silabs,cp2112.yaml b/Documentation/devicetree/bindings/hid/silabs,cp2112.yaml
new file mode 100644
index 000000000000..49287927c63f
--- /dev/null
+++ b/Documentation/devicetree/bindings/hid/silabs,cp2112.yaml
@@ -0,0 +1,82 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/hid/silabs,cp2112.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: CP2112 HID USB to SMBus/I2C Bridge
+
+maintainers:
+  - Danny Kaehn <kaehndan@gmail.com>
+
+description:
+  This is a USB HID device which includes an I2C controller and 8 GPIO pins.
+  While USB devices typically aren't described in DeviceTree, doing so with the
+  CP2112 allows use of its i2c and gpio controllers with other DT nodes when
+  the chip is expected to be found on a USB port.
+
+properties:
+  compatible:
+    const: usb10c4,ea90
+  reg:
+    maxItems: 1
+    description: The USB port number on the host controller
+  i2c:
+    $ref: /schemas/i2c/i2c-controller.yaml#
+  gpio:
+    $ref: /schemas/gpio/gpio.yaml#
+
+
+required:
+  - compatible
+  - reg
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/input/input.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
+
+    usb1 {
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      usb@1 {
+        compatible = "usb424,2514";
+        reg = <1>;
+
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        device@1 {	/* CP2112 I2C Bridge */
+          compatible = "usb10c4,ea90";
+          reg = <1>;
+
+          cp2112_i2c0: i2c {
+            #address-cells = <1>;
+            #size-cells = <0>;
+            /* Child I2C Devices can be described as normal here */
+            temp@48 {
+              compatible = "national,lm75";
+              reg = <0x48>;
+            };
+          };
+
+          cp2112_gpio0: gpio {
+            gpio-controller;
+            interrupt-controller;
+            #gpio-cells = <2>;
+            gpio-line-names =
+              "TEST0",
+              "TEST1",
+              "TEST2",
+              "TEST3",
+              "TEST4",
+              "TEST5",
+              "TEST6",
+              "TEST7";
+          };
+        };
+      };
+    };
-- 
2.25.1


^ permalink raw reply related

* [PATCH 2/4] Share USB device devicetree node with child HID device
From: Danny Kaehn @ 2023-01-28 20:26 UTC (permalink / raw)
  To: robh+dt, krzysztof.kozlowski+dt, jikos, benjamin.tissoires
  Cc: devicetree, linux-input, ethan.twardy
In-Reply-To: <20230128202622.12676-1-kaehndan@gmail.com>

USB HID core now shares its devicetree of_node with its child HID device.
Since there can only be one HID device on a USB interface, it is redundant
to specify a hid node under the USB device (and further, binding this way
isn't currently possible, as hid_driver does not support of_match_table).

Signed-off-by: Danny Kaehn <kaehndan@gmail.com>
---
 drivers/hid/usbhid/hid-core.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
index be4c731aaa65..b6c968af258f 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -33,6 +33,7 @@
 #include <linux/hiddev.h>
 #include <linux/hid-debug.h>
 #include <linux/hidraw.h>
+#include <linux/device.h>
 #include "usbhid.h"
 
 /*
@@ -1369,6 +1370,7 @@ static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *
 	hid->hiddev_report_event = hiddev_report_event;
 #endif
 	hid->dev.parent = &intf->dev;
+	device_set_of_node_from_dev(&hid->dev, &intf->dev);
 	hid->bus = BUS_USB;
 	hid->vendor = le16_to_cpu(dev->descriptor.idVendor);
 	hid->product = le16_to_cpu(dev->descriptor.idProduct);
-- 
2.25.1


^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox