Lines Matching +full:spi +full:- +full:bus

1 // SPDX-License-Identifier: GPL-2.0
3 * Lattice FPGA programming over slave SPI sysCONFIG interface.
7 #include <linux/spi/spi.h>
9 #include "lattice-sysconfig.h"
17 struct spi_device *spi = to_spi_device(priv->dev); in sysconfig_spi_cmd_transfer() local
19 return spi_write_then_read(spi, tx_buf, tx_len, rx_buf, rx_len); in sysconfig_spi_cmd_transfer()
25 struct spi_device *spi = to_spi_device(priv->dev); in sysconfig_spi_bitstream_burst_init() local
36 return -ENOMEM; in sysconfig_spi_bitstream_burst_init()
45 * Lock SPI bus for exclusive usage until FPGA programming is done. in sysconfig_spi_bitstream_burst_init()
46 * SPI bus will be released in sysconfig_spi_bitstream_burst_complete(). in sysconfig_spi_bitstream_burst_init()
48 spi_bus_lock(spi->controller); in sysconfig_spi_bitstream_burst_init()
50 ret = spi_sync_locked(spi, &msg); in sysconfig_spi_bitstream_burst_init()
52 spi_bus_unlock(spi->controller); in sysconfig_spi_bitstream_burst_init()
62 struct spi_device *spi = to_spi_device(priv->dev); in sysconfig_spi_bitstream_burst_write() local
72 return spi_sync_locked(spi, &msg); in sysconfig_spi_bitstream_burst_write()
77 struct spi_device *spi = to_spi_device(priv->dev); in sysconfig_spi_bitstream_burst_complete() local
79 /* Bitstream burst write is done, release SPI bus */ in sysconfig_spi_bitstream_burst_complete()
80 spi_bus_unlock(spi->controller); in sysconfig_spi_bitstream_burst_complete()
83 return spi_write(spi, NULL, 0); in sysconfig_spi_bitstream_burst_complete()
86 static int sysconfig_spi_probe(struct spi_device *spi) in sysconfig_spi_probe() argument
89 struct device *dev = &spi->dev; in sysconfig_spi_probe()
95 return -ENOMEM; in sysconfig_spi_probe()
99 dev_id = spi_get_device_id(spi); in sysconfig_spi_probe()
101 return -ENODEV; in sysconfig_spi_probe()
103 spi_max_speed = (const u32 *)dev_id->driver_data; in sysconfig_spi_probe()
107 return -EINVAL; in sysconfig_spi_probe()
109 if (spi->max_speed_hz > *spi_max_speed) { in sysconfig_spi_probe()
110 dev_err(dev, "SPI speed %u is too high, maximum speed is %u\n", in sysconfig_spi_probe()
111 spi->max_speed_hz, *spi_max_speed); in sysconfig_spi_probe()
112 return -EINVAL; in sysconfig_spi_probe()
115 priv->dev = dev; in sysconfig_spi_probe()
116 priv->command_transfer = sysconfig_spi_cmd_transfer; in sysconfig_spi_probe()
117 priv->bitstream_burst_write_init = sysconfig_spi_bitstream_burst_init; in sysconfig_spi_probe()
118 priv->bitstream_burst_write = sysconfig_spi_bitstream_burst_write; in sysconfig_spi_probe()
119 priv->bitstream_burst_write_complete = sysconfig_spi_bitstream_burst_complete; in sysconfig_spi_probe()
126 .name = "sysconfig-ecp5",
130 MODULE_DEVICE_TABLE(spi, sysconfig_spi_ids);
135 .compatible = "lattice,sysconfig-ecp5",
152 MODULE_DESCRIPTION("Lattice sysCONFIG Slave SPI FPGA Manager");