Lines Matching refs:op

137 	bool (*match)(const struct spi_mem_op *op);
138 int (*exec)(struct spi_mem *mem, const struct spi_mem_op *op);
141 static bool wpcm_fiu_normal_match(const struct spi_mem_op *op) in wpcm_fiu_normal_match() argument
144 if (op->cmd.opcode == 0x0b) in wpcm_fiu_normal_match()
147 return (op->addr.nbytes == 0 || op->addr.nbytes == 3) && in wpcm_fiu_normal_match()
148 op->dummy.nbytes == 0 && op->data.nbytes <= 4; in wpcm_fiu_normal_match()
151 static int wpcm_fiu_normal_exec(struct spi_mem *mem, const struct spi_mem_op *op) in wpcm_fiu_normal_exec() argument
156 wpcm_fiu_set_opcode(fiu, op->cmd.opcode); in wpcm_fiu_normal_exec()
157 wpcm_fiu_set_addr(fiu, op->addr.val); in wpcm_fiu_normal_exec()
158 if (op->data.dir == SPI_MEM_DATA_OUT) in wpcm_fiu_normal_exec()
159 wpcm_fiu_set_data(fiu, op->data.buf.out, op->data.nbytes); in wpcm_fiu_normal_exec()
161 ret = wpcm_fiu_do_uma(fiu, mem->spi->chip_select, op->addr.nbytes == 3, in wpcm_fiu_normal_exec()
162 op->data.dir == SPI_MEM_DATA_OUT, op->data.nbytes); in wpcm_fiu_normal_exec()
164 if (op->data.dir == SPI_MEM_DATA_IN) in wpcm_fiu_normal_exec()
165 wpcm_fiu_get_data(fiu, op->data.buf.in, op->data.nbytes); in wpcm_fiu_normal_exec()
170 static bool wpcm_fiu_fast_read_match(const struct spi_mem_op *op) in wpcm_fiu_fast_read_match() argument
172 return op->cmd.opcode == 0x0b && op->addr.nbytes == 3 && in wpcm_fiu_fast_read_match()
173 op->dummy.nbytes == 1 && in wpcm_fiu_fast_read_match()
174 op->data.nbytes >= 1 && op->data.nbytes <= 4 && in wpcm_fiu_fast_read_match()
175 op->data.dir == SPI_MEM_DATA_IN; in wpcm_fiu_fast_read_match()
178 static int wpcm_fiu_fast_read_exec(struct spi_mem *mem, const struct spi_mem_op *op) in wpcm_fiu_fast_read_exec() argument
191 static bool wpcm_fiu_4ba_match(const struct spi_mem_op *op) in wpcm_fiu_4ba_match() argument
193 return op->addr.nbytes == 4 && op->dummy.nbytes == 0 && op->data.nbytes <= 4; in wpcm_fiu_4ba_match()
196 static int wpcm_fiu_4ba_exec(struct spi_mem *mem, const struct spi_mem_op *op) in wpcm_fiu_4ba_exec() argument
203 wpcm_fiu_set_opcode(fiu, op->cmd.opcode); in wpcm_fiu_4ba_exec()
204 wpcm_fiu_set_addr(fiu, op->addr.val >> 8); in wpcm_fiu_4ba_exec()
207 wpcm_fiu_set_opcode(fiu, op->addr.val & 0xff); in wpcm_fiu_4ba_exec()
209 if (op->data.dir == SPI_MEM_DATA_OUT) in wpcm_fiu_4ba_exec()
210 wpcm_fiu_set_data(fiu, op->data.buf.out, op->data.nbytes); in wpcm_fiu_4ba_exec()
211 wpcm_fiu_do_uma(fiu, cs, false, op->data.dir == SPI_MEM_DATA_OUT, op->data.nbytes); in wpcm_fiu_4ba_exec()
215 if (op->data.dir == SPI_MEM_DATA_IN) in wpcm_fiu_4ba_exec()
216 wpcm_fiu_get_data(fiu, op->data.buf.in, op->data.nbytes); in wpcm_fiu_4ba_exec()
234 static bool wpcm_fiu_rdid_match(const struct spi_mem_op *op) in wpcm_fiu_rdid_match() argument
236 return op->cmd.opcode == 0x9f && op->addr.nbytes == 0 && in wpcm_fiu_rdid_match()
237 op->dummy.nbytes == 0 && op->data.nbytes == 6 && in wpcm_fiu_rdid_match()
238 op->data.dir == SPI_MEM_DATA_IN; in wpcm_fiu_rdid_match()
241 static int wpcm_fiu_rdid_exec(struct spi_mem *mem, const struct spi_mem_op *op) in wpcm_fiu_rdid_exec() argument
247 wpcm_fiu_set_opcode(fiu, op->cmd.opcode); in wpcm_fiu_rdid_exec()
250 wpcm_fiu_get_data(fiu, op->data.buf.in, 3); in wpcm_fiu_rdid_exec()
253 wpcm_fiu_set_opcode(fiu, op->cmd.opcode); in wpcm_fiu_rdid_exec()
256 wpcm_fiu_get_data(fiu, op->data.buf.in + 3, 3); in wpcm_fiu_rdid_exec()
267 static bool wpcm_fiu_dummy_match(const struct spi_mem_op *op) in wpcm_fiu_dummy_match() argument
270 if (op->cmd.opcode == 0x0b) in wpcm_fiu_dummy_match()
273 return (op->addr.nbytes == 0 || op->addr.nbytes == 3) && in wpcm_fiu_dummy_match()
274 op->dummy.nbytes >= 1 && op->dummy.nbytes <= 5 && in wpcm_fiu_dummy_match()
275 op->data.nbytes <= 4; in wpcm_fiu_dummy_match()
278 static int wpcm_fiu_dummy_exec(struct spi_mem *mem, const struct spi_mem_op *op) in wpcm_fiu_dummy_exec() argument
286 wpcm_fiu_set_opcode(fiu, op->cmd.opcode); in wpcm_fiu_dummy_exec()
287 wpcm_fiu_set_addr(fiu, op->addr.val); in wpcm_fiu_dummy_exec()
288 wpcm_fiu_do_uma(fiu, cs, op->addr.nbytes != 0, true, op->dummy.nbytes - 1); in wpcm_fiu_dummy_exec()
293 wpcm_fiu_do_uma(fiu, cs, false, false, op->data.nbytes); in wpcm_fiu_dummy_exec()
294 wpcm_fiu_get_data(fiu, op->data.buf.in, op->data.nbytes); in wpcm_fiu_dummy_exec()
309 static const struct wpcm_fiu_op_shape *wpcm_fiu_find_op_shape(const struct spi_mem_op *op) in wpcm_fiu_find_op_shape() argument
316 if (shape->match(op)) in wpcm_fiu_find_op_shape()
323 static bool wpcm_fiu_supports_op(struct spi_mem *mem, const struct spi_mem_op *op) in wpcm_fiu_supports_op() argument
325 if (!spi_mem_default_supports_op(mem, op)) in wpcm_fiu_supports_op()
328 if (op->cmd.dtr || op->addr.dtr || op->dummy.dtr || op->data.dtr) in wpcm_fiu_supports_op()
331 if (op->cmd.buswidth > 1 || op->addr.buswidth > 1 || in wpcm_fiu_supports_op()
332 op->dummy.buswidth > 1 || op->data.buswidth > 1) in wpcm_fiu_supports_op()
335 return wpcm_fiu_find_op_shape(op) != NULL; in wpcm_fiu_supports_op()
353 static int wpcm_fiu_exec_op(struct spi_mem *mem, const struct spi_mem_op *op) in wpcm_fiu_exec_op() argument
356 const struct wpcm_fiu_op_shape *shape = wpcm_fiu_find_op_shape(op); in wpcm_fiu_exec_op()
361 return shape->exec(mem, op); in wpcm_fiu_exec_op()
368 static int wpcm_fiu_adjust_op_size(struct spi_mem *mem, struct spi_mem_op *op) in wpcm_fiu_adjust_op_size() argument
370 if (op->data.nbytes > 4) in wpcm_fiu_adjust_op_size()
371 op->data.nbytes = 4; in wpcm_fiu_adjust_op_size()