• Hans Verkuil's avatar
    Input: synaptics-rmi4 - don't increment rmiaddr for SMBus transfers · a284e11c
    Hans Verkuil authored
    This increment of rmi_smbus in rmi_smb_read/write_block() causes
    garbage to be read/written.
    
    The first read of SMB_MAX_COUNT bytes is fine, but after that
    it is nonsense. Trial-and-error showed that by dropping the
    increment of rmiaddr everything is fine and the F54 function
    properly works.
    
    I tried a hack with rmi_smb_write_block() as well (writing to the
    same F54 touchpad data area, then reading it back), and that
    suggests that there too the rmiaddr increment has to be dropped.
    It makes sense that if it has to be dropped for read, then it has
    to be dropped for write as well.
    
    It looks like the initial work with F54 was done using i2c, not smbus,
    and it seems nobody ever tested F54 with smbus. The other functions
    all read/write less than SMB_MAX_COUNT as far as I can tell, so this
    issue was never noticed with non-F54 functions.
    
    With this change I can read out the touchpad data correctly on my
    Lenovo X1 Carbon 6th Gen laptop.
    Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
    Link: https://lore.kernel.org/r/8dd22e21-4933-8e9c-a696-d281872c8de7@xs4all.nl
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
    a284e11c
rmi_smbus.c 10.6 KB