From patchwork Wed Oct 27 18:13:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikita Travkin X-Patchwork-Id: 12587745 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9D554C19772 for ; Wed, 27 Oct 2021 18:25:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8A80360FC0 for ; Wed, 27 Oct 2021 18:25:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243547AbhJ0S2G (ORCPT ); Wed, 27 Oct 2021 14:28:06 -0400 Received: from box.trvn.ru ([194.87.146.52]:33939 "EHLO box.trvn.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243548AbhJ0S2F (ORCPT ); Wed, 27 Oct 2021 14:28:05 -0400 Received: from authenticated-user (box.trvn.ru [194.87.146.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by box.trvn.ru (Postfix) with ESMTPSA id 2230C4047A; Wed, 27 Oct 2021 23:15:24 +0500 (+05) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=trvn.ru; s=mail; t=1635358524; bh=8ur6ICJjhsS/B9AMUYVjZwUeQ8Fruu3EV0crM9k9t8g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RdM13EQS5ZdPyrCODJuOwTm1+Yjlly7H3j12t7/K6vo6zTyyY5rE4MniUZsZJ7c3b q3RGTxHp4thKHxqlvyjgkw65BJ6z83lQq7cOliBOosAIDzKRR/0uAlUOjX5nwHgj5p Aih+RRy3xCM25KoVH+2/QytGyVcXxrdD6u+wFNhpVAaPxr4ZlY8aXESogVORkR7U5W At6E0FQGiRBb0QdMDN1APu6LX6fJ0O+m21gmVfhf60X6DGUJup1GRWYOT379QffFx7 C7/kMiS3S/v0yg6gajNQ97BtFrCL+X2mOxPT8FqEhtkl//BUtoMDQxsyHOuLXz8xcl G9W9sZO4Y8ZOQ== From: Nikita Travkin To: dmitry.torokhov@gmail.com Cc: robh+dt@kernel.org, Michael.Srba@seznam.cz, linus.walleij@linaro.org, broonie@kernel.org, linux-input@vger.kernel.org, devicetree@vger.kernel.org, phone-devel@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Nikita Travkin Subject: [PATCH 1/6] input: touchscreen: zinitix: Make sure the IRQ is allocated before it gets enabled Date: Wed, 27 Oct 2021 23:13:45 +0500 Message-Id: <20211027181350.91630-2-nikita@trvn.ru> In-Reply-To: <20211027181350.91630-1-nikita@trvn.ru> References: <20211027181350.91630-1-nikita@trvn.ru> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org Since irq request is the last thing in the driver probe, it happens later than the input device registration. This means that there is a small time window where if the open method is called the driver will attempt to enable not yet available irq. Fix that by moving the irq request before the input device registration. Fixes: 26822652c85e ("Input: add zinitix touchscreen driver") Signed-off-by: Nikita Travkin Reviewed-by: Linus Walleij --- drivers/input/touchscreen/zinitix.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/input/touchscreen/zinitix.c b/drivers/input/touchscreen/zinitix.c index b8d901099378..1e70b8d2a8d7 100644 --- a/drivers/input/touchscreen/zinitix.c +++ b/drivers/input/touchscreen/zinitix.c @@ -488,6 +488,15 @@ static int zinitix_ts_probe(struct i2c_client *client) return error; } + error = devm_request_threaded_irq(&client->dev, client->irq, + NULL, zinitix_ts_irq_handler, + IRQF_ONESHOT | IRQF_NO_AUTOEN, + client->name, bt541); + if (error) { + dev_err(&client->dev, "Failed to request IRQ: %d\n", error); + return error; + } + error = zinitix_init_input_dev(bt541); if (error) { dev_err(&client->dev, @@ -513,15 +522,6 @@ static int zinitix_ts_probe(struct i2c_client *client) return -EINVAL; } - error = devm_request_threaded_irq(&client->dev, client->irq, - NULL, zinitix_ts_irq_handler, - IRQF_ONESHOT | IRQF_NO_AUTOEN, - client->name, bt541); - if (error) { - dev_err(&client->dev, "Failed to request IRQ: %d\n", error); - return error; - } - return 0; } From patchwork Wed Oct 27 18:13:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikita Travkin X-Patchwork-Id: 12587743 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 71B37C433F5 for ; Wed, 27 Oct 2021 18:25:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 52BDE60F9B for ; Wed, 27 Oct 2021 18:25:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243555AbhJ0S2G (ORCPT ); Wed, 27 Oct 2021 14:28:06 -0400 Received: from box.trvn.ru ([194.87.146.52]:42991 "EHLO box.trvn.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243547AbhJ0S2F (ORCPT ); Wed, 27 Oct 2021 14:28:05 -0400 Received: from authenticated-user (box.trvn.ru [194.87.146.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by box.trvn.ru (Postfix) with ESMTPSA id 019E8404F2; Wed, 27 Oct 2021 23:15:25 +0500 (+05) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=trvn.ru; s=mail; t=1635358526; bh=UJOfoe8/1TWY2klOu4+O2XWeWSwlbPuk+rK16FmF44w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Jot7LV8hVq51fTAYU2PYoFinpAvcSR04DM6KasqNjuZk5aufhxmOWxCpg2wPHPOPK sSVrrtsGE5MVdvhNovgP3mYIs16I86sBF1Tw+hvSo3ePQKO580hfMWxIWYhDOfDhEl REWAnpfKJX6b0ic3UkU2yytTQxqNmC/5zoib9lTQsU3CwMBm12BzzbdkcoUS5MYukd PfujXmuBHhjQQLI6TNT9Cb7Pw2HkeuNUTNVgYNgkL7xl7rkxDx5HV9j55bwSMx/Hv0 j8YaD+5ePHO+fMlVeVPMOMr9eLCXiUVQh3aacpnXQLZfgovcXMrSAQFsth2/rsR/PC x1OHiM1LVXNig== From: Nikita Travkin To: dmitry.torokhov@gmail.com Cc: robh+dt@kernel.org, Michael.Srba@seznam.cz, linus.walleij@linaro.org, broonie@kernel.org, linux-input@vger.kernel.org, devicetree@vger.kernel.org, phone-devel@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Nikita Travkin Subject: [PATCH 2/6] dt-bindings: input/ts/zinitix: Convert to YAML, fix and extend Date: Wed, 27 Oct 2021 23:13:46 +0500 Message-Id: <20211027181350.91630-3-nikita@trvn.ru> In-Reply-To: <20211027181350.91630-1-nikita@trvn.ru> References: <20211027181350.91630-1-nikita@trvn.ru> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org From: Linus Walleij This converts the Zinitix BT4xx and BT5xx touchscreen bindings to YAML, fix them up a bit and extends them. We list all the existing BT4xx and BT5xx components with compatible strings. These are all similar, use the same bindings and work in similar ways. We rename the supplies from the erroneous vdd/vddo to the actual supply names vcca/vdd as specified on the actual component. It is long established that supplies shall be named after the supply pin names of a component. The confusion probably stems from that in a certain product the rails to the component were named vdd/vddo. Drop some notes on how OS implementations should avoid confusion by first looking for vddo, and if that exists assume the legacy binding pair and otherwise use vcca/vdd. Add reset-gpios as sometimes manufacturers pulls a GPIO line to the reset line on the chip. Add optional touchscreen-fuzz-x and touchscreen-fuzz-y properties. Cc: Mark Brown Cc: Michael Srba Cc: phone-devel@vger.kernel.org Cc: devicetree@vger.kernel.org Signed-off-by: Linus Walleij [Fixed dt_schema_check error] Signed-off-by: Nikita Travkin Reviewed-by: Rob Herring --- This patch was previously submited here: https://lore.kernel.org/linux-input/20210625113435.2539282-1-linus.walleij@linaro.org/ Changes since the original patch: - Use enum for compatible list instead of oneOf + const --- .../input/touchscreen/zinitix,bt400.yaml | 115 ++++++++++++++++++ .../bindings/input/touchscreen/zinitix.txt | 40 ------ 2 files changed, 115 insertions(+), 40 deletions(-) create mode 100644 Documentation/devicetree/bindings/input/touchscreen/zinitix,bt400.yaml delete mode 100644 Documentation/devicetree/bindings/input/touchscreen/zinitix.txt diff --git a/Documentation/devicetree/bindings/input/touchscreen/zinitix,bt400.yaml b/Documentation/devicetree/bindings/input/touchscreen/zinitix,bt400.yaml new file mode 100644 index 000000000000..b4e5ba7c0b49 --- /dev/null +++ b/Documentation/devicetree/bindings/input/touchscreen/zinitix,bt400.yaml @@ -0,0 +1,115 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/input/touchscreen/zinitix,bt400.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Zinitix BT4xx and BT5xx series touchscreen controller bindings + +description: The Zinitix BT4xx and BT5xx series of touchscreen controllers + are Korea-produced touchscreens with embedded microcontrollers. The + BT4xx series was produced 2010-2013 and the BT5xx series 2013-2014. + +maintainers: + - Michael Srba + - Linus Walleij + +allOf: + - $ref: touchscreen.yaml# + +properties: + $nodename: + pattern: "^touchscreen(@.*)?$" + + compatible: + enum: + - zinitix,bt402 + - zinitix,bt403 + - zinitix,bt404 + - zinitix,bt412 + - zinitix,bt413 + - zinitix,bt431 + - zinitix,bt432 + - zinitix,bt531 + - zinitix,bt532 + - zinitix,bt538 + - zinitix,bt541 + - zinitix,bt548 + - zinitix,bt554 + - zinitix,at100 + + reg: + description: I2C address on the I2C bus + + clock-frequency: + description: I2C client clock frequency, defined for host when using + the device on the I2C bus + minimum: 0 + maximum: 400000 + + interrupts: + description: Interrupt to host + maxItems: 1 + + vcca-supply: + description: Analog power supply regulator on the VCCA pin + + vdd-supply: + description: Digital power supply regulator on the VDD pin. + In older device trees this can be the accidental name for the analog + supply on the VCCA pin, and in that case the deprecated vddo-supply is + used for the digital power supply. + + vddo-supply: + description: Deprecated name for the digital power supply, use vdd-supply + as this reflects the real name of the pin. If this supply is present, + the vdd-supply represents VCCA instead of VDD. Implementers should first + check for this property, and if it is present assume that the vdd-supply + represents the analog supply. + deprecated: true + + reset-gpios: + description: Reset line for the touchscreen, should be tagged + as GPIO_ACTIVE_LOW + + zinitix,mode: + description: Mode of reporting touch points. Some modes may not work + with a particular ts firmware for unknown reasons. Available modes are + 1 and 2. Mode 2 is the default and preferred. + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [1, 2] + + touchscreen-size-x: true + touchscreen-size-y: true + touchscreen-fuzz-x: true + touchscreen-fuzz-y: true + +additionalProperties: false + +required: + - compatible + - reg + - interrupts + - touchscreen-size-x + - touchscreen-size-y + +examples: + - | + #include + #include + i2c { + #address-cells = <1>; + #size-cells = <0>; + + touchscreen@20 { + compatible = "zinitix,bt541"; + reg = <0x20>; + interrupt-parent = <&gpio>; + interrupts = <13 IRQ_TYPE_EDGE_FALLING>; + vcca-supply = <®_vcca_tsp>; + vdd-supply = <®_vdd_tsp>; + touchscreen-size-x = <540>; + touchscreen-size-y = <960>; + zinitix,mode = <2>; + }; + }; diff --git a/Documentation/devicetree/bindings/input/touchscreen/zinitix.txt b/Documentation/devicetree/bindings/input/touchscreen/zinitix.txt deleted file mode 100644 index 446efb9f5f55..000000000000 --- a/Documentation/devicetree/bindings/input/touchscreen/zinitix.txt +++ /dev/null @@ -1,40 +0,0 @@ -Device tree bindings for Zinitx BT541 touchscreen controller - -Required properties: - - - compatible : Should be "zinitix,bt541" - - reg : I2C address of the chip. Should be 0x20 - - interrupts : Interrupt to which the chip is connected - -Optional properties: - - - vdd-supply : Analog power supply regulator on VCCA pin - - vddo-supply : Digital power supply regulator on VDD pin - - zinitix,mode : Mode of reporting touch points. Some modes may not work - with a particular ts firmware for unknown reasons. Available - modes are 1 and 2. Mode 2 is the default and preferred. - -The touchscreen-* properties are documented in touchscreen.txt in this -directory. - -Example: - - i2c@00000000 { - /* ... */ - - bt541@20 { - compatible = "zinitix,bt541"; - reg = <0x20>; - interrupt-parent = <&msmgpio>; - interrupts = <13 IRQ_TYPE_EDGE_FALLING>; - pinctrl-names = "default"; - pinctrl-0 = <&tsp_default>; - vdd-supply = <®_vdd_tsp>; - vddo-supply = <&pm8916_l6>; - touchscreen-size-x = <540>; - touchscreen-size-y = <960>; - zinitix,mode = <2>; - }; - - /* ... */ - }; From patchwork Wed Oct 27 18:13:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikita Travkin X-Patchwork-Id: 12587741 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 80D3EC4167E for ; Wed, 27 Oct 2021 18:25:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6A66260F9B for ; Wed, 27 Oct 2021 18:25:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243551AbhJ0S2F (ORCPT ); Wed, 27 Oct 2021 14:28:05 -0400 Received: from box.trvn.ru ([194.87.146.52]:49831 "EHLO box.trvn.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243549AbhJ0S2E (ORCPT ); Wed, 27 Oct 2021 14:28:04 -0400 Received: from authenticated-user (box.trvn.ru [194.87.146.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by box.trvn.ru (Postfix) with ESMTPSA id 1239440519; Wed, 27 Oct 2021 23:15:27 +0500 (+05) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=trvn.ru; s=mail; t=1635358527; bh=ar/AyF5GUE1L2gpjDkjuwKzVAeg5SZPXsABa6hsTHcM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=0S1XCdVeGxOHY+WyN5YS5cxkwDHPZVjvBOIf+zO7aGh+uBJqvS1F3u7/V34XwAdZ8 yGJaGjgftDXNHqj5OTbOeexmnjLTKKIVD6ulnRQUgbtGvg2CWbbxp00I32Po5oBFyx FJBiuH4XgHf08y2wV2++pPuAl9utWYHVbp71JULEigZiL150QLSt/zLI3DkNYgb4IE nFyygfmW/HiiT/0WZ5vXyPAuPG5xkyBf7WJf5yQs02upcdXE4NewIcgK+0uBrbyhlc UOMOfearjy4asHZr7Y9YzTsVfRJhD0+xflFq3zeIUbeHA+IVjoRyIoRfhjPo4wt4dN TIrhDA6vRm4zQ== From: Nikita Travkin To: dmitry.torokhov@gmail.com Cc: robh+dt@kernel.org, Michael.Srba@seznam.cz, linus.walleij@linaro.org, broonie@kernel.org, linux-input@vger.kernel.org, devicetree@vger.kernel.org, phone-devel@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Nikita Travkin Subject: [PATCH 3/6] Input: zinitix - Handle proper supply names Date: Wed, 27 Oct 2021 23:13:47 +0500 Message-Id: <20211027181350.91630-4-nikita@trvn.ru> In-Reply-To: <20211027181350.91630-1-nikita@trvn.ru> References: <20211027181350.91630-1-nikita@trvn.ru> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org From: Linus Walleij The supply names of the Zinitix touchscreen were a bit confused, the new bindings rectifies this. To deal with old and new devicetrees, first check if we have "vddo" and in case that exists assume the old supply names. Else go and look for the new ones. We cannot just get the regulators since we would get an OK and a dummy regulator: we need to check explicitly for the old supply name. Use struct device *dev as a local variable instead of the I2C client since the device is what we are actually obtaining the resources from. Cc: Mark Brown Cc: Michael Srba Cc: phone-devel@vger.kernel.org Cc: devicetree@vger.kernel.org Signed-off-by: Linus Walleij [Slightly changed the legacy regulator detection] Signed-off-by: Nikita Travkin --- This patch was previously submitted here: https://lore.kernel.org/linux-input/20210625113435.2539282-2-linus.walleij@linaro.org/ Changes since the original patch: - Adress the review comments by Dmitry: Drop explict OF check and use of_find_property() --- drivers/input/touchscreen/zinitix.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/drivers/input/touchscreen/zinitix.c b/drivers/input/touchscreen/zinitix.c index 1e70b8d2a8d7..d4e06a88a883 100644 --- a/drivers/input/touchscreen/zinitix.c +++ b/drivers/input/touchscreen/zinitix.c @@ -252,16 +252,27 @@ static int zinitix_init_touch(struct bt541_ts_data *bt541) static int zinitix_init_regulators(struct bt541_ts_data *bt541) { - struct i2c_client *client = bt541->client; + struct device *dev = &bt541->client->dev; int error; - bt541->supplies[0].supply = "vdd"; - bt541->supplies[1].supply = "vddo"; - error = devm_regulator_bulk_get(&client->dev, + /* + * Some older device trees have erroneous names for the regulators, + * so check if "vddo" is present and in that case use these names + * and warn. Else use the proper supply names on the component. + */ + if (of_find_property(dev->of_node, "vddo-supply", NULL)) { + bt541->supplies[0].supply = "vdd"; + bt541->supplies[1].supply = "vddo"; + } else { + /* Else use the proper supply names */ + bt541->supplies[0].supply = "vcca"; + bt541->supplies[1].supply = "vdd"; + } + error = devm_regulator_bulk_get(dev, ARRAY_SIZE(bt541->supplies), bt541->supplies); if (error < 0) { - dev_err(&client->dev, "Failed to get regulators: %d\n", error); + dev_err(dev, "Failed to get regulators: %d\n", error); return error; } From patchwork Wed Oct 27 18:13:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikita Travkin X-Patchwork-Id: 12587737 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E70CAC4321E for ; Wed, 27 Oct 2021 18:25:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D10DA610C7 for ; Wed, 27 Oct 2021 18:25:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243552AbhJ0S2E (ORCPT ); Wed, 27 Oct 2021 14:28:04 -0400 Received: from box.trvn.ru ([194.87.146.52]:58023 "EHLO box.trvn.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243550AbhJ0S2D (ORCPT ); Wed, 27 Oct 2021 14:28:03 -0400 Received: from authenticated-user (box.trvn.ru [194.87.146.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by box.trvn.ru (Postfix) with ESMTPSA id CBB124150F; Wed, 27 Oct 2021 23:15:28 +0500 (+05) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=trvn.ru; s=mail; t=1635358529; bh=rUAe9+YBz4twayA7MsH/h9YlgfxtOEUtH7zYEx82scY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=a1GJuXDncIPJ7q+at/DyvVxi0U8djYZMetdcAycIpZV5NWwUwfjAJWotIFlAhGuI1 yalsgpYRSK5m+Q2cZpjrYCZhkyup/lnIjk646EpceuOSlRfpwwycX/NA+zrDe9KNcu yDFE96az3m4r4/1CYKQkkthtWfKaMW9b7KxqR2GNCu4HcaLFKg5G+7e3+/wUTlj5Q7 HVm3jYiZrTLqwRyrIb81DZrxnfq5g8zcDxvhhmYD8jzp7ZCov5dsgGwPLqgCIaWYAY Zkb4bb1QeTnXfzSj2Kr0dDG9qhioL2A7+luJ8gXhj2JPu9blpphShGyQ+xSNSLlxLh eQeZwIHry27NA== From: Nikita Travkin To: dmitry.torokhov@gmail.com Cc: robh+dt@kernel.org, Michael.Srba@seznam.cz, linus.walleij@linaro.org, broonie@kernel.org, linux-input@vger.kernel.org, devicetree@vger.kernel.org, phone-devel@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Nikita Travkin Subject: [PATCH 4/6] input: touchscreen: zinitix: Add compatible for bt532 Date: Wed, 27 Oct 2021 23:13:48 +0500 Message-Id: <20211027181350.91630-5-nikita@trvn.ru> In-Reply-To: <20211027181350.91630-1-nikita@trvn.ru> References: <20211027181350.91630-1-nikita@trvn.ru> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org Zinitix BT532 is another touch controller that seem to implement the same interface as an already supported BT541. Add it to the driver. Signed-off-by: Nikita Travkin Reviewed-by: Linus Walleij --- drivers/input/touchscreen/zinitix.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/input/touchscreen/zinitix.c b/drivers/input/touchscreen/zinitix.c index d4e06a88a883..c67ff8be0df1 100644 --- a/drivers/input/touchscreen/zinitix.c +++ b/drivers/input/touchscreen/zinitix.c @@ -571,6 +571,7 @@ static SIMPLE_DEV_PM_OPS(zinitix_pm_ops, zinitix_suspend, zinitix_resume); #ifdef CONFIG_OF static const struct of_device_id zinitix_of_match[] = { + { .compatible = "zinitix,bt532" }, { .compatible = "zinitix,bt541" }, { } }; From patchwork Wed Oct 27 18:13:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikita Travkin X-Patchwork-Id: 12587735 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 52A34C4332F for ; Wed, 27 Oct 2021 18:25:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3AAE2610C7 for ; Wed, 27 Oct 2021 18:25:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243545AbhJ0S2E (ORCPT ); Wed, 27 Oct 2021 14:28:04 -0400 Received: from box.trvn.ru ([194.87.146.52]:45583 "EHLO box.trvn.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243552AbhJ0S2D (ORCPT ); Wed, 27 Oct 2021 14:28:03 -0400 Received: from authenticated-user (box.trvn.ru [194.87.146.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by box.trvn.ru (Postfix) with ESMTPSA id BB50041511; Wed, 27 Oct 2021 23:15:29 +0500 (+05) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=trvn.ru; s=mail; t=1635358530; bh=ro7ZVSbXpCwuaZX3j2xP7JzBXPN1tirbnRREQXQvgG0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lTz7F78NmkuT15Mb+2mqqiyay21LWBApUaDgnM+9Sce+FK0ZFduUNS0Q0x5iUXdzl N+iNktbClL5YkHxZMbzLe4mHVf6mO2BpjFI0PzEzKrNTRgv5dFO+C45tEPxFSS8uPh jruL/gZfS9YUZ1ZWbYNXR/BZGGIWSsIAX0UC4YpVyVUSzTqPGeCldT1cRXR3bGRjUp cHcOIHctTKsGlyNq30YsAv/3xp6sWYOTZbggFvjXjSpDT43DWM2oGdQ5CF/IstYrUZ mp7GBqrGUJ6xbgrgtY1hqzOHQf3UBB0ZeWZhiL9Xx5RhS8IlN0rx6ZRuJO6625xuQZ ww6VIsCgUiPPA== From: Nikita Travkin To: dmitry.torokhov@gmail.com Cc: robh+dt@kernel.org, Michael.Srba@seznam.cz, linus.walleij@linaro.org, broonie@kernel.org, linux-input@vger.kernel.org, devicetree@vger.kernel.org, phone-devel@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Nikita Travkin Subject: [PATCH 5/6] dt-bindings: input: zinitix: Document touch-keys support Date: Wed, 27 Oct 2021 23:13:49 +0500 Message-Id: <20211027181350.91630-6-nikita@trvn.ru> In-Reply-To: <20211027181350.91630-1-nikita@trvn.ru> References: <20211027181350.91630-1-nikita@trvn.ru> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org In some configrations the touch controller can support the touch-keys. Doucument the linux,keycodes property that enables those keys and specifies the keycodes that should be used to report the key events. Signed-off-by: Nikita Travkin --- .../bindings/input/touchscreen/zinitix,bt400.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Documentation/devicetree/bindings/input/touchscreen/zinitix,bt400.yaml b/Documentation/devicetree/bindings/input/touchscreen/zinitix,bt400.yaml index b4e5ba7c0b49..40b243c07fd4 100644 --- a/Documentation/devicetree/bindings/input/touchscreen/zinitix,bt400.yaml +++ b/Documentation/devicetree/bindings/input/touchscreen/zinitix,bt400.yaml @@ -79,6 +79,14 @@ properties: $ref: /schemas/types.yaml#/definitions/uint32 enum: [1, 2] + linux,keycodes: + description: | + This property specifies an array of keycodes assigned to the + touch-keys that can be present in some touchscreen configurations. + $ref: /schemas/input/input.yaml#/properties/linux,keycodes + minItems: 1 + maxItems: 8 + touchscreen-size-x: true touchscreen-size-y: true touchscreen-fuzz-x: true From patchwork Wed Oct 27 18:13:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikita Travkin X-Patchwork-Id: 12587739 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 38810C4167D for ; Wed, 27 Oct 2021 18:25:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1CB93610E6 for ; Wed, 27 Oct 2021 18:25:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243550AbhJ0S2F (ORCPT ); Wed, 27 Oct 2021 14:28:05 -0400 Received: from box.trvn.ru ([194.87.146.52]:43099 "EHLO box.trvn.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243551AbhJ0S2E (ORCPT ); Wed, 27 Oct 2021 14:28:04 -0400 Received: from authenticated-user (box.trvn.ru [194.87.146.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by box.trvn.ru (Postfix) with ESMTPSA id C44E641529; Wed, 27 Oct 2021 23:15:39 +0500 (+05) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=trvn.ru; s=mail; t=1635358540; bh=cgDYHCdB8QiYBWs51s9ZU+FfUF5Ddq4c/CqiSaN+e0o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YyRh6datOkMl4/xeh2erE8yG9kyNQcecMKgjI3ukszz31HVq/S3TYgKh9kBOc13YC 6D9h361TA5ri6jni+OZkx12EmIaWQAtyl9IL50Q2Gii8vY99P5DuxRlPd3xauKoW0z dskk8sWjixDW32zUb025G6obepWivrLCmtyXDtjG+6bAJRSS85dylJQjuEVvwXYG0Q qmxwXPqnDQBoNFjidoxfO+dW1JnsAiDdk6haOkhj+OLjIVN1YslJWvDRjNtEy7Ufiq 1TkUZSdriD97wycqTUKL4/pxYmIOOq0GIRPp4NHgeytljyNn35H0nT/8cwXkvOloGB zK3F3nJYw6dvQ== From: Nikita Travkin To: dmitry.torokhov@gmail.com Cc: robh+dt@kernel.org, Michael.Srba@seznam.cz, linus.walleij@linaro.org, broonie@kernel.org, linux-input@vger.kernel.org, devicetree@vger.kernel.org, phone-devel@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Nikita Travkin Subject: [PATCH 6/6] input: touchscreen: zinitix: Add touchkey support Date: Wed, 27 Oct 2021 23:13:50 +0500 Message-Id: <20211027181350.91630-7-nikita@trvn.ru> In-Reply-To: <20211027181350.91630-1-nikita@trvn.ru> References: <20211027181350.91630-1-nikita@trvn.ru> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org Zinitix touch controllers can use some of the sense lines for virtual keys (like those found on many phones). Add support for those keys. Signed-off-by: Nikita Travkin Reviewed-by: Linus Walleij Reported-by: kernel test robot --- drivers/input/touchscreen/zinitix.c | 61 +++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/drivers/input/touchscreen/zinitix.c b/drivers/input/touchscreen/zinitix.c index c67ff8be0df1..3928cb743a1c 100644 --- a/drivers/input/touchscreen/zinitix.c +++ b/drivers/input/touchscreen/zinitix.c @@ -119,6 +119,7 @@ #define DEFAULT_TOUCH_POINT_MODE 2 #define MAX_SUPPORTED_FINGER_NUM 5 +#define MAX_SUPPORTED_BUTTON_NUM 8 #define CHIP_ON_DELAY 15 // ms #define FIRMWARE_ON_DELAY 40 // ms @@ -146,6 +147,8 @@ struct bt541_ts_data { struct touchscreen_properties prop; struct regulator_bulk_data supplies[2]; u32 zinitix_mode; + u32 keycodes[MAX_SUPPORTED_BUTTON_NUM]; + int num_keycodes; }; static int zinitix_read_data(struct i2c_client *client, @@ -195,6 +198,7 @@ static int zinitix_init_touch(struct bt541_ts_data *bt541) struct i2c_client *client = bt541->client; int i; int error; + u16 int_flags = 0; error = zinitix_write_cmd(client, BT541_SWRESET_CMD); if (error) { @@ -225,6 +229,11 @@ static int zinitix_init_touch(struct bt541_ts_data *bt541) if (error) return error; + error = zinitix_write_u16(client, BT541_BUTTON_SUPPORTED_NUM, + bt541->num_keycodes); + if (error) + return error; + error = zinitix_write_u16(client, BT541_INITIAL_TOUCH_MODE, bt541->zinitix_mode); if (error) @@ -235,9 +244,12 @@ static int zinitix_init_touch(struct bt541_ts_data *bt541) if (error) return error; - error = zinitix_write_u16(client, BT541_INT_ENABLE_FLAG, - BIT_PT_CNT_CHANGE | BIT_DOWN | BIT_MOVE | - BIT_UP); + int_flags = BIT_PT_CNT_CHANGE | BIT_DOWN | BIT_MOVE | BIT_UP; + + if (bt541->num_keycodes) + int_flags |= BIT_ICON_EVENT; + + error = zinitix_write_u16(client, BT541_INT_ENABLE_FLAG, int_flags); if (error) return error; @@ -329,6 +341,15 @@ static void zinitix_report_finger(struct bt541_ts_data *bt541, int slot, input_report_abs(bt541->input_dev, ABS_MT_TOUCH_MAJOR, p->width); } +static void zinitix_report_keys(struct bt541_ts_data *bt541, __le16 icon_events) +{ + int i; + + for (i = 0; i < bt541->num_keycodes; i++) + input_report_key(bt541->input_dev, + bt541->keycodes[i], !!(icon_events & BIT(i))); +} + static irqreturn_t zinitix_ts_irq_handler(int irq, void *bt541_handler) { struct bt541_ts_data *bt541 = bt541_handler; @@ -336,6 +357,7 @@ static irqreturn_t zinitix_ts_irq_handler(int irq, void *bt541_handler) struct touch_event touch_event; int error; int i; + __le16 icon_events = 0; memset(&touch_event, 0, sizeof(struct touch_event)); @@ -346,6 +368,17 @@ static irqreturn_t zinitix_ts_irq_handler(int irq, void *bt541_handler) goto out; } + if (touch_event.status & BIT_ICON_EVENT) { + error = zinitix_read_data(bt541->client, BT541_ICON_STATUS_REG, + &icon_events, sizeof(icon_events)); + if (error) { + dev_err(&client->dev, "Failed to read icon events\n"); + goto out; + } + + zinitix_report_keys(bt541, icon_events); + } + for (i = 0; i < MAX_SUPPORTED_FINGER_NUM; i++) if (touch_event.point_coord[i].sub_status & SUB_BIT_EXIST) zinitix_report_finger(bt541, i, @@ -427,6 +460,7 @@ static int zinitix_init_input_dev(struct bt541_ts_data *bt541) { struct input_dev *input_dev; int error; + int i; input_dev = devm_input_allocate_device(&bt541->client->dev); if (!input_dev) { @@ -444,6 +478,14 @@ static int zinitix_init_input_dev(struct bt541_ts_data *bt541) input_dev->open = zinitix_input_open; input_dev->close = zinitix_input_close; + if (bt541->num_keycodes) { + input_dev->keycode = bt541->keycodes; + input_dev->keycodemax = bt541->num_keycodes; + input_dev->keycodesize = sizeof(bt541->keycodes[0]); + for (i = 0; i < bt541->num_keycodes; i++) + input_set_capability(input_dev, EV_KEY, bt541->keycodes[i]); + } + input_set_capability(input_dev, EV_ABS, ABS_MT_POSITION_X); input_set_capability(input_dev, EV_ABS, ABS_MT_POSITION_Y); input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0); @@ -508,6 +550,19 @@ static int zinitix_ts_probe(struct i2c_client *client) return error; } + bt541->num_keycodes = of_property_read_variable_u32_array( + client->dev.of_node, "linux,keycodes", + bt541->keycodes, 0, + ARRAY_SIZE(bt541->keycodes)); + if (bt541->num_keycodes == -EINVAL) { + bt541->num_keycodes = 0; + } else if (bt541->num_keycodes < 0) { + dev_err(&client->dev, + "Unable to parse \"linux,keycodes\" property: %d\n", + bt541->num_keycodes); + return bt541->num_keycodes; + } + error = zinitix_init_input_dev(bt541); if (error) { dev_err(&client->dev,