• Home
  • Raw
  • Download

Lines Matching refs:bs

88 static inline u32 bcm2835_rd(struct bcm2835_spi *bs, unsigned reg)  in bcm2835_rd()  argument
90 return readl(bs->regs + reg); in bcm2835_rd()
93 static inline void bcm2835_wr(struct bcm2835_spi *bs, unsigned reg, u32 val) in bcm2835_wr() argument
95 writel(val, bs->regs + reg); in bcm2835_wr()
98 static inline void bcm2835_rd_fifo(struct bcm2835_spi *bs, int len) in bcm2835_rd_fifo() argument
103 byte = bcm2835_rd(bs, BCM2835_SPI_FIFO); in bcm2835_rd_fifo()
104 if (bs->rx_buf) in bcm2835_rd_fifo()
105 *bs->rx_buf++ = byte; in bcm2835_rd_fifo()
109 static inline void bcm2835_wr_fifo(struct bcm2835_spi *bs, int len) in bcm2835_wr_fifo() argument
113 if (len > bs->len) in bcm2835_wr_fifo()
114 len = bs->len; in bcm2835_wr_fifo()
117 byte = bs->tx_buf ? *bs->tx_buf++ : 0; in bcm2835_wr_fifo()
118 bcm2835_wr(bs, BCM2835_SPI_FIFO, byte); in bcm2835_wr_fifo()
119 bs->len--; in bcm2835_wr_fifo()
126 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_interrupt() local
127 u32 cs = bcm2835_rd(bs, BCM2835_SPI_CS); in bcm2835_spi_interrupt()
142 if (bs->len && (cs & BCM2835_SPI_CS_RXR)) { in bcm2835_spi_interrupt()
144 bcm2835_rd_fifo(bs, 12); in bcm2835_spi_interrupt()
147 bcm2835_wr_fifo(bs, 12); in bcm2835_spi_interrupt()
165 if (bs->len) { /* First interrupt in a transfer */ in bcm2835_spi_interrupt()
166 bcm2835_wr_fifo(bs, 16); in bcm2835_spi_interrupt()
170 bcm2835_wr(bs, BCM2835_SPI_CS, cs); in bcm2835_spi_interrupt()
176 complete(&bs->done); in bcm2835_spi_interrupt()
188 struct bcm2835_spi *bs = spi_master_get_devdata(spi->master); in bcm2835_spi_start_transfer() local
193 clk_hz = clk_get_rate(bs->clk); in bcm2835_spi_start_transfer()
220 INIT_COMPLETION(bs->done); in bcm2835_spi_start_transfer()
221 bs->tx_buf = tfr->tx_buf; in bcm2835_spi_start_transfer()
222 bs->rx_buf = tfr->rx_buf; in bcm2835_spi_start_transfer()
223 bs->len = tfr->len; in bcm2835_spi_start_transfer()
225 bcm2835_wr(bs, BCM2835_SPI_CLK, cdiv); in bcm2835_spi_start_transfer()
232 bcm2835_wr(bs, BCM2835_SPI_CS, cs); in bcm2835_spi_start_transfer()
240 struct bcm2835_spi *bs = spi_master_get_devdata(spi->master); in bcm2835_spi_finish_transfer() local
241 u32 cs = bcm2835_rd(bs, BCM2835_SPI_CS); in bcm2835_spi_finish_transfer()
245 bcm2835_rd_fifo(bs, 1); in bcm2835_spi_finish_transfer()
246 cs = bcm2835_rd(bs, BCM2835_SPI_CS); in bcm2835_spi_finish_transfer()
254 bcm2835_wr(bs, BCM2835_SPI_CS, cs & ~BCM2835_SPI_CS_TA); in bcm2835_spi_finish_transfer()
262 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_transfer_one() local
274 timeout = wait_for_completion_timeout(&bs->done, in bcm2835_spi_transfer_one()
288 mesg->actual_length += (tfr->len - bs->len); in bcm2835_spi_transfer_one()
293 bcm2835_wr(bs, BCM2835_SPI_CS, in bcm2835_spi_transfer_one()
304 struct bcm2835_spi *bs; in bcm2835_spi_probe() local
308 master = spi_alloc_master(&pdev->dev, sizeof(*bs)); in bcm2835_spi_probe()
323 bs = spi_master_get_devdata(master); in bcm2835_spi_probe()
325 init_completion(&bs->done); in bcm2835_spi_probe()
334 bs->regs = devm_request_and_ioremap(&pdev->dev, res); in bcm2835_spi_probe()
335 if (!bs->regs) { in bcm2835_spi_probe()
341 bs->clk = devm_clk_get(&pdev->dev, NULL); in bcm2835_spi_probe()
342 if (IS_ERR(bs->clk)) { in bcm2835_spi_probe()
343 err = PTR_ERR(bs->clk); in bcm2835_spi_probe()
348 bs->irq = irq_of_parse_and_map(pdev->dev.of_node, 0); in bcm2835_spi_probe()
349 if (bs->irq <= 0) { in bcm2835_spi_probe()
350 dev_err(&pdev->dev, "could not get IRQ: %d\n", bs->irq); in bcm2835_spi_probe()
351 err = bs->irq ? bs->irq : -ENODEV; in bcm2835_spi_probe()
355 clk_prepare_enable(bs->clk); in bcm2835_spi_probe()
357 err = request_irq(bs->irq, bcm2835_spi_interrupt, 0, in bcm2835_spi_probe()
365 bcm2835_wr(bs, BCM2835_SPI_CS, in bcm2835_spi_probe()
377 free_irq(bs->irq, master); in bcm2835_spi_probe()
379 clk_disable_unprepare(bs->clk); in bcm2835_spi_probe()
388 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_remove() local
390 free_irq(bs->irq, master); in bcm2835_spi_remove()
394 bcm2835_wr(bs, BCM2835_SPI_CS, in bcm2835_spi_remove()
397 clk_disable_unprepare(bs->clk); in bcm2835_spi_remove()