summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2026-10-22 07:36:22 -1000
committerLinus Torvalds <torvalds@linux-foundation.org>2026-10-22 07:36:22 -1000
commitbb436f2a8568d14f176475c79b0d5069f0a6f9e3 (patch)
tree3dac357c4e7176ec0e1b3e42bdc9c14d4201659d /include/linux
parent8279fb300585e0a8ee69bd0a12d343e59b6fe7be (diff)
parent0f6be986ad0eb6fe7338d963a14eaf0dee87677d (diff)
Merge tag 'i2c-7.4-part1' of git://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux
Pull i2c updates from Andi Shyti: "The main changes are the new Novatek NT72676 driver, the qcom-cci clock and timing updates and a collection of smaller driver, core and DT binding improvements. Core and helpers: - acpi: run ASUS and Dell touchpads at 100 kHz to avoid lag - core: return bool from check_functionality() and update users - smbus: limit block reads to the caller's buffer size - acpi: mark I2C transfer buffers as DMA-safe Drivers: - qcom-geni: several firmware node and runtime PM improvements - qcom-cci: several patches rework clock selection and timings - qcom-cci: enable SCL clock stretching - imx-lpi2c: fix DMA mapping device selection and cleanup - designware: tune RX FIFO thresholds to reduce interrupts - i801: respect SPD write protection when probing DDR5 modules - bcm2835: fully initialize clock configuration data Generic cleanups: - mux: simplify channel lookup and firmware node handling - core, busses: tidy up ACPI device ID tables - docs: clarify adapter lookup and fix a client driver example - xlnx: update maintainer for Xilinx IIC bindings - ljca: remove redundant adapter deletion New support and DT bindings: - add DW compatibles for Synaptics SL2610 and UltraRISC DP1000 - allow six DMA channels for R-Car Gen5 - add Allwinner A733 compatible to mv64xxx bindings - add support for Novatek NT72676 (new driver)" * tag 'i2c-7.4-part1' of git://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux: (37 commits) i2c: imx-lpi2c: remove dmaengine_desc_free() i2c: busses: use named initializers for acpi_device_id i2c: i2c-core-acpi: use named initializers for acpi_device_id i2c: i801: Gate SPD instantiation on SPD Write Disable bit i2c: acpi: Use I2C_M_DMA_SAFE in acpi_gsb_i2c_[read|write]_bytes() dt-bindings: i2c: dw: Add Synaptics sl2610 i2c i2c: designware: size the RX FIFO threshold to the queued transfer i2c: imx-lpi2c: use dmaengine_get_dma_device() for DMA mapping docs: i2c: writing-clients: Add missing end of command i2c: qcom-cci: skip core clock rates the clock cannot provide i2c: core: document preference for i2c_get_adapter_by_fwnode() i2c: qcom-cci: always enable SCL clock stretching MAINTAINERS: Add entry for Novatek NT72676 I2C controller driver i2c: nt72676: Add Novatek NT72676 I2C controller driver dt-bindings: i2c: Add Novatek NT72676 I2C controller i2c: acpi: Force ASUE140D touchpads to 100 kHz i2c: qcom-cci: Enforce the required CCI clock rate i2c: qcom-cci: Share the timing table across CCI revisions i2c: qcom-cci: Add 19.2 MHz timings for the v2 CCI i2c: qcom-cci: Support per-mode CCI clock rates ...
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/i2c.h23
1 files changed, 19 insertions, 4 deletions
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index 14ab4d3055af..f3192ab1982e 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -174,8 +174,23 @@ i2c_smbus_write_word_swapped(const struct i2c_client *client,
}
/* Returns the number of read bytes */
-s32 i2c_smbus_read_block_data(const struct i2c_client *client,
- u8 command, u8 *values);
+s32 __i2c_smbus_read_block_data(const struct i2c_client *client,
+ u8 command, u8 length, u8 *values);
+/*
+ * This monstrosity allows to call i2c_smbus_read_block_data() with either
+ * 3 or 4 arguments and will be removed once all users have been switched
+ * to the 4 argument version.
+ */
+#define __i2c_smbus_read_block_data_3arg(client, cmd, values) \
+ __i2c_smbus_read_block_data(client, cmd, I2C_SMBUS_BLOCK_MAX, values)
+#define __i2c_smbus_read_block_data_4arg(client, cmd, length, values) \
+ __i2c_smbus_read_block_data(client, cmd, length, values)
+#define __i2c_smbus_read_block_data_impl(_1, _2, _3, _4, impl, ...) impl
+#define i2c_smbus_read_block_data(client, cmd, varargs...) \
+ __i2c_smbus_read_block_data_impl(client, cmd, varargs, \
+ __i2c_smbus_read_block_data_4arg, \
+ __i2c_smbus_read_block_data_3arg) \
+ (client, cmd, varargs)
s32 i2c_smbus_write_block_data(const struct i2c_client *client,
u8 command, u8 length, const u8 *values);
/* Returns the number of read bytes */
@@ -919,8 +934,8 @@ static inline u32 i2c_get_functionality(struct i2c_adapter *adap)
return adap->algo->functionality(adap);
}
-/* Return 1 if adapter supports everything we need, 0 if not. */
-static inline int i2c_check_functionality(struct i2c_adapter *adap, u32 func)
+/* Return true if adapter supports everything we need, false if not. */
+static inline bool i2c_check_functionality(struct i2c_adapter *adap, u32 func)
{
return (func & i2c_get_functionality(adap)) == func;
}