pic32s            123 drivers/spi/spi-pic32.c static inline void pic32_spi_enable(struct pic32_spi *pic32s)
pic32s            125 drivers/spi/spi-pic32.c 	writel(CTRL_ON | CTRL_SIDL, &pic32s->regs->ctrl_set);
pic32s            128 drivers/spi/spi-pic32.c static inline void pic32_spi_disable(struct pic32_spi *pic32s)
pic32s            130 drivers/spi/spi-pic32.c 	writel(CTRL_ON | CTRL_SIDL, &pic32s->regs->ctrl_clr);
pic32s            136 drivers/spi/spi-pic32.c static void pic32_spi_set_clk_rate(struct pic32_spi *pic32s, u32 spi_ck)
pic32s            141 drivers/spi/spi-pic32.c 	div = DIV_ROUND_CLOSEST(clk_get_rate(pic32s->clk), 2 * spi_ck) - 1;
pic32s            143 drivers/spi/spi-pic32.c 	writel(div & BAUD_MASK, &pic32s->regs->baud);
pic32s            146 drivers/spi/spi-pic32.c static inline u32 pic32_rx_fifo_level(struct pic32_spi *pic32s)
pic32s            148 drivers/spi/spi-pic32.c 	u32 sr = readl(&pic32s->regs->status);
pic32s            153 drivers/spi/spi-pic32.c static inline u32 pic32_tx_fifo_level(struct pic32_spi *pic32s)
pic32s            155 drivers/spi/spi-pic32.c 	u32 sr = readl(&pic32s->regs->status);
pic32s            161 drivers/spi/spi-pic32.c static u32 pic32_tx_max(struct pic32_spi *pic32s, int n_bytes)
pic32s            165 drivers/spi/spi-pic32.c 	tx_left = (pic32s->tx_end - pic32s->tx) / n_bytes;
pic32s            166 drivers/spi/spi-pic32.c 	tx_room = pic32s->fifo_n_elm - pic32_tx_fifo_level(pic32s);
pic32s            176 drivers/spi/spi-pic32.c 	rxtx_gap = ((pic32s->rx_end - pic32s->rx) -
pic32s            177 drivers/spi/spi-pic32.c 		    (pic32s->tx_end - pic32s->tx)) / n_bytes;
pic32s            178 drivers/spi/spi-pic32.c 	return min3(tx_left, tx_room, (u32)(pic32s->fifo_n_elm - rxtx_gap));
pic32s            182 drivers/spi/spi-pic32.c static u32 pic32_rx_max(struct pic32_spi *pic32s, int n_bytes)
pic32s            184 drivers/spi/spi-pic32.c 	u32 rx_left = (pic32s->rx_end - pic32s->rx) / n_bytes;
pic32s            186 drivers/spi/spi-pic32.c 	return min_t(u32, rx_left, pic32_rx_fifo_level(pic32s));
pic32s            190 drivers/spi/spi-pic32.c static void pic32_spi_rx_##__name(struct pic32_spi *pic32s)	\
pic32s            193 drivers/spi/spi-pic32.c 	u32 mx = pic32_rx_max(pic32s, sizeof(__type));		\
pic32s            195 drivers/spi/spi-pic32.c 		v = read##__bwl(&pic32s->regs->buf);		\
pic32s            196 drivers/spi/spi-pic32.c 		if (pic32s->rx_end - pic32s->len)		\
pic32s            197 drivers/spi/spi-pic32.c 			*(__type *)(pic32s->rx) = v;		\
pic32s            198 drivers/spi/spi-pic32.c 		pic32s->rx += sizeof(__type);			\
pic32s            202 drivers/spi/spi-pic32.c static void pic32_spi_tx_##__name(struct pic32_spi *pic32s)	\
pic32s            205 drivers/spi/spi-pic32.c 	u32 mx = pic32_tx_max(pic32s, sizeof(__type));		\
pic32s            208 drivers/spi/spi-pic32.c 		if (pic32s->tx_end - pic32s->len)		\
pic32s            209 drivers/spi/spi-pic32.c 			v = *(__type *)(pic32s->tx);		\
pic32s            210 drivers/spi/spi-pic32.c 		write##__bwl(v, &pic32s->regs->buf);		\
pic32s            211 drivers/spi/spi-pic32.c 		pic32s->tx += sizeof(__type);			\
pic32s            219 drivers/spi/spi-pic32.c static void pic32_err_stop(struct pic32_spi *pic32s, const char *msg)
pic32s            222 drivers/spi/spi-pic32.c 	disable_irq_nosync(pic32s->fault_irq);
pic32s            223 drivers/spi/spi-pic32.c 	disable_irq_nosync(pic32s->rx_irq);
pic32s            224 drivers/spi/spi-pic32.c 	disable_irq_nosync(pic32s->tx_irq);
pic32s            227 drivers/spi/spi-pic32.c 	dev_err(&pic32s->master->dev, "%s\n", msg);
pic32s            228 drivers/spi/spi-pic32.c 	if (pic32s->master->cur_msg)
pic32s            229 drivers/spi/spi-pic32.c 		pic32s->master->cur_msg->status = -EIO;
pic32s            230 drivers/spi/spi-pic32.c 	complete(&pic32s->xfer_done);
pic32s            235 drivers/spi/spi-pic32.c 	struct pic32_spi *pic32s = dev_id;
pic32s            238 drivers/spi/spi-pic32.c 	status = readl(&pic32s->regs->status);
pic32s            242 drivers/spi/spi-pic32.c 		writel(STAT_RX_OV, &pic32s->regs->status_clr);
pic32s            243 drivers/spi/spi-pic32.c 		writel(STAT_TX_UR, &pic32s->regs->status_clr);
pic32s            244 drivers/spi/spi-pic32.c 		pic32_err_stop(pic32s, "err_irq: fifo ov/ur-run\n");
pic32s            249 drivers/spi/spi-pic32.c 		pic32_err_stop(pic32s, "err_irq: frame error");
pic32s            253 drivers/spi/spi-pic32.c 	if (!pic32s->master->cur_msg) {
pic32s            254 drivers/spi/spi-pic32.c 		pic32_err_stop(pic32s, "err_irq: no mesg");
pic32s            263 drivers/spi/spi-pic32.c 	struct pic32_spi *pic32s = dev_id;
pic32s            265 drivers/spi/spi-pic32.c 	pic32s->rx_fifo(pic32s);
pic32s            268 drivers/spi/spi-pic32.c 	if (pic32s->rx_end == pic32s->rx) {
pic32s            270 drivers/spi/spi-pic32.c 		disable_irq_nosync(pic32s->fault_irq);
pic32s            271 drivers/spi/spi-pic32.c 		disable_irq_nosync(pic32s->rx_irq);
pic32s            274 drivers/spi/spi-pic32.c 		complete(&pic32s->xfer_done);
pic32s            282 drivers/spi/spi-pic32.c 	struct pic32_spi *pic32s = dev_id;
pic32s            284 drivers/spi/spi-pic32.c 	pic32s->tx_fifo(pic32s);
pic32s            287 drivers/spi/spi-pic32.c 	if (pic32s->tx_end == pic32s->tx)
pic32s            288 drivers/spi/spi-pic32.c 		disable_irq_nosync(pic32s->tx_irq);
pic32s            295 drivers/spi/spi-pic32.c 	struct pic32_spi *pic32s = data;
pic32s            297 drivers/spi/spi-pic32.c 	complete(&pic32s->xfer_done);
pic32s            300 drivers/spi/spi-pic32.c static int pic32_spi_dma_transfer(struct pic32_spi *pic32s,
pic32s            303 drivers/spi/spi-pic32.c 	struct spi_master *master = pic32s->master;
pic32s            334 drivers/spi/spi-pic32.c 	desc_rx->callback_param = pic32s;
pic32s            357 drivers/spi/spi-pic32.c static int pic32_spi_dma_config(struct pic32_spi *pic32s, u32 dma_width)
pic32s            360 drivers/spi/spi-pic32.c 	struct spi_master *master = pic32s->master;
pic32s            365 drivers/spi/spi-pic32.c 	cfg.src_addr = pic32s->dma_base + buf_offset;
pic32s            366 drivers/spi/spi-pic32.c 	cfg.dst_addr = pic32s->dma_base + buf_offset;
pic32s            367 drivers/spi/spi-pic32.c 	cfg.src_maxburst = pic32s->fifo_n_elm / 2; /* fill one-half */
pic32s            368 drivers/spi/spi-pic32.c 	cfg.dst_maxburst = pic32s->fifo_n_elm / 2; /* drain one-half */
pic32s            372 drivers/spi/spi-pic32.c 	cfg.slave_id = pic32s->tx_irq;
pic32s            380 drivers/spi/spi-pic32.c 	cfg.slave_id = pic32s->rx_irq;
pic32s            389 drivers/spi/spi-pic32.c static int pic32_spi_set_word_size(struct pic32_spi *pic32s, u8 bits_per_word)
pic32s            396 drivers/spi/spi-pic32.c 		pic32s->rx_fifo = pic32_spi_rx_byte;
pic32s            397 drivers/spi/spi-pic32.c 		pic32s->tx_fifo = pic32_spi_tx_byte;
pic32s            402 drivers/spi/spi-pic32.c 		pic32s->rx_fifo = pic32_spi_rx_word;
pic32s            403 drivers/spi/spi-pic32.c 		pic32s->tx_fifo = pic32_spi_tx_word;
pic32s            408 drivers/spi/spi-pic32.c 		pic32s->rx_fifo = pic32_spi_rx_dword;
pic32s            409 drivers/spi/spi-pic32.c 		pic32s->tx_fifo = pic32_spi_tx_dword;
pic32s            419 drivers/spi/spi-pic32.c 	pic32s->fifo_n_elm = DIV_ROUND_UP(pic32s->fifo_n_byte,
pic32s            422 drivers/spi/spi-pic32.c 	v = readl(&pic32s->regs->ctrl);
pic32s            425 drivers/spi/spi-pic32.c 	writel(v, &pic32s->regs->ctrl);
pic32s            428 drivers/spi/spi-pic32.c 	if (test_bit(PIC32F_DMA_PREP, &pic32s->flags))
pic32s            429 drivers/spi/spi-pic32.c 		pic32_spi_dma_config(pic32s, dmawidth);
pic32s            436 drivers/spi/spi-pic32.c 	struct pic32_spi *pic32s = spi_master_get_devdata(master);
pic32s            438 drivers/spi/spi-pic32.c 	pic32_spi_enable(pic32s);
pic32s            446 drivers/spi/spi-pic32.c 	struct pic32_spi *pic32s = spi_master_get_devdata(master);
pic32s            451 drivers/spi/spi-pic32.c 	if (pic32s->bits_per_word != spi->bits_per_word) {
pic32s            452 drivers/spi/spi-pic32.c 		pic32_spi_set_word_size(pic32s, spi->bits_per_word);
pic32s            453 drivers/spi/spi-pic32.c 		pic32s->bits_per_word = spi->bits_per_word;
pic32s            457 drivers/spi/spi-pic32.c 	if (pic32s->speed_hz != spi->max_speed_hz) {
pic32s            458 drivers/spi/spi-pic32.c 		pic32_spi_set_clk_rate(pic32s, spi->max_speed_hz);
pic32s            459 drivers/spi/spi-pic32.c 		pic32s->speed_hz = spi->max_speed_hz;
pic32s            463 drivers/spi/spi-pic32.c 	if (pic32s->mode != spi->mode) {
pic32s            464 drivers/spi/spi-pic32.c 		val = readl(&pic32s->regs->ctrl);
pic32s            478 drivers/spi/spi-pic32.c 		writel(val, &pic32s->regs->ctrl);
pic32s            479 drivers/spi/spi-pic32.c 		pic32s->mode = spi->mode;
pic32s            489 drivers/spi/spi-pic32.c 	struct pic32_spi *pic32s = spi_master_get_devdata(master);
pic32s            493 drivers/spi/spi-pic32.c 	       test_bit(PIC32F_DMA_PREP, &pic32s->flags);
pic32s            500 drivers/spi/spi-pic32.c 	struct pic32_spi *pic32s;
pic32s            505 drivers/spi/spi-pic32.c 	pic32s = spi_master_get_devdata(master);
pic32s            509 drivers/spi/spi-pic32.c 	    (transfer->bits_per_word != pic32s->bits_per_word)) {
pic32s            510 drivers/spi/spi-pic32.c 		ret = pic32_spi_set_word_size(pic32s, transfer->bits_per_word);
pic32s            513 drivers/spi/spi-pic32.c 		pic32s->bits_per_word = transfer->bits_per_word;
pic32s            517 drivers/spi/spi-pic32.c 	if (transfer->speed_hz && (transfer->speed_hz != pic32s->speed_hz)) {
pic32s            518 drivers/spi/spi-pic32.c 		pic32_spi_set_clk_rate(pic32s, transfer->speed_hz);
pic32s            519 drivers/spi/spi-pic32.c 		pic32s->speed_hz = transfer->speed_hz;
pic32s            522 drivers/spi/spi-pic32.c 	reinit_completion(&pic32s->xfer_done);
pic32s            526 drivers/spi/spi-pic32.c 		ret = pic32_spi_dma_transfer(pic32s, transfer);
pic32s            536 drivers/spi/spi-pic32.c 		pic32s->tx = (const void *)transfer->tx_buf;
pic32s            537 drivers/spi/spi-pic32.c 		pic32s->rx = (const void *)transfer->rx_buf;
pic32s            538 drivers/spi/spi-pic32.c 		pic32s->tx_end = pic32s->tx + transfer->len;
pic32s            539 drivers/spi/spi-pic32.c 		pic32s->rx_end = pic32s->rx + transfer->len;
pic32s            540 drivers/spi/spi-pic32.c 		pic32s->len = transfer->len;
pic32s            543 drivers/spi/spi-pic32.c 		enable_irq(pic32s->fault_irq);
pic32s            544 drivers/spi/spi-pic32.c 		enable_irq(pic32s->rx_irq);
pic32s            545 drivers/spi/spi-pic32.c 		enable_irq(pic32s->tx_irq);
pic32s            549 drivers/spi/spi-pic32.c 	timeout = wait_for_completion_timeout(&pic32s->xfer_done, 2 * HZ);
pic32s            573 drivers/spi/spi-pic32.c 	struct pic32_spi *pic32s = spi_master_get_devdata(master);
pic32s            575 drivers/spi/spi-pic32.c 	pic32_spi_disable(pic32s);
pic32s            609 drivers/spi/spi-pic32.c static void pic32_spi_dma_prep(struct pic32_spi *pic32s, struct device *dev)
pic32s            611 drivers/spi/spi-pic32.c 	struct spi_master *master = pic32s->master;
pic32s            631 drivers/spi/spi-pic32.c 	if (pic32_spi_dma_config(pic32s, DMA_SLAVE_BUSWIDTH_1_BYTE))
pic32s            635 drivers/spi/spi-pic32.c 	set_bit(PIC32F_DMA_PREP, &pic32s->flags);
pic32s            647 drivers/spi/spi-pic32.c static void pic32_spi_dma_unprep(struct pic32_spi *pic32s)
pic32s            649 drivers/spi/spi-pic32.c 	if (!test_bit(PIC32F_DMA_PREP, &pic32s->flags))
pic32s            652 drivers/spi/spi-pic32.c 	clear_bit(PIC32F_DMA_PREP, &pic32s->flags);
pic32s            653 drivers/spi/spi-pic32.c 	if (pic32s->master->dma_rx)
pic32s            654 drivers/spi/spi-pic32.c 		dma_release_channel(pic32s->master->dma_rx);
pic32s            656 drivers/spi/spi-pic32.c 	if (pic32s->master->dma_tx)
pic32s            657 drivers/spi/spi-pic32.c 		dma_release_channel(pic32s->master->dma_tx);
pic32s            660 drivers/spi/spi-pic32.c static void pic32_spi_hw_init(struct pic32_spi *pic32s)
pic32s            665 drivers/spi/spi-pic32.c 	pic32_spi_disable(pic32s);
pic32s            667 drivers/spi/spi-pic32.c 	ctrl = readl(&pic32s->regs->ctrl);
pic32s            670 drivers/spi/spi-pic32.c 	pic32s->fifo_n_byte = 16;
pic32s            692 drivers/spi/spi-pic32.c 	writel(ctrl, &pic32s->regs->ctrl);
pic32s            696 drivers/spi/spi-pic32.c 	writel(ctrl, &pic32s->regs->ctrl2_set);
pic32s            700 drivers/spi/spi-pic32.c 			      struct pic32_spi *pic32s)
pic32s            706 drivers/spi/spi-pic32.c 	pic32s->regs = devm_ioremap_resource(&pdev->dev, mem);
pic32s            707 drivers/spi/spi-pic32.c 	if (IS_ERR(pic32s->regs))
pic32s            708 drivers/spi/spi-pic32.c 		return PTR_ERR(pic32s->regs);
pic32s            710 drivers/spi/spi-pic32.c 	pic32s->dma_base = mem->start;
pic32s            713 drivers/spi/spi-pic32.c 	pic32s->fault_irq = platform_get_irq_byname(pdev, "fault");
pic32s            714 drivers/spi/spi-pic32.c 	if (pic32s->fault_irq < 0)
pic32s            715 drivers/spi/spi-pic32.c 		return pic32s->fault_irq;
pic32s            717 drivers/spi/spi-pic32.c 	pic32s->rx_irq = platform_get_irq_byname(pdev, "rx");
pic32s            718 drivers/spi/spi-pic32.c 	if (pic32s->rx_irq < 0)
pic32s            719 drivers/spi/spi-pic32.c 		return pic32s->rx_irq;
pic32s            721 drivers/spi/spi-pic32.c 	pic32s->tx_irq = platform_get_irq_byname(pdev, "tx");
pic32s            722 drivers/spi/spi-pic32.c 	if (pic32s->tx_irq < 0)
pic32s            723 drivers/spi/spi-pic32.c 		return pic32s->tx_irq;
pic32s            726 drivers/spi/spi-pic32.c 	pic32s->clk = devm_clk_get(&pdev->dev, "mck0");
pic32s            727 drivers/spi/spi-pic32.c 	if (IS_ERR(pic32s->clk)) {
pic32s            729 drivers/spi/spi-pic32.c 		ret = PTR_ERR(pic32s->clk);
pic32s            733 drivers/spi/spi-pic32.c 	ret = clk_prepare_enable(pic32s->clk);
pic32s            737 drivers/spi/spi-pic32.c 	pic32_spi_hw_init(pic32s);
pic32s            749 drivers/spi/spi-pic32.c 	struct pic32_spi *pic32s;
pic32s            752 drivers/spi/spi-pic32.c 	master = spi_alloc_master(&pdev->dev, sizeof(*pic32s));
pic32s            756 drivers/spi/spi-pic32.c 	pic32s = spi_master_get_devdata(master);
pic32s            757 drivers/spi/spi-pic32.c 	pic32s->master = master;
pic32s            759 drivers/spi/spi-pic32.c 	ret = pic32_spi_hw_probe(pdev, pic32s);
pic32s            766 drivers/spi/spi-pic32.c 	master->max_speed_hz	= clk_get_rate(pic32s->clk);
pic32s            779 drivers/spi/spi-pic32.c 	pic32_spi_dma_prep(pic32s, &pdev->dev);
pic32s            780 drivers/spi/spi-pic32.c 	if (test_bit(PIC32F_DMA_PREP, &pic32s->flags))
pic32s            783 drivers/spi/spi-pic32.c 	init_completion(&pic32s->xfer_done);
pic32s            784 drivers/spi/spi-pic32.c 	pic32s->mode = -1;
pic32s            787 drivers/spi/spi-pic32.c 	irq_set_status_flags(pic32s->fault_irq, IRQ_NOAUTOEN);
pic32s            788 drivers/spi/spi-pic32.c 	ret = devm_request_irq(&pdev->dev, pic32s->fault_irq,
pic32s            790 drivers/spi/spi-pic32.c 			       dev_name(&pdev->dev), pic32s);
pic32s            792 drivers/spi/spi-pic32.c 		dev_err(&pdev->dev, "request fault-irq %d\n", pic32s->rx_irq);
pic32s            797 drivers/spi/spi-pic32.c 	irq_set_status_flags(pic32s->rx_irq, IRQ_NOAUTOEN);
pic32s            798 drivers/spi/spi-pic32.c 	ret = devm_request_irq(&pdev->dev, pic32s->rx_irq,
pic32s            800 drivers/spi/spi-pic32.c 			       dev_name(&pdev->dev), pic32s);
pic32s            802 drivers/spi/spi-pic32.c 		dev_err(&pdev->dev, "request rx-irq %d\n", pic32s->rx_irq);
pic32s            807 drivers/spi/spi-pic32.c 	irq_set_status_flags(pic32s->tx_irq, IRQ_NOAUTOEN);
pic32s            808 drivers/spi/spi-pic32.c 	ret = devm_request_irq(&pdev->dev, pic32s->tx_irq,
pic32s            810 drivers/spi/spi-pic32.c 			       dev_name(&pdev->dev), pic32s);
pic32s            812 drivers/spi/spi-pic32.c 		dev_err(&pdev->dev, "request tx-irq %d\n", pic32s->tx_irq);
pic32s            823 drivers/spi/spi-pic32.c 	platform_set_drvdata(pdev, pic32s);
pic32s            828 drivers/spi/spi-pic32.c 	clk_disable_unprepare(pic32s->clk);
pic32s            836 drivers/spi/spi-pic32.c 	struct pic32_spi *pic32s;
pic32s            838 drivers/spi/spi-pic32.c 	pic32s = platform_get_drvdata(pdev);
pic32s            839 drivers/spi/spi-pic32.c 	pic32_spi_disable(pic32s);
pic32s            840 drivers/spi/spi-pic32.c 	clk_disable_unprepare(pic32s->clk);
pic32s            841 drivers/spi/spi-pic32.c 	pic32_spi_dma_unprep(pic32s);