From: "Pali Rohár" <pali.rohar@gmail.com>
To: Masaki Ota <masaki.ota@jp.alps.com>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Input: alps - Demystify trackstick initialization for v3 and v6 protocols
Date: Tue, 13 Mar 2018 00:13:35 +0100 [thread overview]
Message-ID: <20180312231335.fnfxgenu22utr3z6@pali> (raw)
In-Reply-To: <20180312230915.26050-1-pali.rohar@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 6552 bytes --]
Masaki, if you have access to the internal ALPS v3 / Rushmore
documentation, I would like to have a review of this patch or
confirmation of those information :-)
On Tuesday 13 March 2018 00:09:15 Pali Rohár wrote:
> Remove cite "Not sure what this does, but it is absolutely essential".
>
> Extract initialization of trackstick part when touchpad is in passthrought
> mode for v3 and v6 protocols into own function. Initialization for v3 is:
> setscale11, setscale11, setscale11, nibble 0x9, nibble 0x4. Initialization
> for v6 is: setscale11, setscale11, setscale11, setrate 0xC8, setrate 0x14.
> Nibbles 0x9 and 0x4 for v3 protocol correspondent to setrate 0xC8 and 0x14,
> therefore these sequences are same.
>
> When touchpad is in passthrought mode, then OS communicates with trackstick
> and this sequence is some magic vendor PS/2 command to put trackstick into
> "extended" mode. After that sequence trackstick starts reporting packets in
> some vendor 4 bytes format (first byte is always 0xE8).
>
> Next step after configuring trackstick to be in "extended" mode, is to
> configure touchpad for v3 protocol to expect that trackstick reports data
> in "extended" mode. For v3 protocol this is done by setting bit 1 in
> register 0xC2C8 (offset 0x08 from base address 0xC2C0).
>
> When both touchpad and trackstick are not configured for "extended" mode
> then touchpad reports trackstick packets in different format, which is not
> supported by psmouse/alps driver (yet).
>
> In Cirque documentation GP-AN- 130823 INTERFACING TO GEN4 OVER I2C (PDF)
> available at http://www.cirque.com/gen4-dev-resources is Logical Address
> 0xC2C8 named as PS2AuxControl and Bit Number 1 as ProcessAuxExtendedData
> with description: Auxiliary device data is assumed to be extended data when
> set.
>
> Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
> ---
> drivers/input/mouse/alps.c | 80 ++++++++++++++++++++++++++++------------------
> 1 file changed, 49 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
> index dbe57da8c1a1..010c1bcdb06d 100644
> --- a/drivers/input/mouse/alps.c
> +++ b/drivers/input/mouse/alps.c
> @@ -2063,14 +2063,11 @@ static int alps_hw_init_v1_v2(struct psmouse *psmouse)
> return 0;
> }
>
> -static int alps_hw_init_v6(struct psmouse *psmouse)
> +/* Must be in passthrough mode when calling this function */
> +static int alps_trackstick_enter_extended_mode_v3_v6(struct psmouse *psmouse)
> {
> unsigned char param[2] = {0xC8, 0x14};
>
> - /* Enter passthrough mode to let trackpoint enter 6byte raw mode */
> - if (alps_passthrough_mode_v2(psmouse, true))
> - return -1;
> -
> if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) ||
> ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) ||
> ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) ||
> @@ -2078,9 +2075,25 @@ static int alps_hw_init_v6(struct psmouse *psmouse)
> ps2_command(&psmouse->ps2dev, ¶m[1], PSMOUSE_CMD_SETRATE))
> return -1;
>
> + return 0;
> +}
> +
> +static int alps_hw_init_v6(struct psmouse *psmouse)
> +{
> + int ret;
> +
> + /* Enter passthrough mode to let trackpoint enter 6byte raw mode */
> + if (alps_passthrough_mode_v2(psmouse, true))
> + return -1;
> +
> + ret = alps_trackstick_enter_extended_mode_v3_v6(psmouse);
> +
> if (alps_passthrough_mode_v2(psmouse, false))
> return -1;
>
> + if (ret)
> + return ret;
> +
> if (alps_absolute_mode_v6(psmouse)) {
> psmouse_err(psmouse, "Failed to enable absolute mode\n");
> return -1;
> @@ -2154,10 +2167,18 @@ static int alps_probe_trackstick_v3_v7(struct psmouse *psmouse, int reg_base)
>
> static int alps_setup_trackstick_v3(struct psmouse *psmouse, int reg_base)
> {
> - struct ps2dev *ps2dev = &psmouse->ps2dev;
> int ret = 0;
> + int reg_val;
> unsigned char param[4];
>
> + /*
> + * We need to configure trackstick to report data for touchpad in
> + * extended format. And also we need to tell touchpad to expect data
> + * from trackstick in extended format. Without this configuration
> + * trackstick packets sent from touchpad are in basic format which is
> + * different from what we expect.
> + */
> +
> if (alps_passthrough_mode_v3(psmouse, reg_base, true))
> return -EIO;
>
> @@ -2175,39 +2196,36 @@ static int alps_setup_trackstick_v3(struct psmouse *psmouse, int reg_base)
> ret = -ENODEV;
> } else {
> psmouse_dbg(psmouse, "trackstick E7 report: %3ph\n", param);
> -
> - /*
> - * Not sure what this does, but it is absolutely
> - * essential. Without it, the touchpad does not
> - * work at all and the trackstick just emits normal
> - * PS/2 packets.
> - */
> - if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) ||
> - ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) ||
> - ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) ||
> - alps_command_mode_send_nibble(psmouse, 0x9) ||
> - alps_command_mode_send_nibble(psmouse, 0x4)) {
> - psmouse_err(psmouse,
> - "Error sending magic E6 sequence\n");
> + if (alps_trackstick_enter_extended_mode_v3_v6(psmouse)) {
> + psmouse_err(psmouse, "Failed to enter into trackstick extended mode\n");
> ret = -EIO;
> - goto error;
> }
> + }
> +
> + if (alps_passthrough_mode_v3(psmouse, reg_base, false))
> + return -EIO;
> +
> + if (ret)
> + return ret;
>
> + if (alps_enter_command_mode(psmouse))
> + return -EIO;
> +
> + reg_val = alps_command_mode_read_reg(psmouse, reg_base + 0x08);
> + if (reg_val == -1) {
> + ret = -EIO;
> + } else {
> /*
> - * This ensures the trackstick packets are in the format
> - * supported by this driver. If bit 1 isn't set the packet
> - * format is different.
> + * Tell touchpad that trackstick is now in extended mode.
> + * If bit 1 isn't set the packet format is different.
> */
> - if (alps_enter_command_mode(psmouse) ||
> - alps_command_mode_write_reg(psmouse,
> - reg_base + 0x08, 0x82) ||
> - alps_exit_command_mode(psmouse))
> + reg_val |= BIT(1);
> + if (__alps_command_mode_write_reg(psmouse, reg_val))
> ret = -EIO;
> }
>
> -error:
> - if (alps_passthrough_mode_v3(psmouse, reg_base, false))
> - ret = -EIO;
> + if (alps_exit_command_mode(psmouse))
> + return -EIO;
>
> return ret;
> }
--
Pali Rohár
pali.rohar@gmail.com
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
next prev parent reply other threads:[~2018-03-12 23:13 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-12 23:09 [PATCH] Input: alps - Demystify trackstick initialization for v3 and v6 protocols Pali Rohár
2018-03-12 23:13 ` Pali Rohár [this message]
[not found] ` <TYXPR01MB0719092EDE164BA6C576A1C7C7D10@TYXPR01MB0719.jpnprd01.prod.outlook.com>
2018-03-14 22:58 ` Pali Rohár
[not found] ` <TYXPR01MB07191C487C66BA03E5D9AB3DC7D10@TYXPR01MB0719.jpnprd01.prod.outlook.com>
2018-03-16 10:58 ` Pali Rohár
2018-03-19 8:41 ` Masaki Ota
2018-03-21 16:41 ` Pali Rohár
2018-04-18 11:40 ` Pali Rohár
2018-04-23 23:40 ` Dmitry Torokhov
2018-04-24 11:14 ` Pali Rohár
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=20180312231335.fnfxgenu22utr3z6@pali \
--to=pali.rohar@gmail.com \
--cc=dmitry.torokhov@gmail.com \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=masaki.ota@jp.alps.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 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).