return -ENOTSUPP;
 }
 
-bool spi_mem_default_supports_op(struct spi_mem *mem,
-                                const struct spi_mem_op *op)
+static bool spi_mem_check_buswidth(struct spi_mem *mem,
+                                  const struct spi_mem_op *op)
 {
        if (spi_check_buswidth_req(mem, op->cmd.buswidth, true))
                return false;
                                   op->data.dir == SPI_MEM_DATA_OUT))
                return false;
 
+       return true;
+}
+
+bool spi_mem_dtr_supports_op(struct spi_mem *mem,
+                            const struct spi_mem_op *op)
+{
+       if (op->cmd.nbytes != 2)
+               return false;
+
+       return spi_mem_check_buswidth(mem, op);
+}
+EXPORT_SYMBOL_GPL(spi_mem_dtr_supports_op);
+
+bool spi_mem_default_supports_op(struct spi_mem *mem,
+                                const struct spi_mem_op *op)
+{
        if (op->cmd.dtr || op->addr.dtr || op->dummy.dtr || op->data.dtr)
                return false;
 
        if (op->cmd.nbytes != 1)
                return false;
 
-       return true;
+       return spi_mem_check_buswidth(mem, op);
 }
 EXPORT_SYMBOL_GPL(spi_mem_default_supports_op);
 
 
 bool spi_mem_default_supports_op(struct spi_mem *mem,
                                 const struct spi_mem_op *op);
 
+bool spi_mem_dtr_supports_op(struct spi_mem *mem,
+                            const struct spi_mem_op *op);
+
 #else
 static inline int
 spi_controller_dma_map_mem_op_data(struct spi_controller *ctlr,
        return false;
 }
 
+static inline
+bool spi_mem_dtr_supports_op(struct spi_mem *mem,
+                            const struct spi_mem_op *op)
+{
+       return false;
+}
 #endif /* CONFIG_SPI_MEM */
 
 int spi_mem_adjust_op_size(struct spi_mem *mem, struct spi_mem_op *op);