[PATCH RESEND v2 2/2] i2c: cadence: Add support for Axiado AX3000
Swark Yang <[email protected]> Thu, 11 Jun 2026 18:37:30 -0700
| Newsgroups | org.ozlabs.lists.openbmc,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-i2c,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <20260611-axiado-ax3000-cadence-i2c-support-v2-2-cfdad0534afa@axiado.com> |
The Axiado AX3000 SoC integrates a Cadence I2C controller that supports SMBus Quick commands. Introduce the "axiado,ax3000-i2c" compatible string and add a new quirk CDNS_I2C_QUIRK_SMBUS_QUICK to enable this functionality. This allows the controller to support I2C_FUNC_SMBUS_QUICK, enabling features such as bus scanning via quick write commands. Signed-off-by: Swark Yang <[email protected]> --- drivers/i2c/busses/i2c-cadence.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/i2c/busses/i2c-cadence.c b/drivers/i2c/busses/i2c-cadence.c index 0fb728ade92e..8079c045f936 100644 --- a/drivers/i2c/busses/i2c-cadence.c +++ b/drivers/i2c/busses/i2c-cadence.c @@ -128,6 +128,7 @@ #define CDNS_I2C_TIMEOUT_MAX 0xFF #define CDNS_I2C_BROKEN_HOLD_BIT BIT(0) +#define CDNS_I2C_QUIRKS_ENABLE_SMBUS_QUICK_CFG BIT(1) #define CDNS_I2C_POLL_US 100000 #define CDNS_I2C_POLL_US_ATOMIC 10 #define CDNS_I2C_TIMEOUT_US 500000 @@ -1175,10 +1176,14 @@ static int cdns_i2c_master_xfer_atomic(struct i2c_adapter *adap, struct i2c_msg */ static u32 cdns_i2c_func(struct i2c_adapter *adap) { + struct cdns_i2c *id = adap->algo_data; u32 func = I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR | (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK) | I2C_FUNC_SMBUS_BLOCK_DATA; + if (id->quirks & CDNS_I2C_QUIRKS_ENABLE_SMBUS_QUICK_CFG) + func |= I2C_FUNC_SMBUS_QUICK; + #if IS_ENABLED(CONFIG_I2C_SLAVE) func |= I2C_FUNC_SLAVE; #endif @@ -1442,9 +1447,14 @@ static const struct cdns_platform_data r1p10_i2c_def = { .quirks = CDNS_I2C_BROKEN_HOLD_BIT, }; +static const struct cdns_platform_data ax3000_i2c_def = { + .quirks = CDNS_I2C_QUIRKS_ENABLE_SMBUS_QUICK_CFG, +}; + static const struct of_device_id cdns_i2c_of_match[] = { { .compatible = "cdns,i2c-r1p10", .data = &r1p10_i2c_def }, { .compatible = "cdns,i2c-r1p14",}, + { .compatible = "axiado,ax3000-i2c", .data = &ax3000_i2c_def }, { /* end of table */ } }; MODULE_DEVICE_TABLE(of, cdns_i2c_of_match); -- 2.34.1