Lines Matching +full:spi +full:- +full:3 +full:wire
1 // SPDX-License-Identifier: GPL-2.0+
3 * LPC32xx SSP interface (SPI mode)
6 * Written-by: Albert ARIBAUD <albert.aribaud@3adev.fr>
13 #include <spi.h>
38 /* lpc32xx spi slave */
59 pr_err("3-wire mode not supported"); in spi_setup_slave()
79 lslave->regs = (struct ssp_regs *)SSP0_BASE; in spi_setup_slave()
82 * 8 bit frame, SPI fmt, 500kbps -> clock divider is 26. in spi_setup_slave()
86 writel(0x7, &lslave->regs->cr0); /* 8-bit chunks, SPI, 1 clk/bit */ in spi_setup_slave()
87 writel(26, &lslave->regs->cpsr); /* SSP clock = HCLK/26 = 500kbps */ in spi_setup_slave()
88 writel(0, &lslave->regs->imsc); /* do not raise any interrupts */ in spi_setup_slave()
89 writel(0, &lslave->regs->icr); /* clear any pending interrupt */ in spi_setup_slave()
90 writel(0, &lslave->regs->dmacr); /* do not do DMAs */ in spi_setup_slave()
91 writel(SSP_CR1_SSP_ENABLE, &lslave->regs->cr1); /* enable SSP0 */ in spi_setup_slave()
92 return &lslave->slave; in spi_setup_slave()
113 int bytelen = bitlen >> 3; in spi_xfer()
120 int status = readl(&lslave->regs->sr); in spi_xfer()
122 writel(((u8 *)dout)[idx_out++], &lslave->regs->data); in spi_xfer()
124 ((u8 *)din)[idx_in++] = readl(&lslave->regs->data); in spi_xfer()
126 return -1; in spi_xfer()