linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] dt-bindings: input: atmel,maxtouch: add linux,keycodes
@ 2023-02-27 20:50 André Apitzsch
  2023-02-27 20:50 ` [PATCH 2/2] Input: atmel_mxt_ts - support capacitive keys André Apitzsch
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: André Apitzsch @ 2023-02-27 20:50 UTC (permalink / raw)
  To: Nick Dyer, Dmitry Torokhov, Rob Herring, Krzysztof Kozlowski,
	Nicolas Ferre, Alexandre Belloni, Claudiu Beznea, Linus Walleij,
	linux-input, devicetree, linux-arm-kernel, linux-kernel
  Cc: ~postmarketos/upstreaming, André Apitzsch

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.

Signed-off-by: André Apitzsch <git@apitzsch.eu>
---
 .../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: |

base-commit: 982818426a0ffaf93b0621826ed39a84be3d7d62
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] Input: atmel_mxt_ts - support capacitive keys
  2023-02-27 20:50 [PATCH 1/2] dt-bindings: input: atmel,maxtouch: add linux,keycodes André Apitzsch
@ 2023-02-27 20:50 ` André Apitzsch
  2023-03-06 22:54   ` Linus Walleij
  2023-03-07  8:57   ` Claudiu.Beznea
  2023-02-28  8:18 ` [PATCH 1/2] dt-bindings: input: atmel,maxtouch: add linux,keycodes Krzysztof Kozlowski
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 7+ messages in thread
From: André Apitzsch @ 2023-02-27 20:50 UTC (permalink / raw)
  To: Nick Dyer, Dmitry Torokhov, Rob Herring, Krzysztof Kozlowski,
	Nicolas Ferre, Alexandre Belloni, Claudiu Beznea, Linus Walleij,
	linux-input, devicetree, linux-arm-kernel, linux-kernel
  Cc: ~postmarketos/upstreaming, André Apitzsch

Add support for touch keys found in some Atmel touch controller
configurations.

Signed-off-by: André Apitzsch <git@apitzsch.eu>
---
 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;
 }
 
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] dt-bindings: input: atmel,maxtouch: add linux,keycodes
  2023-02-27 20:50 [PATCH 1/2] dt-bindings: input: atmel,maxtouch: add linux,keycodes André Apitzsch
  2023-02-27 20:50 ` [PATCH 2/2] Input: atmel_mxt_ts - support capacitive keys André Apitzsch
@ 2023-02-28  8:18 ` Krzysztof Kozlowski
  2023-03-06 14:19 ` Linus Walleij
  2023-03-25 10:37 ` André Apitzsch
  3 siblings, 0 replies; 7+ messages in thread
From: Krzysztof Kozlowski @ 2023-02-28  8:18 UTC (permalink / raw)
  To: André Apitzsch, Nick Dyer, Dmitry Torokhov, Rob Herring,
	Krzysztof Kozlowski, Nicolas Ferre, Alexandre Belloni,
	Claudiu Beznea, Linus Walleij, linux-input, devicetree,
	linux-arm-kernel, linux-kernel
  Cc: ~postmarketos/upstreaming

On 27/02/2023 21:50, André Apitzsch wrote:
> 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.
> 
> Signed-off-by: André Apitzsch <git@apitzsch.eu>
> ---


Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] dt-bindings: input: atmel,maxtouch: add linux,keycodes
  2023-02-27 20:50 [PATCH 1/2] dt-bindings: input: atmel,maxtouch: add linux,keycodes André Apitzsch
  2023-02-27 20:50 ` [PATCH 2/2] Input: atmel_mxt_ts - support capacitive keys André Apitzsch
  2023-02-28  8:18 ` [PATCH 1/2] dt-bindings: input: atmel,maxtouch: add linux,keycodes Krzysztof Kozlowski
@ 2023-03-06 14:19 ` Linus Walleij
  2023-03-25 10:37 ` André Apitzsch
  3 siblings, 0 replies; 7+ messages in thread
From: Linus Walleij @ 2023-03-06 14:19 UTC (permalink / raw)
  To: André Apitzsch
  Cc: Nick Dyer, Dmitry Torokhov, Rob Herring, Krzysztof Kozlowski,
	Nicolas Ferre, Alexandre Belloni, Claudiu Beznea, linux-input,
	devicetree, linux-arm-kernel, linux-kernel,
	~postmarketos/upstreaming

On Mon, Feb 27, 2023 at 9:50 PM André Apitzsch <git@apitzsch.eu> wrote:

> 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.
>
> Signed-off-by: André Apitzsch <git@apitzsch.eu>

Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] Input: atmel_mxt_ts - support capacitive keys
  2023-02-27 20:50 ` [PATCH 2/2] Input: atmel_mxt_ts - support capacitive keys André Apitzsch
@ 2023-03-06 22:54   ` Linus Walleij
  2023-03-07  8:57   ` Claudiu.Beznea
  1 sibling, 0 replies; 7+ messages in thread
From: Linus Walleij @ 2023-03-06 22:54 UTC (permalink / raw)
  To: André Apitzsch
  Cc: Nick Dyer, Dmitry Torokhov, Rob Herring, Krzysztof Kozlowski,
	Nicolas Ferre, Alexandre Belloni, Claudiu Beznea, linux-input,
	devicetree, linux-arm-kernel, linux-kernel,
	~postmarketos/upstreaming

On Mon, Feb 27, 2023 at 9:50 PM André Apitzsch <git@apitzsch.eu> wrote:

> Add support for touch keys found in some Atmel touch controller
> configurations.
>
> Signed-off-by: André Apitzsch <git@apitzsch.eu>

Looks good to me.
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] Input: atmel_mxt_ts - support capacitive keys
  2023-02-27 20:50 ` [PATCH 2/2] Input: atmel_mxt_ts - support capacitive keys André Apitzsch
  2023-03-06 22:54   ` Linus Walleij
@ 2023-03-07  8:57   ` Claudiu.Beznea
  1 sibling, 0 replies; 7+ messages in thread
From: Claudiu.Beznea @ 2023-03-07  8:57 UTC (permalink / raw)
  To: git, nick, dmitry.torokhov, robh+dt, krzysztof.kozlowski+dt,
	Nicolas.Ferre, alexandre.belloni, linus.walleij, linux-input,
	devicetree, linux-arm-kernel, linux-kernel
  Cc: ~postmarketos/upstreaming

On 27.02.2023 22:50, André Apitzsch wrote:
> [Some people who received this message don't often get email from git@apitzsch.eu. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ]
> 
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> Add support for touch keys found in some Atmel touch controller
> configurations.
> 
> Signed-off-by: André Apitzsch <git@apitzsch.eu>

Reviewed-by: Claudiu Beznea <claudiu.beznea@microchip.com>


> ---
>  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;
>  }
> 
> --
> 2.39.2
> 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] dt-bindings: input: atmel,maxtouch: add linux,keycodes
  2023-02-27 20:50 [PATCH 1/2] dt-bindings: input: atmel,maxtouch: add linux,keycodes André Apitzsch
                   ` (2 preceding siblings ...)
  2023-03-06 14:19 ` Linus Walleij
@ 2023-03-25 10:37 ` André Apitzsch
  3 siblings, 0 replies; 7+ messages in thread
From: André Apitzsch @ 2023-03-25 10:37 UTC (permalink / raw)
  To: Nick Dyer, Dmitry Torokhov
  Cc: Rob Herring, Krzysztof Kozlowski, Nicolas Ferre,
	Alexandre Belloni, Claudiu Beznea, Linus Walleij, linux-input,
	devicetree, linux-arm-kernel, linux-kernel,
	~postmarketos/upstreaming

Am Montag, dem 27.02.2023 um 21:50 +0100 schrieb André Apitzsch:
> 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.
> 
> Signed-off-by: André Apitzsch <git@apitzsch.eu>
> ---
>  .../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: |
> 
> base-commit: 982818426a0ffaf93b0621826ed39a84be3d7d62

Hi Nick, hi Dmitry,

Friendly ping.

What is missing to get this up-streamed?

Best regards,
André

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-03-25 10:37 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-27 20:50 [PATCH 1/2] dt-bindings: input: atmel,maxtouch: add linux,keycodes André Apitzsch
2023-02-27 20:50 ` [PATCH 2/2] Input: atmel_mxt_ts - support capacitive keys André Apitzsch
2023-03-06 22:54   ` Linus Walleij
2023-03-07  8:57   ` Claudiu.Beznea
2023-02-28  8:18 ` [PATCH 1/2] dt-bindings: input: atmel,maxtouch: add linux,keycodes Krzysztof Kozlowski
2023-03-06 14:19 ` Linus Walleij
2023-03-25 10:37 ` André Apitzsch

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).