Lines Matching full:spi
28 #include <linux/spi/spi.h>
32 #include <linux/platform_data/spi-omap2-mcspi.h>
164 static inline void mcspi_write_cs_reg(const struct spi_device *spi, in mcspi_write_cs_reg() argument
167 struct omap2_mcspi_cs *cs = spi->controller_state; in mcspi_write_cs_reg()
172 static inline u32 mcspi_read_cs_reg(const struct spi_device *spi, int idx) in mcspi_read_cs_reg() argument
174 struct omap2_mcspi_cs *cs = spi->controller_state; in mcspi_read_cs_reg()
179 static inline u32 mcspi_cached_chconf0(const struct spi_device *spi) in mcspi_cached_chconf0() argument
181 struct omap2_mcspi_cs *cs = spi->controller_state; in mcspi_cached_chconf0()
186 static inline void mcspi_write_chconf0(const struct spi_device *spi, u32 val) in mcspi_write_chconf0() argument
188 struct omap2_mcspi_cs *cs = spi->controller_state; in mcspi_write_chconf0()
191 mcspi_write_cs_reg(spi, OMAP2_MCSPI_CHCONF0, val); in mcspi_write_chconf0()
192 mcspi_read_cs_reg(spi, OMAP2_MCSPI_CHCONF0); in mcspi_write_chconf0()
205 static void omap2_mcspi_set_dma_req(const struct spi_device *spi, in omap2_mcspi_set_dma_req() argument
210 l = mcspi_cached_chconf0(spi); in omap2_mcspi_set_dma_req()
222 mcspi_write_chconf0(spi, l); in omap2_mcspi_set_dma_req()
225 static void omap2_mcspi_set_enable(const struct spi_device *spi, int enable) in omap2_mcspi_set_enable() argument
227 struct omap2_mcspi_cs *cs = spi->controller_state; in omap2_mcspi_set_enable()
236 mcspi_write_cs_reg(spi, OMAP2_MCSPI_CHCTRL0, cs->chctrl0); in omap2_mcspi_set_enable()
238 mcspi_read_cs_reg(spi, OMAP2_MCSPI_CHCTRL0); in omap2_mcspi_set_enable()
241 static void omap2_mcspi_set_cs(struct spi_device *spi, bool enable) in omap2_mcspi_set_cs() argument
243 struct omap2_mcspi *mcspi = spi_controller_get_devdata(spi->controller); in omap2_mcspi_set_cs()
250 if (spi->mode & SPI_CS_HIGH) in omap2_mcspi_set_cs()
253 if (spi->controller_state) { in omap2_mcspi_set_cs()
260 l = mcspi_cached_chconf0(spi); in omap2_mcspi_set_cs()
272 mcspi_write_chconf0(spi, l); in omap2_mcspi_set_cs()
306 static void omap2_mcspi_set_fifo(const struct spi_device *spi, in omap2_mcspi_set_fifo() argument
309 struct spi_controller *ctlr = spi->controller; in omap2_mcspi_set_fifo()
310 struct omap2_mcspi_cs *cs = spi->controller_state; in omap2_mcspi_set_fifo()
318 chconf = mcspi_cached_chconf0(spi); in omap2_mcspi_set_fifo()
345 mcspi_write_chconf0(spi, chconf); in omap2_mcspi_set_fifo()
358 mcspi_write_chconf0(spi, chconf); in omap2_mcspi_set_fifo()
395 struct spi_device *spi = data; in omap2_mcspi_rx_callback() local
396 struct omap2_mcspi *mcspi = spi_controller_get_devdata(spi->controller); in omap2_mcspi_rx_callback()
397 struct omap2_mcspi_dma *mcspi_dma = &mcspi->dma_channels[spi_get_chipselect(spi, 0)]; in omap2_mcspi_rx_callback()
400 omap2_mcspi_set_dma_req(spi, 1, 0); in omap2_mcspi_rx_callback()
407 struct spi_device *spi = data; in omap2_mcspi_tx_callback() local
408 struct omap2_mcspi *mcspi = spi_controller_get_devdata(spi->controller); in omap2_mcspi_tx_callback()
409 struct omap2_mcspi_dma *mcspi_dma = &mcspi->dma_channels[spi_get_chipselect(spi, 0)]; in omap2_mcspi_tx_callback()
412 omap2_mcspi_set_dma_req(spi, 0, 0); in omap2_mcspi_tx_callback()
417 static void omap2_mcspi_tx_dma(struct spi_device *spi, in omap2_mcspi_tx_dma() argument
425 mcspi = spi_controller_get_devdata(spi->controller); in omap2_mcspi_tx_dma()
426 mcspi_dma = &mcspi->dma_channels[spi_get_chipselect(spi, 0)]; in omap2_mcspi_tx_dma()
436 tx->callback_param = spi; in omap2_mcspi_tx_dma()
442 omap2_mcspi_set_dma_req(spi, 0, 1); in omap2_mcspi_tx_dma()
446 omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer, in omap2_mcspi_rx_dma() argument
459 struct omap2_mcspi_cs *cs = spi->controller_state; in omap2_mcspi_rx_dma()
463 mcspi = spi_controller_get_devdata(spi->controller); in omap2_mcspi_rx_dma()
464 mcspi_dma = &mcspi->dma_channels[spi_get_chipselect(spi, 0)]; in omap2_mcspi_rx_dma()
476 l = mcspi_cached_chconf0(spi); in omap2_mcspi_rx_dma()
513 dev_err(&spi->dev, "sg_split failed\n"); in omap2_mcspi_rx_dma()
522 tx->callback_param = spi; in omap2_mcspi_rx_dma()
529 omap2_mcspi_set_dma_req(spi, 1, 1); in omap2_mcspi_rx_dma()
534 omap2_mcspi_set_dma_req(spi, 1, 0); in omap2_mcspi_rx_dma()
548 omap2_mcspi_set_enable(spi, 0); in omap2_mcspi_rx_dma()
559 w = mcspi_read_cs_reg(spi, OMAP2_MCSPI_RX0); in omap2_mcspi_rx_dma()
568 dev_err(&spi->dev, "DMA RX penultimate word empty\n"); in omap2_mcspi_rx_dma()
570 omap2_mcspi_set_enable(spi, 1); in omap2_mcspi_rx_dma()
577 w = mcspi_read_cs_reg(spi, OMAP2_MCSPI_RX0); in omap2_mcspi_rx_dma()
585 dev_err(&spi->dev, "DMA RX last word empty\n"); in omap2_mcspi_rx_dma()
588 omap2_mcspi_set_enable(spi, 1); in omap2_mcspi_rx_dma()
593 omap2_mcspi_txrx_dma(struct spi_device *spi, struct spi_transfer *xfer) in omap2_mcspi_txrx_dma() argument
596 struct omap2_mcspi_cs *cs = spi->controller_state; in omap2_mcspi_txrx_dma()
608 mcspi = spi_controller_get_devdata(spi->controller); in omap2_mcspi_txrx_dma()
609 mcspi_dma = &mcspi->dma_channels[spi_get_chipselect(spi, 0)]; in omap2_mcspi_txrx_dma()
641 if (spi_controller_is_target(spi->controller)) in omap2_mcspi_txrx_dma()
642 mcspi_write_reg(spi->controller, in omap2_mcspi_txrx_dma()
645 omap2_mcspi_tx_dma(spi, xfer, cfg); in omap2_mcspi_txrx_dma()
649 count = omap2_mcspi_rx_dma(spi, xfer, cfg, es); in omap2_mcspi_txrx_dma()
657 omap2_mcspi_set_dma_req(spi, 0, 0); in omap2_mcspi_txrx_dma()
672 dev_err(&spi->dev, "EOW timed out\n"); in omap2_mcspi_txrx_dma()
685 dev_err(&spi->dev, "TXFFE timed out\n"); in omap2_mcspi_txrx_dma()
690 dev_err(&spi->dev, "TXS timed out\n"); in omap2_mcspi_txrx_dma()
695 dev_err(&spi->dev, "EOT timed out\n"); in omap2_mcspi_txrx_dma()
702 omap2_mcspi_txrx_pio(struct spi_device *spi, struct spi_transfer *xfer) in omap2_mcspi_txrx_pio() argument
704 struct omap2_mcspi_cs *cs = spi->controller_state; in omap2_mcspi_txrx_pio()
717 l = mcspi_cached_chconf0(spi); in omap2_mcspi_txrx_pio()
740 dev_err(&spi->dev, "TXS timed out\n"); in omap2_mcspi_txrx_pio()
743 dev_vdbg(&spi->dev, "write-%d %02x\n", in omap2_mcspi_txrx_pio()
750 dev_err(&spi->dev, "RXS timed out\n"); in omap2_mcspi_txrx_pio()
756 omap2_mcspi_set_enable(spi, 0); in omap2_mcspi_txrx_pio()
758 dev_vdbg(&spi->dev, "read-%d %02x\n", in omap2_mcspi_txrx_pio()
762 dev_err(&spi->dev, in omap2_mcspi_txrx_pio()
768 omap2_mcspi_set_enable(spi, 0); in omap2_mcspi_txrx_pio()
772 dev_vdbg(&spi->dev, "read-%d %02x\n", in omap2_mcspi_txrx_pio()
789 dev_err(&spi->dev, "TXS timed out\n"); in omap2_mcspi_txrx_pio()
792 dev_vdbg(&spi->dev, "write-%d %04x\n", in omap2_mcspi_txrx_pio()
799 dev_err(&spi->dev, "RXS timed out\n"); in omap2_mcspi_txrx_pio()
805 omap2_mcspi_set_enable(spi, 0); in omap2_mcspi_txrx_pio()
807 dev_vdbg(&spi->dev, "read-%d %04x\n", in omap2_mcspi_txrx_pio()
811 dev_err(&spi->dev, in omap2_mcspi_txrx_pio()
817 omap2_mcspi_set_enable(spi, 0); in omap2_mcspi_txrx_pio()
821 dev_vdbg(&spi->dev, "read-%d %04x\n", in omap2_mcspi_txrx_pio()
838 dev_err(&spi->dev, "TXS timed out\n"); in omap2_mcspi_txrx_pio()
841 dev_vdbg(&spi->dev, "write-%d %08x\n", in omap2_mcspi_txrx_pio()
848 dev_err(&spi->dev, "RXS timed out\n"); in omap2_mcspi_txrx_pio()
854 omap2_mcspi_set_enable(spi, 0); in omap2_mcspi_txrx_pio()
856 dev_vdbg(&spi->dev, "read-%d %08x\n", in omap2_mcspi_txrx_pio()
860 dev_err(&spi->dev, in omap2_mcspi_txrx_pio()
866 omap2_mcspi_set_enable(spi, 0); in omap2_mcspi_txrx_pio()
870 dev_vdbg(&spi->dev, "read-%d %08x\n", in omap2_mcspi_txrx_pio()
882 dev_err(&spi->dev, "TXS timed out\n"); in omap2_mcspi_txrx_pio()
885 dev_err(&spi->dev, "EOT timed out\n"); in omap2_mcspi_txrx_pio()
891 omap2_mcspi_set_enable(spi, 0); in omap2_mcspi_txrx_pio()
894 omap2_mcspi_set_enable(spi, 1); in omap2_mcspi_txrx_pio()
910 static int omap2_mcspi_setup_transfer(struct spi_device *spi, in omap2_mcspi_setup_transfer() argument
913 struct omap2_mcspi_cs *cs = spi->controller_state; in omap2_mcspi_setup_transfer()
916 u8 word_len = spi->bits_per_word; in omap2_mcspi_setup_transfer()
917 u32 speed_hz = spi->max_speed_hz; in omap2_mcspi_setup_transfer()
919 mcspi = spi_controller_get_devdata(spi->controller); in omap2_mcspi_setup_transfer()
943 l = mcspi_cached_chconf0(spi); in omap2_mcspi_setup_transfer()
963 if (!(spi->mode & SPI_CS_HIGH)) in omap2_mcspi_setup_transfer()
978 mcspi_write_cs_reg(spi, OMAP2_MCSPI_CHCTRL0, cs->chctrl0); in omap2_mcspi_setup_transfer()
981 /* set SPI mode 0..3 */ in omap2_mcspi_setup_transfer()
982 if (spi->mode & SPI_CPOL) in omap2_mcspi_setup_transfer()
986 if (spi->mode & SPI_CPHA) in omap2_mcspi_setup_transfer()
991 mcspi_write_chconf0(spi, l); in omap2_mcspi_setup_transfer()
993 cs->mode = spi->mode; in omap2_mcspi_setup_transfer()
995 dev_dbg(&spi->dev, "setup: speed %d, sample %s edge, clk %s\n", in omap2_mcspi_setup_transfer()
997 (spi->mode & SPI_CPHA) ? "trailing" : "leading", in omap2_mcspi_setup_transfer()
998 (spi->mode & SPI_CPOL) ? "inverted" : "normal"); in omap2_mcspi_setup_transfer()
1056 static void omap2_mcspi_cleanup(struct spi_device *spi) in omap2_mcspi_cleanup() argument
1060 if (spi->controller_state) { in omap2_mcspi_cleanup()
1062 cs = spi->controller_state; in omap2_mcspi_cleanup()
1069 static int omap2_mcspi_setup(struct spi_device *spi) in omap2_mcspi_setup() argument
1073 struct omap2_mcspi *mcspi = spi_controller_get_devdata(spi->controller); in omap2_mcspi_setup()
1075 struct omap2_mcspi_cs *cs = spi->controller_state; in omap2_mcspi_setup()
1081 cs->base = mcspi->base + spi_get_chipselect(spi, 0) * 0x14; in omap2_mcspi_setup()
1082 cs->phys = mcspi->phys + spi_get_chipselect(spi, 0) * 0x14; in omap2_mcspi_setup()
1086 spi->controller_state = cs; in omap2_mcspi_setup()
1095 omap2_mcspi_cleanup(spi); in omap2_mcspi_setup()
1100 ret = omap2_mcspi_setup_transfer(spi, NULL); in omap2_mcspi_setup()
1102 omap2_mcspi_cleanup(spi); in omap2_mcspi_setup()
1141 struct spi_device *spi, in omap2_mcspi_transfer_one() argument
1161 mcspi_dma = mcspi->dma_channels + spi_get_chipselect(spi, 0); in omap2_mcspi_transfer_one()
1162 cs = spi->controller_state; in omap2_mcspi_transfer_one()
1163 cd = spi->controller_data; in omap2_mcspi_transfer_one()
1166 * The target driver could have changed spi->mode in which case in omap2_mcspi_transfer_one()
1172 if (spi->mode != cs->mode) in omap2_mcspi_transfer_one()
1175 omap2_mcspi_set_enable(spi, 0); in omap2_mcspi_transfer_one()
1177 if (spi_get_csgpiod(spi, 0)) in omap2_mcspi_transfer_one()
1178 omap2_mcspi_set_cs(spi, spi->mode & SPI_CS_HIGH); in omap2_mcspi_transfer_one()
1181 (t->speed_hz != spi->max_speed_hz) || in omap2_mcspi_transfer_one()
1182 (t->bits_per_word != spi->bits_per_word)) { in omap2_mcspi_transfer_one()
1184 status = omap2_mcspi_setup_transfer(spi, t); in omap2_mcspi_transfer_one()
1187 if (t->speed_hz == spi->max_speed_hz && in omap2_mcspi_transfer_one()
1188 t->bits_per_word == spi->bits_per_word) in omap2_mcspi_transfer_one()
1192 chconf = mcspi_cached_chconf0(spi); in omap2_mcspi_transfer_one()
1207 mcspi_write_chconf0(spi, chconf); in omap2_mcspi_transfer_one()
1213 spi_xfer_is_dma_mapped(ctlr, spi, t)) in omap2_mcspi_transfer_one()
1214 omap2_mcspi_set_fifo(spi, t, 1); in omap2_mcspi_transfer_one()
1216 omap2_mcspi_set_enable(spi, 1); in omap2_mcspi_transfer_one()
1224 spi_xfer_is_dma_mapped(ctlr, spi, t)) in omap2_mcspi_transfer_one()
1225 count = omap2_mcspi_txrx_dma(spi, t); in omap2_mcspi_transfer_one()
1227 count = omap2_mcspi_txrx_pio(spi, t); in omap2_mcspi_transfer_one()
1235 omap2_mcspi_set_enable(spi, 0); in omap2_mcspi_transfer_one()
1238 omap2_mcspi_set_fifo(spi, t, 0); in omap2_mcspi_transfer_one()
1244 status = omap2_mcspi_setup_transfer(spi, NULL); in omap2_mcspi_transfer_one()
1247 omap2_mcspi_set_enable(spi, 0); in omap2_mcspi_transfer_one()
1249 if (spi_get_csgpiod(spi, 0)) in omap2_mcspi_transfer_one()
1250 omap2_mcspi_set_cs(spi, !(spi->mode & SPI_CS_HIGH)); in omap2_mcspi_transfer_one()
1253 omap2_mcspi_set_fifo(spi, t, 0); in omap2_mcspi_transfer_one()
1274 bits_per_word = msg->spi->bits_per_word; in omap2_mcspi_prepare_message()
1314 if (msg->spi->controller_state == cs && !mcspi->use_multi_mode) { in omap2_mcspi_prepare_message()
1330 struct spi_device *spi, in omap2_mcspi_can_dma() argument
1333 struct omap2_mcspi *mcspi = spi_controller_get_devdata(spi->controller); in omap2_mcspi_can_dma()
1335 &mcspi->dma_channels[spi_get_chipselect(spi, 0)]; in omap2_mcspi_can_dma()
1349 static size_t omap2_mcspi_max_xfer_size(struct spi_device *spi) in omap2_mcspi_max_xfer_size() argument
1351 struct omap2_mcspi *mcspi = spi_controller_get_devdata(spi->controller); in omap2_mcspi_max_xfer_size()
1353 &mcspi->dma_channels[spi_get_chipselect(spi, 0)]; in omap2_mcspi_max_xfer_size()
1393 * When SPI wake up from off-mode, CS is in activate state. If it was in
1475 if (of_property_read_bool(node, "spi-slave")) in omap2_mcspi_probe()
1482 /* the spi->mode bits understood by this driver: */ in omap2_mcspi_probe()
1506 of_property_read_u32(node, "ti,spi-num-cs", &num_cs); in omap2_mcspi_probe()