Hi Gabriele, On 07/06/2015 03:20 AM, Gabriele Mazzotta wrote:
Hi, I recently noticed that there's a minor issue with hid-rmi.c. After a suspend/resume cycle the f11 control register is set to the default configuration, thus undoing the changes performed on init.
This is because i2c_hid does a reset of the touchpad during resume. Power cycles or resets will clear the changes to the control registers. There isn't a way to make these changes persistent without changing the firmware.
I made some changes to the driver to prevent this from happening: the configuration is saved on suspend and restored upon resume. This seemed the simplest thing to do, but I encountered a small problem.
I haven't been able to successfully complete reads which I perform in the suspend callback. They end up timing out waiting for the response. Maybe this is only an issue on certain platforms if this is working for you.
I'm saving and writing the whole register since the kernel can't know what userspace tools might have done. According to a comment in the sources, some firmwares split the control register, so blindly copying and writing 20 sequential bytes as I'm doing could be a problem.
Since reading from the suspend callback doesn't seem to be reliable on all platforms, I think it would be better to store the values of the control registers on init. The driver can update the stored values and write that back to the device on init and after coming out of resume. This will overwrite any changes done by userspace tools. But, if it is important enough to have a F11 control register change persist over suspend / resume then it should probably be implemented in the hid-rmi anyway.
Is there a way to recognize those firmwares? Or even better, is there a way to prevent the firmware from restoring the default configuration?
This bug can be worked around by only reading a max of 16 bytes at a time. So to read all 20 you can just read 16, then add 16 to the address and read the remaining 4. Also, the size of the control registers depends on the configuration so it could be more or less then 20. Did you have a particular register that you want to change which isn't currently in hid-rmi?
PS: I didn't check if the same happens with other registers, but I suspenct it does. Thanks, Gabriele
In the meantime I have another patch to post related to suspend / resume. I'm going to go ahead and post that now to avoid conflicts.
Andrew -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html