#define MLXCPLD_I2C_BUS_NUM            1
 #define MLXCPLD_I2C_DATA_REG_SZ                36
 #define MLXCPLD_I2C_DATA_SZ_BIT                BIT(5)
+#define MLXCPLD_I2C_DATA_EXT2_SZ_BIT   BIT(6)
 #define MLXCPLD_I2C_DATA_SZ_MASK       GENMASK(6, 5)
 #define MLXCPLD_I2C_SMBUS_BLK_BIT      BIT(7)
 #define MLXCPLD_I2C_MAX_ADDR_LEN       4
        .max_comb_1st_msg_len = 4,
 };
 
+static const struct i2c_adapter_quirks mlxcpld_i2c_quirks_ext2 = {
+       .flags = I2C_AQ_COMB_WRITE_THEN_READ,
+       .max_read_len = (MLXCPLD_I2C_DATA_REG_SZ - 4) * 4,
+       .max_write_len = (MLXCPLD_I2C_DATA_REG_SZ - 4) * 4 + MLXCPLD_I2C_MAX_ADDR_LEN,
+       .max_comb_1st_msg_len = 4,
+};
+
 static struct i2c_adapter mlxcpld_i2c_adapter = {
        .owner          = THIS_MODULE,
        .name           = "i2c-mlxcpld",
        /* Check support for extended transaction length */
        if ((val & MLXCPLD_I2C_DATA_SZ_MASK) == MLXCPLD_I2C_DATA_SZ_BIT)
                mlxcpld_i2c_adapter.quirks = &mlxcpld_i2c_quirks_ext;
+       else if ((val & MLXCPLD_I2C_DATA_SZ_MASK) == MLXCPLD_I2C_DATA_EXT2_SZ_BIT)
+               mlxcpld_i2c_adapter.quirks = &mlxcpld_i2c_quirks_ext2;
        /* Check support for smbus block transaction */
        if (val & MLXCPLD_I2C_SMBUS_BLK_BIT)
                priv->smbus_block = true;