All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mattijs Korpershoek <mkorpershoek@baylibre.com>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Matthias Brugger <matthias.bgg@gmail.com>,
	AngeloGioacchino Del Regno 
	<angelogioacchino.delregno@collabora.com>,
	Kevin Hilman <khilman@baylibre.com>,
	Fabien Parent <fparent@baylibre.com>,
	linux-input@vger.kernel.org, linux-mediatek@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: Re: [RESEND PATCH 1/2] Input: mt6779-keypad - fix hardware code mapping
Date: Mon, 16 May 2022 09:30:52 +0200	[thread overview]
Message-ID: <874k1qkk7n.fsf@baylibre.com> (raw)
In-Reply-To: <YoHf6Z4HTfh4Y+bn@google.com>

Hi Dmitry,

Thank you for your review,

On dim., mai 15, 2022 at 22:23, Dmitry Torokhov <dmitry.torokhov@gmail.com> wrote:

> On Fri, May 13, 2022 at 05:18:44PM +0200, Mattijs Korpershoek wrote:
>> In mt6779_keypad_irq_handler(), we
>> 1. Read a hardware code from KPD_MEM1 -> KPD_MEM5
>> 2. Use that hardware code to compute columns/rows for the standard
>>    keyboard matrix.
>> 
>> According to the (non-public) datasheet, the
>> map between the hardware code and the cols/rows is:
>> 
>>         |(0)  |(1)  |(2)
>>     ----*-----*-----*-----
>>         |     |     |
>>         |(9)  |(10) |(11)
>>     ----*-----*-----*-----
>>         |     |     |
>>         |(18) |(19) |(20)
>>     ----*-----*-----*-----
>>         |     |     |
>> 
>> This brings us to another formula:
>> -> row = code / 9;
>> -> col = code % 3;
>
> What if there are more than 3 columns?
That's not supported, in hardware, according to the datasheet.

The datasheet I have states that "The interface of MT6763 only supports
3*3 single or 2*2 double, but internal ASIC still detects keys in the
manner of 8*8 single, and 3*3 double. The registers and key codes still
follows the legacy naming".

Should I add another patch in this series to add that limitation in the
probe? There are no checks done in the probe() right now.

>
>> 
>> Implement this mapping in bitnr_to_col_row() to fetch the
>> correct input event from keypad->input_dev->keycode and report that
>> back to userspace.
>> 
>> Fixes: f28af984e771 ("Input: mt6779-keypad - add MediaTek keypad driver")
>> Co-developed-by: Fabien Parent <fparent@baylibre.com>
>> Signed-off-by: Fabien Parent <fparent@baylibre.com>
>> Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
>> ---
>>  drivers/input/keyboard/mt6779-keypad.c | 16 ++++++++++++++--
>>  1 file changed, 14 insertions(+), 2 deletions(-)
>> 
>> diff --git a/drivers/input/keyboard/mt6779-keypad.c b/drivers/input/keyboard/mt6779-keypad.c
>> index 2e7c9187c10f..23360de20da5 100644
>> --- a/drivers/input/keyboard/mt6779-keypad.c
>> +++ b/drivers/input/keyboard/mt6779-keypad.c
>> @@ -36,6 +36,19 @@ static const struct regmap_config mt6779_keypad_regmap_cfg = {
>>  	.max_register = 36,
>>  };
>>  
>> +/*
>> + * | hardware key code | col0 | col1 | col2|
>> + * | ----------------- | -----| ---- | --- |
>> + * | row0              | 0    | 1    | 2   |
>> + * | row1              | 9    | 10   | 11  |
>> + * | row2              | 18   | 19   | 20  |
>> + */
>> +static void bitnr_to_col_row(int bit_nr, int *col, int *row)
>> +{
>> +	*row = bit_nr / 9;
>> +	*col = bit_nr % 3;
>> +}
>> +
>>  static irqreturn_t mt6779_keypad_irq_handler(int irq, void *dev_id)
>>  {
>>  	struct mt6779_keypad *keypad = dev_id;
>> @@ -61,8 +74,7 @@ static irqreturn_t mt6779_keypad_irq_handler(int irq, void *dev_id)
>>  		if (bit_nr % 32 >= 16)
>>  			continue;
>>  
>> -		row = bit_nr / 32;
>> -		col = bit_nr % 32;
>> +		bitnr_to_col_row(bit_nr, &col, &row);
>>  		scancode = MATRIX_SCAN_CODE(row, col, row_shift);
>>  		/* 1: not pressed, 0: pressed */
>>  		pressed = !test_bit(bit_nr, new_state);
>> -- 
>> 2.32.0
>> 
>
> -- 
> Dmitry

WARNING: multiple messages have this Message-ID (diff)
From: Mattijs Korpershoek <mkorpershoek@baylibre.com>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Matthias Brugger <matthias.bgg@gmail.com>,
	AngeloGioacchino Del Regno
	<angelogioacchino.delregno@collabora.com>,
	Kevin Hilman <khilman@baylibre.com>,
	Fabien Parent <fparent@baylibre.com>,
	linux-input@vger.kernel.org, linux-mediatek@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: Re: [RESEND PATCH 1/2] Input: mt6779-keypad - fix hardware code mapping
Date: Mon, 16 May 2022 09:30:52 +0200	[thread overview]
Message-ID: <874k1qkk7n.fsf@baylibre.com> (raw)
In-Reply-To: <YoHf6Z4HTfh4Y+bn@google.com>

Hi Dmitry,

Thank you for your review,

On dim., mai 15, 2022 at 22:23, Dmitry Torokhov <dmitry.torokhov@gmail.com> wrote:

> On Fri, May 13, 2022 at 05:18:44PM +0200, Mattijs Korpershoek wrote:
>> In mt6779_keypad_irq_handler(), we
>> 1. Read a hardware code from KPD_MEM1 -> KPD_MEM5
>> 2. Use that hardware code to compute columns/rows for the standard
>>    keyboard matrix.
>> 
>> According to the (non-public) datasheet, the
>> map between the hardware code and the cols/rows is:
>> 
>>         |(0)  |(1)  |(2)
>>     ----*-----*-----*-----
>>         |     |     |
>>         |(9)  |(10) |(11)
>>     ----*-----*-----*-----
>>         |     |     |
>>         |(18) |(19) |(20)
>>     ----*-----*-----*-----
>>         |     |     |
>> 
>> This brings us to another formula:
>> -> row = code / 9;
>> -> col = code % 3;
>
> What if there are more than 3 columns?
That's not supported, in hardware, according to the datasheet.

The datasheet I have states that "The interface of MT6763 only supports
3*3 single or 2*2 double, but internal ASIC still detects keys in the
manner of 8*8 single, and 3*3 double. The registers and key codes still
follows the legacy naming".

Should I add another patch in this series to add that limitation in the
probe? There are no checks done in the probe() right now.

>
>> 
>> Implement this mapping in bitnr_to_col_row() to fetch the
>> correct input event from keypad->input_dev->keycode and report that
>> back to userspace.
>> 
>> Fixes: f28af984e771 ("Input: mt6779-keypad - add MediaTek keypad driver")
>> Co-developed-by: Fabien Parent <fparent@baylibre.com>
>> Signed-off-by: Fabien Parent <fparent@baylibre.com>
>> Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
>> ---
>>  drivers/input/keyboard/mt6779-keypad.c | 16 ++++++++++++++--
>>  1 file changed, 14 insertions(+), 2 deletions(-)
>> 
>> diff --git a/drivers/input/keyboard/mt6779-keypad.c b/drivers/input/keyboard/mt6779-keypad.c
>> index 2e7c9187c10f..23360de20da5 100644
>> --- a/drivers/input/keyboard/mt6779-keypad.c
>> +++ b/drivers/input/keyboard/mt6779-keypad.c
>> @@ -36,6 +36,19 @@ static const struct regmap_config mt6779_keypad_regmap_cfg = {
>>  	.max_register = 36,
>>  };
>>  
>> +/*
>> + * | hardware key code | col0 | col1 | col2|
>> + * | ----------------- | -----| ---- | --- |
>> + * | row0              | 0    | 1    | 2   |
>> + * | row1              | 9    | 10   | 11  |
>> + * | row2              | 18   | 19   | 20  |
>> + */
>> +static void bitnr_to_col_row(int bit_nr, int *col, int *row)
>> +{
>> +	*row = bit_nr / 9;
>> +	*col = bit_nr % 3;
>> +}
>> +
>>  static irqreturn_t mt6779_keypad_irq_handler(int irq, void *dev_id)
>>  {
>>  	struct mt6779_keypad *keypad = dev_id;
>> @@ -61,8 +74,7 @@ static irqreturn_t mt6779_keypad_irq_handler(int irq, void *dev_id)
>>  		if (bit_nr % 32 >= 16)
>>  			continue;
>>  
>> -		row = bit_nr / 32;
>> -		col = bit_nr % 32;
>> +		bitnr_to_col_row(bit_nr, &col, &row);
>>  		scancode = MATRIX_SCAN_CODE(row, col, row_shift);
>>  		/* 1: not pressed, 0: pressed */
>>  		pressed = !test_bit(bit_nr, new_state);
>> -- 
>> 2.32.0
>> 
>
> -- 
> Dmitry

_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

WARNING: multiple messages have this Message-ID (diff)
From: Mattijs Korpershoek <mkorpershoek@baylibre.com>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Matthias Brugger <matthias.bgg@gmail.com>,
	AngeloGioacchino Del Regno
	<angelogioacchino.delregno@collabora.com>,
	Kevin Hilman <khilman@baylibre.com>,
	Fabien Parent <fparent@baylibre.com>,
	linux-input@vger.kernel.org, linux-mediatek@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: Re: [RESEND PATCH 1/2] Input: mt6779-keypad - fix hardware code mapping
Date: Mon, 16 May 2022 09:30:52 +0200	[thread overview]
Message-ID: <874k1qkk7n.fsf@baylibre.com> (raw)
In-Reply-To: <YoHf6Z4HTfh4Y+bn@google.com>

Hi Dmitry,

Thank you for your review,

On dim., mai 15, 2022 at 22:23, Dmitry Torokhov <dmitry.torokhov@gmail.com> wrote:

> On Fri, May 13, 2022 at 05:18:44PM +0200, Mattijs Korpershoek wrote:
>> In mt6779_keypad_irq_handler(), we
>> 1. Read a hardware code from KPD_MEM1 -> KPD_MEM5
>> 2. Use that hardware code to compute columns/rows for the standard
>>    keyboard matrix.
>> 
>> According to the (non-public) datasheet, the
>> map between the hardware code and the cols/rows is:
>> 
>>         |(0)  |(1)  |(2)
>>     ----*-----*-----*-----
>>         |     |     |
>>         |(9)  |(10) |(11)
>>     ----*-----*-----*-----
>>         |     |     |
>>         |(18) |(19) |(20)
>>     ----*-----*-----*-----
>>         |     |     |
>> 
>> This brings us to another formula:
>> -> row = code / 9;
>> -> col = code % 3;
>
> What if there are more than 3 columns?
That's not supported, in hardware, according to the datasheet.

The datasheet I have states that "The interface of MT6763 only supports
3*3 single or 2*2 double, but internal ASIC still detects keys in the
manner of 8*8 single, and 3*3 double. The registers and key codes still
follows the legacy naming".

Should I add another patch in this series to add that limitation in the
probe? There are no checks done in the probe() right now.

>
>> 
>> Implement this mapping in bitnr_to_col_row() to fetch the
>> correct input event from keypad->input_dev->keycode and report that
>> back to userspace.
>> 
>> Fixes: f28af984e771 ("Input: mt6779-keypad - add MediaTek keypad driver")
>> Co-developed-by: Fabien Parent <fparent@baylibre.com>
>> Signed-off-by: Fabien Parent <fparent@baylibre.com>
>> Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
>> ---
>>  drivers/input/keyboard/mt6779-keypad.c | 16 ++++++++++++++--
>>  1 file changed, 14 insertions(+), 2 deletions(-)
>> 
>> diff --git a/drivers/input/keyboard/mt6779-keypad.c b/drivers/input/keyboard/mt6779-keypad.c
>> index 2e7c9187c10f..23360de20da5 100644
>> --- a/drivers/input/keyboard/mt6779-keypad.c
>> +++ b/drivers/input/keyboard/mt6779-keypad.c
>> @@ -36,6 +36,19 @@ static const struct regmap_config mt6779_keypad_regmap_cfg = {
>>  	.max_register = 36,
>>  };
>>  
>> +/*
>> + * | hardware key code | col0 | col1 | col2|
>> + * | ----------------- | -----| ---- | --- |
>> + * | row0              | 0    | 1    | 2   |
>> + * | row1              | 9    | 10   | 11  |
>> + * | row2              | 18   | 19   | 20  |
>> + */
>> +static void bitnr_to_col_row(int bit_nr, int *col, int *row)
>> +{
>> +	*row = bit_nr / 9;
>> +	*col = bit_nr % 3;
>> +}
>> +
>>  static irqreturn_t mt6779_keypad_irq_handler(int irq, void *dev_id)
>>  {
>>  	struct mt6779_keypad *keypad = dev_id;
>> @@ -61,8 +74,7 @@ static irqreturn_t mt6779_keypad_irq_handler(int irq, void *dev_id)
>>  		if (bit_nr % 32 >= 16)
>>  			continue;
>>  
>> -		row = bit_nr / 32;
>> -		col = bit_nr % 32;
>> +		bitnr_to_col_row(bit_nr, &col, &row);
>>  		scancode = MATRIX_SCAN_CODE(row, col, row_shift);
>>  		/* 1: not pressed, 0: pressed */
>>  		pressed = !test_bit(bit_nr, new_state);
>> -- 
>> 2.32.0
>> 
>
> -- 
> Dmitry

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2022-05-16  7:31 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-13 15:18 [RESEND PATCH 0/2] Input: mt6779-keypad - fix hw code logic and row/col selection Mattijs Korpershoek
2022-05-13 15:18 ` Mattijs Korpershoek
2022-05-13 15:18 ` Mattijs Korpershoek
2022-05-13 15:18 ` [RESEND PATCH 1/2] Input: mt6779-keypad - fix hardware code mapping Mattijs Korpershoek
2022-05-13 15:18   ` Mattijs Korpershoek
2022-05-13 15:18   ` Mattijs Korpershoek
2022-05-16  5:23   ` Dmitry Torokhov
2022-05-16  5:23     ` Dmitry Torokhov
2022-05-16  5:23     ` Dmitry Torokhov
2022-05-16  7:30     ` Mattijs Korpershoek [this message]
2022-05-16  7:30       ` Mattijs Korpershoek
2022-05-16  7:30       ` Mattijs Korpershoek
2022-05-16 11:06       ` AngeloGioacchino Del Regno
2022-05-16 11:06         ` AngeloGioacchino Del Regno
2022-05-16 11:06         ` AngeloGioacchino Del Regno
2022-05-18  6:56         ` Mattijs Korpershoek
2022-05-18  6:56           ` Mattijs Korpershoek
2022-05-18  6:56           ` Mattijs Korpershoek
2022-05-23  5:42         ` Dmitry Torokhov
2022-05-23  5:42           ` Dmitry Torokhov
2022-05-23  5:42           ` Dmitry Torokhov
2022-05-24 19:21           ` Mattijs Korpershoek
2022-05-24 19:21             ` Mattijs Korpershoek
2022-05-24 19:21             ` Mattijs Korpershoek
2022-05-29  5:23             ` Dmitry Torokhov
2022-05-29  5:23               ` Dmitry Torokhov
2022-05-29  5:23               ` Dmitry Torokhov
2022-06-14  9:14               ` Mattijs Korpershoek
2022-06-14  9:14                 ` Mattijs Korpershoek
2022-06-14  9:14                 ` Mattijs Korpershoek
2022-05-13 15:18 ` [RESEND PATCH 2/2] Input: mt6779-keypad - implement row/column selection Mattijs Korpershoek
2022-05-13 15:18   ` Mattijs Korpershoek
2022-05-13 15:18   ` Mattijs Korpershoek
2022-05-16  5:21   ` Dmitry Torokhov
2022-05-16  5:21     ` Dmitry Torokhov
2022-05-16  5:21     ` Dmitry Torokhov
2022-05-16  7:30     ` Mattijs Korpershoek
2022-05-16  7:30       ` Mattijs Korpershoek
2022-05-16  7:30       ` Mattijs Korpershoek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=874k1qkk7n.fsf@baylibre.com \
    --to=mkorpershoek@baylibre.com \
    --cc=angelogioacchino.delregno@collabora.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=fparent@baylibre.com \
    --cc=khilman@baylibre.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=matthias.bgg@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.