linux-i2c.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/4] i2c-hid: Save power by reducing i2c xfers with block reads
@ 2020-09-17  5:22 Sultan Alsawaf
  2020-09-17  5:22 ` [PATCH v2 1/4] i2c: designware: Fix transfer failures for invalid SMBus " Sultan Alsawaf
                   ` (5 more replies)
  0 siblings, 6 replies; 18+ messages in thread
From: Sultan Alsawaf @ 2020-09-17  5:22 UTC (permalink / raw)
  To: linux-i2c
  Cc: jikos, aaron.ma, admin, andriy.shevchenko, benjamin.tissoires,
	hdegoede, hn.chen, jarkko.nikula, kai.heng.feng, linux-input,
	linux-kernel, mika.westerberg, vicamo.yang, wsa, Sultan Alsawaf

From: Sultan Alsawaf <sultan@kerneltoast.com>

This is a fixed resubmission of "[PATCH 0/2] i2c-hid: Save power by reducing i2c
xfers with block reads". That original patchset did not have enough fixes for
the designware i2c adapter's I2C_M_RECV_LEN feature, which is documented
extensively in the original email thread.

Here is the original cover letter, which still applies:
"I noticed on my Dell Precision 15 5540 with an i9-9880H that simply putting my
finger on the touchpad would increase my system's power consumption by 4W, which
is quite considerable. Resting my finger on the touchpad would generate roughly
4000 i2c irqs per second, or roughly 20 i2c irqs per touchpad irq.

Upon closer inspection, I noticed that the i2c-hid driver would always transfer
the maximum report size over i2c (which is 60 bytes for my touchpad), but all of
my touchpad's normal touch events are only 32 bytes long according to the length
byte contained in the buffer sequence.

Therefore, I was able to save about 2W of power by passing the I2C_M_RECV_LEN
flag in i2c-hid, which says to look for the payload length in the first byte of
the transfer buffer and adjust the i2c transaction accordingly. The only problem
though is that my i2c controller's driver allows bytes other than the first one
to be used to retrieve the payload length, which is incorrect according to the
SMBus spec, and would break my i2c-hid change since not *all* of the reports
from my touchpad are conforming SMBus block reads.

This patchset fixes the I2C_M_RECV_LEN behavior in the designware i2c driver and
modifies i2c-hid to use I2C_M_RECV_LEN to save quite a bit of power. Even if the
peripheral controlled by i2c-hid doesn't support block reads, the i2c controller
drivers should cope with this and proceed with the i2c transfer using the
original requested length."

Sultan

Sultan Alsawaf (4):
  i2c: designware: Fix transfer failures for invalid SMBus block reads
  i2c: designware: Ensure tx_buf_len is nonzero for SMBus block reads
  i2c: designware: Allow SMBus block reads up to 255 bytes in length
  HID: i2c-hid: Use block reads when possible to save power

 drivers/hid/i2c-hid/i2c-hid-core.c         |  5 ++++-
 drivers/i2c/busses/i2c-designware-master.c | 15 +++++++++------
 2 files changed, 13 insertions(+), 7 deletions(-)

-- 
2.28.0


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2020-10-16 15:25 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-17  5:22 [PATCH v2 0/4] i2c-hid: Save power by reducing i2c xfers with block reads Sultan Alsawaf
2020-09-17  5:22 ` [PATCH v2 1/4] i2c: designware: Fix transfer failures for invalid SMBus " Sultan Alsawaf
2020-09-17  5:22 ` [PATCH v2 2/4] i2c: designware: Ensure tx_buf_len is nonzero for " Sultan Alsawaf
2020-09-17 12:47   ` Andy Shevchenko
2020-09-17 13:44   ` Jarkko Nikula
2020-09-17 14:45     ` Andy Shevchenko
2020-09-17  5:22 ` [PATCH v2 3/4] i2c: designware: Allow SMBus block reads up to 255 bytes in length Sultan Alsawaf
2020-09-17 20:57   ` Wolfram Sang
2020-09-17 23:12     ` Sultan Alsawaf
2020-09-17  5:22 ` [PATCH v2 4/4] HID: i2c-hid: Use block reads when possible to save power Sultan Alsawaf
2020-09-17 14:02 ` [PATCH v2 0/4] i2c-hid: Save power by reducing i2c xfers with block reads Andy Shevchenko
2020-09-23 13:59   ` Jarkko Nikula
2020-09-22  9:19 ` Jiri Kosina
2020-09-22 11:36   ` Wolfram Sang
2020-09-22 19:59     ` Jiri Kosina
2020-09-23  6:02       ` Sultan Alsawaf
2020-10-16 11:16   ` Hans de Goede
2020-10-16 15:24     ` Sultan Alsawaf

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).