lkml.org 
[lkml]   [2023]   [May]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/7] Input: libps2 - rework handling of command response
    Date
    It is not entirely correct that libps2 sets PS2_FLAG_CMD1 after
    the device acknowledges each byte sent to the device by the host.
    Rework the code so that PS2_FLAG_CMD1 and PS2_FLAG_CMD are set only once,
    at the beginning of PS/2 command execution.

    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    ---
    drivers/input/serio/libps2.c | 18 ++++++++++--------
    1 file changed, 10 insertions(+), 8 deletions(-)

    diff --git a/drivers/input/serio/libps2.c b/drivers/input/serio/libps2.c
    index 399cda0d34f5..d09450eca9a7 100644
    --- a/drivers/input/serio/libps2.c
    +++ b/drivers/input/serio/libps2.c
    @@ -247,14 +247,19 @@ int __ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)

    serio_pause_rx(ps2dev->serio);

    + /* Some mice do not ACK the "get ID" command, prepare to handle this. */
    ps2dev->flags = command == PS2_CMD_GETID ? PS2_FLAG_WAITID : 0;
    ps2dev->cmdcnt = receive;
    - if (receive && param)
    - for (i = 0; i < receive; i++)
    - ps2dev->cmdbuf[(receive - 1) - i] = param[i];
    + if (receive) {
    + /* Indicate that we expect response to the command. */
    + ps2dev->flags |= PS2_FLAG_CMD | PS2_FLAG_CMD1;
    + if (param)
    + for (i = 0; i < receive; i++)
    + ps2dev->cmdbuf[(receive - 1) - i] = param[i];
    + }

    /*
    - * Some devices (Synaptics) peform the reset before
    + * Some devices (Synaptics) perform the reset before
    * ACKing the reset command, and so it can take a long
    * time before the ACK arrives.
    */
    @@ -434,11 +439,8 @@ bool ps2_handle_ack(struct ps2dev *ps2dev, u8 data)
    return true;
    }

    - if (!ps2dev->nak) {
    + if (!ps2dev->nak)
    ps2dev->flags &= ~PS2_FLAG_NAK;
    - if (ps2dev->cmdcnt)
    - ps2dev->flags |= PS2_FLAG_CMD | PS2_FLAG_CMD1;
    - }

    ps2dev->flags &= ~PS2_FLAG_ACK;
    wake_up(&ps2dev->wait);
    --
    2.40.1.606.ga4b1b128d6-goog
    \
     
     \ /
      Last update: 2023-05-11 20:53    [W:3.428 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site