Lines Matching +full:spi +full:- +full:lsb +full:- +full:first
1 // SPDX-License-Identifier: GPL-2.0+
11 #include <linux/dma-mapping.h>
18 #include <linux/spi/spi.h>
19 #include <linux/spi/spi-fsl-dspi.h>
21 #define DRIVER_NAME "fsl-dspi"
109 #define SPI_FRAME_BITS(bits) SPI_CTAR_FMSZ((bits) - 1)
110 #define SPI_FRAME_EBITS(bits) SPI_CTARE_FMSZE(((bits) - 1) >> 4)
205 if (dspi->tx) { in dspi_pop_tx()
206 if (dspi->bytes_per_word == 1) in dspi_pop_tx()
207 txdata = *(u8 *)dspi->tx; in dspi_pop_tx()
208 else if (dspi->bytes_per_word == 2) in dspi_pop_tx()
209 txdata = *(u16 *)dspi->tx; in dspi_pop_tx()
210 else /* dspi->bytes_per_word == 4 */ in dspi_pop_tx()
211 txdata = *(u32 *)dspi->tx; in dspi_pop_tx()
212 dspi->tx += dspi->bytes_per_word; in dspi_pop_tx()
214 dspi->len -= dspi->bytes_per_word; in dspi_pop_tx()
220 u16 cmd = dspi->tx_cmd, data = dspi_pop_tx(dspi); in dspi_pop_tx_pushr()
222 if (spi_controller_is_slave(dspi->ctlr)) in dspi_pop_tx_pushr()
225 if (dspi->len > 0) in dspi_pop_tx_pushr()
232 if (!dspi->rx) in dspi_push_rx()
236 rxdata &= (1 << dspi->bits_per_word) - 1; in dspi_push_rx()
238 if (dspi->bytes_per_word == 1) in dspi_push_rx()
239 *(u8 *)dspi->rx = rxdata; in dspi_push_rx()
240 else if (dspi->bytes_per_word == 2) in dspi_push_rx()
241 *(u16 *)dspi->rx = rxdata; in dspi_push_rx()
242 else /* dspi->bytes_per_word == 4 */ in dspi_push_rx()
243 *(u32 *)dspi->rx = rxdata; in dspi_push_rx()
244 dspi->rx += dspi->bytes_per_word; in dspi_push_rx()
250 struct fsl_dspi_dma *dma = dspi->dma; in dspi_tx_dma_callback()
252 complete(&dma->cmd_tx_complete); in dspi_tx_dma_callback()
258 struct fsl_dspi_dma *dma = dspi->dma; in dspi_rx_dma_callback()
261 if (dspi->rx) { in dspi_rx_dma_callback()
262 for (i = 0; i < dma->curr_xfer_len; i++) in dspi_rx_dma_callback()
263 dspi_push_rx(dspi, dspi->dma->rx_dma_buf[i]); in dspi_rx_dma_callback()
266 complete(&dma->cmd_rx_complete); in dspi_rx_dma_callback()
271 struct device *dev = &dspi->pdev->dev; in dspi_next_xfer_dma_submit()
272 struct fsl_dspi_dma *dma = dspi->dma; in dspi_next_xfer_dma_submit()
276 for (i = 0; i < dma->curr_xfer_len; i++) in dspi_next_xfer_dma_submit()
277 dspi->dma->tx_dma_buf[i] = dspi_pop_tx_pushr(dspi); in dspi_next_xfer_dma_submit()
279 dma->tx_desc = dmaengine_prep_slave_single(dma->chan_tx, in dspi_next_xfer_dma_submit()
280 dma->tx_dma_phys, in dspi_next_xfer_dma_submit()
281 dma->curr_xfer_len * in dspi_next_xfer_dma_submit()
285 if (!dma->tx_desc) { in dspi_next_xfer_dma_submit()
287 return -EIO; in dspi_next_xfer_dma_submit()
290 dma->tx_desc->callback = dspi_tx_dma_callback; in dspi_next_xfer_dma_submit()
291 dma->tx_desc->callback_param = dspi; in dspi_next_xfer_dma_submit()
292 if (dma_submit_error(dmaengine_submit(dma->tx_desc))) { in dspi_next_xfer_dma_submit()
294 return -EINVAL; in dspi_next_xfer_dma_submit()
297 dma->rx_desc = dmaengine_prep_slave_single(dma->chan_rx, in dspi_next_xfer_dma_submit()
298 dma->rx_dma_phys, in dspi_next_xfer_dma_submit()
299 dma->curr_xfer_len * in dspi_next_xfer_dma_submit()
303 if (!dma->rx_desc) { in dspi_next_xfer_dma_submit()
305 return -EIO; in dspi_next_xfer_dma_submit()
308 dma->rx_desc->callback = dspi_rx_dma_callback; in dspi_next_xfer_dma_submit()
309 dma->rx_desc->callback_param = dspi; in dspi_next_xfer_dma_submit()
310 if (dma_submit_error(dmaengine_submit(dma->rx_desc))) { in dspi_next_xfer_dma_submit()
312 return -EINVAL; in dspi_next_xfer_dma_submit()
315 reinit_completion(&dspi->dma->cmd_rx_complete); in dspi_next_xfer_dma_submit()
316 reinit_completion(&dspi->dma->cmd_tx_complete); in dspi_next_xfer_dma_submit()
318 dma_async_issue_pending(dma->chan_rx); in dspi_next_xfer_dma_submit()
319 dma_async_issue_pending(dma->chan_tx); in dspi_next_xfer_dma_submit()
321 if (spi_controller_is_slave(dspi->ctlr)) { in dspi_next_xfer_dma_submit()
322 wait_for_completion_interruptible(&dspi->dma->cmd_rx_complete); in dspi_next_xfer_dma_submit()
326 time_left = wait_for_completion_timeout(&dspi->dma->cmd_tx_complete, in dspi_next_xfer_dma_submit()
330 dmaengine_terminate_all(dma->chan_tx); in dspi_next_xfer_dma_submit()
331 dmaengine_terminate_all(dma->chan_rx); in dspi_next_xfer_dma_submit()
332 return -ETIMEDOUT; in dspi_next_xfer_dma_submit()
335 time_left = wait_for_completion_timeout(&dspi->dma->cmd_rx_complete, in dspi_next_xfer_dma_submit()
339 dmaengine_terminate_all(dma->chan_tx); in dspi_next_xfer_dma_submit()
340 dmaengine_terminate_all(dma->chan_rx); in dspi_next_xfer_dma_submit()
341 return -ETIMEDOUT; in dspi_next_xfer_dma_submit()
349 struct spi_message *message = dspi->cur_msg; in dspi_dma_xfer()
350 struct device *dev = &dspi->pdev->dev; in dspi_dma_xfer()
351 struct fsl_dspi_dma *dma = dspi->dma; in dspi_dma_xfer()
356 curr_remaining_bytes = dspi->len; in dspi_dma_xfer()
360 dma->curr_xfer_len = curr_remaining_bytes in dspi_dma_xfer()
361 / dspi->bytes_per_word; in dspi_dma_xfer()
362 if (dma->curr_xfer_len > bytes_per_buffer) in dspi_dma_xfer()
363 dma->curr_xfer_len = bytes_per_buffer; in dspi_dma_xfer()
372 dma->curr_xfer_len * dspi->bytes_per_word; in dspi_dma_xfer()
373 curr_remaining_bytes -= len; in dspi_dma_xfer()
374 message->actual_length += len; in dspi_dma_xfer()
386 struct device *dev = &dspi->pdev->dev; in dspi_request_dma()
393 return -ENOMEM; in dspi_request_dma()
395 dma->chan_rx = dma_request_slave_channel(dev, "rx"); in dspi_request_dma()
396 if (!dma->chan_rx) { in dspi_request_dma()
398 ret = -ENODEV; in dspi_request_dma()
402 dma->chan_tx = dma_request_slave_channel(dev, "tx"); in dspi_request_dma()
403 if (!dma->chan_tx) { in dspi_request_dma()
405 ret = -ENODEV; in dspi_request_dma()
409 dma->tx_dma_buf = dma_alloc_coherent(dev, DSPI_DMA_BUFSIZE, in dspi_request_dma()
410 &dma->tx_dma_phys, GFP_KERNEL); in dspi_request_dma()
411 if (!dma->tx_dma_buf) { in dspi_request_dma()
412 ret = -ENOMEM; in dspi_request_dma()
416 dma->rx_dma_buf = dma_alloc_coherent(dev, DSPI_DMA_BUFSIZE, in dspi_request_dma()
417 &dma->rx_dma_phys, GFP_KERNEL); in dspi_request_dma()
418 if (!dma->rx_dma_buf) { in dspi_request_dma()
419 ret = -ENOMEM; in dspi_request_dma()
431 ret = dmaengine_slave_config(dma->chan_rx, &cfg); in dspi_request_dma()
434 ret = -EINVAL; in dspi_request_dma()
439 ret = dmaengine_slave_config(dma->chan_tx, &cfg); in dspi_request_dma()
442 ret = -EINVAL; in dspi_request_dma()
446 dspi->dma = dma; in dspi_request_dma()
447 init_completion(&dma->cmd_tx_complete); in dspi_request_dma()
448 init_completion(&dma->cmd_rx_complete); in dspi_request_dma()
454 dma->rx_dma_buf, dma->rx_dma_phys); in dspi_request_dma()
457 dma->tx_dma_buf, dma->tx_dma_phys); in dspi_request_dma()
459 dma_release_channel(dma->chan_tx); in dspi_request_dma()
461 dma_release_channel(dma->chan_rx); in dspi_request_dma()
464 dspi->dma = NULL; in dspi_request_dma()
471 struct fsl_dspi_dma *dma = dspi->dma; in dspi_release_dma()
472 struct device *dev = &dspi->pdev->dev; in dspi_release_dma()
477 if (dma->chan_tx) { in dspi_release_dma()
478 dma_unmap_single(dev, dma->tx_dma_phys, in dspi_release_dma()
480 dma_release_channel(dma->chan_tx); in dspi_release_dma()
483 if (dma->chan_rx) { in dspi_release_dma()
484 dma_unmap_single(dev, dma->rx_dma_phys, in dspi_release_dma()
486 dma_release_channel(dma->chan_rx); in dspi_release_dma()
493 /* Valid baud rate pre-scaler values */ in hz_to_spi_baud()
522 *pbr = ARRAY_SIZE(pbr_tbl) - 1; in hz_to_spi_baud()
523 *br = ARRAY_SIZE(brs) - 1; in hz_to_spi_baud()
556 *psc = ARRAY_SIZE(pscale_tbl) - 1; in ns_delay_scale()
563 regmap_write(dspi->regmap, SPI_PUSHR, dspi_pop_tx_pushr(dspi)); in fifo_write()
568 u16 cmd = dspi->tx_cmd; in cmd_fifo_write()
570 if (dspi->len > 0) in cmd_fifo_write()
572 regmap_write(dspi->regmap_pushr, PUSHR_CMD, cmd); in cmd_fifo_write()
577 regmap_write(dspi->regmap_pushr, PUSHR_TX, txdata); in tx_fifo_write()
583 dspi->tx_cmd |= SPI_PUSHR_CMD_CTCNT; in dspi_tcfq_write()
585 if (dspi->devtype_data->xspi_mode && dspi->bits_per_word > 16) { in dspi_tcfq_write()
586 /* Write two TX FIFO entries first, and then the corresponding in dspi_tcfq_write()
591 if (dspi->cur_chip->ctar_val & SPI_CTAR_LSBFE) { in dspi_tcfq_write()
592 /* LSB */ in dspi_tcfq_write()
613 regmap_read(dspi->regmap, SPI_POPR, &rxdata); in fifo_read()
625 u16 xfer_cmd = dspi->tx_cmd; in dspi_eoq_write()
628 while (dspi->len && fifo_size--) { in dspi_eoq_write()
629 dspi->tx_cmd = xfer_cmd; in dspi_eoq_write()
631 if (dspi->len == dspi->bytes_per_word || fifo_size == 0) in dspi_eoq_write()
632 dspi->tx_cmd |= SPI_PUSHR_CMD_EOQ; in dspi_eoq_write()
633 /* Clear transfer count for first transfer in FIFO */ in dspi_eoq_write()
634 if (fifo_size == (DSPI_FIFO_SIZE - 1)) in dspi_eoq_write()
635 dspi->tx_cmd |= SPI_PUSHR_CMD_CTCNT; in dspi_eoq_write()
646 while ((dspi->rx < dspi->rx_end) && fifo_size--) in dspi_eoq_read()
652 struct spi_message *msg = dspi->cur_msg; in dspi_rxtx()
657 /* Get transfer counter (in number of SPI transfers). It was in dspi_rxtx()
660 regmap_read(dspi->regmap, SPI_TCR, &spi_tcr); in dspi_rxtx()
663 msg->actual_length += spi_tcnt * dspi->bytes_per_word; in dspi_rxtx()
665 trans_mode = dspi->devtype_data->trans_mode; in dspi_rxtx()
671 if (!dspi->len) in dspi_rxtx()
680 return -EINPROGRESS; in dspi_rxtx()
689 regmap_read(dspi->regmap, SPI_SR, &spi_sr); in dspi_poll()
690 regmap_write(dspi->regmap, SPI_SR, spi_sr); in dspi_poll()
694 } while (--tries); in dspi_poll()
697 return -ETIMEDOUT; in dspi_poll()
707 regmap_read(dspi->regmap, SPI_SR, &spi_sr); in dspi_interrupt()
708 regmap_write(dspi->regmap, SPI_SR, spi_sr); in dspi_interrupt()
714 dspi->waitflags = 1; in dspi_interrupt()
715 wake_up_interruptible(&dspi->waitq); in dspi_interrupt()
725 struct spi_device *spi = message->spi; in dspi_transfer_one_message() local
730 message->actual_length = 0; in dspi_transfer_one_message()
732 list_for_each_entry(transfer, &message->transfers, transfer_list) { in dspi_transfer_one_message()
733 dspi->cur_transfer = transfer; in dspi_transfer_one_message()
734 dspi->cur_msg = message; in dspi_transfer_one_message()
735 dspi->cur_chip = spi_get_ctldata(spi); in dspi_transfer_one_message()
737 dspi->tx_cmd = SPI_PUSHR_CMD_CTAS(0) | in dspi_transfer_one_message()
738 SPI_PUSHR_CMD_PCS(spi->chip_select); in dspi_transfer_one_message()
739 if (list_is_last(&dspi->cur_transfer->transfer_list, in dspi_transfer_one_message()
740 &dspi->cur_msg->transfers)) { in dspi_transfer_one_message()
744 if (transfer->cs_change) in dspi_transfer_one_message()
745 dspi->tx_cmd |= SPI_PUSHR_CMD_CONT; in dspi_transfer_one_message()
748 * when cs_change is not set, and de-activate PCS in dspi_transfer_one_message()
752 if (!transfer->cs_change) in dspi_transfer_one_message()
753 dspi->tx_cmd |= SPI_PUSHR_CMD_CONT; in dspi_transfer_one_message()
756 dspi->void_write_data = dspi->cur_chip->void_write_data; in dspi_transfer_one_message()
758 dspi->tx = transfer->tx_buf; in dspi_transfer_one_message()
759 dspi->rx = transfer->rx_buf; in dspi_transfer_one_message()
760 dspi->rx_end = dspi->rx + transfer->len; in dspi_transfer_one_message()
761 dspi->len = transfer->len; in dspi_transfer_one_message()
763 dspi->bits_per_word = transfer->bits_per_word; in dspi_transfer_one_message()
764 if (transfer->bits_per_word <= 8) in dspi_transfer_one_message()
765 dspi->bytes_per_word = 1; in dspi_transfer_one_message()
766 else if (transfer->bits_per_word <= 16) in dspi_transfer_one_message()
767 dspi->bytes_per_word = 2; in dspi_transfer_one_message()
769 dspi->bytes_per_word = 4; in dspi_transfer_one_message()
771 regmap_update_bits(dspi->regmap, SPI_MCR, in dspi_transfer_one_message()
774 regmap_write(dspi->regmap, SPI_CTAR(0), in dspi_transfer_one_message()
775 dspi->cur_chip->ctar_val | in dspi_transfer_one_message()
776 SPI_FRAME_BITS(transfer->bits_per_word)); in dspi_transfer_one_message()
777 if (dspi->devtype_data->xspi_mode) in dspi_transfer_one_message()
778 regmap_write(dspi->regmap, SPI_CTARE(0), in dspi_transfer_one_message()
779 SPI_FRAME_EBITS(transfer->bits_per_word) | in dspi_transfer_one_message()
782 trans_mode = dspi->devtype_data->trans_mode; in dspi_transfer_one_message()
785 regmap_write(dspi->regmap, SPI_RSER, SPI_RSER_EOQFE); in dspi_transfer_one_message()
789 regmap_write(dspi->regmap, SPI_RSER, SPI_RSER_TCFQE); in dspi_transfer_one_message()
793 regmap_write(dspi->regmap, SPI_RSER, in dspi_transfer_one_message()
799 dev_err(&dspi->pdev->dev, "unsupported trans_mode %u\n", in dspi_transfer_one_message()
801 status = -EINVAL; in dspi_transfer_one_message()
805 if (!dspi->irq) { in dspi_transfer_one_message()
808 } while (status == -EINPROGRESS); in dspi_transfer_one_message()
810 status = wait_event_interruptible(dspi->waitq, in dspi_transfer_one_message()
811 dspi->waitflags); in dspi_transfer_one_message()
812 dspi->waitflags = 0; in dspi_transfer_one_message()
815 dev_err(&dspi->pdev->dev, in dspi_transfer_one_message()
818 if (transfer->delay_usecs) in dspi_transfer_one_message()
819 udelay(transfer->delay_usecs); in dspi_transfer_one_message()
823 message->status = status; in dspi_transfer_one_message()
829 static int dspi_setup(struct spi_device *spi) in dspi_setup() argument
831 struct fsl_dspi *dspi = spi_controller_get_devdata(spi->controller); in dspi_setup()
839 /* Only alloc on first setup */ in dspi_setup()
840 chip = spi_get_ctldata(spi); in dspi_setup()
844 return -ENOMEM; in dspi_setup()
847 pdata = dev_get_platdata(&dspi->pdev->dev); in dspi_setup()
850 of_property_read_u32(spi->dev.of_node, "fsl,spi-cs-sck-delay", in dspi_setup()
853 of_property_read_u32(spi->dev.of_node, "fsl,spi-sck-cs-delay", in dspi_setup()
856 cs_sck_delay = pdata->cs_sck_delay; in dspi_setup()
857 sck_cs_delay = pdata->sck_cs_delay; in dspi_setup()
860 chip->void_write_data = 0; in dspi_setup()
862 clkrate = clk_get_rate(dspi->clk); in dspi_setup()
863 hz_to_spi_baud(&pbr, &br, spi->max_speed_hz, clkrate); in dspi_setup()
871 chip->ctar_val = 0; in dspi_setup()
872 if (spi->mode & SPI_CPOL) in dspi_setup()
873 chip->ctar_val |= SPI_CTAR_CPOL; in dspi_setup()
874 if (spi->mode & SPI_CPHA) in dspi_setup()
875 chip->ctar_val |= SPI_CTAR_CPHA; in dspi_setup()
877 if (!spi_controller_is_slave(dspi->ctlr)) { in dspi_setup()
878 chip->ctar_val |= SPI_CTAR_PCSSCK(pcssck) | in dspi_setup()
885 if (spi->mode & SPI_LSB_FIRST) in dspi_setup()
886 chip->ctar_val |= SPI_CTAR_LSBFE; in dspi_setup()
889 spi_set_ctldata(spi, chip); in dspi_setup()
894 static void dspi_cleanup(struct spi_device *spi) in dspi_cleanup() argument
896 struct chip_data *chip = spi_get_ctldata((struct spi_device *)spi); in dspi_cleanup()
898 dev_dbg(&spi->dev, "spi_device %u.%u cleanup\n", in dspi_cleanup()
899 spi->controller->bus_num, spi->chip_select); in dspi_cleanup()
905 { .compatible = "fsl,vf610-dspi", .data = &vf610_data, },
906 { .compatible = "fsl,ls1021a-v1.0-dspi", .data = &ls1021a_v1_data, },
907 { .compatible = "fsl,ls2085a-dspi", .data = &ls2085a_data, },
919 clk_disable_unprepare(dspi->clk); in dspi_suspend()
934 ret = clk_prepare_enable(dspi->clk); in dspi_resume()
997 if (dspi->devtype_data->xspi_mode) in dspi_init()
999 if (!spi_controller_is_slave(dspi->ctlr)) in dspi_init()
1002 regmap_write(dspi->regmap, SPI_MCR, mcr); in dspi_init()
1003 regmap_write(dspi->regmap, SPI_SR, SPI_SR_CLEAR); in dspi_init()
1004 if (dspi->devtype_data->xspi_mode) in dspi_init()
1005 regmap_write(dspi->regmap, SPI_CTARE(0), in dspi_init()
1011 struct device_node *np = pdev->dev.of_node; in dspi_probe()
1020 ctlr = spi_alloc_master(&pdev->dev, sizeof(struct fsl_dspi)); in dspi_probe()
1022 return -ENOMEM; in dspi_probe()
1025 dspi->pdev = pdev; in dspi_probe()
1026 dspi->ctlr = ctlr; in dspi_probe()
1028 ctlr->setup = dspi_setup; in dspi_probe()
1029 ctlr->transfer_one_message = dspi_transfer_one_message; in dspi_probe()
1030 ctlr->dev.of_node = pdev->dev.of_node; in dspi_probe()
1032 ctlr->cleanup = dspi_cleanup; in dspi_probe()
1033 ctlr->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST; in dspi_probe()
1035 pdata = dev_get_platdata(&pdev->dev); in dspi_probe()
1037 ctlr->num_chipselect = pdata->cs_num; in dspi_probe()
1038 ctlr->bus_num = pdata->bus_num; in dspi_probe()
1040 dspi->devtype_data = &coldfire_data; in dspi_probe()
1043 ret = of_property_read_u32(np, "spi-num-chipselects", &cs_num); in dspi_probe()
1045 dev_err(&pdev->dev, "can't get spi-num-chipselects\n"); in dspi_probe()
1048 ctlr->num_chipselect = cs_num; in dspi_probe()
1050 ret = of_property_read_u32(np, "bus-num", &bus_num); in dspi_probe()
1052 dev_err(&pdev->dev, "can't get bus-num\n"); in dspi_probe()
1055 ctlr->bus_num = bus_num; in dspi_probe()
1057 if (of_property_read_bool(np, "spi-slave")) in dspi_probe()
1058 ctlr->slave = true; in dspi_probe()
1060 dspi->devtype_data = of_device_get_match_data(&pdev->dev); in dspi_probe()
1061 if (!dspi->devtype_data) { in dspi_probe()
1062 dev_err(&pdev->dev, "can't get devtype_data\n"); in dspi_probe()
1063 ret = -EFAULT; in dspi_probe()
1068 if (dspi->devtype_data->xspi_mode) in dspi_probe()
1069 ctlr->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32); in dspi_probe()
1071 ctlr->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 16); in dspi_probe()
1074 base = devm_ioremap_resource(&pdev->dev, res); in dspi_probe()
1080 if (dspi->devtype_data->xspi_mode) in dspi_probe()
1084 dspi->regmap = devm_regmap_init_mmio(&pdev->dev, base, regmap_config); in dspi_probe()
1085 if (IS_ERR(dspi->regmap)) { in dspi_probe()
1086 dev_err(&pdev->dev, "failed to init regmap: %ld\n", in dspi_probe()
1087 PTR_ERR(dspi->regmap)); in dspi_probe()
1088 ret = PTR_ERR(dspi->regmap); in dspi_probe()
1092 if (dspi->devtype_data->xspi_mode) { in dspi_probe()
1093 dspi->regmap_pushr = devm_regmap_init_mmio( in dspi_probe()
1094 &pdev->dev, base + SPI_PUSHR, in dspi_probe()
1096 if (IS_ERR(dspi->regmap_pushr)) { in dspi_probe()
1097 dev_err(&pdev->dev, in dspi_probe()
1099 PTR_ERR(dspi->regmap_pushr)); in dspi_probe()
1100 ret = PTR_ERR(dspi->regmap_pushr); in dspi_probe()
1105 dspi->clk = devm_clk_get(&pdev->dev, "dspi"); in dspi_probe()
1106 if (IS_ERR(dspi->clk)) { in dspi_probe()
1107 ret = PTR_ERR(dspi->clk); in dspi_probe()
1108 dev_err(&pdev->dev, "unable to get clock\n"); in dspi_probe()
1111 ret = clk_prepare_enable(dspi->clk); in dspi_probe()
1117 dspi->irq = platform_get_irq(pdev, 0); in dspi_probe()
1118 if (dspi->irq <= 0) { in dspi_probe()
1119 dev_info(&pdev->dev, in dspi_probe()
1121 dspi->irq = 0; in dspi_probe()
1125 ret = devm_request_irq(&pdev->dev, dspi->irq, dspi_interrupt, in dspi_probe()
1126 IRQF_SHARED, pdev->name, dspi); in dspi_probe()
1128 dev_err(&pdev->dev, "Unable to attach DSPI interrupt\n"); in dspi_probe()
1132 init_waitqueue_head(&dspi->waitq); in dspi_probe()
1135 if (dspi->devtype_data->trans_mode == DSPI_DMA_MODE) { in dspi_probe()
1136 ret = dspi_request_dma(dspi, res->start); in dspi_probe()
1138 dev_err(&pdev->dev, "can't get dma channels\n"); in dspi_probe()
1143 ctlr->max_speed_hz = in dspi_probe()
1144 clk_get_rate(dspi->clk) / dspi->devtype_data->max_clock_factor; in dspi_probe()
1150 dev_err(&pdev->dev, "Problem registering DSPI ctlr\n"); in dspi_probe()
1157 clk_disable_unprepare(dspi->clk); in dspi_probe()
1169 /* Disconnect from the SPI framework */ in dspi_remove()
1171 clk_disable_unprepare(dspi->clk); in dspi_remove()
1172 spi_unregister_controller(dspi->ctlr); in dspi_remove()