From patchwork Mon Feb 5 17:09:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Danny Kaehn X-Patchwork-Id: 13545950 Received: from mx0a-0046e701.pphosted.com (mx0a-0046e701.pphosted.com [67.231.149.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 264F144C79; Mon, 5 Feb 2024 17:39:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=67.231.149.93 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707154767; cv=none; b=LLGJebdbviE9bNRjQU50hN2IP07stzKGawYButZPomghAatCr9/DYl3UkZwkw7fsEpj0nRI3p1MbpHfI1sbEx3dISI4eKP3vAycz38mfVeyyzQc2oFUXUACk17HpUPczgX1O7bHuvWw5R7aostJcNB7WDtCj7Eda3b5kl9nHjV0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707154767; c=relaxed/simple; bh=PfPrSvl8macsOTASVTdaVpQtGniW4FyTFZpSDQapbzU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=u+az8ORPl+l+Fez3qopNqsiDSBTE5qcBl7vbS7DW91hPZSyquFD5mTIYGwOBZrT6HYhKRDdwgTX/Z76bdqbc+TkcIGRY7xP+fEJ1eldBJkPn3xxD4iip1uI9ZyWTfOOzGNwqiA59jWmPZHgUD52DhdoPLgMQuJ67KdqBSe8VMZ4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=plexus.com; spf=pass smtp.mailfrom=plexus.com; dkim=pass (2048-bit key) header.d=plexus.com header.i=@plexus.com header.b=Tir6mgG9; arc=none smtp.client-ip=67.231.149.93 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=plexus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=plexus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=plexus.com header.i=@plexus.com header.b="Tir6mgG9" Received: from pps.filterd (m0341554.ppops.net [127.0.0.1]) by mx0a-0046e701.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 415942dB006589; Mon, 5 Feb 2024 11:10:31 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=plexus.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s=pps1; bh=qi09aERGXrzq6TaIit5wBBXbtf7tAYC/KJeKKvaZw/g=; b=Tir6mgG94bw0 01Q1qH9WbK+UiE6N+BLQgCYgCHU30lquh3Lgg7K9xR3Tve50UQtGFB4JqUIWjS+b cQ6wND54N9ufQImd0JezMeWcpm7bbE7kV1yLmHOFUQTqpQ+sNBlJOg9bBBAx3mk0 WyBAjE945CQNfD5rN4+58nqDDDBg/hgCc9U/aGpTsVrQ/lygomZWxlmFM3uih6xp pJAzk5E3+OcAOFqbHeGdFAPK2F70K2i0PkxHx4aRAyu19K0+Lm6cANG+NzjZRSkt h6eXdizMDBolC5RsNvjiFcTkUvfsahvzkttzRK6c7KenW/hCvQz1ZXFs+D4cIc5/ 8piZA4EClA== Received: from dcc-mail-mx-002.na.plexus.com (outbound.plexus.com [64.215.193.254]) by mx0a-0046e701.pphosted.com (PPS) with ESMTPS id 3w2vqg148j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Mon, 05 Feb 2024 11:10:31 -0600 (CST) Received: from dcc-mail-mx-001.na.plexus.com (10.249.48.15) by Dcc-mail-mx-002.na.plexus.com (10.249.48.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Mon, 5 Feb 2024 17:10:29 +0000 Received: from LNDCL34533.neenah.na.plexus.com (10.255.48.203) by dcc-mail-mx-001.na.plexus.com (10.249.48.15) with Microsoft SMTP Server id 15.1.2507.35 via Frontend Transport; Mon, 5 Feb 2024 17:10:29 +0000 From: Danny Kaehn To: , , , CC: , , , , , , , Danny Kaehn Subject: [PATCH v10 1/3] dt-bindings: i2c: Add CP2112 HID USB to SMBus Bridge Date: Mon, 5 Feb 2024 11:09:20 -0600 Message-ID: <20240205170920.93499-2-danny.kaehn@plexus.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240205170920.93499-1-danny.kaehn@plexus.com> References: <20240205170920.93499-1-danny.kaehn@plexus.com> Precedence: bulk X-Mailing-List: linux-input@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-GUID: 0lcjYDnQ-WLfDU6GrJ6JNhydrbZE6X9A X-Proofpoint-ORIG-GUID: 0lcjYDnQ-WLfDU6GrJ6JNhydrbZE6X9A X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-05_11,2024-01-31_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 bulkscore=0 mlxlogscore=999 adultscore=0 mlxscore=0 suspectscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 spamscore=0 malwarescore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2401310000 definitions=main-2402050130 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 --- Note -- Reviewed-By tags have been removed as suggested by Benjamin, since 1. It has been 6+ months since this binding was reviewed, and a lot can change upstream in that time 2. There has been some contention between using named child nodes to identify i2c and gpio nodes, and also making the driver implementing this binding compatible with ACPI, since names aren't significant for ACPI nodes, and ACPI names are always automatically uppercased. It has been suggested that perhaps the DT binding should use child nodes with addressable `reg` properties to identify the child nodes, instead of by name [1]. Of course, I acknowledge that other firmware languages and kernel details shouldn't impact DT bindings, but it also seems that there should be some consistent way to specify sub-functions like this accross DT and ACPI. Some additional commentary / requests for comment about the seemingly missing glue here can be found in [2]. Any comments from Rob/Krzysztof/other DT folks would be greatly appreciated [1] https://lore.kernel.org/all/ZBhoHzTr5l38u%2FkX@smile.fi.intel.com/ [2] https://lore.kernel.org/all/CAP+ZCCd0cD+q7=ngyEzScAte2VT9R00mqCQxB3K2TMbeg8UAfA@mail.gmail.com/ .../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 5 17:09:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Danny Kaehn X-Patchwork-Id: 13545949 X-Patchwork-Delegate: jikos@jikos.cz Received: from mx0a-0046e701.pphosted.com (mx0a-0046e701.pphosted.com [67.231.149.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B114744C6F; Mon, 5 Feb 2024 17:39:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=67.231.149.93 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707154765; cv=none; b=B5w2hXgZYY7R/avCFe+Yd45ChpEXXTL5YdCOCuZ2XC/XgAe+I+vAJOS1o2xAjRSaHMU46uIr+GJ6Vn6gFgAvDhEUfFAVuMRNnKV+ZXiOH7kjXkOsj31RVwJaJ0hBB2yvWR7EgWMh9VXTuZngzpDlsEXQZXO0lH40GQtaM5JKDmE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707154765; c=relaxed/simple; bh=9hnHJza8r17vlHiz+/+rfMi1Okx1FH3zmz1ePcy2oMI=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=JEgFi1ZhgOcM1d5wxgbd2Vc4zyqzlQknZHeHZm0T5HGHXpDwa5po9wTzgE83zWVo9UG/OYxAsI0kuTE8cNEAPmujD8PfQdotT3qDz1AjjTYYBu8XO/ID9DspqwgwUOmeuM3tG3r9g9MyprSBgnwVpiMiLCWHR+UaEoYv3/71BNQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=plexus.com; spf=pass smtp.mailfrom=plexus.com; dkim=pass (2048-bit key) header.d=plexus.com header.i=@plexus.com header.b=V8lTk763; arc=none smtp.client-ip=67.231.149.93 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=plexus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=plexus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=plexus.com header.i=@plexus.com header.b="V8lTk763" Received: from pps.filterd (m0341554.ppops.net [127.0.0.1]) by mx0a-0046e701.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 415942dC006589; Mon, 5 Feb 2024 11:10:32 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=plexus.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s=pps1; bh=XE1cfQFn2B6AQ3LZuS/xKlC2tETv/cyVV6jAnXHLFH0=; b=V8lTk763xwzo xLiRZMbwjqZKBrZMGb9gliJNHV0cfaharlpIKdmrUYw234VTz7QhQHVeX14LKEel df2QT8DdOsdlEtb3oHEjp4eLGAd2sZfRZP440iaJAQ8LESLnwxuRuBXYckZpuH/f DETqoxkg9lxfJDy4EFU8QhP0BvNXBz3ZhP8umzLhdDH3mcy54SbymyAr+k+broeh Iqg1DqHyzSv8AhCvZ16EUQ8DMLKqDorO0aoX9bnGmGk2T+aBz3rQT64IeBs8RpV0 m1zJsSPyYVESBHnFKFLFdsrWNkYmpaOIHdr+EWVBk3TlSC8vtdfUzGH9RebL8OAn f4+ucHtAMw== Received: from dcc-mail-mx-002.na.plexus.com (outbound.plexus.com [64.215.193.254]) by mx0a-0046e701.pphosted.com (PPS) with ESMTPS id 3w2vqg148j-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Mon, 05 Feb 2024 11:10:32 -0600 (CST) Received: from dcc-mail-mx-001.na.plexus.com (10.249.48.15) by Dcc-mail-mx-002.na.plexus.com (10.249.48.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Mon, 5 Feb 2024 17:10:30 +0000 Received: from LNDCL34533.neenah.na.plexus.com (10.255.48.203) by dcc-mail-mx-001.na.plexus.com (10.249.48.15) with Microsoft SMTP Server id 15.1.2507.35 via Frontend Transport; Mon, 5 Feb 2024 17:10:30 +0000 From: Danny Kaehn To: , , , CC: , , , , , , , Danny Kaehn Subject: [PATCH v10 2/3] HID: usbhid: Share USB device firmware node with child HID device Date: Mon, 5 Feb 2024 11:09:21 -0600 Message-ID: <20240205170920.93499-3-danny.kaehn@plexus.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240205170920.93499-1-danny.kaehn@plexus.com> References: <20240205170920.93499-1-danny.kaehn@plexus.com> Precedence: bulk X-Mailing-List: linux-input@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-GUID: cCN9Yr8dK6i_3jSWPCEggFwB22-tkPM_ X-Proofpoint-ORIG-GUID: cCN9Yr8dK6i_3jSWPCEggFwB22-tkPM_ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-05_11,2024-01-31_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 bulkscore=0 mlxlogscore=999 adultscore=0 mlxscore=0 suspectscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 spamscore=0 malwarescore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2401310000 definitions=main-2402050130 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 a90ed2ceae84..cb687ea7325c 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 5 17:09:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Danny Kaehn X-Patchwork-Id: 13545951 X-Patchwork-Delegate: jikos@jikos.cz Received: from mx0a-0046e701.pphosted.com (mx0a-0046e701.pphosted.com [67.231.149.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B3A1445035; Mon, 5 Feb 2024 17:39:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=67.231.149.93 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707154767; cv=none; b=HB7+hZ2s6JliuWwKLP4ZPAGxjD5BtceAogpjIZvs0aZjAfoqiGipfaFdcZbTte3WAExMs0WCJsrX7x0UASDkl8jWR6sra832zFIC7u36GYDucF+mbxLXL7/TWCMxJB3IyiNS4NFM/Uob9Csemb906sSPZTzbp0dETCDTP3XKPL4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707154767; c=relaxed/simple; bh=J1Ty7HT+EcPsN48eKGCq00T/+JXCPX8XZZHVey7nC8o=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=HLwTjwzdhIC6mCC0ugPCAKayE6OhM45KSswtyxGZA5dGS20kS7I/KkahLqih7jIHMNkYi4COfs1DBxQpP1QG45r0VJiHNx5FgRdTUlOh5jQAyp/WRpVDlw0XYMtq+pMCWO0Ym6SXgwIgA2WXaUSpdEyyN9U5aWcwiY6NXX7i2UU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=plexus.com; spf=pass smtp.mailfrom=plexus.com; dkim=pass (2048-bit key) header.d=plexus.com header.i=@plexus.com header.b=GSXAYWaA; arc=none smtp.client-ip=67.231.149.93 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=plexus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=plexus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=plexus.com header.i=@plexus.com header.b="GSXAYWaA" Received: from pps.filterd (m0341554.ppops.net [127.0.0.1]) by mx0a-0046e701.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 415942dD006589; Mon, 5 Feb 2024 11:10:33 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=plexus.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s=pps1; bh=zmCLHNxG2Yjs2btIT/AyYeLs9CECTuFCT2Y40q2eIWw=; b=GSXAYWaAErdc F0HGg34mPpL8TiGYK54USTDc0EMThtTi2wviAAKp1zAKLGlWl/ZccxTx8PGxXL4l ntwYMdGUciWT5WuWKhL+Fru/Wayu8HKBphw6C82ZwjHGide7swMzkaPo6uERudHt sPf3JdT3ZKJ3OImEyMyOMIfrEj88Qb7Ni+ZG5oQxZzZ8S2gI3+KniwS4xp1RU3q3 k0vkDhEFv0HbJ+lZghDQMfZ2VrRG18Wybe8QykcbRWvqofN68VJCWtGBehMB71Ti gsppZelOkXzLiC/fSzlJ6jDz6pMDwt9BA7XFY83zYm3wpNEHMLuYtleT4bVGirBl gO+Y/KWWKw== Received: from dcc-mail-mx-002.na.plexus.com (outbound.plexus.com [64.215.193.254]) by mx0a-0046e701.pphosted.com (PPS) with ESMTPS id 3w2vqg148j-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Mon, 05 Feb 2024 11:10:32 -0600 (CST) Received: from dcc-mail-mx-001.na.plexus.com (10.249.48.15) by Dcc-mail-mx-002.na.plexus.com (10.249.48.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Mon, 5 Feb 2024 17:10:31 +0000 Received: from LNDCL34533.neenah.na.plexus.com (10.255.48.203) by dcc-mail-mx-001.na.plexus.com (10.249.48.15) with Microsoft SMTP Server id 15.1.2507.35 via Frontend Transport; Mon, 5 Feb 2024 17:10:31 +0000 From: Danny Kaehn To: , , , CC: , , , , , , , Danny Kaehn Subject: [PATCH v10 3/3] HID: cp2112: Fwnode Support Date: Mon, 5 Feb 2024 11:09:22 -0600 Message-ID: <20240205170920.93499-4-danny.kaehn@plexus.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240205170920.93499-1-danny.kaehn@plexus.com> References: <20240205170920.93499-1-danny.kaehn@plexus.com> Precedence: bulk X-Mailing-List: linux-input@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-GUID: OedAvNDX2QasoI_qyuG8ppnWFyQ9otif X-Proofpoint-ORIG-GUID: OedAvNDX2QasoI_qyuG8ppnWFyQ9otif X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-05_11,2024-01-31_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 bulkscore=0 mlxlogscore=999 adultscore=0 mlxscore=0 suspectscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 spamscore=0 malwarescore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2401310000 definitions=main-2402050130 Support describing the CP2112's I2C and GPIO interfaces in firmware. I2C and GPIO child nodes can either be children with names "i2c" and "gpio", or, for ACPI, device nodes with _ADR Zero and One, respectively. Additionally, support configuring the I2C bus speed from the clock-frequency device property. Signed-off-by: Danny Kaehn --- Modeled this version based on Andy's email [1], but made the following primary changes: 1. Use enum instead of #defines at Benjamin's request 2. Change if() else on checking name existence to allow a fwnode to have a name that doesn't match to still be checked for its ACPI address (since fwnode_get_name() _does_ still return a name for ACPI nodes) 3. Continue gracefully / silently if matching fwnodes fails ACPI compatibility re-tested in QEMU as per conversations in v8. NOTE: now that I'm not using device_get_named_child_node(), I am no longer being left with a fwnode reference. I am not entirely sure if I _need_ one for how I am using the handles, so I have left out the calls to fwnode_handle_get() and fwnode_hand_put() for now. Plese correct me if this is a situation where a reference should be held until the driver is removed. Note that this has been present since v9, but I intended to include this comment on that patch. [1] https://lore.kernel.org/all/ZBhYXwjPeRiZwxMT@smile.fi.intel.com/ drivers/hid/hid-cp2112.c | 50 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/drivers/hid/hid-cp2112.c b/drivers/hid/hid-cp2112.c index 20a0d1315d90..2ec0e5b95845 100644 --- a/drivers/hid/hid-cp2112.c +++ b/drivers/hid/hid-cp2112.c @@ -27,6 +27,25 @@ #include #include "hid-ids.h" +/** + * enum cp2112_child_acpi_cell_addrs - Child ACPI addresses for CP2112 sub-functions + * @CP2112_I2C_ADR: Address for I2C node + * @CP2112_GPIO_ADR: Address for GPIO node + */ +enum cp2112_child_acpi_cell_addrs { + CP2112_I2C_ADR = 0, + CP2112_GPIO_ADR = 1, +}; + +/** + * CP2112 Fwnode child names. + * CP2112 sub-functions can be described by named fwnode children or by ACPI _ADR + */ +static const char * const cp2112_cell_names[] = { + [CP2112_I2C_ADR] = "i2c", + [CP2112_GPIO_ADR] = "gpio", +}; + #define CP2112_REPORT_MAX_LENGTH 64 #define CP2112_GPIO_CONFIG_LENGTH 5 #define CP2112_GPIO_GET_LENGTH 2 @@ -1195,7 +1214,11 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id) struct cp2112_device *dev; u8 buf[3]; struct cp2112_smbus_config_report config; + struct fwnode_handle *child; struct gpio_irq_chip *girq; + struct i2c_timings timings; + const char *name; + u32 addr; int ret; dev = devm_kzalloc(&hdev->dev, sizeof(*dev), GFP_KERNEL); @@ -1209,6 +1232,30 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id) mutex_init(&dev->lock); + device_for_each_child_node(&hdev->dev, child) { + name = fwnode_get_name(child); + if (name) { + ret = match_string(cp2112_cell_names, + ARRAY_SIZE(cp2112_cell_names), name); + if (ret >= 0) + addr = ret; + } + if (!name || ret < 0) + ret = acpi_get_local_address(ACPI_HANDLE_FWNODE(child), &addr); + + if (ret < 0) + continue; + + switch (addr) { + case CP2112_I2C_ADR: + device_set_node(&dev->adap.dev, child); + break; + case CP2112_GPIO_ADR: + dev->gc.fwnode = child; + break; + } + } + ret = hid_parse(hdev); if (ret) { hid_err(hdev, "parse failed\n"); @@ -1254,6 +1301,9 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id) goto err_power_normal; } + 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),