Lines Matching defs:pspim
101 struct sp7021_spi_ctlr *pspim = dev;
104 data_status = readl(pspim->s_base + SP7021_DATA_RDY_REG);
106 writel(data_status , pspim->s_base + SP7021_DATA_RDY_REG);
107 complete(&pspim->slave_isr);
113 struct sp7021_spi_ctlr *pspim = spi_master_get_devdata(ctlr);
115 complete(&pspim->slave_isr);
116 complete(&pspim->isr_done);
122 struct sp7021_spi_ctlr *pspim = spi_controller_get_devdata(spi->controller);
125 reinit_completion(&pspim->slave_isr);
127 writel(value, pspim->s_base + SP7021_SLAVE_DMA_CTRL_REG);
128 writel(xfer->len, pspim->s_base + SP7021_SLAVE_DMA_LENGTH_REG);
129 writel(xfer->tx_dma, pspim->s_base + SP7021_SLAVE_DMA_ADDR_REG);
130 value = readl(pspim->s_base + SP7021_DATA_RDY_REG);
132 writel(value, pspim->s_base + SP7021_DATA_RDY_REG);
133 if (wait_for_completion_interruptible(&pspim->isr_done)) {
142 struct sp7021_spi_ctlr *pspim = spi_controller_get_devdata(spi->controller);
145 reinit_completion(&pspim->isr_done);
147 writel(value, pspim->s_base + SP7021_SLAVE_DMA_CTRL_REG);
148 writel(xfer->len, pspim->s_base + SP7021_SLAVE_DMA_LENGTH_REG);
149 writel(xfer->rx_dma, pspim->s_base + SP7021_SLAVE_DMA_ADDR_REG);
150 if (wait_for_completion_interruptible(&pspim->isr_done)) {
154 writel(SP7021_SLAVE_SW_RST, pspim->s_base + SP7021_SLAVE_DMA_CTRL_REG);
158 static void sp7021_spi_master_rb(struct sp7021_spi_ctlr *pspim, unsigned int len)
163 pspim->rx_buf[pspim->rx_cur_len] =
164 readl(pspim->m_base + SP7021_FIFO_REG);
165 pspim->rx_cur_len++;
169 static void sp7021_spi_master_wb(struct sp7021_spi_ctlr *pspim, unsigned int len)
174 writel(pspim->tx_buf[pspim->tx_cur_len],
175 pspim->m_base + SP7021_FIFO_REG);
176 pspim->tx_cur_len++;
182 struct sp7021_spi_ctlr *pspim = dev;
189 fd_status = readl(pspim->m_base + SP7021_SPI_STATUS_REG);
202 rx_cnt = pspim->data_unit;
204 tx_cnt = min(tx_len - pspim->tx_cur_len, pspim->data_unit - tx_cnt);
205 dev_dbg(pspim->dev, "fd_st=0x%x rx_c:%d tx_c:%d tx_l:%d",
209 sp7021_spi_master_rb(pspim, rx_cnt);
211 sp7021_spi_master_wb(pspim, tx_cnt);
213 fd_status = readl(pspim->m_base + SP7021_SPI_STATUS_REG);
217 if (fd_status & SP7021_FINISH_FLAG || tx_len == pspim->tx_cur_len) {
218 while (total_len != pspim->rx_cur_len) {
219 fd_status = readl(pspim->m_base + SP7021_SPI_STATUS_REG);
222 rx_cnt = pspim->data_unit;
227 sp7021_spi_master_rb(pspim, rx_cnt);
229 value = readl(pspim->m_base + SP7021_INT_BUSY_REG);
231 writel(value, pspim->m_base + SP7021_INT_BUSY_REG);
232 writel(SP7021_FINISH_FLAG, pspim->m_base + SP7021_SPI_STATUS_REG);
237 complete(&pspim->isr_done);
243 struct sp7021_spi_ctlr *pspim = spi_master_get_devdata(ctlr);
245 pspim->tx_cur_len = 0;
246 pspim->rx_cur_len = 0;
247 pspim->data_unit = SP7021_FIFO_DATA_LEN;
254 struct sp7021_spi_ctlr *pspim = spi_master_get_devdata(ctlr);
258 valus = readl(pspim->m_base + SP7021_SPI_STATUS_REG);
260 writel(valus, pspim->m_base + SP7021_SPI_STATUS_REG);
277 pspim->xfer_conf = rs;
278 if (pspim->xfer_conf & SP7021_CPOL_FD)
279 writel(pspim->xfer_conf, pspim->m_base + SP7021_SPI_CONFIG_REG);
286 struct sp7021_spi_ctlr *pspim = spi_master_get_devdata(ctlr);
289 clk_rate = clk_get_rate(pspim->spi_clk);
293 pspim->xfer_conf &= ~SP7021_CLK_MASK;
294 pspim->xfer_conf |= FIELD_PREP(SP7021_CLK_MASK, clk_sel);
295 writel(pspim->xfer_conf, pspim->m_base + SP7021_SPI_CONFIG_REG);
301 struct sp7021_spi_ctlr *pspim = spi_master_get_devdata(ctlr);
311 mutex_lock(&pspim->buf_lock);
314 reinit_completion(&pspim->isr_done);
321 pspim->tx_buf = xfer->tx_buf + i * SP7021_SPI_DATA_SIZE;
322 pspim->rx_buf = xfer->rx_buf + i * SP7021_SPI_DATA_SIZE;
324 if (pspim->tx_cur_len < xfer_len) {
325 len_temp = min(pspim->data_unit, xfer_len);
326 sp7021_spi_master_wb(pspim, len_temp);
328 reg_temp = readl(pspim->m_base + SP7021_SPI_CONFIG_REG);
334 writel(reg_temp, pspim->m_base + SP7021_SPI_CONFIG_REG);
339 writel(reg_temp, pspim->m_base + SP7021_SPI_STATUS_REG);
341 if (!wait_for_completion_interruptible_timeout(&pspim->isr_done, timeout)) {
343 mutex_unlock(&pspim->buf_lock);
347 reg_temp = readl(pspim->m_base + SP7021_SPI_STATUS_REG);
349 writel(SP7021_FINISH_FLAG, pspim->m_base + SP7021_SPI_STATUS_REG);
350 writel(readl(pspim->m_base + SP7021_SPI_CONFIG_REG) &
351 SP7021_CLEAN_FLUG_MASK, pspim->m_base + SP7021_SPI_CONFIG_REG);
354 if (pspim->xfer_conf & SP7021_CPOL_FD)
355 writel(pspim->xfer_conf, pspim->m_base + SP7021_SPI_CONFIG_REG);
357 mutex_unlock(&pspim->buf_lock);
365 struct sp7021_spi_ctlr *pspim = spi_master_get_devdata(ctlr);
366 struct device *dev = pspim->dev;
405 struct sp7021_spi_ctlr *pspim;
417 ctlr = devm_spi_alloc_slave(dev, sizeof(*pspim));
419 ctlr = devm_spi_alloc_master(dev, sizeof(*pspim));
440 pspim = spi_controller_get_devdata(ctlr);
441 pspim->mode = mode;
442 pspim->ctlr = ctlr;
443 pspim->dev = dev;
444 mutex_init(&pspim->buf_lock);
445 init_completion(&pspim->isr_done);
446 init_completion(&pspim->slave_isr);
448 pspim->m_base = devm_platform_ioremap_resource_byname(pdev, "master");
449 if (IS_ERR(pspim->m_base))
450 return dev_err_probe(dev, PTR_ERR(pspim->m_base), "m_base get fail\n");
452 pspim->s_base = devm_platform_ioremap_resource_byname(pdev, "slave");
453 if (IS_ERR(pspim->s_base))
454 return dev_err_probe(dev, PTR_ERR(pspim->s_base), "s_base get fail\n");
456 pspim->m_irq = platform_get_irq_byname(pdev, "master_risc");
457 if (pspim->m_irq < 0)
458 return pspim->m_irq;
460 pspim->s_irq = platform_get_irq_byname(pdev, "slave_risc");
461 if (pspim->s_irq < 0)
462 return pspim->s_irq;
464 pspim->spi_clk = devm_clk_get(dev, NULL);
465 if (IS_ERR(pspim->spi_clk))
466 return dev_err_probe(dev, PTR_ERR(pspim->spi_clk), "clk get fail\n");
468 pspim->rstc = devm_reset_control_get_exclusive(dev, NULL);
469 if (IS_ERR(pspim->rstc))
470 return dev_err_probe(dev, PTR_ERR(pspim->rstc), "rst get fail\n");
472 ret = clk_prepare_enable(pspim->spi_clk);
476 ret = devm_add_action_or_reset(dev, sp7021_spi_disable_unprepare, pspim->spi_clk);
480 ret = reset_control_deassert(pspim->rstc);
484 ret = devm_add_action_or_reset(dev, sp7021_spi_reset_control_assert, pspim->rstc);
488 ret = devm_request_irq(dev, pspim->m_irq, sp7021_spi_master_irq,
489 IRQF_TRIGGER_RISING, pdev->name, pspim);
493 ret = devm_request_irq(dev, pspim->s_irq, sp7021_spi_slave_irq,
494 IRQF_TRIGGER_RISING, pdev->name, pspim);
519 struct sp7021_spi_ctlr *pspim = spi_master_get_devdata(ctlr);
521 return reset_control_assert(pspim->rstc);
527 struct sp7021_spi_ctlr *pspim = spi_master_get_devdata(ctlr);
529 reset_control_deassert(pspim->rstc);
530 return clk_prepare_enable(pspim->spi_clk);
537 struct sp7021_spi_ctlr *pspim = spi_master_get_devdata(ctlr);
539 return reset_control_assert(pspim->rstc);
545 struct sp7021_spi_ctlr *pspim = spi_master_get_devdata(ctlr);
547 return reset_control_deassert(pspim->rstc);