From patchwork Mon Feb 27 14:07:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Kaehn X-Patchwork-Id: 13153573 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8BF2FC64ED8 for ; Mon, 27 Feb 2023 14:08:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230029AbjB0OIH (ORCPT ); Mon, 27 Feb 2023 09:08:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52824 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230136AbjB0OIG (ORCPT ); Mon, 27 Feb 2023 09:08:06 -0500 Received: from mail-il1-x136.google.com (mail-il1-x136.google.com [IPv6:2607:f8b0:4864:20::136]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 98AD06581; Mon, 27 Feb 2023 06:08:02 -0800 (PST) Received: by mail-il1-x136.google.com with SMTP id z5so4021004ilq.0; Mon, 27 Feb 2023 06:08:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9ttf/oycojer2AjXga/cynyrMrsDrjxN9x+nUsxDh+I=; b=F91bpEpe9t9wAE/KAfGoqfnf9wJSYhXJoRsDpCmHMeFwyxOdg2ulEsst++T4+fo/DL E+Y/LrL9p7A2GLD4nSB0lSd1kyoVpnntZDEefIduPE9OZKUOWFzT1IdIyR2F0M+qd0qf 2wwKM29uX6xE+KtamSq2qOYXfOo7y02E+IHkBo/G2/l6/ymaip+8HWcKbcnbDJDMNrnH ZkKrIYiMrpeSVGOXg7AyMwhG1CGKP5SfD1T8al8tbgSZjna2azTqIUrq6sRjo9wAASMX dyD8ELbyR05nTaRqLITNHj9mB3Zy81NL2knmwTS2zMqfYw0h4CbcBtTfAQyXE+e3x22I 6Miw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9ttf/oycojer2AjXga/cynyrMrsDrjxN9x+nUsxDh+I=; b=70/EG419Y+CmkNxc/HwGDGx1ZG4+yg25IE7C5j6nxh+UTjcSrvYPw8+g335BmOKJHJ A9S901LMmfXBattRNKfsMQzWa75djdqXdsx0e2aWI/oUkhRpw+hwEDGRI28CCyFnebqF e9JinqydjE/JQ5crWietTAzQgJjbnFUes3JgrDHkH6rrrGQJq2WxMpbqyw6npou590U2 lZCyKXrrepTQ76wW8R04rmr56zo/+ZLvZiS7FtsuaPESLA8IrsTOpzGeypsV8S2hfge1 mQOMFGMB6z3cwBppQLlW7qj9l1cgSj4E+2vAgTaMwqEBWbjrT3KSs9kxIwLxI2qRvikC RkXQ== X-Gm-Message-State: AO0yUKVZiItxIe+VE4gjryVDLAayMek3901bYvy4PqFUGYN7hbh3KSUX POeeuKgITq3ThmWMAFtSBBE= X-Google-Smtp-Source: AK7set/VqyzFWPzFk29nBxAQTBZFTbD2iqQxGVQbUgZyEnD87tkN4zwYB3AtVKxubkIsBS7f0RRNyg== X-Received: by 2002:a05:6e02:16cd:b0:316:acef:e65a with SMTP id 13-20020a056e0216cd00b00316acefe65amr23013277ilx.17.1677506881858; Mon, 27 Feb 2023 06:08:01 -0800 (PST) Received: from DANNY-DESKTOP.localdomain (071-013-243-092.res.spectrum.com. [71.13.243.92]) by smtp.gmail.com with ESMTPSA id 14-20020a056e020cae00b00316dc3afe57sm1921503ilg.86.2023.02.27.06.08.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Feb 2023 06:08:01 -0800 (PST) From: Danny Kaehn To: robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, jikos@kernel.org, benjamin.tissoires@redhat.com Cc: bartosz.golaszewski@linaro.org, andriy.shevchenko@linux.intel.com, dmitry.torokhov@gmail.com, devicetree@vger.kernel.org, linux-input@vger.kernel.org, ethan.twardy@plexus.com, Krzysztof Kozlowski , Rob Herring Subject: [PATCH v8 1/3] dt-bindings: i2c: Add CP2112 HID USB to SMBus Bridge Date: Mon, 27 Feb 2023 08:07:56 -0600 Message-Id: <20230227140758.1575-2-kaehndan@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230227140758.1575-1-kaehndan@gmail.com> References: <20230227140758.1575-1-kaehndan@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org 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 Reviewed-by: Krzysztof Kozlowski Reviewed-by: Rob Herring --- .../bindings/i2c/silabs,cp2112.yaml | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 Documentation/devicetree/bindings/i2c/silabs,cp2112.yaml diff --git a/Documentation/devicetree/bindings/i2c/silabs,cp2112.yaml b/Documentation/devicetree/bindings/i2c/silabs,cp2112.yaml new file mode 100644 index 000000000000..a27509627804 --- /dev/null +++ b/Documentation/devicetree/bindings/i2c/silabs,cp2112.yaml @@ -0,0 +1,113 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/i2c/silabs,cp2112.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: CP2112 HID USB to SMBus/I2C Bridge + +maintainers: + - Danny Kaehn + +description: + The CP2112 is a USB HID device which includes an integrated I2C controller + and 8 GPIO pins. Its GPIO pins can each be configured as inputs, open-drain + outputs, or push-pull outputs. + +properties: + compatible: + const: usb10c4,ea90 + + reg: + maxItems: 1 + description: The USB port number on the host controller + + i2c: + description: The SMBus/I2C controller node for the CP2112 + $ref: /schemas/i2c/i2c-controller.yaml# + unevaluatedProperties: false + + properties: + sda-gpios: + maxItems: 1 + + scl-gpios: + maxItems: 1 + + clock-frequency: + minimum: 10000 + default: 100000 + maximum: 400000 + + gpio: + description: The GPIO controller node for the CP2112 + type: object + unevaluatedProperties: false + + properties: + interrupt-controller: true + "#interrupt-cells": + const: 2 + + gpio-controller: true + "#gpio-cells": + const: 2 + + gpio-line-names: + minItems: 1 + maxItems: 8 + + patternProperties: + "-hog(-[0-9]+)?$": + type: object + + required: + - gpio-hog + +required: + - compatible + - reg + +additionalProperties: false + +examples: + - | + #include + #include + + usb { + #address-cells = <1>; + #size-cells = <0>; + + device@1 { + compatible = "usb10c4,ea90"; + reg = <1>; + + i2c { + #address-cells = <1>; + #size-cells = <0>; + sda-gpios = <&cp2112_gpio 0 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; + scl-gpios = <&cp2112_gpio 1 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; + + temp@48 { + compatible = "national,lm75"; + reg = <0x48>; + }; + }; + + cp2112_gpio: gpio { + gpio-controller; + interrupt-controller; + #gpio-cells = <2>; + gpio-line-names = "CP2112_SDA", "CP2112_SCL", "TEST2", + "TEST3","TEST4", "TEST5", "TEST6"; + + fan-rst-hog { + gpio-hog; + gpios = <7 GPIO_ACTIVE_HIGH>; + output-high; + line-name = "FAN_RST"; + }; + }; + }; + }; From patchwork Mon Feb 27 14:07:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Kaehn X-Patchwork-Id: 13153574 X-Patchwork-Delegate: jikos@jikos.cz Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6F1EFC7EE32 for ; Mon, 27 Feb 2023 14:08:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230136AbjB0OIJ (ORCPT ); Mon, 27 Feb 2023 09:08:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52862 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230150AbjB0OIH (ORCPT ); Mon, 27 Feb 2023 09:08:07 -0500 Received: from mail-il1-x12d.google.com (mail-il1-x12d.google.com [IPv6:2607:f8b0:4864:20::12d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CA03C4222; Mon, 27 Feb 2023 06:08:03 -0800 (PST) Received: by mail-il1-x12d.google.com with SMTP id 4so3970813ilz.6; Mon, 27 Feb 2023 06:08:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9IFtKKERmi0HGnc/lJWv1rhtLxqCIn+aR68TrM9Jz4M=; b=T6xnmXLA+mVgifsMnODihHXXq1ibStuU8u1yloxEHXrFt1TwTmqqn8Zk4udPXnlwFn 0N4lm6/Gj92E5GPUrj4LQCGSiGKTsj1b6p/1imHq0YVB73Tx3ZizYcyCsHk1/nhe6A/h sHRL7KsUSBA91oJw9dSIEM4pia+ehC0gRTvy04rQe5+PxvG7y9z+2t5zEktros1rXG/P OvUZAdbB/EFtZ3HamgqXJRkdJh51flBeWzr2TGDfOd2hcePPNJnashS5taq5lUscv/6m HFaDmrMH9z5oPip9Mkqmtr8J8qMxKd2/V8LJ+ffLrpDZhULsOA1nB28qEnUY5E26xqcT ry6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9IFtKKERmi0HGnc/lJWv1rhtLxqCIn+aR68TrM9Jz4M=; b=W3AOAJoJHkbNyr4Ed5TkA+qbPRn9v6r4FRG+M51dET/GwDODdx34BmnIBQW4aw6KKx U1iZ2tIfreaqxqMv/SGntjNzGvv+W8NCqfNfU5vnIOP1l9gvtpypISyTH5XIjg1VvT9M nVLTSFTkHdDsXihLHgCGP5hFalu9ELj+Y+M7uh6GLgY3hP9mp3hD81IjuUQ2GIcWs3pB +vndiuaKpAuAKAJLCFNHHDVvR3Zpn/nvtKUovbcAFjcLPSXTjxBUxP0kZWEzmXSu7e3+ Ow1R7BOZcGlHYE3vVsvU1Y6veKw8u/Qv944gNfC25MxXQ23UhZCmK1y0fPsi17WHk48z hB1w== X-Gm-Message-State: AO0yUKWkL/JUB3GsnttlKg9LY4Lu82uNRZZs0U886JvVWmubYhPjuCn4 NcZQy4QW31m3UtYTOcG/R3o= X-Google-Smtp-Source: AK7set+XauvThNTMgxM7uAahQtTSOsQTHn1F+i93c9SFTB4w3WpHCAdpb4gcZ9vnIr8z/Rcr9YdZgA== X-Received: by 2002:a05:6e02:1d0e:b0:316:e453:5372 with SMTP id i14-20020a056e021d0e00b00316e4535372mr18643907ila.1.1677506882949; Mon, 27 Feb 2023 06:08:02 -0800 (PST) Received: from DANNY-DESKTOP.localdomain (071-013-243-092.res.spectrum.com. [71.13.243.92]) by smtp.gmail.com with ESMTPSA id 14-20020a056e020cae00b00316dc3afe57sm1921503ilg.86.2023.02.27.06.08.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Feb 2023 06:08:02 -0800 (PST) From: Danny Kaehn To: robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, jikos@kernel.org, benjamin.tissoires@redhat.com Cc: bartosz.golaszewski@linaro.org, andriy.shevchenko@linux.intel.com, dmitry.torokhov@gmail.com, devicetree@vger.kernel.org, linux-input@vger.kernel.org, ethan.twardy@plexus.com Subject: [PATCH v8 2/3] HID: usbhid: Share USB device firmware node with child HID device Date: Mon, 27 Feb 2023 08:07:57 -0600 Message-Id: <20230227140758.1575-3-kaehndan@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230227140758.1575-1-kaehndan@gmail.com> References: <20230227140758.1575-1-kaehndan@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org USB HID core now shares its fwnode 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. This allows usb HID device drivers to be described in firmware and make use of device properties. Signed-off-by: Danny Kaehn Reviewed-by: Andy Shevchenko --- 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 257dd73e37bf..090260d99c84 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -1374,6 +1375,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_node(&hid->dev, dev_fwnode(&intf->dev)); hid->bus = BUS_USB; hid->vendor = le16_to_cpu(dev->descriptor.idVendor); hid->product = le16_to_cpu(dev->descriptor.idProduct); From patchwork Mon Feb 27 14:07:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Kaehn X-Patchwork-Id: 13153576 X-Patchwork-Delegate: jikos@jikos.cz Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 78DA8C64ED8 for ; Mon, 27 Feb 2023 14:08:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229888AbjB0OIM (ORCPT ); Mon, 27 Feb 2023 09:08:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52964 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230144AbjB0OIL (ORCPT ); Mon, 27 Feb 2023 09:08:11 -0500 Received: from mail-il1-x130.google.com (mail-il1-x130.google.com [IPv6:2607:f8b0:4864:20::130]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F05B9901C; Mon, 27 Feb 2023 06:08:04 -0800 (PST) Received: by mail-il1-x130.google.com with SMTP id b16so4003477iln.3; Mon, 27 Feb 2023 06:08:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=q4WrHToYhjDx1AbMUlSeZkbECM8IxjfDW2y4H9aWRFA=; b=Jsl67gvYuwAc2P2veWRPxNCh3ZX6rmMelPmmnO80Tk4NQ6oja1qErj0b+LvqlfJBnL 4UTyPWAEyMPyFXRDP7vwpNDGmG17S3mK1PiB04gXVnsBxy0yRW+Pw3qkMTzwoYb0Pz+W k5KQa8whywr909Sdb9JACUfZqtaPyI6uIiKDEkr8W/nWyHO2kiMayo3AuxTyMq55afvY 1p7ZdQ5qMSLJV466MixOLhnJm4tpe/wvf2LO7u2ALBmurFQHb444tjqLQsOVirTYw9Jt pbfW9djuI7sbXZyeLxl0y9h7BalN3+w45mEO+MQwD7nB4cmQ1fGdiy1oIhvCSQrgXl7T 5xzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=q4WrHToYhjDx1AbMUlSeZkbECM8IxjfDW2y4H9aWRFA=; b=lECL7GYLD7cypb3UtzJMhmWmcEY9Hxvc/vzteNn6INB9SFN2zksESaQxElQeNbD/bZ sVue34DCTKTNC7qnxQIhpcfdOnoUti4dCohsFPr8oISGPXxHDehgWoSkj8/wqpqeN1tj jTIi6iAaglO/SiKIKkVWebBl5I+bLne6apJOsBlccqZhRENqN6O4y4ikSgbzmLJ/rkZK ieyLyOeq2ley0JSbTH3IuUtqr5TAM5+i+P3a40S1iQK9Su95WyLqxa5JsvyHkXvDWccy Ct1ncxAkxEhelhyAK3M8qU0eoreBpUDHHCPF+CBq8IWFXmjxofJgxAetGGP3tx7oft6v kE/w== X-Gm-Message-State: AO0yUKXF/qIyyto//75xRZzmeo1/wuvp+w6cDQOCGRb92dh+hAs4qx+g RilYpk+hHVkXTbvPLEdILTQ= X-Google-Smtp-Source: AK7set+dHX5EyhrPcZLkbz0EuHUW4YplP/yWV8dZM/+K97pjcjpiU4Pl2RTNRd3SsoG0At9toJ4LYw== X-Received: by 2002:a92:7611:0:b0:315:34b8:4c6d with SMTP id r17-20020a927611000000b0031534b84c6dmr16857929ilc.17.1677506884041; Mon, 27 Feb 2023 06:08:04 -0800 (PST) Received: from DANNY-DESKTOP.localdomain (071-013-243-092.res.spectrum.com. [71.13.243.92]) by smtp.gmail.com with ESMTPSA id 14-20020a056e020cae00b00316dc3afe57sm1921503ilg.86.2023.02.27.06.08.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Feb 2023 06:08:03 -0800 (PST) From: Danny Kaehn To: robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, jikos@kernel.org, benjamin.tissoires@redhat.com Cc: bartosz.golaszewski@linaro.org, andriy.shevchenko@linux.intel.com, dmitry.torokhov@gmail.com, devicetree@vger.kernel.org, linux-input@vger.kernel.org, ethan.twardy@plexus.com Subject: [PATCH v8 3/3] HID: cp2112: Fwnode Support Date: Mon, 27 Feb 2023 08:07:58 -0600 Message-Id: <20230227140758.1575-4-kaehndan@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230227140758.1575-1-kaehndan@gmail.com> References: <20230227140758.1575-1-kaehndan@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org Bind I2C and GPIO interfaces to subnodes with names "i2c" and "gpio" if they exist, respectively. This allows the GPIO and I2C controllers to be described in firmware as usual. Additionally, support configuring the I2C bus speed from the clock-frequency device property. Signed-off-by: Danny Kaehn --- drivers/hid/hid-cp2112.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/hid/hid-cp2112.c b/drivers/hid/hid-cp2112.c index 27cadadda7c9..491e3c83af12 100644 --- a/drivers/hid/hid-cp2112.c +++ b/drivers/hid/hid-cp2112.c @@ -1234,6 +1234,7 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id) u8 buf[3]; struct cp2112_smbus_config_report config; struct gpio_irq_chip *girq; + struct i2c_timings timings; int ret; dev = devm_kzalloc(&hdev->dev, sizeof(*dev), GFP_KERNEL); @@ -1292,6 +1293,10 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id) goto err_power_normal; } + device_set_node(&dev->adap.dev, device_get_named_child_node(&hdev->dev, "i2c")); + i2c_parse_fw_timings(&dev->adap.dev, &timings, true); + + config.clock_speed = cpu_to_be32(timings.bus_freq_hz); config.retry_time = cpu_to_be16(1); ret = cp2112_hid_output(hdev, (u8 *)&config, sizeof(config), @@ -1300,7 +1305,7 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id) hid_err(hdev, "error setting SMBus config\n"); if (ret >= 0) ret = -EIO; - goto err_power_normal; + goto err_free_i2c_of; } hid_set_drvdata(hdev, (void *)dev); @@ -1322,7 +1327,7 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id) if (ret) { hid_err(hdev, "error registering i2c adapter\n"); - goto err_power_normal; + goto err_free_i2c_of; } hid_dbg(hdev, "adapter registered\n"); @@ -1336,6 +1341,7 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id) dev->gc.ngpio = 8; dev->gc.can_sleep = 1; dev->gc.parent = &hdev->dev; + dev->gc.fwnode = device_get_named_child_node(&hdev->dev, "gpio"); dev->irq.name = "cp2112-gpio"; dev->irq.irq_startup = cp2112_gpio_irq_startup; @@ -1376,7 +1382,10 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id) err_gpiochip_remove: gpiochip_remove(&dev->gc); err_free_i2c: + fwnode_handle_put(dev->gc.fwnode); i2c_del_adapter(&dev->adap); +err_free_i2c_of: + fwnode_handle_put(dev_fwnode(&dev->adap.dev)); err_power_normal: hid_hw_power(hdev, PM_HINT_NORMAL); err_hid_close: @@ -1391,6 +1400,8 @@ static void cp2112_remove(struct hid_device *hdev) struct cp2112_device *dev = hid_get_drvdata(hdev); int i; + fwnode_handle_put(dev->gc.fwnode); + fwnode_handle_put(dev_fwnode(&dev->adap.dev)); sysfs_remove_group(&hdev->dev.kobj, &cp2112_attr_group); i2c_del_adapter(&dev->adap);