On Tue, Jun 16, 2020 at 08:49:51AM -0700, Sultan Alsawaf wrote: > From: Sultan Alsawaf <sultan@xxxxxxxxxxxxxxx> > > We have no way of knowing how large an incoming payload is going to be, > so the only strategy available up until now has been to always retrieve > the maximum possible report length over i2c, which can be quite > inefficient. For devices that send reports in block read format, the i2c > controller driver can read the payload length on the fly and terminate > the i2c transaction early, resulting in considerable power savings. > > On a Dell Precision 15 5540 with an i9-9880H, resting my finger on the > touchpad causes psys power readings to go up by about 4W and hover there > until I remove my finger. With this patch, my psys readings go from 4.7W > down to 3.1W, yielding about 1.6W in savings. This is because my > touchpad's max report length is 60 bytes, but all of the regular reports > it sends for touch events are only 32 bytes, so the i2c transfer is > roughly halved for the common case. > + /* Try to do a block read if the size fits in one byte */ > + flags = size > 255 ? I2C_M_RD : I2C_M_RD | I2C_M_RECV_LEN; AFAIR SMBus specification tells about 256. Why 255? Andi, am I correct? -- With Best Regards, Andy Shevchenko