Lines Matching +full:spi +full:- +full:3 +full:wire
1 // SPDX-License-Identifier: GPL-2.0-only
3 * SPI controller driver for the Mikrotik RB4xx boards
16 #include <linux/spi/spi.h>
18 #include <asm/mach-ath79/ar71xx_regs.h>
27 return __raw_readl(rbspi->base + reg); in rb4xx_read()
32 __raw_writel(value, rbspi->base + reg); in rb4xx_write()
51 for (i = 7; i >= 0; i--) in do_spi_byte()
80 static void rb4xx_set_cs(struct spi_device *spi, bool enable) in rb4xx_set_cs() argument
82 struct rb4xx_spi *rbspi = spi_master_get_devdata(spi->master); in rb4xx_set_cs()
95 struct spi_device *spi, struct spi_transfer *t) in rb4xx_transfer_one() argument
104 * Prime the SPI register with the SPI device selected. The m25p80 boot in rb4xx_transfer_one()
109 if (spi->chip_select == 2) in rb4xx_transfer_one()
116 tx_buf = t->tx_buf; in rb4xx_transfer_one()
117 rx_buf = t->rx_buf; in rb4xx_transfer_one()
118 for (i = 0; i < t->len; ++i) { in rb4xx_transfer_one()
119 if (t->tx_nbits == SPI_NBITS_DUAL) in rb4xx_transfer_one()
120 /* CPLD can use two-wire transfers */ in rb4xx_transfer_one()
145 master = spi_alloc_master(&pdev->dev, sizeof(*rbspi)); in rb4xx_spi_probe()
147 return -ENOMEM; in rb4xx_spi_probe()
149 ahb_clk = devm_clk_get(&pdev->dev, "ahb"); in rb4xx_spi_probe()
153 master->bus_num = 0; in rb4xx_spi_probe()
154 master->num_chipselect = 3; in rb4xx_spi_probe()
155 master->mode_bits = SPI_TX_DUAL; in rb4xx_spi_probe()
156 master->bits_per_word_mask = SPI_BPW_MASK(8); in rb4xx_spi_probe()
157 master->flags = SPI_MASTER_MUST_TX; in rb4xx_spi_probe()
158 master->transfer_one = rb4xx_transfer_one; in rb4xx_spi_probe()
159 master->set_cs = rb4xx_set_cs; in rb4xx_spi_probe()
161 err = devm_spi_register_master(&pdev->dev, master); in rb4xx_spi_probe()
163 dev_err(&pdev->dev, "failed to register SPI master\n"); in rb4xx_spi_probe()
172 rbspi->base = spi_base; in rb4xx_spi_probe()
173 rbspi->clk = ahb_clk; in rb4xx_spi_probe()
176 /* Enable SPI */ in rb4xx_spi_probe()
186 clk_disable_unprepare(rbspi->clk); in rb4xx_spi_remove()
195 .name = "rb4xx-spi",
201 MODULE_DESCRIPTION("Mikrotik RB4xx SPI controller driver");