Lines Matching refs:pspim

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