Lines Matching refs:op
350 const struct spi_mem_op *op) in mtk_spim_supports_op() argument
355 if (op->cmd.buswidth == 0 || op->cmd.buswidth > 4 || in mtk_spim_supports_op()
356 op->addr.buswidth > 4 || op->dummy.buswidth > 4 || in mtk_spim_supports_op()
357 op->data.buswidth > 4) in mtk_spim_supports_op()
360 if (!priv->hw_cap.support_quad && (op->cmd.buswidth > 2 || in mtk_spim_supports_op()
361 op->addr.buswidth > 2 || op->dummy.buswidth > 2 || in mtk_spim_supports_op()
362 op->data.buswidth > 2)) in mtk_spim_supports_op()
365 if (op->addr.nbytes && op->dummy.nbytes && in mtk_spim_supports_op()
366 op->addr.buswidth != op->dummy.buswidth) in mtk_spim_supports_op()
369 if (op->addr.nbytes + op->dummy.nbytes > 16) in mtk_spim_supports_op()
372 if (op->data.nbytes > MTK_SPI_IPM_PACKET_SIZE) { in mtk_spim_supports_op()
373 if (op->data.nbytes / MTK_SPI_IPM_PACKET_SIZE > in mtk_spim_supports_op()
375 op->data.nbytes % MTK_SPI_IPM_PACKET_SIZE != 0) in mtk_spim_supports_op()
383 const struct spi_mem_op *op) in mtk_spim_setup_dma_xfer() argument
392 if (op->data.dir == SPI_MEM_DATA_IN) { in mtk_spim_setup_dma_xfer()
403 const struct spi_mem_op *op) in mtk_spim_transfer_wait() argument
411 if (op->data.dir == SPI_MEM_NO_DATA) in mtk_spim_transfer_wait()
414 clk_count = op->data.nbytes; in mtk_spim_transfer_wait()
438 const struct spi_mem_op *op) in mtk_spim_exec_op() argument
457 if (op->addr.nbytes || op->dummy.nbytes) in mtk_spim_exec_op()
458 reg_val |= (op->addr.nbytes + op->dummy.nbytes) << in mtk_spim_exec_op()
462 if (!op->data.nbytes) { in mtk_spim_exec_op()
467 priv->xfer_len = op->data.nbytes; in mtk_spim_exec_op()
471 if (op->addr.nbytes || op->dummy.nbytes) { in mtk_spim_exec_op()
472 if (op->addr.buswidth == 1 || op->dummy.buswidth == 1) in mtk_spim_exec_op()
478 if (op->addr.buswidth == 2 || in mtk_spim_exec_op()
479 op->dummy.buswidth == 2 || in mtk_spim_exec_op()
480 op->data.buswidth == 2) in mtk_spim_exec_op()
482 else if (op->addr.buswidth == 4 || in mtk_spim_exec_op()
483 op->dummy.buswidth == 4 || in mtk_spim_exec_op()
484 op->data.buswidth == 4) in mtk_spim_exec_op()
491 if (op->data.dir == SPI_MEM_DATA_IN) in mtk_spim_exec_op()
497 tx_size = 1 + op->addr.nbytes + op->dummy.nbytes; in mtk_spim_exec_op()
498 if (op->data.dir == SPI_MEM_DATA_OUT) in mtk_spim_exec_op()
499 tx_size += op->data.nbytes; in mtk_spim_exec_op()
510 tx_tmp_buf[0] = op->cmd.opcode; in mtk_spim_exec_op()
512 if (op->addr.nbytes) { in mtk_spim_exec_op()
513 for (i = 0; i < op->addr.nbytes; i++) in mtk_spim_exec_op()
514 tx_tmp_buf[i + 1] = op->addr.val >> in mtk_spim_exec_op()
515 (8 * (op->addr.nbytes - i - 1)); in mtk_spim_exec_op()
518 if (op->dummy.nbytes) in mtk_spim_exec_op()
519 memset(tx_tmp_buf + op->addr.nbytes + 1, 0xff, in mtk_spim_exec_op()
520 op->dummy.nbytes); in mtk_spim_exec_op()
522 if (op->data.nbytes && op->data.dir == SPI_MEM_DATA_OUT) in mtk_spim_exec_op()
523 memcpy(tx_tmp_buf + op->dummy.nbytes + op->addr.nbytes + 1, in mtk_spim_exec_op()
524 op->data.buf.out, op->data.nbytes); in mtk_spim_exec_op()
533 if (op->data.dir == SPI_MEM_DATA_IN) { in mtk_spim_exec_op()
534 if (!IS_ALIGNED((size_t)op->data.buf.in, 4)) { in mtk_spim_exec_op()
535 rx_tmp_buf = kzalloc(op->data.nbytes, GFP_KERNEL); in mtk_spim_exec_op()
541 rx_tmp_buf = op->data.buf.in; in mtk_spim_exec_op()
544 priv->rx_dma = dma_map_single(rx_tmp_buf, op->data.nbytes, in mtk_spim_exec_op()
554 if (op->data.dir == SPI_MEM_DATA_IN) in mtk_spim_exec_op()
559 mtk_spim_setup_dma_xfer(priv, op); in mtk_spim_exec_op()
564 ret = mtk_spim_transfer_wait(slave, op); in mtk_spim_exec_op()
568 if (op->data.dir == SPI_MEM_DATA_IN && in mtk_spim_exec_op()
569 !IS_ALIGNED((size_t)op->data.buf.in, 4)) in mtk_spim_exec_op()
570 memcpy(op->data.buf.in, rx_tmp_buf, op->data.nbytes); in mtk_spim_exec_op()
576 if (op->data.dir == SPI_MEM_DATA_IN) in mtk_spim_exec_op()
583 if (op->data.dir == SPI_MEM_DATA_IN) in mtk_spim_exec_op()
585 op->data.nbytes, DMA_FROM_DEVICE); in mtk_spim_exec_op()
587 if (op->data.dir == SPI_MEM_DATA_IN && in mtk_spim_exec_op()
588 !IS_ALIGNED((size_t)op->data.buf.in, 4)) in mtk_spim_exec_op()
600 struct spi_mem_op *op) in mtk_spim_adjust_op_size() argument
604 if (!op->data.nbytes) in mtk_spim_adjust_op_size()
607 if (op->data.dir != SPI_MEM_NO_DATA) { in mtk_spim_adjust_op_size()
608 opcode_len = 1 + op->addr.nbytes + op->dummy.nbytes; in mtk_spim_adjust_op_size()
609 if (opcode_len + op->data.nbytes > MTK_SPI_IPM_PACKET_SIZE) { in mtk_spim_adjust_op_size()
610 op->data.nbytes = MTK_SPI_IPM_PACKET_SIZE - opcode_len; in mtk_spim_adjust_op_size()
612 op->data.nbytes -= op->data.nbytes % 4; in mtk_spim_adjust_op_size()