Lines Matching full:spi
2 // Loongson SPI Support
14 #include <linux/spi/spi.h>
16 #include "spi-loongson.h"
18 static inline void loongson_spi_write_reg(struct loongson_spi *spi, unsigned char reg, in loongson_spi_write_reg() argument
21 writeb(data, spi->base + reg); in loongson_spi_write_reg()
24 static inline char loongson_spi_read_reg(struct loongson_spi *spi, unsigned char reg) in loongson_spi_read_reg() argument
26 return readb(spi->base + reg); in loongson_spi_read_reg()
29 static void loongson_spi_set_cs(struct spi_device *spi, bool en) in loongson_spi_set_cs() argument
32 unsigned char mask = (BIT(4) | BIT(0)) << spi_get_chipselect(spi, 0); in loongson_spi_set_cs()
33 unsigned char val = en ? mask : (BIT(0) << spi_get_chipselect(spi, 0)); in loongson_spi_set_cs()
34 struct loongson_spi *loongson_spi = spi_controller_get_devdata(spi->controller); in loongson_spi_set_cs()
62 struct spi_device *spi) in loongson_spi_set_mode() argument
68 if (spi->mode & SPI_CPOL) in loongson_spi_set_mode()
70 if (spi->mode & SPI_CPHA) in loongson_spi_set_mode()
74 loongson_spi->mode |= spi->mode; in loongson_spi_set_mode()
78 struct spi_device *spi, struct spi_transfer *t) in loongson_spi_update_state() argument
83 if ((spi->mode ^ loongson_spi->mode) & SPI_MODE_X_MASK) in loongson_spi_update_state()
84 loongson_spi_set_mode(loongson_spi, spi); in loongson_spi_update_state()
89 static int loongson_spi_setup(struct spi_device *spi) in loongson_spi_setup() argument
93 loongson_spi = spi_controller_get_devdata(spi->controller); in loongson_spi_setup()
94 if (spi->bits_per_word % 8) in loongson_spi_setup()
97 if (spi_get_chipselect(spi, 0) >= spi->controller->num_chipselect) in loongson_spi_setup()
101 loongson_spi_set_cs(spi, true); in loongson_spi_setup()
106 static int loongson_spi_write_read_8bit(struct spi_device *spi, const u8 **tx_buf, in loongson_spi_write_read_8bit() argument
110 struct loongson_spi *loongson_spi = spi_controller_get_devdata(spi->controller); in loongson_spi_write_read_8bit()
130 static int loongson_spi_write_read(struct spi_device *spi, struct spi_transfer *xfer) in loongson_spi_write_read() argument
139 ret = loongson_spi_write_read_8bit(spi, &tx, &rx, count); in loongson_spi_write_read()
158 static int loongson_spi_transfer_one(struct spi_controller *ctrl, struct spi_device *spi, in loongson_spi_transfer_one() argument
161 struct loongson_spi *loongson_spi = spi_controller_get_devdata(spi->controller); in loongson_spi_transfer_one()
163 loongson_spi_update_state(loongson_spi, spi, xfer); in loongson_spi_transfer_one()
165 return loongson_spi_write_read(spi, xfer); in loongson_spi_transfer_one()
198 struct loongson_spi *spi; in loongson_spi_init_controller() local
215 spi = spi_controller_get_devdata(controller); in loongson_spi_init_controller()
216 spi->base = regs; in loongson_spi_init_controller()
217 spi->controller = controller; in loongson_spi_init_controller()
223 spi->clk_rate = clk_get_rate(clk); in loongson_spi_init_controller()
224 loongson_spi_reginit(spi); in loongson_spi_init_controller()
226 spi->mode = 0; in loongson_spi_init_controller()
278 MODULE_DESCRIPTION("Loongson SPI core driver");