Lines Matching full:spi

2  * Marvell Orion SPI controller driver
18 #include <linux/spi/spi.h>
19 #include <linux/spi/orion_spi.h>
97 static int orion_spi_baudrate_set(struct spi_device *spi, unsigned int speed) in orion_spi_baudrate_set() argument
105 orion_spi = spi_master_get_devdata(spi->master); in orion_spi_baudrate_set()
123 /* Convert the rate to SPI clock divisor value. */ in orion_spi_baudrate_set()
137 orion_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t) in orion_spi_setup_transfer() argument
140 unsigned int speed = spi->max_speed_hz; in orion_spi_setup_transfer()
141 unsigned int bits_per_word = spi->bits_per_word; in orion_spi_setup_transfer()
144 orion_spi = spi_master_get_devdata(spi->master); in orion_spi_setup_transfer()
152 rc = orion_spi_baudrate_set(spi, speed); in orion_spi_setup_transfer()
182 orion_spi_write_read_8bit(struct spi_device *spi, in orion_spi_write_read_8bit() argument
188 orion_spi = spi_master_get_devdata(spi->master); in orion_spi_write_read_8bit()
202 dev_err(&spi->dev, "TXS timed out\n"); in orion_spi_write_read_8bit()
213 orion_spi_write_read_16bit(struct spi_device *spi, in orion_spi_write_read_16bit() argument
219 orion_spi = spi_master_get_devdata(spi->master); in orion_spi_write_read_16bit()
233 dev_err(&spi->dev, "TXS timed out\n"); in orion_spi_write_read_16bit()
244 orion_spi_write_read(struct spi_device *spi, struct spi_transfer *xfer) in orion_spi_write_read() argument
250 orion_spi = spi_master_get_devdata(spi->master); in orion_spi_write_read()
251 word_len = spi->bits_per_word; in orion_spi_write_read()
259 if (orion_spi_write_read_8bit(spi, &tx, &rx) < 0) in orion_spi_write_read()
268 if (orion_spi_write_read_16bit(spi, &tx, &rx) < 0) in orion_spi_write_read()
287 struct spi_device *spi; in orion_spi_work() local
299 spi = m->spi; in orion_spi_work()
302 status = orion_spi_setup_transfer(spi, NULL); in orion_spi_work()
310 status = orion_spi_setup_transfer(spi, t); in orion_spi_work()
324 orion_spi_write_read(spi, t); in orion_spi_work()
356 static int orion_spi_setup(struct spi_device *spi) in orion_spi_setup() argument
360 orion_spi = spi_master_get_devdata(spi->master); in orion_spi_setup()
367 if ((spi->max_speed_hz == 0) in orion_spi_setup()
368 || (spi->max_speed_hz > orion_spi->max_speed)) in orion_spi_setup()
369 spi->max_speed_hz = orion_spi->max_speed; in orion_spi_setup()
371 if (spi->max_speed_hz < orion_spi->min_speed) { in orion_spi_setup()
372 dev_err(&spi->dev, "setup: requested speed too low %d Hz\n", in orion_spi_setup()
373 spi->max_speed_hz); in orion_spi_setup()
383 static int orion_spi_transfer(struct spi_device *spi, struct spi_message *m) in orion_spi_transfer() argument
396 orion_spi = spi_master_get_devdata(spi->master); in orion_spi_transfer()
399 unsigned int bits_per_word = spi->bits_per_word; in orion_spi_transfer()
402 dev_err(&spi->dev, in orion_spi_transfer()
412 dev_err(&spi->dev, in orion_spi_transfer()
420 dev_err(&spi->dev, in orion_spi_transfer()
428 dev_err(&spi->dev, in orion_spi_transfer()
455 struct orion_spi *spi; in orion_spi_probe() local
462 master = spi_alloc_master(&pdev->dev, sizeof *spi); in orion_spi_probe()
480 spi = spi_master_get_devdata(master); in orion_spi_probe()
481 spi->master = master; in orion_spi_probe()
482 spi->spi_info = spi_info; in orion_spi_probe()
484 spi->max_speed = DIV_ROUND_UP(spi_info->tclk, 4); in orion_spi_probe()
485 spi->min_speed = DIV_ROUND_UP(spi_info->tclk, 30); in orion_spi_probe()
498 spi->base = ioremap(r->start, SZ_1K); in orion_spi_probe()
500 INIT_WORK(&spi->work, orion_spi_work); in orion_spi_probe()
502 spin_lock_init(&spi->lock); in orion_spi_probe()
503 INIT_LIST_HEAD(&spi->msg_queue); in orion_spi_probe()
505 if (orion_spi_reset(spi) < 0) in orion_spi_probe()
526 struct orion_spi *spi; in orion_spi_remove() local
530 spi = spi_master_get_devdata(master); in orion_spi_remove()
532 cancel_work_sync(&spi->work); in orion_spi_remove()
572 MODULE_DESCRIPTION("Orion SPI driver");