From patchwork Fri Apr 7 12:44:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Apitzsch?= X-Patchwork-Id: 80777 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp260555vqo; Fri, 7 Apr 2023 05:49:49 -0700 (PDT) X-Google-Smtp-Source: AKy350acItIgPH2BNb2Zasdd4/3FMcxXQqDV+LCRrRms91on9d3lqjLyQKIyuw2IlvoQp08fa/kB X-Received: by 2002:a05:6402:7ce:b0:502:2148:2980 with SMTP id u14-20020a05640207ce00b0050221482980mr2281476edy.30.1680871789317; Fri, 07 Apr 2023 05:49:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1680871789; cv=none; d=google.com; s=arc-20160816; b=jpZh4VMog1gKz4EZR7ker3ZxhNhCXi5Vlj1W5bB01Wb6ckknMaK8GXNdVsPnPP2+1K kI7OHSr3xwlSPIcKWBHTJr/nXMZkc8rtTPCYDlkNvsRS6KtKqj1y9gdQdbIqHjInYzjf BHSzQLU6itLOAK7gEmvD7HBBvQj+vv+GXSlHOSS6IQZGuVzp4FqIz7nBPxGeJ1hkarw/ 2SAcGGsy3BNck5sB0ebo1kBAlFeIGCCR1BdTAxCa7JC6F0mXLl59CfYGDm2cDmCgCzhj GqZASOUuaeTCGkgk30r37/+H46ZTUH5u7Oq/fVuz9EMkGmeMOufdAHBn2iL6S3z9aF8W y+pg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from; bh=CtcE/NvBRcdNBusvMeCn2jEShLCbh8MSJh/lpl1iAy0=; b=LlQ9+SjahfN9YGBONUl92YnL965ifWocjyc83/lVm3j1g772tkvKe40Y1gISKrBdDu pjBx0vzmxkyDw4600Oal/DNjtkFDl/vgY3tKEIE/QmD7AyHwLIFTxo9Esjr2v0LIChc/ oSc0gSNTR0RVe6op/35gJ54Ilw5OoxD3JosvwBleiBaRNgM0281CCCt5ml239wYhVwvC kHzxeo3Qf5S+dUUoONm0kslBHlU66jyKZR2QO0scchBX8NoYlBfUCqUDE+GznTmel9G/ o0AZ4GkDmpKcZFfewZplkkHxoug1asC8f51xDIPn7TedFgZbPpnLnRmrXc25hCc9mjjz s8zw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w10-20020aa7cb4a000000b004bd1a7dba86si2730006edt.410.2023.04.07.05.49.25; Fri, 07 Apr 2023 05:49:49 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232001AbjDGMqn (ORCPT + 99 others); Fri, 7 Apr 2023 08:46:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55888 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229609AbjDGMqm (ORCPT ); Fri, 7 Apr 2023 08:46:42 -0400 Received: from smtprelay04.ispgateway.de (smtprelay04.ispgateway.de [80.67.18.16]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2E17540F6; Fri, 7 Apr 2023 05:46:41 -0700 (PDT) Received: from [92.206.161.29] (helo=note-book.lan) by smtprelay04.ispgateway.de with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1pklTE-0002cY-Ac; Fri, 07 Apr 2023 14:45:36 +0200 From: =?utf-8?q?Andr=C3=A9_Apitzsch?= Date: Fri, 07 Apr 2023 14:44:24 +0200 Subject: [PATCH v2 1/2] dt-bindings: input: atmel,maxtouch: add linux,keycodes MIME-Version: 1.0 Message-Id: <20230407-atmel_keys-v2-1-92446a4343cb@apitzsch.eu> References: <20230407-atmel_keys-v2-0-92446a4343cb@apitzsch.eu> In-Reply-To: <20230407-atmel_keys-v2-0-92446a4343cb@apitzsch.eu> To: Nick Dyer , Dmitry Torokhov , Rob Herring , Krzysztof Kozlowski , Nicolas Ferre , Alexandre Belloni , Claudiu Beznea , Linus Walleij Cc: linux-input@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, =?utf-8?q?Andr=C3=A9_Apitzsch?= , Krzysztof Kozlowski X-Mailer: b4 0.12.2 X-Df-Sender: YW5kcmVAYXBpdHpzY2guZXU= X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762521817331922559?= X-GMAIL-MSGID: =?utf-8?q?1762521817331922559?= In some configurations the touch controller can support the touch keys. Document the linux,keycodes property that enables those keys and specifies the keycodes that should be used to report the key events. Reviewed-by: Linus Walleij Acked-by: Krzysztof Kozlowski Signed-off-by: André Apitzsch --- Documentation/devicetree/bindings/input/atmel,maxtouch.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Documentation/devicetree/bindings/input/atmel,maxtouch.yaml b/Documentation/devicetree/bindings/input/atmel,maxtouch.yaml index 3ec579d63570..c40799355ed7 100644 --- a/Documentation/devicetree/bindings/input/atmel,maxtouch.yaml +++ b/Documentation/devicetree/bindings/input/atmel,maxtouch.yaml @@ -14,6 +14,9 @@ description: | Atmel maXTouch touchscreen or touchpads such as the mXT244 and similar devices. +allOf: + - $ref: input.yaml# + properties: compatible: const: atmel,maxtouch @@ -60,6 +63,10 @@ properties: or experiment to determine which bit corresponds to which input. Use KEY_RESERVED for unused padding values. + linux,keycodes: + minItems: 1 + maxItems: 8 + atmel,wakeup-method: $ref: /schemas/types.yaml#/definitions/uint32 description: | From patchwork Fri Apr 7 12:44:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Apitzsch?= X-Patchwork-Id: 80780 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp263103vqo; Fri, 7 Apr 2023 05:55:27 -0700 (PDT) X-Google-Smtp-Source: AKy350bu77CV05ZAGUSp7vMWeob7EuD1/EyEayfOxzpvjT0nBJt1D0ANYDzZkXtC71nEndyw28Nf X-Received: by 2002:a05:6402:b09:b0:501:cde5:4cc9 with SMTP id bm9-20020a0564020b0900b00501cde54cc9mr1953874edb.39.1680872127021; Fri, 07 Apr 2023 05:55:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1680872127; cv=none; d=google.com; s=arc-20160816; b=ZAcEAcLlZQelhpFM93VW79RnC4L4Z1sQhJzphEt3uoJhwQ6tPwaCwsyHB12uyodX9b SQp+L2geVHNBuA5nVvrCdhHjlJChbVqTgmq2mtdXjXXLTu/r3vM5mEbV6WGKN+OinRCg Yef5r2CidnIjVTLl47y+lBr79QPgGWsMAbEB43THWqn2XQ5etesk9kemN+8G9R2001wW DlvN+A+6fQdVlfi6V18x9w1Ez4fud9rm3LGFTSv/p1NE9RGxC5jNUbVH5/IM0AVO7gQi todcTqu+jJvBVcNu3Qz5kjCgm5LZ3Dia/JT1OKZFiGcZVjaDtZg3mVkG+scfioIS456P U68Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from; bh=IXMLtxaY9EiusYakPgKrV7my+emTLCXw2FIgbQbFQgI=; b=EkkekfUU7mTH/MJn/UPBUa7tJpFG6vGQuIHxKkZomOMYl3op8WJfw0tERdBlaxsnc2 MEpFNg58RuhtHoO4Ko0bwlBpCcTLoJQolHcMZBDszPJLtnqBLgyArHKwAR3pVVRmh9w3 0nhd0SMsZjGqF1qoLk42yopMrLQwmEJzzAM67jYkm/L3pj4+18k0yd0viQTdh9cq0nh0 hpAdwwLjUklg7ktVKS7mRRmFwJdncmJAF8c/us86sR+Ee2vl7Uu9FIRO71nyawXLLlOq 1xwBTnc6qLT3fp2gqggn8NYH2MEr8xGkfBxhjl1LOykX6lPtWPkmZ7qR2fr84mF/0g2H Hrwg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id l9-20020a056402344900b005002e71a84fsi1119560edc.137.2023.04.07.05.55.02; Fri, 07 Apr 2023 05:55:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230369AbjDGMpp (ORCPT + 99 others); Fri, 7 Apr 2023 08:45:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55276 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229609AbjDGMpn (ORCPT ); Fri, 7 Apr 2023 08:45:43 -0400 Received: from smtprelay04.ispgateway.de (smtprelay04.ispgateway.de [80.67.18.16]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 12FED40F6; Fri, 7 Apr 2023 05:45:39 -0700 (PDT) Received: from [92.206.161.29] (helo=note-book.lan) by smtprelay04.ispgateway.de with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1pklTE-0002cY-O8; Fri, 07 Apr 2023 14:45:36 +0200 From: =?utf-8?q?Andr=C3=A9_Apitzsch?= Date: Fri, 07 Apr 2023 14:44:25 +0200 Subject: [PATCH v2 2/2] Input: atmel_mxt_ts - support capacitive keys MIME-Version: 1.0 Message-Id: <20230407-atmel_keys-v2-2-92446a4343cb@apitzsch.eu> References: <20230407-atmel_keys-v2-0-92446a4343cb@apitzsch.eu> In-Reply-To: <20230407-atmel_keys-v2-0-92446a4343cb@apitzsch.eu> To: Nick Dyer , Dmitry Torokhov , Rob Herring , Krzysztof Kozlowski , Nicolas Ferre , Alexandre Belloni , Claudiu Beznea , Linus Walleij Cc: linux-input@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, =?utf-8?q?Andr=C3=A9_Apitzsch?= X-Mailer: b4 0.12.2 X-Df-Sender: YW5kcmVAYXBpdHpzY2guZXU= X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762521898685015978?= X-GMAIL-MSGID: =?utf-8?q?1762522171621339639?= Add support for touch keys found in some Atmel touch controller configurations. Reviewed-by: Claudiu Beznea Reviewed-by: Linus Walleij Signed-off-by: André Apitzsch --- drivers/input/touchscreen/atmel_mxt_ts.c | 85 ++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c index 996bf434e1cb..eb368dd1abf0 100644 --- a/drivers/input/touchscreen/atmel_mxt_ts.c +++ b/drivers/input/touchscreen/atmel_mxt_ts.c @@ -55,6 +55,7 @@ #define MXT_TOUCH_KEYARRAY_T15 15 #define MXT_TOUCH_PROXIMITY_T23 23 #define MXT_TOUCH_PROXKEY_T52 52 +#define MXT_TOUCH_PTC_KEYS_T97 97 #define MXT_PROCI_GRIPFACE_T20 20 #define MXT_PROCG_NOISE_T22 22 #define MXT_PROCI_ONETOUCH_T24 24 @@ -326,9 +327,13 @@ struct mxt_data { u16 T71_address; u8 T9_reportid_min; u8 T9_reportid_max; + u8 T15_reportid_min; + u8 T15_reportid_max; u16 T18_address; u8 T19_reportid; u16 T44_address; + u8 T97_reportid_min; + u8 T97_reportid_max; u8 T100_reportid_min; u8 T100_reportid_max; @@ -344,6 +349,9 @@ struct mxt_data { u32 *t19_keymap; unsigned int t19_num_keys; + u32 *t15_keymap; + unsigned int t15_num_keys; + enum mxt_suspend_mode suspend_mode; u32 wakeup_method; @@ -375,6 +383,7 @@ static bool mxt_object_readable(unsigned int type) case MXT_TOUCH_KEYARRAY_T15: case MXT_TOUCH_PROXIMITY_T23: case MXT_TOUCH_PROXKEY_T52: + case MXT_TOUCH_PTC_KEYS_T97: case MXT_TOUCH_MULTITOUCHSCREEN_T100: case MXT_PROCI_GRIPFACE_T20: case MXT_PROCG_NOISE_T22: @@ -891,6 +900,25 @@ static void mxt_proc_t9_message(struct mxt_data *data, u8 *message) data->update_input = true; } +static void mxt_proc_t15_messages(struct mxt_data *data, u8 *message) +{ + struct input_dev *input_dev = data->input_dev; + unsigned long keystates = get_unaligned_le32(&message[2]); + int key; + + for (key = 0; key < data->t15_num_keys; key++) { + input_report_key(input_dev, data->t15_keymap[key], + !!(keystates & BIT(key))); + } + + data->update_input = true; +} + +static void mxt_proc_t97_messages(struct mxt_data *data, u8 *message) +{ + mxt_proc_t15_messages(data, message); +} + static void mxt_proc_t100_message(struct mxt_data *data, u8 *message) { struct device *dev = &data->client->dev; @@ -1017,6 +1045,12 @@ static int mxt_proc_message(struct mxt_data *data, u8 *message) } else if (report_id >= data->T9_reportid_min && report_id <= data->T9_reportid_max) { mxt_proc_t9_message(data, message); + } else if (report_id >= data->T15_reportid_min && + report_id <= data->T15_reportid_max) { + mxt_proc_t15_messages(data, message); + } else if (report_id >= data->T97_reportid_min && + report_id <= data->T97_reportid_max) { + mxt_proc_t97_messages(data, message); } else if (report_id >= data->T100_reportid_min && report_id <= data->T100_reportid_max) { mxt_proc_t100_message(data, message); @@ -1689,9 +1723,13 @@ static void mxt_free_object_table(struct mxt_data *data) data->T71_address = 0; data->T9_reportid_min = 0; data->T9_reportid_max = 0; + data->T15_reportid_min = 0; + data->T15_reportid_max = 0; data->T18_address = 0; data->T19_reportid = 0; data->T44_address = 0; + data->T97_reportid_min = 0; + data->T97_reportid_max = 0; data->T100_reportid_min = 0; data->T100_reportid_max = 0; data->max_reportid = 0; @@ -1764,6 +1802,10 @@ static int mxt_parse_object_table(struct mxt_data *data, object->num_report_ids - 1; data->num_touchids = object->num_report_ids; break; + case MXT_TOUCH_KEYARRAY_T15: + data->T15_reportid_min = min_id; + data->T15_reportid_max = max_id; + break; case MXT_SPT_COMMSCONFIG_T18: data->T18_address = object->start_address; break; @@ -1773,6 +1815,10 @@ static int mxt_parse_object_table(struct mxt_data *data, case MXT_SPT_GPIOPWM_T19: data->T19_reportid = min_id; break; + case MXT_TOUCH_PTC_KEYS_T97: + data->T97_reportid_min = min_id; + data->T97_reportid_max = max_id; + break; case MXT_TOUCH_MULTITOUCHSCREEN_T100: data->multitouch = MXT_TOUCH_MULTITOUCHSCREEN_T100; data->T100_reportid_min = min_id; @@ -2050,6 +2096,7 @@ static int mxt_initialize_input_device(struct mxt_data *data) int error; unsigned int num_mt_slots; unsigned int mt_flags = 0; + int i; switch (data->multitouch) { case MXT_TOUCH_MULTI_T9: @@ -2095,6 +2142,10 @@ static int mxt_initialize_input_device(struct mxt_data *data) input_dev->open = mxt_input_open; input_dev->close = mxt_input_close; + input_dev->keycode = data->t15_keymap; + input_dev->keycodemax = data->t15_num_keys; + input_dev->keycodesize = sizeof(data->t15_keymap[0]); + input_set_capability(input_dev, EV_KEY, BTN_TOUCH); /* For single touch */ @@ -2162,6 +2213,12 @@ static int mxt_initialize_input_device(struct mxt_data *data) 0, 255, 0, 0); } + /* For T15 and T97 Key Array */ + if (data->T15_reportid_min || data->T97_reportid_min) { + for (i = 0; i < data->t15_num_keys; i++) + input_set_capability(input_dev, EV_KEY, data->t15_keymap[i]); + } + input_set_drvdata(input_dev, data); error = input_register_device(input_dev); @@ -3080,8 +3137,10 @@ static void mxt_input_close(struct input_dev *dev) static int mxt_parse_device_properties(struct mxt_data *data) { static const char keymap_property[] = "linux,gpio-keymap"; + static const char buttons_property[] = "linux,keycodes"; struct device *dev = &data->client->dev; u32 *keymap; + u32 *buttonmap; int n_keys; int error; @@ -3111,6 +3170,32 @@ static int mxt_parse_device_properties(struct mxt_data *data) data->t19_num_keys = n_keys; } + if (device_property_present(dev, buttons_property)) { + n_keys = device_property_count_u32(dev, buttons_property); + if (n_keys <= 0) { + error = n_keys < 0 ? n_keys : -EINVAL; + dev_err(dev, "invalid/malformed '%s' property: %d\n", + buttons_property, error); + return error; + } + + buttonmap = devm_kmalloc_array(dev, n_keys, sizeof(*buttonmap), + GFP_KERNEL); + if (!buttonmap) + return -ENOMEM; + + error = device_property_read_u32_array(dev, buttons_property, + buttonmap, n_keys); + if (error) { + dev_err(dev, "failed to parse '%s' property: %d\n", + buttons_property, error); + return error; + } + + data->t15_keymap = buttonmap; + data->t15_num_keys = n_keys; + } + return 0; }