Hi! > From: Boris Brezillon > > commit aa167f3fed0c37e0e4c707d4331d827661f46644 upstream. > > Most modern SPI controllers can directly map a SPI memory (or a portion > of the SPI memory) in the CPU address space. Most of the time this > brings significant performance improvements as it automates the whole > process of sending SPI memory operations every time a new region is > accessed. > > This new API allows SPI memory drivers to create direct mappings and > then use them to access the memory instead of using spi_mem_exec_op(). This can be refactored to remove if/else nesting. > +ssize_t spi_mem_dirmap_read(struct spi_mem_dirmap_desc *desc, > + u64 offs, size_t len, void *buf) > +{ > + struct spi_controller *ctlr = desc->mem->spi->controller; > + ssize_t ret; > + > + if (desc->info.op_tmpl.data.dir != SPI_MEM_DATA_IN) > + return -EINVAL; > + > + if (!len) > + return 0; > + > + if (desc->nodirmap) { > + ret = spi_mem_no_dirmap_read(desc, offs, len, buf); > + } else if (ctlr->mem_ops && ctlr->mem_ops->dirmap_read) { > + ret = spi_mem_access_start(desc->mem); > + if (ret) > + return ret; > + > + ret = ctlr->mem_ops->dirmap_read(desc, offs, len, buf); > + > + spi_mem_access_end(desc->mem); > + } else { > + ret = -ENOTSUPP; > + } > + > + return ret; > +} This can be if (desc->nodirmap) return spi_mem_no_dirmap_read(desc, offs, len, buf); if (!(ctlr->mem_ops && ctlr->mem_ops->dirmap_read)) return -ENOTSUPP; ... normal case goes here... Same refactoring can be done for dirmap_write. Code works either way and is not too bad, so... up to you :-). Best regards, Pavel -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany