Lines Matching refs:bs
158 static void bcm2835_debugfs_create(struct bcm2835_spi *bs, in bcm2835_debugfs_create() argument
169 bs->debugfs_dir = dir; in bcm2835_debugfs_create()
173 &bs->count_transfer_polling); in bcm2835_debugfs_create()
175 &bs->count_transfer_irq); in bcm2835_debugfs_create()
177 &bs->count_transfer_irq_after_polling); in bcm2835_debugfs_create()
179 &bs->count_transfer_dma); in bcm2835_debugfs_create()
182 static void bcm2835_debugfs_remove(struct bcm2835_spi *bs) in bcm2835_debugfs_remove() argument
184 debugfs_remove_recursive(bs->debugfs_dir); in bcm2835_debugfs_remove()
185 bs->debugfs_dir = NULL; in bcm2835_debugfs_remove()
188 static void bcm2835_debugfs_create(struct bcm2835_spi *bs, in bcm2835_debugfs_create() argument
193 static void bcm2835_debugfs_remove(struct bcm2835_spi *bs) in bcm2835_debugfs_remove() argument
198 static inline u32 bcm2835_rd(struct bcm2835_spi *bs, unsigned int reg) in bcm2835_rd() argument
200 return readl(bs->regs + reg); in bcm2835_rd()
203 static inline void bcm2835_wr(struct bcm2835_spi *bs, unsigned int reg, u32 val) in bcm2835_wr() argument
205 writel(val, bs->regs + reg); in bcm2835_wr()
208 static inline void bcm2835_rd_fifo(struct bcm2835_spi *bs) in bcm2835_rd_fifo() argument
212 while ((bs->rx_len) && in bcm2835_rd_fifo()
213 (bcm2835_rd(bs, BCM2835_SPI_CS) & BCM2835_SPI_CS_RXD)) { in bcm2835_rd_fifo()
214 byte = bcm2835_rd(bs, BCM2835_SPI_FIFO); in bcm2835_rd_fifo()
215 if (bs->rx_buf) in bcm2835_rd_fifo()
216 *bs->rx_buf++ = byte; in bcm2835_rd_fifo()
217 bs->rx_len--; in bcm2835_rd_fifo()
221 static inline void bcm2835_wr_fifo(struct bcm2835_spi *bs) in bcm2835_wr_fifo() argument
225 while ((bs->tx_len) && in bcm2835_wr_fifo()
226 (bcm2835_rd(bs, BCM2835_SPI_CS) & BCM2835_SPI_CS_TXD)) { in bcm2835_wr_fifo()
227 byte = bs->tx_buf ? *bs->tx_buf++ : 0; in bcm2835_wr_fifo()
228 bcm2835_wr(bs, BCM2835_SPI_FIFO, byte); in bcm2835_wr_fifo()
229 bs->tx_len--; in bcm2835_wr_fifo()
243 static inline void bcm2835_rd_fifo_count(struct bcm2835_spi *bs, int count) in bcm2835_rd_fifo_count() argument
248 bs->rx_len -= count; in bcm2835_rd_fifo_count()
251 val = bcm2835_rd(bs, BCM2835_SPI_FIFO); in bcm2835_rd_fifo_count()
253 memcpy(bs->rx_buf, &val, len); in bcm2835_rd_fifo_count()
254 bs->rx_buf += len; in bcm2835_rd_fifo_count()
269 static inline void bcm2835_wr_fifo_count(struct bcm2835_spi *bs, int count) in bcm2835_wr_fifo_count() argument
274 bs->tx_len -= count; in bcm2835_wr_fifo_count()
277 if (bs->tx_buf) { in bcm2835_wr_fifo_count()
279 memcpy(&val, bs->tx_buf, len); in bcm2835_wr_fifo_count()
280 bs->tx_buf += len; in bcm2835_wr_fifo_count()
284 bcm2835_wr(bs, BCM2835_SPI_FIFO, val); in bcm2835_wr_fifo_count()
297 static inline void bcm2835_wait_tx_fifo_empty(struct bcm2835_spi *bs) in bcm2835_wait_tx_fifo_empty() argument
299 while (!(bcm2835_rd(bs, BCM2835_SPI_CS) & BCM2835_SPI_CS_DONE)) in bcm2835_wait_tx_fifo_empty()
308 static inline void bcm2835_rd_fifo_blind(struct bcm2835_spi *bs, int count) in bcm2835_rd_fifo_blind() argument
312 count = min(count, bs->rx_len); in bcm2835_rd_fifo_blind()
313 bs->rx_len -= count; in bcm2835_rd_fifo_blind()
316 val = bcm2835_rd(bs, BCM2835_SPI_FIFO); in bcm2835_rd_fifo_blind()
317 if (bs->rx_buf) in bcm2835_rd_fifo_blind()
318 *bs->rx_buf++ = val; in bcm2835_rd_fifo_blind()
327 static inline void bcm2835_wr_fifo_blind(struct bcm2835_spi *bs, int count) in bcm2835_wr_fifo_blind() argument
331 count = min(count, bs->tx_len); in bcm2835_wr_fifo_blind()
332 bs->tx_len -= count; in bcm2835_wr_fifo_blind()
335 val = bs->tx_buf ? *bs->tx_buf++ : 0; in bcm2835_wr_fifo_blind()
336 bcm2835_wr(bs, BCM2835_SPI_FIFO, val); in bcm2835_wr_fifo_blind()
340 static void bcm2835_spi_reset_hw(struct bcm2835_spi *bs) in bcm2835_spi_reset_hw() argument
342 u32 cs = bcm2835_rd(bs, BCM2835_SPI_CS); in bcm2835_spi_reset_hw()
360 bcm2835_wr(bs, BCM2835_SPI_CS, cs); in bcm2835_spi_reset_hw()
362 bcm2835_wr(bs, BCM2835_SPI_DLEN, 0); in bcm2835_spi_reset_hw()
367 struct bcm2835_spi *bs = dev_id; in bcm2835_spi_interrupt() local
368 u32 cs = bcm2835_rd(bs, BCM2835_SPI_CS); in bcm2835_spi_interrupt()
375 bcm2835_rd_fifo_blind(bs, BCM2835_SPI_FIFO_SIZE); in bcm2835_spi_interrupt()
377 bcm2835_rd_fifo_blind(bs, BCM2835_SPI_FIFO_SIZE_3_4); in bcm2835_spi_interrupt()
379 if (bs->tx_len && cs & BCM2835_SPI_CS_DONE) in bcm2835_spi_interrupt()
380 bcm2835_wr_fifo_blind(bs, BCM2835_SPI_FIFO_SIZE); in bcm2835_spi_interrupt()
383 bcm2835_rd_fifo(bs); in bcm2835_spi_interrupt()
385 bcm2835_wr_fifo(bs); in bcm2835_spi_interrupt()
387 if (!bs->rx_len) { in bcm2835_spi_interrupt()
389 bcm2835_spi_reset_hw(bs); in bcm2835_spi_interrupt()
391 complete(&bs->ctlr->xfer_completion); in bcm2835_spi_interrupt()
402 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_transfer_one_irq() local
405 bs->count_transfer_irq++; in bcm2835_spi_transfer_one_irq()
411 bcm2835_wr(bs, BCM2835_SPI_CS, cs | BCM2835_SPI_CS_TA); in bcm2835_spi_transfer_one_irq()
415 bcm2835_wr_fifo_blind(bs, BCM2835_SPI_FIFO_SIZE); in bcm2835_spi_transfer_one_irq()
416 bcm2835_wr_fifo(bs); in bcm2835_spi_transfer_one_irq()
420 bcm2835_wr(bs, BCM2835_SPI_CS, cs); in bcm2835_spi_transfer_one_irq()
474 struct bcm2835_spi *bs, in bcm2835_spi_transfer_prologue() argument
479 bs->tfr = tfr; in bcm2835_spi_transfer_prologue()
480 bs->tx_prologue = 0; in bcm2835_spi_transfer_prologue()
481 bs->rx_prologue = 0; in bcm2835_spi_transfer_prologue()
482 bs->tx_spillover = false; in bcm2835_spi_transfer_prologue()
484 if (bs->tx_buf && !sg_is_last(&tfr->tx_sg.sgl[0])) in bcm2835_spi_transfer_prologue()
485 bs->tx_prologue = sg_dma_len(&tfr->tx_sg.sgl[0]) & 3; in bcm2835_spi_transfer_prologue()
487 if (bs->rx_buf && !sg_is_last(&tfr->rx_sg.sgl[0])) { in bcm2835_spi_transfer_prologue()
488 bs->rx_prologue = sg_dma_len(&tfr->rx_sg.sgl[0]) & 3; in bcm2835_spi_transfer_prologue()
490 if (bs->rx_prologue > bs->tx_prologue) { in bcm2835_spi_transfer_prologue()
491 if (!bs->tx_buf || sg_is_last(&tfr->tx_sg.sgl[0])) { in bcm2835_spi_transfer_prologue()
492 bs->tx_prologue = bs->rx_prologue; in bcm2835_spi_transfer_prologue()
494 bs->tx_prologue += 4; in bcm2835_spi_transfer_prologue()
495 bs->tx_spillover = in bcm2835_spi_transfer_prologue()
502 if (!bs->tx_prologue) in bcm2835_spi_transfer_prologue()
506 if (bs->rx_prologue) { in bcm2835_spi_transfer_prologue()
507 bcm2835_wr(bs, BCM2835_SPI_DLEN, bs->rx_prologue); in bcm2835_spi_transfer_prologue()
508 bcm2835_wr(bs, BCM2835_SPI_CS, cs | BCM2835_SPI_CS_TA in bcm2835_spi_transfer_prologue()
510 bcm2835_wr_fifo_count(bs, bs->rx_prologue); in bcm2835_spi_transfer_prologue()
511 bcm2835_wait_tx_fifo_empty(bs); in bcm2835_spi_transfer_prologue()
512 bcm2835_rd_fifo_count(bs, bs->rx_prologue); in bcm2835_spi_transfer_prologue()
513 bcm2835_wr(bs, BCM2835_SPI_CS, cs | BCM2835_SPI_CS_CLEAR_RX in bcm2835_spi_transfer_prologue()
519 bs->rx_prologue, DMA_FROM_DEVICE); in bcm2835_spi_transfer_prologue()
521 sg_dma_address(&tfr->rx_sg.sgl[0]) += bs->rx_prologue; in bcm2835_spi_transfer_prologue()
522 sg_dma_len(&tfr->rx_sg.sgl[0]) -= bs->rx_prologue; in bcm2835_spi_transfer_prologue()
525 if (!bs->tx_buf) in bcm2835_spi_transfer_prologue()
532 tx_remaining = bs->tx_prologue - bs->rx_prologue; in bcm2835_spi_transfer_prologue()
534 bcm2835_wr(bs, BCM2835_SPI_DLEN, tx_remaining); in bcm2835_spi_transfer_prologue()
535 bcm2835_wr(bs, BCM2835_SPI_CS, cs | BCM2835_SPI_CS_TA in bcm2835_spi_transfer_prologue()
537 bcm2835_wr_fifo_count(bs, tx_remaining); in bcm2835_spi_transfer_prologue()
538 bcm2835_wait_tx_fifo_empty(bs); in bcm2835_spi_transfer_prologue()
539 bcm2835_wr(bs, BCM2835_SPI_CS, cs | BCM2835_SPI_CS_CLEAR_TX in bcm2835_spi_transfer_prologue()
543 if (likely(!bs->tx_spillover)) { in bcm2835_spi_transfer_prologue()
544 sg_dma_address(&tfr->tx_sg.sgl[0]) += bs->tx_prologue; in bcm2835_spi_transfer_prologue()
545 sg_dma_len(&tfr->tx_sg.sgl[0]) -= bs->tx_prologue; in bcm2835_spi_transfer_prologue()
561 static void bcm2835_spi_undo_prologue(struct bcm2835_spi *bs) in bcm2835_spi_undo_prologue() argument
563 struct spi_transfer *tfr = bs->tfr; in bcm2835_spi_undo_prologue()
565 if (!bs->tx_prologue) in bcm2835_spi_undo_prologue()
568 if (bs->rx_prologue) { in bcm2835_spi_undo_prologue()
569 sg_dma_address(&tfr->rx_sg.sgl[0]) -= bs->rx_prologue; in bcm2835_spi_undo_prologue()
570 sg_dma_len(&tfr->rx_sg.sgl[0]) += bs->rx_prologue; in bcm2835_spi_undo_prologue()
573 if (!bs->tx_buf) in bcm2835_spi_undo_prologue()
576 if (likely(!bs->tx_spillover)) { in bcm2835_spi_undo_prologue()
577 sg_dma_address(&tfr->tx_sg.sgl[0]) -= bs->tx_prologue; in bcm2835_spi_undo_prologue()
578 sg_dma_len(&tfr->tx_sg.sgl[0]) += bs->tx_prologue; in bcm2835_spi_undo_prologue()
580 sg_dma_len(&tfr->tx_sg.sgl[0]) = bs->tx_prologue - 4; in bcm2835_spi_undo_prologue()
585 bs->tx_prologue = 0; in bcm2835_spi_undo_prologue()
597 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_dma_rx_done() local
605 bs->tx_dma_active = false; in bcm2835_spi_dma_rx_done()
606 bs->rx_dma_active = false; in bcm2835_spi_dma_rx_done()
607 bcm2835_spi_undo_prologue(bs); in bcm2835_spi_dma_rx_done()
610 bcm2835_spi_reset_hw(bs); in bcm2835_spi_dma_rx_done()
625 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_dma_tx_done() local
628 while (!(bcm2835_rd(bs, BCM2835_SPI_CS) & BCM2835_SPI_CS_DONE)) in bcm2835_spi_dma_tx_done()
629 bcm2835_wr(bs, BCM2835_SPI_CS, in bcm2835_spi_dma_tx_done()
630 bs->clear_rx_cs[bs->chip_select]); in bcm2835_spi_dma_tx_done()
632 bs->tx_dma_active = false; in bcm2835_spi_dma_tx_done()
640 if (cmpxchg(&bs->rx_dma_active, true, false)) in bcm2835_spi_dma_tx_done()
643 bcm2835_spi_undo_prologue(bs); in bcm2835_spi_dma_tx_done()
644 bcm2835_spi_reset_hw(bs); in bcm2835_spi_dma_tx_done()
662 struct bcm2835_spi *bs, in bcm2835_spi_prepare_sg() argument
702 bs->chip_select = spi->chip_select; in bcm2835_spi_prepare_sg()
763 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_transfer_one_dma() local
768 bs->count_transfer_dma++; in bcm2835_spi_transfer_one_dma()
774 bcm2835_spi_transfer_prologue(ctlr, tfr, bs, cs); in bcm2835_spi_transfer_one_dma()
777 if (bs->tx_buf) { in bcm2835_spi_transfer_one_dma()
778 ret = bcm2835_spi_prepare_sg(ctlr, spi, tfr, bs, true); in bcm2835_spi_transfer_one_dma()
780 cookie = dmaengine_submit(bs->fill_tx_desc); in bcm2835_spi_transfer_one_dma()
787 bcm2835_wr(bs, BCM2835_SPI_DLEN, bs->tx_len); in bcm2835_spi_transfer_one_dma()
790 bcm2835_wr(bs, BCM2835_SPI_CS, in bcm2835_spi_transfer_one_dma()
793 bs->tx_dma_active = true; in bcm2835_spi_transfer_one_dma()
803 if (bs->rx_buf) { in bcm2835_spi_transfer_one_dma()
804 ret = bcm2835_spi_prepare_sg(ctlr, spi, tfr, bs, false); in bcm2835_spi_transfer_one_dma()
806 cookie = dmaengine_submit(bs->clear_rx_desc[spi->chip_select]); in bcm2835_spi_transfer_one_dma()
812 bs->tx_dma_active = false; in bcm2835_spi_transfer_one_dma()
818 bs->rx_dma_active = true; in bcm2835_spi_transfer_one_dma()
825 if (!bs->rx_buf && !bs->tx_dma_active && in bcm2835_spi_transfer_one_dma()
826 cmpxchg(&bs->rx_dma_active, true, false)) { in bcm2835_spi_transfer_one_dma()
828 bcm2835_spi_reset_hw(bs); in bcm2835_spi_transfer_one_dma()
835 bcm2835_spi_reset_hw(bs); in bcm2835_spi_transfer_one_dma()
836 bcm2835_spi_undo_prologue(bs); in bcm2835_spi_transfer_one_dma()
853 struct bcm2835_spi *bs) in bcm2835_dma_release() argument
860 if (bs->fill_tx_desc) in bcm2835_dma_release()
861 dmaengine_desc_free(bs->fill_tx_desc); in bcm2835_dma_release()
863 if (bs->fill_tx_addr) in bcm2835_dma_release()
865 bs->fill_tx_addr, sizeof(u32), in bcm2835_dma_release()
877 if (bs->clear_rx_desc[i]) in bcm2835_dma_release()
878 dmaengine_desc_free(bs->clear_rx_desc[i]); in bcm2835_dma_release()
880 if (bs->clear_rx_addr) in bcm2835_dma_release()
882 bs->clear_rx_addr, in bcm2835_dma_release()
883 sizeof(bs->clear_rx_cs), in bcm2835_dma_release()
892 struct bcm2835_spi *bs) in bcm2835_dma_init() argument
936 bs->fill_tx_addr = dma_map_page_attrs(ctlr->dma_tx->device->dev, in bcm2835_dma_init()
940 if (dma_mapping_error(ctlr->dma_tx->device->dev, bs->fill_tx_addr)) { in bcm2835_dma_init()
942 bs->fill_tx_addr = 0; in bcm2835_dma_init()
947 bs->fill_tx_desc = dmaengine_prep_dma_cyclic(ctlr->dma_tx, in bcm2835_dma_init()
948 bs->fill_tx_addr, in bcm2835_dma_init()
951 if (!bs->fill_tx_desc) { in bcm2835_dma_init()
957 ret = dmaengine_desc_set_reuse(bs->fill_tx_desc); in bcm2835_dma_init()
977 bs->clear_rx_addr = dma_map_single(ctlr->dma_rx->device->dev, in bcm2835_dma_init()
978 bs->clear_rx_cs, in bcm2835_dma_init()
979 sizeof(bs->clear_rx_cs), in bcm2835_dma_init()
981 if (dma_mapping_error(ctlr->dma_rx->device->dev, bs->clear_rx_addr)) { in bcm2835_dma_init()
983 bs->clear_rx_addr = 0; in bcm2835_dma_init()
989 bs->clear_rx_desc[i] = dmaengine_prep_dma_cyclic(ctlr->dma_rx, in bcm2835_dma_init()
990 bs->clear_rx_addr + i * sizeof(u32), in bcm2835_dma_init()
993 if (!bs->clear_rx_desc[i]) { in bcm2835_dma_init()
999 ret = dmaengine_desc_set_reuse(bs->clear_rx_desc[i]); in bcm2835_dma_init()
1015 bcm2835_dma_release(ctlr, bs); in bcm2835_dma_init()
1032 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_transfer_one_poll() local
1036 bs->count_transfer_polling++; in bcm2835_spi_transfer_one_poll()
1039 bcm2835_wr(bs, BCM2835_SPI_CS, cs | BCM2835_SPI_CS_TA); in bcm2835_spi_transfer_one_poll()
1045 bcm2835_wr_fifo_blind(bs, BCM2835_SPI_FIFO_SIZE); in bcm2835_spi_transfer_one_poll()
1051 while (bs->rx_len) { in bcm2835_spi_transfer_one_poll()
1053 bcm2835_wr_fifo(bs); in bcm2835_spi_transfer_one_poll()
1056 bcm2835_rd_fifo(bs); in bcm2835_spi_transfer_one_poll()
1061 if (bs->rx_len && time_after(jiffies, timeout)) { in bcm2835_spi_transfer_one_poll()
1065 bs->tx_len, bs->rx_len); in bcm2835_spi_transfer_one_poll()
1069 bs->count_transfer_irq_after_polling++; in bcm2835_spi_transfer_one_poll()
1077 bcm2835_spi_reset_hw(bs); in bcm2835_spi_transfer_one_poll()
1086 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_transfer_one() local
1089 u32 cs = bs->prepare_cs[spi->chip_select]; in bcm2835_spi_transfer_one()
1094 if (spi_hz >= bs->clk_hz / 2) { in bcm2835_spi_transfer_one()
1098 cdiv = DIV_ROUND_UP(bs->clk_hz, spi_hz); in bcm2835_spi_transfer_one()
1106 tfr->effective_speed_hz = cdiv ? (bs->clk_hz / cdiv) : (bs->clk_hz / 65536); in bcm2835_spi_transfer_one()
1107 bcm2835_wr(bs, BCM2835_SPI_CLK, cdiv); in bcm2835_spi_transfer_one()
1114 bs->tx_buf = tfr->tx_buf; in bcm2835_spi_transfer_one()
1115 bs->rx_buf = tfr->rx_buf; in bcm2835_spi_transfer_one()
1116 bs->tx_len = tfr->len; in bcm2835_spi_transfer_one()
1117 bs->rx_len = tfr->len; in bcm2835_spi_transfer_one()
1147 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_prepare_message() local
1166 bcm2835_wr(bs, BCM2835_SPI_CS, bs->prepare_cs[spi->chip_select]); in bcm2835_spi_prepare_message()
1174 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_handle_err() local
1179 bs->tx_dma_active = false; in bcm2835_spi_handle_err()
1183 bs->rx_dma_active = false; in bcm2835_spi_handle_err()
1185 bcm2835_spi_undo_prologue(bs); in bcm2835_spi_handle_err()
1188 bcm2835_spi_reset_hw(bs); in bcm2835_spi_handle_err()
1199 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_setup() local
1220 bs->prepare_cs[spi->chip_select] = cs; in bcm2835_spi_setup()
1227 bs->clear_rx_cs[spi->chip_select] = cs | in bcm2835_spi_setup()
1232 bs->clear_rx_addr, in bcm2835_spi_setup()
1233 sizeof(bs->clear_rx_cs), in bcm2835_spi_setup()
1289 struct bcm2835_spi *bs; in bcm2835_spi_probe() local
1292 ctlr = devm_spi_alloc_master(&pdev->dev, ALIGN(sizeof(*bs), in bcm2835_spi_probe()
1309 bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_probe()
1310 bs->ctlr = ctlr; in bcm2835_spi_probe()
1312 bs->regs = devm_platform_ioremap_resource(pdev, 0); in bcm2835_spi_probe()
1313 if (IS_ERR(bs->regs)) in bcm2835_spi_probe()
1314 return PTR_ERR(bs->regs); in bcm2835_spi_probe()
1316 bs->clk = devm_clk_get(&pdev->dev, NULL); in bcm2835_spi_probe()
1317 if (IS_ERR(bs->clk)) in bcm2835_spi_probe()
1318 return dev_err_probe(&pdev->dev, PTR_ERR(bs->clk), in bcm2835_spi_probe()
1321 bs->irq = platform_get_irq(pdev, 0); in bcm2835_spi_probe()
1322 if (bs->irq <= 0) in bcm2835_spi_probe()
1323 return bs->irq ? bs->irq : -ENODEV; in bcm2835_spi_probe()
1325 clk_prepare_enable(bs->clk); in bcm2835_spi_probe()
1326 bs->clk_hz = clk_get_rate(bs->clk); in bcm2835_spi_probe()
1328 err = bcm2835_dma_init(ctlr, &pdev->dev, bs); in bcm2835_spi_probe()
1333 bcm2835_wr(bs, BCM2835_SPI_CS, in bcm2835_spi_probe()
1336 err = devm_request_irq(&pdev->dev, bs->irq, bcm2835_spi_interrupt, 0, in bcm2835_spi_probe()
1337 dev_name(&pdev->dev), bs); in bcm2835_spi_probe()
1350 bcm2835_debugfs_create(bs, dev_name(&pdev->dev)); in bcm2835_spi_probe()
1355 bcm2835_dma_release(ctlr, bs); in bcm2835_spi_probe()
1357 clk_disable_unprepare(bs->clk); in bcm2835_spi_probe()
1364 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_remove() local
1366 bcm2835_debugfs_remove(bs); in bcm2835_spi_remove()
1370 bcm2835_dma_release(ctlr, bs); in bcm2835_spi_remove()
1373 bcm2835_wr(bs, BCM2835_SPI_CS, in bcm2835_spi_remove()
1376 clk_disable_unprepare(bs->clk); in bcm2835_spi_remove()