Lines Matching refs:mem

12 #include <linux/spi/spi-mem.h>
104 static int spi_check_buswidth_req(struct spi_mem *mem, u8 buswidth, bool tx)
106 u32 mode = mem->spi->mode;
142 static bool spi_mem_check_buswidth(struct spi_mem *mem,
145 if (spi_check_buswidth_req(mem, op->cmd.buswidth, true))
149 spi_check_buswidth_req(mem, op->addr.buswidth, true))
153 spi_check_buswidth_req(mem, op->dummy.buswidth, true))
157 spi_check_buswidth_req(mem, op->data.buswidth,
164 bool spi_mem_default_supports_op(struct spi_mem *mem,
167 struct spi_controller *ctlr = mem->spi->controller;
190 if (op->max_freq && mem->spi->controller->min_speed_hz &&
191 op->max_freq < mem->spi->controller->min_speed_hz)
195 op->max_freq < mem->spi->max_speed_hz) {
200 return spi_mem_check_buswidth(mem, op);
240 static bool spi_mem_internal_supports_op(struct spi_mem *mem,
243 struct spi_controller *ctlr = mem->spi->controller;
246 return ctlr->mem_ops->supports_op(mem, op);
248 return spi_mem_default_supports_op(mem, op);
254 * @mem: the SPI memory
266 bool spi_mem_supports_op(struct spi_mem *mem, const struct spi_mem_op *op)
271 return spi_mem_internal_supports_op(mem, op);
275 static int spi_mem_access_start(struct spi_mem *mem)
277 struct spi_controller *ctlr = mem->spi->controller;
302 static void spi_mem_access_end(struct spi_mem *mem)
304 struct spi_controller *ctlr = mem->spi->controller;
358 * @mem: the SPI memory
368 int spi_mem_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)
371 struct spi_controller *ctlr = mem->spi->controller;
378 spi_mem_adjust_op_freq(mem, (struct spi_mem_op *)op);
384 if (!spi_mem_internal_supports_op(mem, op))
387 if (ctlr->mem_ops && ctlr->mem_ops->exec_op && !spi_get_csgpiod(mem->spi, 0)) {
388 ret = spi_mem_access_start(mem);
392 ret = ctlr->mem_ops->exec_op(mem, op);
394 spi_mem_access_end(mem);
403 spi_mem_add_op_stats(mem->spi->pcpu_statistics, op, ret);
475 ret = spi_sync(mem->spi, &msg);
490 * spi_mem_get_name() - Return the SPI mem device name to be used by the
492 * @mem: the SPI memory
494 * This function allows SPI mem users to retrieve the SPI mem device name.
499 * by the SPI mem user
501 const char *spi_mem_get_name(struct spi_mem *mem)
503 return mem->name;
508 * spi_mem_adjust_op_size() - Adjust the data size of a SPI mem operation to
510 * @mem: the SPI memory
515 * optimized accesses. This function allows SPI mem drivers to split a single
522 int spi_mem_adjust_op_size(struct spi_mem *mem, struct spi_mem_op *op)
524 struct spi_controller *ctlr = mem->spi->controller;
528 return ctlr->mem_ops->adjust_op_size(mem, op);
533 if (len > spi_max_transfer_size(mem->spi))
537 spi_max_transfer_size(mem->spi),
538 spi_max_message_size(mem->spi) -
549 * spi_mem_adjust_op_freq() - Adjust the frequency of a SPI mem operation to
551 * @mem: the SPI memory
555 * speed. This function allows SPI mem drivers to set @op->max_freq to the
558 void spi_mem_adjust_op_freq(struct spi_mem *mem, struct spi_mem_op *op)
560 if (!op->max_freq || op->max_freq > mem->spi->max_speed_hz)
561 op->max_freq = mem->spi->max_speed_hz;
604 ret = spi_mem_adjust_op_size(desc->mem, &op);
608 ret = spi_mem_exec_op(desc->mem, &op);
624 ret = spi_mem_adjust_op_size(desc->mem, &op);
628 ret = spi_mem_exec_op(desc->mem, &op);
637 * @mem: SPI mem device this direct mapping should be created for
649 spi_mem_dirmap_create(struct spi_mem *mem,
652 struct spi_controller *ctlr = mem->spi->controller;
668 desc->mem = mem;
675 if (!spi_mem_supports_op(desc->mem, &desc->info.op_tmpl))
699 struct spi_controller *ctlr = desc->mem->spi->controller;
719 * @mem: SPI mem device this direct mapping should be created for
728 devm_spi_mem_dirmap_create(struct device *dev, struct spi_mem *mem,
738 desc = spi_mem_dirmap_create(mem, info);
796 struct spi_controller *ctlr = desc->mem->spi->controller;
808 ret = spi_mem_access_start(desc->mem);
814 spi_mem_access_end(desc->mem);
842 struct spi_controller *ctlr = desc->mem->spi->controller;
854 ret = spi_mem_access_start(desc->mem);
860 spi_mem_access_end(desc->mem);
874 static int spi_mem_read_status(struct spi_mem *mem,
881 ret = spi_mem_exec_op(mem, op);
895 * @mem: SPI memory device
909 int spi_mem_poll_status(struct spi_mem *mem,
916 struct spi_controller *ctlr = mem->spi->controller;
925 if (ctlr->mem_ops && ctlr->mem_ops->poll_status && !spi_get_csgpiod(mem->spi, 0)) {
926 ret = spi_mem_access_start(mem);
930 ret = ctlr->mem_ops->poll_status(mem, op, mask, match,
934 spi_mem_access_end(mem);
938 if (!spi_mem_supports_op(mem, op))
949 polling_delay_us, timeout_ms * 1000, false, mem,
963 struct spi_mem *mem;
965 mem = devm_kzalloc(&spi->dev, sizeof(*mem), GFP_KERNEL);
966 if (!mem)
969 mem->spi = spi;
972 mem->name = ctlr->mem_ops->get_name(mem);
974 mem->name = dev_name(&spi->dev);
976 if (IS_ERR_OR_NULL(mem->name))
977 return PTR_ERR_OR_ZERO(mem->name);
979 spi_set_drvdata(spi, mem);
981 return memdrv->probe(mem);
987 struct spi_mem *mem = spi_get_drvdata(spi);
990 memdrv->remove(mem);
996 struct spi_mem *mem = spi_get_drvdata(spi);
999 memdrv->shutdown(mem);