• Home
  • Raw
  • Download

Lines Matching full:mem

11 #include <linux/spi/spi-mem.h>
102 static int spi_check_buswidth_req(struct spi_mem *mem, u8 buswidth, bool tx) in spi_check_buswidth_req() argument
104 u32 mode = mem->spi->mode; in spi_check_buswidth_req()
140 bool spi_mem_default_supports_op(struct spi_mem *mem, in spi_mem_default_supports_op() argument
143 if (spi_check_buswidth_req(mem, op->cmd.buswidth, true)) in spi_mem_default_supports_op()
147 spi_check_buswidth_req(mem, op->addr.buswidth, true)) in spi_mem_default_supports_op()
151 spi_check_buswidth_req(mem, op->dummy.buswidth, true)) in spi_mem_default_supports_op()
155 spi_check_buswidth_req(mem, op->data.buswidth, in spi_mem_default_supports_op()
196 static bool spi_mem_internal_supports_op(struct spi_mem *mem, in spi_mem_internal_supports_op() argument
199 struct spi_controller *ctlr = mem->spi->controller; in spi_mem_internal_supports_op()
202 return ctlr->mem_ops->supports_op(mem, op); in spi_mem_internal_supports_op()
204 return spi_mem_default_supports_op(mem, op); in spi_mem_internal_supports_op()
210 * @mem: the SPI memory
222 bool spi_mem_supports_op(struct spi_mem *mem, const struct spi_mem_op *op) in spi_mem_supports_op() argument
227 return spi_mem_internal_supports_op(mem, op); in spi_mem_supports_op()
231 static int spi_mem_access_start(struct spi_mem *mem) in spi_mem_access_start() argument
233 struct spi_controller *ctlr = mem->spi->controller; in spi_mem_access_start()
259 static void spi_mem_access_end(struct spi_mem *mem) in spi_mem_access_end() argument
261 struct spi_controller *ctlr = mem->spi->controller; in spi_mem_access_end()
272 * @mem: the SPI memory
282 int spi_mem_exec_op(struct spi_mem *mem, const struct spi_mem_op *op) in spi_mem_exec_op() argument
285 struct spi_controller *ctlr = mem->spi->controller; in spi_mem_exec_op()
295 if (!spi_mem_internal_supports_op(mem, op)) in spi_mem_exec_op()
298 if (ctlr->mem_ops && !mem->spi->cs_gpiod) { in spi_mem_exec_op()
299 ret = spi_mem_access_start(mem); in spi_mem_exec_op()
303 ret = ctlr->mem_ops->exec_op(mem, op); in spi_mem_exec_op()
305 spi_mem_access_end(mem); in spi_mem_exec_op()
377 ret = spi_sync(mem->spi, &msg); in spi_mem_exec_op()
392 * spi_mem_get_name() - Return the SPI mem device name to be used by the
394 * @mem: the SPI memory
396 * This function allows SPI mem users to retrieve the SPI mem device name.
401 * by the SPI mem user
403 const char *spi_mem_get_name(struct spi_mem *mem) in spi_mem_get_name() argument
405 return mem->name; in spi_mem_get_name()
410 * spi_mem_adjust_op_size() - Adjust the data size of a SPI mem operation to
412 * @mem: the SPI memory
417 * optimized accesses. This function allows SPI mem drivers to split a single
424 int spi_mem_adjust_op_size(struct spi_mem *mem, struct spi_mem_op *op) in spi_mem_adjust_op_size() argument
426 struct spi_controller *ctlr = mem->spi->controller; in spi_mem_adjust_op_size()
430 return ctlr->mem_ops->adjust_op_size(mem, op); in spi_mem_adjust_op_size()
435 if (len > spi_max_transfer_size(mem->spi)) in spi_mem_adjust_op_size()
439 spi_max_transfer_size(mem->spi), in spi_mem_adjust_op_size()
440 spi_max_message_size(mem->spi) - in spi_mem_adjust_op_size()
459 ret = spi_mem_adjust_op_size(desc->mem, &op); in spi_mem_no_dirmap_read()
463 ret = spi_mem_exec_op(desc->mem, &op); in spi_mem_no_dirmap_read()
479 ret = spi_mem_adjust_op_size(desc->mem, &op); in spi_mem_no_dirmap_write()
483 ret = spi_mem_exec_op(desc->mem, &op); in spi_mem_no_dirmap_write()
492 * @mem: SPI mem device this direct mapping should be created for
504 spi_mem_dirmap_create(struct spi_mem *mem, in spi_mem_dirmap_create() argument
507 struct spi_controller *ctlr = mem->spi->controller; in spi_mem_dirmap_create()
523 desc->mem = mem; in spi_mem_dirmap_create()
530 if (!spi_mem_supports_op(desc->mem, &desc->info.op_tmpl)) in spi_mem_dirmap_create()
554 struct spi_controller *ctlr = desc->mem->spi->controller; in spi_mem_dirmap_destroy()
574 * @mem: SPI mem device this direct mapping should be created for
583 devm_spi_mem_dirmap_create(struct device *dev, struct spi_mem *mem, in devm_spi_mem_dirmap_create() argument
593 desc = spi_mem_dirmap_create(mem, info); in devm_spi_mem_dirmap_create()
651 struct spi_controller *ctlr = desc->mem->spi->controller; in spi_mem_dirmap_read()
663 ret = spi_mem_access_start(desc->mem); in spi_mem_dirmap_read()
669 spi_mem_access_end(desc->mem); in spi_mem_dirmap_read()
697 struct spi_controller *ctlr = desc->mem->spi->controller; in spi_mem_dirmap_write()
709 ret = spi_mem_access_start(desc->mem); in spi_mem_dirmap_write()
715 spi_mem_access_end(desc->mem); in spi_mem_dirmap_write()
733 struct spi_mem *mem; in spi_mem_probe() local
735 mem = devm_kzalloc(&spi->dev, sizeof(*mem), GFP_KERNEL); in spi_mem_probe()
736 if (!mem) in spi_mem_probe()
739 mem->spi = spi; in spi_mem_probe()
742 mem->name = ctlr->mem_ops->get_name(mem); in spi_mem_probe()
744 mem->name = dev_name(&spi->dev); in spi_mem_probe()
746 if (IS_ERR_OR_NULL(mem->name)) in spi_mem_probe()
747 return PTR_ERR(mem->name); in spi_mem_probe()
749 spi_set_drvdata(spi, mem); in spi_mem_probe()
751 return memdrv->probe(mem); in spi_mem_probe()
757 struct spi_mem *mem = spi_get_drvdata(spi); in spi_mem_remove() local
760 return memdrv->remove(mem); in spi_mem_remove()
768 struct spi_mem *mem = spi_get_drvdata(spi); in spi_mem_shutdown() local
771 memdrv->shutdown(mem); in spi_mem_shutdown()