summaryrefslogtreecommitdiff
path: root/include/linux/i3c
diff options
context:
space:
mode:
authorFrank Li <Frank.Li@nxp.com>2023-12-02 01:25:29 +0300
committerAlexandre Belloni <alexandre.belloni@bootlin.com>2024-01-08 02:49:20 +0300
commite5e3df06ac98d15cfb10bb5c12356709365e91b2 (patch)
treec2a250068d976402f95a9af2cc1062e085846d70 /include/linux/i3c
parent05b26c31a4859af9e75b7de77458e99358364fe1 (diff)
downloadlinux-e5e3df06ac98d15cfb10bb5c12356709365e91b2.tar.xz
i3c: add actual_len in i3c_priv_xfer
In MIPI I3C Specification: "Ninth Bit of SDR Target Returned (Read) Data as End-of-Data: In I2C, the ninth Data bit from Target to Controller is an ACK by the Controller. By contrast, in I3C this bit allows the Target to end a Read, and allows the Controller to Abort a Read. In SDR terms, the ninth bit of Read data is referred to as the T-Bit (for ‘Transition’)" I3C allow devices early terminate data transfer. So need "actual_len" field to indicate how much get by i3c_priv_xfer. Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com> Signed-off-by: Frank Li <Frank.Li@nxp.com> Link: https://lore.kernel.org/r/20231201222532.2431484-4-Frank.Li@nxp.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Diffstat (limited to 'include/linux/i3c')
-rw-r--r--include/linux/i3c/device.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/i3c/device.h b/include/linux/i3c/device.h
index 84ed77c04940..e119f11948ef 100644
--- a/include/linux/i3c/device.h
+++ b/include/linux/i3c/device.h
@@ -54,6 +54,7 @@ enum i3c_hdr_mode {
* struct i3c_priv_xfer - I3C SDR private transfer
* @rnw: encodes the transfer direction. true for a read, false for a write
* @len: transfer length in bytes of the transfer
+ * @actual_len: actual length in bytes are transferred by the controller
* @data: input/output buffer
* @data.in: input buffer. Must point to a DMA-able buffer
* @data.out: output buffer. Must point to a DMA-able buffer
@@ -62,6 +63,7 @@ enum i3c_hdr_mode {
struct i3c_priv_xfer {
u8 rnw;
u16 len;
+ u16 actual_len;
union {
void *in;
const void *out;