Lines Matching refs:op
136 bool (*match)(const struct spi_mem_op *op);
137 int (*exec)(struct spi_mem *mem, const struct spi_mem_op *op);
140 static bool wpcm_fiu_normal_match(const struct spi_mem_op *op) in wpcm_fiu_normal_match() argument
143 if (op->cmd.opcode == 0x0b) in wpcm_fiu_normal_match()
146 return (op->addr.nbytes == 0 || op->addr.nbytes == 3) && in wpcm_fiu_normal_match()
147 op->dummy.nbytes == 0 && op->data.nbytes <= 4; in wpcm_fiu_normal_match()
150 static int wpcm_fiu_normal_exec(struct spi_mem *mem, const struct spi_mem_op *op) in wpcm_fiu_normal_exec() argument
155 wpcm_fiu_set_opcode(fiu, op->cmd.opcode); in wpcm_fiu_normal_exec()
156 wpcm_fiu_set_addr(fiu, op->addr.val); in wpcm_fiu_normal_exec()
157 if (op->data.dir == SPI_MEM_DATA_OUT) in wpcm_fiu_normal_exec()
158 wpcm_fiu_set_data(fiu, op->data.buf.out, op->data.nbytes); in wpcm_fiu_normal_exec()
160 ret = wpcm_fiu_do_uma(fiu, spi_get_chipselect(mem->spi, 0), op->addr.nbytes == 3, in wpcm_fiu_normal_exec()
161 op->data.dir == SPI_MEM_DATA_OUT, op->data.nbytes); in wpcm_fiu_normal_exec()
163 if (op->data.dir == SPI_MEM_DATA_IN) in wpcm_fiu_normal_exec()
164 wpcm_fiu_get_data(fiu, op->data.buf.in, op->data.nbytes); in wpcm_fiu_normal_exec()
169 static bool wpcm_fiu_fast_read_match(const struct spi_mem_op *op) in wpcm_fiu_fast_read_match() argument
171 return op->cmd.opcode == 0x0b && op->addr.nbytes == 3 && in wpcm_fiu_fast_read_match()
172 op->dummy.nbytes == 1 && in wpcm_fiu_fast_read_match()
173 op->data.nbytes >= 1 && op->data.nbytes <= 4 && in wpcm_fiu_fast_read_match()
174 op->data.dir == SPI_MEM_DATA_IN; in wpcm_fiu_fast_read_match()
177 static int wpcm_fiu_fast_read_exec(struct spi_mem *mem, const struct spi_mem_op *op) in wpcm_fiu_fast_read_exec() argument
190 static bool wpcm_fiu_4ba_match(const struct spi_mem_op *op) in wpcm_fiu_4ba_match() argument
192 return op->addr.nbytes == 4 && op->dummy.nbytes == 0 && op->data.nbytes <= 4; in wpcm_fiu_4ba_match()
195 static int wpcm_fiu_4ba_exec(struct spi_mem *mem, const struct spi_mem_op *op) in wpcm_fiu_4ba_exec() argument
202 wpcm_fiu_set_opcode(fiu, op->cmd.opcode); in wpcm_fiu_4ba_exec()
203 wpcm_fiu_set_addr(fiu, op->addr.val >> 8); in wpcm_fiu_4ba_exec()
206 wpcm_fiu_set_opcode(fiu, op->addr.val & 0xff); in wpcm_fiu_4ba_exec()
208 if (op->data.dir == SPI_MEM_DATA_OUT) in wpcm_fiu_4ba_exec()
209 wpcm_fiu_set_data(fiu, op->data.buf.out, op->data.nbytes); in wpcm_fiu_4ba_exec()
210 wpcm_fiu_do_uma(fiu, cs, false, op->data.dir == SPI_MEM_DATA_OUT, op->data.nbytes); in wpcm_fiu_4ba_exec()
214 if (op->data.dir == SPI_MEM_DATA_IN) in wpcm_fiu_4ba_exec()
215 wpcm_fiu_get_data(fiu, op->data.buf.in, op->data.nbytes); in wpcm_fiu_4ba_exec()
233 static bool wpcm_fiu_rdid_match(const struct spi_mem_op *op) in wpcm_fiu_rdid_match() argument
235 return op->cmd.opcode == 0x9f && op->addr.nbytes == 0 && in wpcm_fiu_rdid_match()
236 op->dummy.nbytes == 0 && op->data.nbytes == 6 && in wpcm_fiu_rdid_match()
237 op->data.dir == SPI_MEM_DATA_IN; in wpcm_fiu_rdid_match()
240 static int wpcm_fiu_rdid_exec(struct spi_mem *mem, const struct spi_mem_op *op) in wpcm_fiu_rdid_exec() argument
246 wpcm_fiu_set_opcode(fiu, op->cmd.opcode); in wpcm_fiu_rdid_exec()
249 wpcm_fiu_get_data(fiu, op->data.buf.in, 3); in wpcm_fiu_rdid_exec()
252 wpcm_fiu_set_opcode(fiu, op->cmd.opcode); in wpcm_fiu_rdid_exec()
255 wpcm_fiu_get_data(fiu, op->data.buf.in + 3, 3); in wpcm_fiu_rdid_exec()
266 static bool wpcm_fiu_dummy_match(const struct spi_mem_op *op) in wpcm_fiu_dummy_match() argument
269 if (op->cmd.opcode == 0x0b) in wpcm_fiu_dummy_match()
272 return (op->addr.nbytes == 0 || op->addr.nbytes == 3) && in wpcm_fiu_dummy_match()
273 op->dummy.nbytes >= 1 && op->dummy.nbytes <= 5 && in wpcm_fiu_dummy_match()
274 op->data.nbytes <= 4; in wpcm_fiu_dummy_match()
277 static int wpcm_fiu_dummy_exec(struct spi_mem *mem, const struct spi_mem_op *op) in wpcm_fiu_dummy_exec() argument
285 wpcm_fiu_set_opcode(fiu, op->cmd.opcode); in wpcm_fiu_dummy_exec()
286 wpcm_fiu_set_addr(fiu, op->addr.val); in wpcm_fiu_dummy_exec()
287 wpcm_fiu_do_uma(fiu, cs, op->addr.nbytes != 0, true, op->dummy.nbytes - 1); in wpcm_fiu_dummy_exec()
292 wpcm_fiu_do_uma(fiu, cs, false, false, op->data.nbytes); in wpcm_fiu_dummy_exec()
293 wpcm_fiu_get_data(fiu, op->data.buf.in, op->data.nbytes); in wpcm_fiu_dummy_exec()
308 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
315 if (shape->match(op)) in wpcm_fiu_find_op_shape()
322 static bool wpcm_fiu_supports_op(struct spi_mem *mem, const struct spi_mem_op *op) in wpcm_fiu_supports_op() argument
324 if (!spi_mem_default_supports_op(mem, op)) in wpcm_fiu_supports_op()
327 if (op->cmd.dtr || op->addr.dtr || op->dummy.dtr || op->data.dtr) in wpcm_fiu_supports_op()
330 if (op->cmd.buswidth > 1 || op->addr.buswidth > 1 || in wpcm_fiu_supports_op()
331 op->dummy.buswidth > 1 || op->data.buswidth > 1) in wpcm_fiu_supports_op()
334 return wpcm_fiu_find_op_shape(op) != NULL; in wpcm_fiu_supports_op()
352 static int wpcm_fiu_exec_op(struct spi_mem *mem, const struct spi_mem_op *op) in wpcm_fiu_exec_op() argument
355 const struct wpcm_fiu_op_shape *shape = wpcm_fiu_find_op_shape(op); in wpcm_fiu_exec_op()
360 return shape->exec(mem, op); in wpcm_fiu_exec_op()
367 static int wpcm_fiu_adjust_op_size(struct spi_mem *mem, struct spi_mem_op *op) in wpcm_fiu_adjust_op_size() argument
369 if (op->data.nbytes > 4) in wpcm_fiu_adjust_op_size()
370 op->data.nbytes = 4; in wpcm_fiu_adjust_op_size()