mtk_spi_reset(mdata);
        mtk_spi_hw_init(mem->spi->controller, mem->spi);
-       mtk_spi_prepare_transfer(mem->spi->controller, mem->spi->max_speed_hz);
+       mtk_spi_prepare_transfer(mem->spi->controller, op->max_freq);
 
        reg_val = readl(mdata->base + SPI_CFG3_IPM_REG);
        /* opcode byte len */
        .exec_op = mtk_spi_mem_exec_op,
 };
 
+static const struct spi_controller_mem_caps mtk_spi_mem_caps = {
+       .per_op_freq = true,
+};
+
 static int mtk_spi_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
        if (mdata->dev_comp->ipm_design) {
                mdata->dev = dev;
                host->mem_ops = &mtk_spi_mem_ops;
+               host->mem_caps = &mtk_spi_mem_caps;
                init_completion(&mdata->spimem_done);
        }